はじめに
Visual Studio Code (VS Code) 用のGoエクステンション「vscode-go」を紹介しようとvscode-go/READMEを翻訳したところ、十分な情報量でしたので今回のメイン記事にさせて頂きました。またOS Xの人にはdelveのセットアップがわかりにくそうでしたのでdelve/Buildingのページも翻訳しました。
不具合情報
OS X版のバージョン0.10.5はVS Codeが起動しない不具合がありますので、バージョン0.10.6以降をご利用ください。
翻訳について
Google翻訳にて原文の英語を日本語に変換した後、手動にて調整しました。私が補足した部分は斜体にしてあります。
vscode-go/README.md (0.6.33) の日本語訳
vscode-go/README.md at master · Microsoft/vscode-go · GitHub
https://github.com/Microsoft/vscode-go/blob/master/README.md
Visual Studio Code用のGoエクステンション
本エクステンションはVS CodeにGo言語の豊富な言語サポートを追加します。含まれているもの:
- カラー化
- 補完リスト (
gocode
を使用) - シグネチャーヘルプ (
godoc
を使用) - スニペット
- クイック情報 (
godef
を使用) - 定義への移動 (
godef
を使用) - 参照の検索 (
go-find-references
を使用) - ファイル概要 (
go-outline
を使用) - ワークスペースシンボル検索 (
go-symbols
を使用) - リネーム (
gorename
を使用) - 保存してビルド (
go build
とgo test
を使用) - フォーマット (
goreturns
やgoimports
やgofmt
を使用) - importの追加 (
gopkgs
を使用) - [部分的に実装] デバッグ (
delve
を使用)
IDEの機能
(元サイトでは「IDEの機能」に関する画像が貼られています)
デバッガー
(元サイトでは「デバッガー」に関する画像が貼られています)
使い方
はじめに、あなたはVisual Studio Code 0.10
以降 をインストールする必要があります。コマンドパレット(ctrl
/cmd-shift-p
)にて*Extensions:
Install Extension
を選択してGo
(lukehoban版)
*を選びます。
ターミナルウィンドウでGOPATH環境変数に作業したいGOPATHを設定して、vs
code
を起動します。GOPATHフォルダーまたは作業したい任意のサブフォルダーを開き、編集を開始する.go
ファイルを開きます。画面の 右下隅にAnalysis Tools Missing
の文字が見えるなら、これをクリックすることで、エクステンションが完全な機能セットをサポートするために必要なすべてのGoツールをインストールできます。 詳細については下記の「ツール」セクションを参照してください。
注: 本エクステンションを使用するにはVisual Studio CodeのAuto Save
*(自動保存)
をオン(メニューバーにて [File] -> [Auto Save]
)にすることが強く推奨されます。Goツールの多くは保存したファイル上でのみ動作するため、エラー報告はAuto Save
(自動保存)
*をオンにすることでよりインタラクティブになります。
オプション
次のVisual Studio Codeの設定はGoエクステンションのために用意されています。これらはメニューバーの[File/Code] -> [References] のUser Settings (ctrl
/cmd+,
)またはWorkspace Settings (.vscode/settings.json
)で設定できます。
{
"go.buildOnSave": true,
"go.lintOnSave": true,
"go.vetOnSave": true,
"go.buildFlags": [],
"go.lintFlags": [],
"go.vetFlags": [],
"go.coverOnSave": false,
"go.useCodeSnippetsOnFunctionSuggest": false,
"go.formatOnSave": false,
"go.formatTool": "goreturns",
"go.goroot": "/usr/local/go",
"go.gopath": "/Users/lukeh/go"
}
※「go.formatOnSave」項目値をtrueにすると保存時にgofmtが実行されてコードが整形されます。
※「go.gopath」項目にはご自分のGOPATH値を設定してください。」
コマンド
統合された編集機能に加えて、本エクステンションにもGoのファイルを操作するためのいくつかのコマンドがコマンドパレットに用意されています:
-
Go: Add Import
Goコンテキストでパッケージのリストからインポートを追加します。 -
Go: Current GOPATH
現在設定されているGOPATHを表示します。 -
Go: Run test at cursor
アクティブなドキュメント内の現在のカーソル位置でテストを実行します。 -
Go: Run tests in current package
アクティブなドキュメントを含むパッケージ内のすべてのテストを実行します。 -
Go: Run tests in current file
現在アクティブなドキュメント内のすべてのテストを実行します。
オプション: デバッグ
デバッガーを使用するには、現在のところ手動でdelve
をインストールする必要があります。完全な詳細についてはインストール手順を参照してください。OS Xではdlv
バイナリーに署名する自己署名証明書を作成する必要があります。
インストールしたら一度、コードのデバッグビューレットに移動して設定ギアアイコンを選択します。launch.json のconfigurationsパラメーターに次の値を追記します:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceRoot}",
"env": {},
"args": []
}
]
}
program
オプションではデバッグ用のパッケージフォルダーまたはそのフォルダー内のファイルを参照できます。
mode
パラメーターは次のように設定できます:
-
debug
は、プログラムフォルダーの内容をコンパイルしてデバッガーで起動します。[デフォルト] -
test
は、プログラムフォルダー内のテストをデバッグします。 -
exec
は、プログラムフォルダー内の現在のコードをビルドするのではなく事前にビルドされたバイナリーを実行します。
ビルドとデバッグのエクステンション
あなたはエクステンション開発中の本エクステンションをデバッグするための開発環境を設定することができます。
まず〜/.vscode/extensions
配下にインストール済みのエクステンションがないことを確認してください。次に、あなたのマシン上の別の場所にvscode-goのリポジトリーをクローンして、npm install
を実行した後にvs codeの開発インスタンスを開きます。
※ npmコマンドを使用するには別途「node.js」をインストールしておく必要があります。
rm -rf ~/.vscode/extensions/lukehoban.Go
cd ~
git clone https://github.com/Microsoft/vscode-go
cd vscode-go
npm install
code .
これによりデバッグビューレットに移動してLaunch Extension
を選択した後にStart (F5
)を選択することができます。
[Extension Development Host]
インスタンスにて、GOPATHフォルダーを開きます。
これによりブレークポイントを設定して本エクステンションをステップ実行することができます。
本エクステンションの.ts
ファイルで編集を行う場合は、新しいエクステンションコードをロードするために、vs codeの[Extension Development Host]
インスタンスをリロード(cmd-r
)します。デバッグインスタンスは自動的に再接続します。
デバッガーをデバッグするには、debugAdapterのreadmeを参照してください。
ツール
本エクステンションは次のツールを使用しており、カレントのGOPATHにインストールされています。いずれかのツールが不足している場合、エディターの右下隅に"Analysis Tools Missing"の警告文字が表示されます。警告文字をクリックすると不足しているツールをインストールできます。
- gocode:
go get -u -v github.com/nsf/gocode
- godef:
go get -u -v github.com/rogpeppe/godef
- golint:
go get -u -v github.com/golang/lint/golint
- go-find-references:
go get -u -v github.com/lukehoban/go-find-references
- go-outline:
go get -u -v github.com/lukehoban/go-outline
- goreturns:
go get -u -v sourcegraph.com/sqs/goreturns
- gorename:
go get -u -v golang.org/x/tools/cmd/gorename
- gopkgs:
go get -u -v github.com/tpng/gopkgs
- go-symbols:
go get -u -v github.com/newhook/go-symbols
これらのツールを手動でインストールするには次の内容をペースト実行するだけです:
go get -u -v github.com/nsf/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/lukehoban/go-find-references
go get -u -v github.com/lukehoban/go-outline
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v github.com/tpng/gopkgs
go get -u -v github.com/newhook/go-symbols
そしてデバッグのためには:
delve: https://github.com/derekparker/delve/wiki/Buildingの指示に従ってください。
ライセンス
MIT
[私からの補足]
codeコマンド
Linuxではcode
、Windowsではcode.exe
がVS Code本体ファイルでありコマンドとして起動できます。OS XではVisual Studio Code.app
が本体ファイルですがVS Code 0.10.10からcode
でコマンド起動できます。
[参考] OS XでのVS Code 0.10.10以前でのcode
コマンド対応
ターミナルから実行できないため~/.bash_profile
に次の内容を記述しておくとcode
で起動できるようになります。
code () { VSCODE_CWD="$PWD" open -n -b "com.microsoft.VSCode" --args $* ;}
delve/wiki/Building (0.11.0 alpha) の日本語訳
Building · derekparker/delve Wiki · GitHub
https://github.com/derekparker/delve/wiki/Building
ビルド
DelveはビルドにGo 1.5以上が必要でありGO15VENDOREXPERIMENTが適切に設定されていること*(~/.bash_profile
ファイルにset GO15VENDOREXPERIMENT=1
を追記する、など)*を期待しています。(参照: Go 1.5 Vendor Experiment)
Linux
-
dlv
バイナリーのmakeとインストール
$ GO15VENDOREXPERIMENT=1 make install
これで完了です! もし正しく動作していると思えない場合は、次のパッケージを取得するコマンドを実行して$GOPATH/binにインストールして依存関係を解消します。
$ go get -v -u github.com/peterh/liner github.com/derekparker/delve/cmd/dlv
OS X
- 証明書の作成
あなたは自己署名証明書を作成してバイナリーに署名する必要があります:
- 「キーチェーンアクセス」(/Applications/Utilities/Keychain Access.app)アプリケーションを開きます。
- メニューバーにて[キーチェーンアクセス] -> [証明書アシスタント] -> [証明書を作成]を開きます。
- 「名前」項目に入力し(本例では dvl-cert)、「固有名のタイプ」項目に「自己署名ルート」を設定し、「証明書のタイプ」項目に「コード署名」を設定し、「デフォルトを無効化」項目にチェックを入れます。次に「続ける」ボタンをクリックします。ここで証明書の「有効期間(日数)」を365日から3560日に延長することができます。
- 「証明書の場所を指定」画面が表示されるまで「続ける」ボタンを何回かクリックして画面を進めます。「証明書の場所を指定」画面が表示されたら「キーチェーン」項目に「システム」を設定します。
- もし「システム」キーチェーンに証明書を格納できない場合、証明書をエクスポートして「ログイン」キーチェーンで作成します。これにより「システム」キーチェーンに証明書をインポートできます。
- 「キーチェーン」欄から「システム」を選択して、新しく作成した証明書を見つける必要があります。証明書のコンテキストメニューを使用し*(=証明書を選択して右クリック)*、「情報を見る」を選択し、「信頼」の項目を開き、「コード署名」項目に「常に信頼」を設定してください。
- [Yosemite以降:] キーチェーンの「分類」欄から「鍵」項目を選択 -> [dlv-cert] -> [右クリック] -> [情報を見る] -> [アクセス制御] -> 「この項目の使用をすべてのアプリケーションに許可」項目にチェックを入れる -> [変更内容を保存]
- 証明書を使うために「キーチェーンアクセス」アプリケーションを終了して現在実行中の"taskgated"サービスを落として再スタートさせる必要があります。別の方法としてはコンピューターを再起動することで対応できます。
- 本プロジェクトのクローンします:
git clone git@github.com:derekparker/delve.git && cd delve
- 次を実行します:
GO15VENDOREXPERIMENT=1 CERT=dlv-cert make install
、これでバイナリーをインストールしてコード署名します。
すべてのmake
コマンドは上記で作成した証明書の名前が含まれているCERT環境変数を前提としています。CERT=dlv-cert make install
でバイナリーをインストールしてコード署名することができます。テストを行うなら、単にGO15VENDOREXPERIMENT=1 CERT=dlv-cert make test
を実行します。
- バイナリーのインストール
GO15VENDOREXPERIMENTとCERTの環境変数を準備してmake install
を入力してください。GO15VENDOREXPERIMENT
環境変数はGo 1.5 Vendor Experimentで決まっています。
$ GO15VENDOREXPERIMENT=1 CERT=mycert make install
makefileはGOPATH
は単一の値でありコロンで区切られていないことを前提としています。
makefileはビルドとコード署名の工程を簡素化にするために必要となります。
Windows
Windows用のUNIXライクのシェル(MSYS2, CYGWIN, 他)があれば、上記のLinuxインストールの指示に従ってください。
標準のWindowsのcmdシェルからは、次のステップを行います:
- MinGWのインストール
Windows上でCGOをビルドするために必要なGCCツールチェーンを取得するにはMinGW-W64をインストールします。
以下を選択する必要があります:
- バージョン: 最新で利用可能 (執筆時点では
5.3.0
) - アーキテクチャー:
x86_64
- スレッド:
POSIX
(実際には関係ありません) - 例外:
seh
(実際には関係ありません) - ビルドバージョン: 最新で利用可能 (執筆時点では
0
)
-
dlv
バイナリーのmakeとインストール
$ set GO15VENDOREXPERIMENT=1
$ mingw32-make install
[私からの補足]
作業手順
- delveのダウンロード
go get -u -v github.com/derekparker/delve/cmd/dlv
- OS Xの場合
2-1) 証明書「dlv-cert」を作成
2-2) コード署名&インストール
cd $GOPATH/src/github.com/derekparker/delve
GO15VENDOREXPERIMENT=1 CERT=dlv-cert make install
- 実行バイナリー「dlv」へのパスを追加
~/.bash_profile
ファイルにexport PATH=$PATH:$GOPATH/bin
を追加。
参考リンク
次の記事と読み合せて頂くとVS Codeやvscode-goについて把握できると思います。
- 特集:Visual Studio Code早分かりガイド:Visual Studio Codeの使い方、基本の「キ」 (1/4) - @IT
- 特集:Visual Studio Code早分かりガイド:Visual Studio Codeでエクステンション機能を使ってみよう (1/2) - @IT
- Visual Studio Codeのすゝめ (Golang寄り) - 気まぐれLinux
- VisualStudioCode - Visual Studio CodeでGo言語の設定 - Qiita
さいごに
巷では「IntelliJ IDEA」+「Goプラグイン」や「Atom」+「go-plus」の組み合わせが良いとの話を耳にしますが「VS Code」+「vscode-go」の躍進やいかに!?q@w@p