前回の記事で、iTerm2のSmart Selectionを使ってターミナル上の課題キーからJira/Backlogに直接飛ぶ設定を紹介しました。
これが便利すぎて、VSCodeのターミナルでも同じことやりたくなったんですよね。調べてみたら既存の手段では完全に再現できなかったので、拡張機能を自作してMarketplaceに公開しました。
この記事で分かること
- VSCodeのターミナルで課題キーリンクを実現する既存の選択肢と、その限界
- 自作拡張「Multi-Destination-Linker」のインストールと設定方法
- iTerm2 Smart Selectionとの操作感の違い
VSCodeのターミナルにはSmart Selection相当の機能がない
まず現状を整理します。
ビルトイン機能
VSCodeの統合ターミナルはURLやファイルパスの自動リンク検出はしてくれますが、任意の正規表現でリンクを追加する設定は存在しません。settings.json をどれだけ探しても出てきません。
既存の拡張機能「Terminal Links」
Terminal Links(FractalBrew製)という拡張機能を使えば、正規表現→URLのマッピングを settings.json に定義できます。
"terminalLinks.matchers": [
{
"regex": "\\b([A-Z][A-Z0-9]+-[0-9]+)\\b",
"uri": "https://your-domain.atlassian.net/browse/$1"
}
]
これで課題キーがリンクになってクリックで開けます。ただし 1パターンにつき1URLしか設定できません。
iTerm2のSmart Selectionでは、1つのパターンに対して「Jiraで開く」「Backlogで開く」のように複数のアクションを登録して右クリックで選べましたよね。Terminal Links拡張ではこれができません。
VSCode本体の対応予定は?
実はVSCodeのターミナルメンテナ自身が「1つのリンクに複数アクションを紐づけたい」というIssueを起票しています。
しかし out-of-scope ラベルが付いてBacklog行き。当面は対応されなさそうってことですね。
自作拡張「Multi-Destination-Linker」
ないなら作ろう、ということで作りました。
Multi-Destination-Linker は、ターミナル上のテキストを正規表現で検出してリンク化し、クリック時にQuickPick(VSCodeの選択UI)で複数の遷移先から選んでブラウザで開ける拡張機能です。
- Marketplace: https://marketplace.visualstudio.com/items?itemName=ryoupr.multi-destination-linker
- GitHub: https://github.com/ryoupr/Multi-Destination-Linker
インストール
VSCodeの拡張機能パネルで Multi-Destination-Linker を検索してインストール。
またはコマンドラインから:
code --install-extension ryoupr.multi-destination-linker
設定
settings.json に multiDestinationLinker.rules を追加します。
{
"multiDestinationLinker.rules": [
{
"pattern": "([A-Z][A-Z0-9]+-\\d+)",
"links": [
{ "label": "Jiraで開く", "url": "https://your-domain.atlassian.net/browse/$1" },
{ "label": "Backlogで開く", "url": "https://your-space.backlog.jp/view/$1" }
]
}
]
}
| 設定キー | 説明 |
|---|---|
pattern |
テキスト検出用の正規表現。キャプチャグループ $1, $2... をURLに埋め込める |
links |
遷移先の配列。label がQuickPickの表示名、url が開くURL |
tooltip(省略可) |
ホバー時のツールチップ。省略すると遷移先ラベルの一覧が表示される |
settings.json を直接編集するのが面倒な場合は、コマンドパレットから Multi-Destination-Linker: Add Rule を実行すると対話形式でルールを追加できます。
使い方
- 上記の設定を追加する
- ターミナルで課題キー(例:
PROJ-123)が表示されると自動的にリンクになる - リンクをクリック(またはCmd+クリック)
- 遷移先が複数ある場合はQuickPickが表示されるので選択
- ブラウザで該当ページが開く
遷移先が1つだけの場合はQuickPickを出さずに直接開きます。
複数パターンの設定例
課題キーだけでなく、PR番号やエラーコードなど、パターンごとに異なる遷移先を設定できます。
{
"multiDestinationLinker.rules": [
{
"pattern": "([A-Z][A-Z0-9]+-\\d+)",
"links": [
{ "label": "Jiraで開く", "url": "https://your-domain.atlassian.net/browse/$1" },
{ "label": "Backlogで開く", "url": "https://your-space.backlog.jp/view/$1" }
]
},
{
"pattern": "(#\\d+)",
"links": [
{ "label": "GitHub PRで開く", "url": "https://github.com/your-org/your-repo/pull/$1" }
]
}
]
}
開発の裏側
少しだけ技術的な話を。
使っているVSCode API
この拡張機能は3つのAPIの組み合わせで成り立っています。
-
registerTerminalLinkProvider: ターミナルの各行を正規表現でスキャンし、マッチした範囲をリンクとして登録 -
showQuickPick: クリック時に遷移先の選択UIを表示 -
openExternal: 選択されたURLをブラウザで開く
TerminalLinkProvider は provideTerminalLinks(リンクの検出)と handleTerminalLink(クリック時の処理)の2つのメソッドを実装するだけなので、構造としてはシンプルです。
指示書から始めて、レビューで育てた
最初は「課題キー専用のリンカー」として開発指示書を書き、1パターン構成で実装しました。そこから実装→レビュー→改善のサイクルで機能が育っていった形です。
- 「課題キーに限定する必要ないよね」→ 汎用的な名前・構造に変更
- 「
settings.json直接編集は敷居が高い」→ Add Ruleウィザード追加 - 「ホバー時に何が開けるかわからない」→ tooltip対応
- 「正規表現を間違えたとき無言で動かない」→ 無効regex警告
- 「パフォーマンス大丈夫?」→ 正規表現コンパイルキャッシュ、
safeExecによる無限ループ防止
指示書はあくまで出発点で、AIエージェントとのレビューサイクルで改善していくのが効率的でした。
iTerm2 Smart Selectionとの比較
最後に、前回のiTerm2設定と今回のVSCode拡張を比較しておきます。
| 観点 | iTerm2 Smart Selection | Multi-Destination-Linker |
|---|---|---|
| 設定方法 | GUIで設定 |
settings.json or コマンドパレット |
| 複数の遷移先 | ✅ 右クリックメニューで選択 | ✅ QuickPickで選択 |
| Cmd+クリック | ✅ 最初のアクションが実行 | ✅ 遷移先が1つなら直接開く |
| Precision制御 | ✅ Very Low〜Very High | ❌ なし |
| 複数パターン対応 | ✅ ルールごとに設定 | ✅ rules 配列で設定 |
| ホバー時の情報 | ❌ | ✅ tooltip表示 |
| 対話的なルール追加 | ✅ GUIで完結 | ✅ Add Ruleウィザード |
操作感の違いとしては、iTerm2は右クリックメニューから選ぶのに対して、VSCode版はQuickPick(画面上部のドロップダウン)から選ぶ形になります。VSCodeユーザーにとってはQuickPickの方が馴染みがあるかもしれないですかね。
まとめ
- VSCodeのターミナルには、iTerm2のSmart Selection相当のビルトイン機能がない
- 既存のTerminal Links拡張は1パターン1URLの制約がある
- Multi-Destination-Linker を使えば、1パターンに複数の遷移先を設定してQuickPickで選べる
-
settings.jsonに正規表現と遷移先を書くだけで、課題キー以外にもPR番号やエラーコードなど何でもリンク化できる
以上です、iTerm2とVSCodeを行き来する人はぜひ両方設定してみてください。