Windows APIを使うならMicrosoftのビルドツールも選択肢

しばらくは、WindowsでWindows APIを使ったC言語プログラミング言語を取り上げていく。ということで、ここで開発環境を再考しておきたい。

これまで、C言語開発の仕組みを理解すること、LinuxやMac、組み込みデバイスといったWindows以外のプラットフォームでのC言語プログラミングにも応用しやすいことを踏まえ、LLVM Clangとmakeをベースとした開発環境に、人気があるVisual Studio Codeを組み合わせた開発環境をセットアップする方法を紹介してきた。

しかし、である。Windows APIは基本的にWindowsプラットフォームでしか使えない。Windowsでしか使えないのであれば、ビルドツールはLLVM Clangではなく、Microsoftが提供しているものを使うのが自然な選択肢だ。

WindowsプラットフォームでC言語(またはC/C++)プログラミングを行ってアプリケーションを開発する場合、基本的にはVisual Studioを使うことになる。Visual Studioは面倒な設定をすべてほぼ自動でやってくれるので、実用的な開発を行うならこの開発環境を使うのが現実的なのだ。

しかし、LLVM Clangのようにビルドツールだけも提供されている。このツールは「Visual Studio Build Tools」や「Build Tools for Visual Studio」といった名称で呼ばれることが多い。多少強引だが、「Visual Studio CodeにおけるLLVM」と「Visual StudioにおけるVisual Studio Build Tools」といった対比をしてみると、Visual Studio Build Toolsがどういったものかつかみやすいだろう。

Visual Studio Build Tools

これまでに使ってきたLLVM Clangベースの環境でもWindows APIを使った開発はできるし、LLVM ClangではなくGCCを使ってもいけるし、環境としてMSYS2を使うことでもWindows APIを使うことはできる。しかしながら、統合開発環境であるVisual Studioを使う場合と比べると、環境変数やコマンド、コマンドオプションなどを全部自分で組み合わせて使う必要があるので面倒ではある。

さらに、LLVMやGCCは完全にVisual Studio Build Toolsと同じではないので、ビルドできるようにするために多少の手入れというかソースコードに変更を加える必要があるケースが出てくる。上級者向けの方法だ。

Visual Studio Build Toolsを直接使う場合も、自分で全部コマンドやコマンドオプションを組み合わせる必要があるので、面倒という面ではあまり変わりがない。しかしそれでも、LLVMやGCCを使う場合よりは当然だが親和性がよく、環境変数の設定なんかも最初から終わっているのでラクだ。初めてWindows APIを使うのであれば、Visual Studio Build Toolsから使ってみるとよいと思う。

Visual Studioを使えばもっと簡単になるのだが、これだと簡単になりすぎてコンパイルやリンクといった作業で何が行われているのかがわかりにくい。本連載はC言語開発の仕組みを理解していくところにも目的があるので、Visual Studio Build Toolsを使いながら、直接コマンドを実行してどのようにしてビルドが行われるのかを体験しながら説明していこうと思う。

Visual Studio Build Toolsのインストール

それでは、作業に入ろう。まずは、Visual Studio Build Toolsをインストールする。インストールにはWingetを使うのがお薦めだ。作業が簡単だし、作業メモとしても残しておきやすい(インストールしたコマンドをメモしておけばよいだけだ)。Wingetを使っていない場合には「Visual Studio Tools のダウンロード - Windows、Mac、Linux 用の無料インストール」から「Build Tools for Visual Studio 2022」をダウンロードしてインストールしてもらえればと思う(本稿執筆時点での最新バージョン)。

パッケージの名前は変わることがあるので、まず次のようにwingetコマンドを実行してパッケージを検索する。

Visual Studio Build Toolsのパッケージを検索

winget search "Build Tools"

本稿執筆時点では上記のように検索すると次のような結果が得られる。

Visual Studio Build Toolsのパッケージを検索した結果

PS C:\Users\daichi> winget search "Build Tools"
名前                           ID                                     バージョン ソース
----------------------------------------------------------------------------------------
Visual Studio Build Tools 2022 Microsoft.VisualStudio.2022.BuildTools 17.0.3     winget
Visual Studio Build Tools 2019 Microsoft.VisualStudio.2019.BuildTools 16.11.8    winget
PS C:\Users\daichi>

「Visual Studio Build Tools 2022」と「Visual Studio Build Tools 2019」というパッケージがあることがわかる。ここでは「Visual Studio Build Tools 2022」をインストールするとして、次のようにwingetコマンドを実行してインストールを行う。

Visual Studio Build Tools 2022をインストール

winget install --id Microsoft.VisualStudio.2022.BuildTools

上記のコマンドを実行すると、次のようにインストーラが起動してくるので、そのままインストールを行う。

  • Visual Studio Installerの準備中

    Visual Studio Installerの準備中

  • Visual Studio InstallerによるVisual Studio Build Tools 2022のインストール中

    Visual Studio InstallerによるVisual Studio Build Tools 2022のインストール中

  • Windows TerminalからwingetでVisual Studio Build Tools 2022をインストールしたようす

    Windows TerminalからwingetでVisual Studio Build Tools 2022をインストールしたようす

Visual Studio Build Toolsをインストールしたら、次のようにVisual Studio Installerを起動してC/C++開発を行うためのツールをインストールする。「Visual Studio Build Tools 2022」→「変更」→「C++によるデスクトップ環境」にチェックを入れる→「変更」と選択していけばよい。

  • Visual Studio Installerを起動

    Visual Studio Installerを起動

  • 「C++によるデスクトップ環境」にチェックを入れてから「変更」をクリック

    「C++によるデスクトップ環境」にチェックを入れてから「変更」をクリック

  • 「C++によるデスクトップ環境」で選んだツールをインストール中

    「C++によるデスクトップ環境」で選んだツールをインストール中

  • 「C++によるデスクトップ環境」で選んだツールのインストール完了

    「C++によるデスクトップ環境」で選んだツールのインストール完了

これでMicrosoftのC/C++を使ったアプリケーション(デスクトップアプリケーション)の開発が可能になる。このツールは無料で使うことができるので、勉強目的でも、あるいはある程度の面倒さを許容できるなら仕事でも使うことができると思う。

Visual StudioのようなGUIベースの統合開発環境から使い出すと、結局どういった仕組みでコンパイルが行われどのファイルがリンクされどこのDLLを使って動き出すのかよくわからないままということにもなる。Visual Studio Build Toolsベースで手動で組み上げていくのはそれだけ面倒なのだが、中身を知るためにはよい道であるとは思うのだ。