日程Fit|「いつ空いてますか?」の往復はもう不要。候補日を選んでURLを送るだけ|登録不要|今すぐ無料で使う →

VS CodeでTIE構文をシンタックスハイライトする方法と拡張機能自作手順

社内独自言語TIEのコードをVS Codeで開いたとき、キーワードもコメントもすべて同じ色だと、レビューもデバッグもつらくなります。本記事では「VS CodeでTIE構文をシンタックスハイライトできるのか?」という疑問に答えつつ、既存拡張の探し方から、ゼロから拡張機能を自作する具体的な手順までを、実務目線で詳しく解説します。

日程Fit。無料・登録不要。「いつ空いてる?」を、ひとつのリンクで。リンクを送って、○△×でかんたん日程調整。無料で日程を作る。
目次

VS CodeでTIE構文をハイライトできるのか?結論

最初に結論を整理しておきます。

  • VS Codeはほぼどんな言語でもシンタックスハイライト可能です。
  • TIEが社内独自言語であっても、拡張機能があればそのまま使える、なければ自作して対応できます。
  • ハイライトだけなら、TextMate形式の文法ファイルを用意するだけでOKで、難しいコンパイラ知識は不要です。

実現パターンは大きく次の3つです。

パターン概要難易度向いているケース
既存拡張を利用TIE対応拡張(または流用可能な拡張)をインストールして使うまず試したい・時間をかけたくない場合
自作ハイライト拡張TextMate文法+VS Code拡張で色分けだけ実装最低限、見やすい色分けが欲しい場合
言語サーバーまで実装LSP対応で補完やLint、定義ジャンプなども実装TIEを長期的に本気で育てたい場合

この記事では、このうち「既存拡張の探し方」と「自作ハイライト拡張の作り方」にフォーカスします。

既存のTIE用拡張機能を探す手順

まずは「自作しなくて済むか」を確認します。VS Codeの拡張機能(Extensions)は、ショートカット1つで検索・インストールできます。

VS Codeマーケットプレイスで検索する

  1. VS Codeを起動する。
  2. Ctrl + Shift + X(macOSなら Cmd + Shift + X)を押して、左側の「拡張機能」ビューを開く。
  3. 上部の検索欄に、次のようなキーワードを順番に試す。
    • TIE
    • 社内で使っている正式名称(例:Transaction Integration Engine など)
    • ファイル拡張子名(例:.tie
  4. 一覧にTIE関連と思われる拡張が表示されたら、詳細を確認する。
  5. 使えそうであれば、「インストール」ボタンを押すだけで利用開始可能です。

VS Code拡張はMicrosoft 365の契約の有無とは無関係に、ほとんどが無償でインストールできます。個人のローカル環境に入れるだけなら、管理者権限も不要なケースが多いです。

検索キーワード例ねらい補足
TIEそのものズバリの拡張を探す同名の別ツール・別言語がヒットすることもあるので説明文を要確認
正式名称略称で見つからないときの保険社内だけの名称なら、公開拡張はまず存在しない可能性が高い
ファイル拡張子(例:.tie対応言語を拡張子で判断している拡張を探す説明文やスクリーンショットで対象言語を確認する

社内向けに配布されている拡張を探す

TIEのような社内独自言語の場合、OB/OGや有志が社内専用のVS Code拡張を既に作っていることもよくあります。公開マーケットプレイスに無くても、次のような場所をチェックしてみてください。

探す場所具体例チェックポイント
社内GitリポジトリAzure DevOps / GitHub Enterprise / GitLab などtie, vscode, syntax といったキーワードで検索
社内Wiki・ナレッジConfluence、Notion、Backlogなど「開発環境」「推奨ツール」「VS Code」というページを確認
共有フォルダファイルサーバー、SharePointなど.vsix ファイルが置かれていないか検索
チームチャットTeams / Slack / LINE WORKSなど過去ログで「VS Code TIE」などを検索

もし .vsix 形式のファイルが見つかった場合は、VS Codeのコマンドパレット(Ctrl + Shift + P)から「Extensions: Install from VSIX…」を実行し、そのファイルを選択するだけでインストールできます。

拡張機能が存在しない場合の基本戦略

どこを探してもTIE用拡張が見つからない場合は、自作を検討します。ただし、いきなり「補完・Lint・デバッグ全部入り」を目指すと、かなり大がかりになります。

現実的には、次のような段階的アプローチがおすすめです。

フェーズ実装内容必要なスキル開発コスト
フェーズ1キーワード・コメント・文字列リテラルなどの色分けだけ実装正規表現(Regex)の基礎+JSON編集小(数時間〜数日)
フェーズ2スニペットや簡易補完、コードフォーマットの一部を追加JavaScript/TypeScriptの基礎
フェーズ3言語サーバーを実装し、構文解析・Lint・定義ジャンプなどを実装パーサー・AST・LSPの知識

この記事では、まずフェーズ1(シンタックスハイライト)を確実に完成させることをゴールにします。

VS Codeのシンタックスハイライトの仕組みをざっくり理解する

VS Codeの色分けは、主にTextMate形式の文法ファイルを使って行われます。拡張機能で「この言語のコードには、この文法ファイルを適用してね」と登録しておくイメージです。

構成要素役割主なファイル
TextMate文法トークン(キーワード・文字列・コメントなど)を正規表現で定義する*.tmLanguage.json など
言語定義言語ID・対象拡張子・コメント記号などを定義するpackage.json, language-configuration.json
テーマTextMateスコープに色を割り当てるユーザーやテーマ拡張で設定

TextMate文法側で「これは keyword.control.tie というスコープ」とラベル付けし、テーマ側で「keyword.control は青色」と決めることで、結果として色分けされる仕組みです。

自作に必要な事前準備

TIE用ハイライト拡張を自作するには、Node.jsとVS Code拡張開発用のツールを用意します。

準備項目内容備考
Node.jsVS Code拡張開発ツールを動かすために必要公式サイトからLTS版をインストール
Yeoman + VS Code Extension Generator拡張のひな型(テンプレート)を生成するツールyo code コマンドが使えるようになる
vsce拡張を .vsix ファイルにパッケージングするツール社内配布用に便利

Node.jsがインストール済みであれば、以下のコマンドで必要ツールをまとめてグローバルインストールできます。

npm install -g yo generator-code vsce

これで拡張のひな型生成・デバッグ・パッケージングに必要な最低限の環境が整います。

TextMate文法を作るためにTIEの構文を整理する

いきなりJSONを書き始めるのではなく、まずはTIEのコードを実際にいくつか眺めて、どんな要素があるのかを洗い出します。

  • コメントの書き方(行コメント / ブロックコメント)
  • キーワード(制御構文、宣言、演算子など)
  • 識別子(変数名・関数名・モジュール名など)
  • 文字列リテラル(シングルクォート / ダブルクォート / 特殊な区切り)
  • 数値リテラル(整数 / 浮動小数 / 16進数など)
  • 特殊構文(タグ、ディレクティブ、プリプロセッサなど)

仮に、TIEのコードが次のような感じだとします。

# コメント
PROC main()
  LET x = 10
  IF x > 0 THEN
    PRINT "Hello TIE"
  ENDIF
ENDPROC

この例では、少なくとも次のようなトークンを色分けしたくなります。

構文要素TextMateスコープ候補
キーワード(制御構文)PROC, ENDPROC, IF, THEN, ENDIFkeyword.control.tie
キーワード(宣言)LETkeyword.declaration.tie
コメント# コメントcomment.line.number-sign.tie
文字列リテラル"Hello TIE"string.quoted.double.tie
識別子main, xvariable.other.tie など
数値リテラル10constant.numeric.tie

この整理をもとに、TextMate文法ファイルを設計していきます。

yo codeでVS Code拡張のひな型を生成する

構文要素の整理ができたら、拡張のひな型を自動生成します。

  1. 新しい作業用ディレクトリを作成し、ターミナルでそのフォルダに移動する。
  2. 次のコマンドを実行する。 yo code
  3. プロンプトが表示されたら、テンプレートとして「New Language Support」を選択する。
  4. 言語名には「TIE」、言語IDには「tie」などを入力する。
  5. 対象拡張子には「.tie」など、実際に使っているファイル拡張子を指定する。

対話形式で質問に答えていくと、TIE用言語拡張のひな型プロジェクトが自動生成されます。

設定項目入力例ポイント
Language nameTIE人間向けの表示名。VS Codeのステータスバーなどに表示される
Language idtie内部識別子。スクリプトや設定で参照されるので、途中で変えないほうがよい
File extensions.tie複数あればカンマ区切りで指定可能
Scope namesource.tieTextMateスコープのルート。既存言語と被らないようにする

生成された拡張プロジェクトの構造を把握する

ひな型が生成されると、フォルダ内はおおむね次のような構成になっています。

tie-syntax/
  package.json
  syntaxes/
    tie.tmLanguage.json
  language-configuration.json
  README.md
  CHANGELOG.md
  vsc-extension-quickstart.md
ファイル/フォルダ役割
package.json拡張のメタ情報。言語IDやTextMate文法ファイルの登録もここで行う
syntaxes/TextMate文法ファイルを置くフォルダ
tie.tmLanguage.jsonTIEの構文ルールを定義する文法ファイル(これを編集してハイライトを実現)
language-configuration.jsonコメント記号や括弧のペアなど、エディタの振る舞いに関する設定
README.md, CHANGELOG.md拡張の説明や変更履歴を記述するドキュメント

シンタックスハイライトの中心になるのは syntaxes/tie.tmLanguage.jsonpackage.jsoncontributes セクションです。

TextMate文法ファイルの基本構造

TextMate文法はJSON(またはPLIST)形式で定義します。最小構成のサンプルは次のようになります。

{
  "scopeName": "source.tie",
  "patterns": [
    { "include": "#comments" },
    { "include": "#strings" },
    { "include": "#keywords" }
  ],
  "repository": {
    "comments": {
      "patterns": [
        {
          "name": "comment.line.number-sign.tie",
          "match": "#.*$"
        }
      ]
    },
    "strings": {
      "patterns": [
        {
          "name": "string.quoted.double.tie",
          "begin": "\"",
          "end": "\""
        }
      ]
    },
    "keywords": {
      "patterns": [
        {
          "name": "keyword.control.tie",
          "match": "\\b(PROC|ENDPROC|IF|THEN|ENDIF)\\b"
        },
        {
          "name": "keyword.declaration.tie",
          "match": "\\bLET\\b"
        }
      ]
    }
  }
}

ポイントは次の通りです。

  • scopeName は、ひな型生成時に指定したルートスコープ(例:source.tie)。
  • patterns に、どのルールを順番に適用するかを記述します。
  • repository に実際のルールを分類してまとめておくと、後から保守しやすくなります。
  • match は単一行の正規表現、begin/end は複数行にもまたがる範囲を定義するのに使います。

よく使うスコープ名の例

スコープ名意味用途例
keyword.control制御構文のキーワードIF, THEN, ENDIF など
keyword.declaration宣言系キーワードLET, PROC など
comment.line1行コメント# コメント, // コメント など
string.quoted.doubleダブルクォート文字列"Hello"
constant.numeric数値リテラル10, 3.14, 0xFF など
variable.other一般的な変数x, counter など

スコープ名はVS Codeのテーマ側で色が決まるので、既存言語でよく使われるスコープ名に寄せると、どのテーマでも自然な色になりやすいです。

package.jsonで言語と文法を関連付ける

TextMate文法を書いただけでは、まだVS Codeは「どの言語にその文法を適用すべきか」を知りません。package.jsoncontributes セクションに、言語定義と文法ファイルの関連付けを記述します。

典型的な設定例は次の通りです。

{
  "contributes": {
    "languages": [
      {
        "id": "tie",
        "aliases": ["TIE"],
        "extensions": [".tie"],
        "configuration": "./language-configuration.json"
      }
    ],
    "grammars": [
      {
        "language": "tie",
        "scopeName": "source.tie",
        "path": "./syntaxes/tie.tmLanguage.json"
      }
    ]
  }
}
  • languages では、言語ID・拡張子・コメントなどの基本情報を定義します。
  • grammars では、どの言語IDにどのTextMate文法ファイルを適用するかを指定します。
  • path は拡張のルートからの相対パスです。

ここまで設定できれば、.tieファイルを開いたときにTIE用の文法が適用される状態になります。

Extension Development Hostで動作確認する

実際にハイライトされるかどうかは、VS Codeから拡張をデバッグ実行して確認します。

  1. 拡張プロジェクト(tie-syntax フォルダ)をVS Codeで開く。
  2. 左の「実行とデバッグ」ビューで、デフォルトの構成を選びF5キーを押す。
  3. 新しいVS Codeウィンドウ(Extension Development Host)が起動する。
  4. そのウィンドウで、サンプルのTIEファイル(sample.tie など)を作成・開く。
  5. キーワードやコメントに色が付いているか確認する。

ハイライト結果の確認を細かく行いたいときは、コマンドパレットから「Developer: Inspect Editor Tokens and Scopes」を実行すると、カーソル位置に付いているTextMateスコープを確認できます。「なぜここが色分けされないのか?」という問題の切り分けに非常に便利です。

シンタックスハイライトを改善していくコツ

最初から完璧な文法を書く必要はありません。むしろ、次のように段階的に改善していく方が、現場で使いやすい拡張に育ちます。

  1. フェーズ1:最低限のハイライト
    • コメント
    • 文字列リテラル
    • 主要キーワード(PROC, IF など)
  2. フェーズ2:追加キーワード・数値リテラル対応
    • 全キーワードを洗い出して正規表現に追加
    • 数値リテラル(整数・浮動小数・16進など)を色分け
  3. フェーズ3:関数名や特殊構文の色分け
    • 関数宣言部の関数名を entity.name.function.tie などのスコープで色分け
    • プリプロセッサやディレクティブがあれば別スコープにする

社内でよく使われるサンプルコードを集めて、「この構文はどのスコープになっているべきか」を決め、その状態を保つように文法を調整していくと、品質を安定させやすくなります。

.vsixにパッケージングして社内配布する

拡張がある程度完成したら、vsce を使ってパッケージングし、.vsix ファイルとして配布できるようにします。

  1. 拡張プロジェクトのルートで、バージョン番号(package.jsonversion)を適切に設定する。
  2. ターミナルで次のコマンドを実行する。 vsce package
  3. カレントディレクトリに tie-syntax-0.0.1.vsix のようなファイルが生成される。

生成された .vsix を社内ファイルサーバーやWikiに置き、「VS Code > コマンドパレット > Extensions: Install from VSIX…」からインストールしてもらえば、簡単に全社展開できます。

配布方法メリットデメリット
.vsixファイルを社内配布インターネット不要。閉じた環境でも利用可能アップデートのたびに再配布が必要
(必要に応じて)マーケットプレイス公開VS Codeから直接インストール・更新が可能社外公開になるため、社内情報を含められない

社内独自言語であれば、まずは.vsixの社内配布から始めるのが現実的です。

ハイライト以外の機能を追加したい場合の選択肢

シンタックスハイライトが整ってくると、次のような要望が出てきがちです。

  • キーワードやテンプレートをサクッと挿入したい
  • 関数名の定義にジャンプしたい
  • 保存時に自動整形したい
  • 文法エラーをリアルタイムに検出したい

これらを実現するための代表的な方法を整理しておきます。

機能実現方法難易度コメント
コードスニペットcontributes.snippets でスニペット定義を追加構文テンプレート(PROC ... ENDPROC など)を登録するだけでも生産性アップ
簡易補完拡張からCompletion Providerを実装キーワードやよく使う識別子の補完が可能
Lint / 定義ジャンプLanguage Server Protocol(LSP)対応の言語サーバーを実装本格的な開発体験を提供できるが、開発コストは高め

まずはシンタックスハイライト+スニペットから始め、チームの利用状況を見ながら徐々に機能を育てていくのがおすすめです。

よくあるトラブルと対処法

TIE用ハイライト拡張を作っていると、次のような「あるあるトラブル」に遭遇しがちです。

症状考えられる原因対処法
.tieファイルを開いてもまったく色が変わらないpackage.jsonextensions が実際の拡張子と違う contributes.grammarslanguagelanguages.id と一致していない 拡張の再読み込みをしていない言語IDと拡張子の設定を見直す VS Codeを再起動、またはウィンドウの再読み込みを実行
コメントの色が変わらない正規表現が誤っている 他のルールが先にマッチしてしまっているmatch のパターンを簡単なものから試す patterns の順序を変更して、コメントを先に評価する
複数行にまたがる構文が途中で色切れするmatch を使って単一行扱いにしてしまっている begin/end の組み合わせが間違っている複数行構文は begin/end で定義する ネストが必要な場合は patterns に子ルールを定義
テーマを変えると全然違う色になってしまう独自スコープ名を使いすぎているkeyword.controlstring.quoted.double など、既存テーマが対応しているスコープに寄せる

トラブルシュートの基本は、「どのスコープが付いているか」を確認することです。うまくいかないときは、前述の「Inspect Editor Tokens and Scopes」で、実際にVS Codeがどう認識しているかをチェックすると原因を絞り込みやすくなります。

現場で使えるTIEハイライトを作るための実践的アドバイス

  • 完璧主義より「よく見る構文から」
    • 最初から全構文をカバーしようとせず、現場でよく使う構文・ファイルから優先的にサポートする。
  • サンプルコードをテストケースとして保存
    • バグ報告があったコード片を集め、samples/ フォルダなどに保存しておくと、文法変更時のリグレッションテストに使える。
  • 命名規則を早めに決める
    • スコープ名やファイル名、言語IDを途中で変えると混乱しやすいので、最初に方針を決めておく。
  • 社内で小さく共有してフィードバックをもらう
    • チーム内で使ってもらい、「ここの色分けが分かりにくい」「この構文がハイライトされていない」などの声を拾って改善する。

まとめ:VS CodeでTIE構文ハイライトを実現するロードマップ

最後に、TIEのような社内独自言語をVS Codeでシンタックスハイライトするまでの流れを振り返ります。

  1. 既存拡張を探す
    • VS Codeの拡張機能ビューで「TIE」や正式名称・拡張子を検索。
    • 社内Git・Wiki・共有フォルダ・チャットログも確認し、.vsix が配布されていないか調べる。
  2. 見つからなければ自作を決断
    • まずはシンタックスハイライトだけをゴールにし、TextMate文法+拡張ひな型で最小限の実装から始める。
  3. TextMate文法で構文ルールを定義
    • キーワード・コメント・文字列・数値など、よく使う構文要素にスコープを割り当てる。
    • 既存言語の文法ファイルを参考にしつつ、TIEに合わせてカスタマイズする。
  4. VS Code拡張として登録・デバッグ
    • yo code でひな型を生成し、package.jsoncontributes で言語と文法を関連付ける。
    • Extension Development Hostで実際のTIEコードを開き、色分けを確認しながら調整する。
  5. .vsixで社内配布し、フィードバックを集める
    • vsce package でパッケージングし、社内に展開。
    • 利用者からのフィードバックをもとに、キーワード追加やバグ修正を行う。

TIEのような社内独自言語は、どうしてもIDEやツールの支援が弱くなりがちです。しかし、VS Codeの拡張機能とTextMate文法をうまく活用すれば、最低限のコストで「見やすく、レビューしやすい」開発環境を整えることができます。この記事の手順をベースに、まずはシンプルなハイライト拡張からスタートし、チームの開発スタイルに合わせて少しずつ育てていってみてください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次