Bakulog

獏の夢日記的な何か。

Kuin言語用にVS2017の拡張を作った感想

タイトル通りです。ニッチです。

目次

  1. 使い方はこの記事には載ってません
  2. 参考にしてるページなど
  3. Kuin対応でやったこと、やれていないこと
  4. 感想とか

 

1. 使い方はこの記事には載ってません

タイトルで言っている、プログラミング言語Kuin用のVisual Studio拡張「KuinStudio」はVS2017向けに公開しています。

成果物としての説明は本記事ではなくGitHubを参照してください。

以下では使い方ではなく、VS拡張を作った流れをかなり雑にメモしています。

 

2. 参考にしたページなど

「VS拡張で新言語サポートするには」というネタ自体は割とあります。 日本語でも普通に記事が見つかります。

詳細は参考元にありますが、要は「Python Tools for Visual Studioなどに基本的な実装が入ってるからそれ持ってこい」というコンセプトです。1

なお上記の記事群に沿って色々作っている過程で、 未実装のgetterプロパティが呼ばれてNotImplementedExceptionで 怒られることがちょいちょいありますが、 適当に0とかnullとか返すようにすれば(Visual Studio側がロバストな為か) 意外とどうにかなります。考えても分からないときはノリに頼りましょう。

また、実装上の参考としては記事だけでなくて、 VSのExtensibilityテンプレートも当然見ます。 コマンドについてはCustom CommandシンタックスハイライトはEditor Classifierのテンプレートが参考になります。 最小限必要なGUIDとかクラス属性が分かるので、けっこう大事です。

実際には、手元ではVSのインスタンスを4つ立ち上げて キョロキョロしながらコードをいじってました。

  • 本体: KuinStudioの開発用VS
  • デバッグ: 本体をデバッグ実行して立ち上げたVS
  • 参考1: PTVSのコード閲覧用のVS
  • 参考2: 新規のVSIXプロジェクトにExtensibilityの項目を追加した状態のVS

 

3. Kuin対応でやったこと、やれていないこと

実際に作った機能は以下の4つです。

  • 新しい言語のProject Typeを定義
  • 作ったProject Typeのプロジェクトテンプレートとアイテムテンプレートを作成
  • シンタックスハイライト機能を提供
  • ビルド/実行コマンドを(カスタムコマンドとして)追加

上記の4機能を実装したことで、 以下のユーザーストーリーが通せるようになりました。

  1. 新しくKuin言語用のプロジェクトを作成し、
  2. 必要ならコードのファイルを新規追加して、
  3. シンタックスハイライトされたエディタで編集し、
  4. 実行環境の設定(Kuinの場合だとCUI/GUIの切り替えとか)をしたうえで、
  5. ショートカットキー or メニューバーのボタンからビルドして動かせる

軽量言語のVS拡張として最低ラインはクリアしてると思います。

逆に、以下のことはやれていません。 出来ていないなりに、簡単そうなものから順に書いていきます。

  • ビルドエラーの該当箇所表示
  • インテリセンス機能
  • カスタムコマンドっぽくない、通常方式の(F6とかで出来る)ビルド
  • ソリューションに複数プロジェクトがある場合の対応(メリット薄いわりに面倒)

インテリセンスはパーサ書くのが大変そうで、 他はビルド周りを真剣にやらないとなので大変、という感じです。

なお、実際には上記以外にも「ツール>オプション」を開いた時の 設定画面など、細かい点でも小技をやってます。 これについてはClaudiaIDEなどを参考にしてください。

 

4. 感想とか

今回のKuinStudioですが、当初はシンタックスハイライトだけ作り、 「見た目がキレイ!」で終わりにするつもりでした。 これだけなら独立の機能として簡単に作れるからです。

しかし実際に動かしてみると「プロジェクトまで整備しないとキリが悪い」 という事実が発覚してしまい、もう少し粘ったという次第です。

なので、平たく言えば「思ったより面倒だなコイツ!」が感想です。 適当な所で切り上げるタイミングがつかみづらく、けっこう疲れました。 作成時間も社畜ちゃんIDEの時に比べ、だいぶかかってます2

ただ、VS拡張の作り方に加えて「パーサーもどきをサクッと作るには?」 といった話題にも触れられ、個人的な勉強としてはタメになりました。 皆さんも是非、大した理由もなく新言語をVSでサポートしていきましょう。

また、別方向の学びとしてKuin言語が扱うような 「単一あるいは数個のソース」というプロジェクト規模では、 VS拡張によるサポートは「やりすぎ」、というのも体感で分かりました。

…「やる前に分かれよ」という気もしますが。

まあ、どうせ勉強目的でやっている側面が強い活動なので、 このままインテリセンスのサポートくらいまでは頑張ろうと思います。 もうちょっとだけ続報があるかもしれませんが、今回は以上です。


  1. PTVSはApache 2.0ライセンスです。 
  2. 時間がかかった原因の一つに「社会人になってから衝動でコード書く機会が減った」というのもあるんですが、これについては機会があればブログ記事になるんじゃないかと思います。