Visual Studio Codeのすゝめ (Golang寄り)

OUCC Advent Calendar 2015 5日目の記事です.

VSCodeの紹介

Connect(); 2015でVisual Studio Code v0.10.1 beta(以下VSCode)が発表されました.

www.publickey1.jp

プレゼンテーション中にリポジトリを公開したそうです.ちょーかこいいですね.ダウンロードはこちらから.

0.10.1における新機能はこちらにまとまっていますが,この中で特に注目したいのが拡張機能のサポートですね.Marketplaceには発表後にどんどん拡張機能が公開されています.

Go言語拡張

数ある拡張機能の中でも特に注目を集めているのがGo言語の拡張ですね.Connect();でも紹介されています.

www.publickey1.jp

Go言語をサポートと聞いて「シンタックスハイライト程度でサポートしたというのはちょっと…」なんて思っていたのですが,ちゃんとコード補完,定義にジャンプ,リネームもサポートされています.これは拡張機能の開発者のツイート.

そしてなんと

http://i.giphy.com/3oEduO9Rx6awkds4es.gif

デバッグもちゃんとサポートされています.それまでGoを書くのにViMを使っていたのですが,デバッガが使えるというので乗り換える気になってしまいました.VSCodeはデバッガのインタフェースが組み込まれているのがViMatomに対する優位点ですね(ViMatomでもデバッガを使おうと思えば使えるのだけど).

拡張の機能の紹介(軽く)

インストール方法とかセットアップ方法は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は現状効果がありません.envargscwdはそれぞれ,実行されるプログラムの環境変数,引数,ワーキングディレクトリを指定しますが*1delveがワーキングディレクトリの変更をサポートしていないのでcwdは現状効果がありません*2

実際にデバッグしている様子がこちらです.デバッグしているのはサーバーアプリケーションです.デバッグコンソールにログが流れ込んでくる様子*3ブレークポイント,コールスタック,変数の確認,ステップ実行機能が確認できますね.*4

youtu.be

この記事では紹介しきれませんでしたが,VSCodeはnodejs(TypeScript/JavaScript),C#での開発もサポートしています.これからも拡張機能の充実によりサポートされる言語は更に増えると思われます.VSCodeはAtomより一歩進んだコーディング環境が欲しい!という欲求を叶えてくれることでしょう.

番外 | JSON RPC 2

delveとの通信にはJSON-RPC 2.0という規格が用いられている.node(VSCode)からdelveのプロセスをヘッドレスモードでspawnして通信するだけ.json-rpc2パッケージを使えば簡単に通信できる.おそらくブラウザでも使用できるだろう.gRPCは今のところブラウザで使えないからなぁ…