【VSCode tips】VSCode で go buildする設定 【#1】


Visual Studio CodeでGo言語を始めようとしたはいいものの、なかなか思うように設定ができないので、その時のためのTipsを残すことにした。

ゴール

Command + Shift + bでGo言語のソースをコンパイルする

環境

  • Visual Studio Code
  • vscode-go(プラグイン)

なお環境のセットアップは他に詳細な手順を説明しているページが有るため、この稿では説明を省く。

外部コマンド用のタスクランナーを構成する

tasks.jsonの作成

Visual Studio Code (以降VSCode)では任意の外部コマンドを実行するための”タスク”を設定することができる。例えば(OSXの場合)Command + Shift + bによってソースコードのビルドを行うよう設定できる。

VSCodeが(プラグインなど)で対応している場合には既にテンプレートが用意されているため、必要箇所を埋めるだけで良い。しかし対応していない言語である場合や、その他のコマンドラインツール、つまり「外部コマンド」を起動するようにしたい場合には、自分で必要箇所を記述する必要がある。

tasks.jsonが作成されていない場合command + shift + p”コマンドパレットを表示し、”タスクランナーの構成”>"Others:任意の外部コマンドを実行する例"を選択(task: Configure Task Runnerと入力)する。

tasks.jsonはワークスペースとしているディレクトリ以下に.vscodeディレクトリが作成され、その下に次のように作成される。

.vscode/tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "taskName": "echo",
            "type": "shell",
            "command": "echo Hello"
        }
    ]
}

go build用の設定

前項で作成したtasks.jsonファイルに必要な項目を追加していく。
注意すべき点は、tasks.jsonは”統合ターミナルのシェルで実行されるため、PATHやGOPATH等は予め環境変数に設定しなければならないという点である。

主要なオプションを次に示す。

  • taskName
    コマンドパレットに表示されるこのタスクの名前。適当な名前を指定する。
    ここでは"go build"などにする。

  • type
    タスクのタイプ。

  • command
    実行する実際のコマンド。コマンドの検索は環境変数PATHが利用される。

  • args
    コマンドの引数

  • group
    タスクが属するグループを定義する。test(テストグループ)、build(ビルドグループ)、none(どのグループにも属さない)を選択できる。
    デフォルトのコマンドにするためには、isDefaulttrue({"kind": "build"|"test", "isDefault": true})にする必要がある。

  • presentation
    タスクの出力がユーザーインターフェイスでどのように処理されるかを定義する

GOROOT,およびGOPATHが環境変数に適切に設定されている場合のtasks.jsonファイルを示す。

tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "taskName": "go build",
            "type": "shell",
            "command": "go",
            "args": [
                "build", "-v", "./..."
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",
                "panel": "new",
                "echo": true
            }
        }
    ]
}

しかしながら、ワークスペース毎に異なったバージョンのGo言語を使う場合や、GOPATHを用いる場合には、別途指定する必要がある。
その際にはoptionディレクティブ及びenvディレクティブを用いて指定を行う。

GOROOT,およびGOPATHをtasks.json内で設定す
る場合のtasks.jsonファイルを示す。

tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "taskName": "go build",
            "type": "shell",
            "command": "go",
            "args": [
                "build", "-v", "./..."
            ],
            "options": {
                "env": {
                   "PAHT": "goコマンドのPATH",
                   "GOPATH": "ワークスペースへのGOPATH"
                }
            },
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",
                "panel": "new",
                "echo": true
            }
        },
    ]
}

"ワークスペースへのGOPATH" はVSCodeの変数としてワークスペースを指す${workspaceRoot}などを使うと汎用性が増すだろう。

go buildする

前項までのtasks.jsonファイルを作成すると、Command + Shift + bでgo buildを実行することができる。あるいはコマンドパレットからgo build(taskNameに付けた名前)を指定することによってもビルドを行うことができるようになる。