VS Code & WSL 2 で C 言語の開発環境を構築する

2022/12/03に公開

WSL 2(Windows Subsystem for Linux)からインストールした Ubuntu 上で,VS Code の Tasks 機能を使って C 言語のコードを書いて簡単にコンパイルとデバッグが可能な環境を作り上げます。

ターゲット

  • VS Code で C 言語のコードを書きたい人
  • 既に別の環境で C 言語のコードを書いているが,VS Code と WSL 2 による環境へと移行しようか検討している人

いずれの場合も,例えば「C 言語のコードは大学の授業でしか書く機会がない」といった,さほど本格的(?)な開発環境は求めていないケースを想定しています。

導入手順

1. VS Code をインストールする

C 言語のコードを書くエディターとして「VS Code」を使います。公式サイトの「Download for Windows Stable Build」をクリックし,インストーラーをダウンロードしましょう。

あとはダウンロードしたインストーラーを実行し,画面指示に従って操作するだけで VS Code のインストール作業は完了です。

2. WSL 2 から Ubuntu をインストールする

続いて,WSL 2 上に Ubuntu をインストールして行きましょう。PowerShell(もしくはコマンドプロンプト)を起動し,以下のコマンドを実行してください。

wsl --install -d Ubuntu

そのまま気長に待ち続けると,やがて Ubuntu のウィンドウが出現するはずです。

このあと,Ubuntu のウィンドウの指示に従って,ユーザー名とパスワードを設定します。最終的に以下の画像のような状態になれば,WSL 2 と Ubuntu のセットアップは完了です。

3. VS Code に拡張機能をインストールする

WSL 2 上の Ubuntu で VS Code を使うにあたって,「Remove Development」は欠かせません。「Install」ボタンをクリックしてインストールしましょう。

インストールが無事に成功すると,次のような画面が現れるはずです。後述の「C/C++ Extension Pack」をインストールする準備のため,「Open the Menu」ボタンをクリックします。

New: WSL Window」を選択し,クリックします。そうすると,新しく VS Code のウィンドウが立ち上がります。

続いて,先ほど開いた WSL 側のウィンドウ[1]から「C/C++ Extension Pack」を追加します。先と同じく「Install in WSL: Ubuntu」を押下すれば良いです。

「C/C++ Extension Pack」を追加するときの画面

この拡張機能が追加されるまで 5 分ほどの時間を要します。気長に待ちましょう。しばらくして,下のような状態になっていれば無事完了です。

「C/C++ Extension Pack」を無事に追加できたときの画面

4. Ubuntu に GCC と GDB をインストールする

GCC(コンパイラー)と GDB(デバッガー)の両方が WSL 2 上の Ubuntu にないと,VS Code の Tasks 機能がエラーとなり動いてくれません。そのため,以下のコマンドを実行して両者のインストールを行います。なお,実行時にパスワードを要求されたときは,WSL 2 の Ubuntu で設定したユーザーパスワードを入力してください。

sudo apt install gcc gdb

5. ワークスペースを作成し,実際に C 言語のコードを実行してみる

VS Code で C 言語のコードを書くためのワークスペース(作業場所)を作成します。今回は,例としてホームディレクトリーの直下に example という名のディレクトリーを作り,これをワークスペースとします。具体的には,以下のコマンドをそのまま実行するだけです。

cd && mkdir test && code $_

すると,example をワークスペースとした状態で VS Code が起動します。もしも下の画像のような画面が出た場合は,青いボタンを押しましょう。[2]

続いて,以下のプログラム example.c を作成します。コンパイルして実行すると,画面に Hello, world! と表示されるだけのシンプルなプログラムです。ご自身の好みに応じて,コードは自由に書き換えてください。[3]

example.c
#include <stdio.h>

int main(void)
{
  printf("Hello, world!\n");
  return 0;
}

example.c を開いた状態のまま F5 キーを押下します。出てきたメニューから,「C/C++: gcc build and debug active file(下の画像では最下段にある選択肢)」を選択してください。

すると,example.c のコンパイルと,生成されたバイナリファイル example が自動で実行されます。これが VS Code の Tasks 機能です。わざわざコマンドを手打ちする手間が省けて大変便利ですね!

ただ,上の画像のように実行結果が表示されておらず,本当に正しく動作したのか分かりません。実行結果を表示するには,「Terminal」タブをクリックします。

間違いなく Hello, world! と表示されています。ここまで確認できれば,一連の導入手順は全て無事に完了です!

(補足)tasks.json をカスタマイズする

手順 5 では,example.c を Tasks 機能でコンパイルすると example という拡張子なしのバイナリファイルが生成されました。通常,GCC でコンパイルすると生成されたバイナリファイルには .out という拡張子が付きます。Tasks 機能でも,ワークスペース直下に自動生成された .vscode/tasks.json[4]を編集すれば,同様のことを実現可能です。

tasks.json
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc build active file",
            "command": "/usr/bin/gcc",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
-               "${fileDirname}/${fileBasenameNoExtension}"
+               "${fileDirname}/${fileBasenameNoExtension}.out"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

上記のように修正した後,再度 example.c を Tasks 機能でコンパイルすると,example.out が代わりに生成されることが分かります。

脚注
  1. 左下のステータスバーに「WSL: Ubuntu」と表示されているウィンドウのこと。 ↩︎

  2. VS Code では,セキュリティー保護の観点から,拡張機能やデバッグ機能がデフォルトで無効化される「Restrict Mode」という機能が存在します。本記事で作成したワークスペースは,ユーザーが自らの手で作ったものであり,なおかつ拡張機能とデバッグ機能を必要とするため,Restrict Mode を無効化(信頼するに設定)しているわけです。 ↩︎

  3. 例えば,円周率 \pi やネイピア数 \mathrm{e} の近似値を表示するコードに変えても良いかもしれませんね! ↩︎

  4. Tasks 機能の設定ファイルのこと。 ↩︎

GitHubで編集を提案

Discussion