19
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-08-19

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と入力)する。

スクリーンショット 2017-08-19 18.21.24.png

スクリーンショット 2017-08-19 18.22.49.png

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に付けた名前)を指定することによってもビルドを行うことができるようになる。

19
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?