Visual Studio Codeのすゝめ (Golang寄り)
OUCC Advent Calendar 2015 5日目の記事です.
VSCodeの紹介
Connect(); 2015でVisual Studio Code v0.10.1 beta(以下VSCode)が発表されました.
プレゼンテーション中にリポジトリを公開したそうです.ちょーかこいいですね.ダウンロードはこちらから.
0.10.1における新機能はこちらにまとまっていますが,この中で特に注目したいのが拡張機能のサポートですね.Marketplaceには発表後にどんどん拡張機能が公開されています.
Go言語拡張
数ある拡張機能の中でも特に注目を集めているのがGo言語の拡張ですね.Connect();でも紹介されています.
Go言語をサポートと聞いて「シンタックスハイライト程度でサポートしたというのはちょっと…」なんて思っていたのですが,ちゃんとコード補完,定義にジャンプ,リネームもサポートされています.これは拡張機能の開発者のツイート.
VS Code support for Go combines great Go toolchain (gocode, godef, gorename, etc) with the nice editor UX of @Code. pic.twitter.com/inNRpGMmnn
— Luke Hoban (@lukehoban) November 18, 2015
そしてなんと
おい待て,VS CodeだとGoのデバッグがサポートされてる!? https://t.co/8a3IHEnMcr
— ∫exp(-ax^2)dx=るーとπ/a (@yuntan_t) November 18, 2015
デバッグもちゃんとサポートされています.それまでGoを書くのにViMを使っていたのですが,デバッガが使えるというので乗り換える気になってしまいました.VSCodeはデバッガのインタフェースが組み込まれているのがViMやatomに対する優位点ですね(ViMやatomでもデバッガを使おうと思えば使えるのだけど).
拡張の機能の紹介(軽く)
インストール方法とかセットアップ方法はREADMEにあるとおりなので省略します.go get
で関連ツールをインストールする必要がある点に注意してください.
まあ普通に候補・補完・スニペット,シンボルをマウスホバーで詳細表示,定義にジャンプ,シンボルリネーム等効きます.編集時にリアルタイムでコード解析しエラーを表示してくれます.C#で開発してるみたいな感覚ですね(伝わりにくい感想).まあでもここまでならViMでできます.
デバッグ機能の紹介
VSCodeの目玉,デバッグ機能です.デバッグにはdelveを使用しています.なのでdelveのインストールが必要になります.現状Windowsはサポートされていません(delveが現状Windowsに対応していないからですが,開発中のPullreqが建っているのでそのうちサポートされるでしょう).Linuxではgo get github.com/derekparker/delve
するだけなのですが,Macでは色々とややこしそうです.Building · derekparker/delve Wikiを見ましょう.
delve
コマンドが使えるようになったら次にlaunch.json
を書きましょう.VSCodeのデバッグペインを開いてサイドバー右上の歯車アイコンをクリックします.READMEにも例はありますが,こんな感じです.
{ "version": "0.1.0", "configurations": [ { "name": "Launch syaro", "type": "go", "request": "launch", "mode": "debug", "program": "main.go", "stopOnEntry": false, "env": { "SYARODIR": "build" }, "args": ["sample"] // "cwd": "build" } ] }
program
にはpackage main
宣言をした(つまりmain関数を含む)ファイル又はパッケージのディレクトリを指定しましょう.stopOnEntry
は現状効果がありません.env
,args
,cwd
はそれぞれ,実行されるプログラムの環境変数,引数,ワーキングディレクトリを指定しますが*1,delve
がワーキングディレクトリの変更をサポートしていないのでcwd
は現状効果がありません*2.
実際にデバッグしている様子がこちらです.デバッグしているのはサーバーアプリケーションです.デバッグコンソールにログが流れ込んでくる様子*3やブレークポイント,コールスタック,変数の確認,ステップ実行機能が確認できますね.*4
この記事では紹介しきれませんでしたが,VSCodeはnodejs(TypeScript/JavaScript),C#での開発もサポートしています.これからも拡張機能の充実によりサポートされる言語は更に増えると思われます.VSCodeはAtomより一歩進んだコーディング環境が欲しい!という欲求を叶えてくれることでしょう.
番外 | JSON RPC 2
delve
との通信にはJSON-RPC 2.0という規格が用いられている.node(VSCode)からdelve
のプロセスをヘッドレスモードでspawn
して通信するだけ.json-rpc2パッケージを使えば簡単に通信できる.おそらくブラウザでも使用できるだろう.gRPCは今のところブラウザで使えないからなぁ…