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ディレクトリが作成され、その下に次のように作成される。
{
// 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(どのグループにも属さない)を選択できる。
デフォルトのコマンドにするためには、isDefault
をtrue
({"kind": "build"|"test", "isDefault": true}
)にする必要がある。 -
presentation
タスクの出力がユーザーインターフェイスでどのように処理されるかを定義する
GOROOT,およびGOPATHが環境変数に適切に設定されている場合の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
ファイルを示す。
{
// 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に付けた名前)を指定することによってもビルドを行うことができるようになる。