Skip to content

ターミナル Shell 統合

ターミナル Shell 統合は VJSP のコア機能であり、ターミナル内でコマンドを実行し、出力結果をインテリジェントに処理することを可能にします。AI と開発環境の双方向通信機能により、様々な効率的な自動化シナリオを実現します。

Shell 統合とは?

Shell 統合は VJSP でデフォルトで自動的に有効になっており、手動設定なしでターミナルのコマンド実行ライフサイクルに直接接続できます。この組み込み機能により、VJSP は以下の操作を実現します。

  • execute_command ツールを介してコマンドを代行実行
  • コマンド出力をリアルタイムで読み取り、手動のコピー&ペーストを不要に
  • 実行中のアプリケーションのエラーを自動的に検出・修復
  • コマンドの終了コードを監視し、実行結果の成功・失敗を判定
  • プロジェクトナビゲーション中の作業ディレクトリの変更を追跡
  • ユーザーの介入なしに、ターミナル出力に基づいてインテリジェントに応答

VJSP が依存関係のインストール、開発サーバーの起動、ビルドエラーの分析などを行う場合、Shell 統合がバックグラウンドで自動的に動作し、スムーズで効率的な操作を実現します。

Shell 統合のクイックスタート

Shell 統合は VJSP に組み込まれており、ほとんどのシナリオですぐに使用できます。「Shell Integration Unavailable(Shell 統合が利用できません)」と表示される場合、またはコマンド実行に異常が発生した場合は、以下の解決策を試してください。

  1. VSCode/IntelliJ IDEA を最新バージョンにアップグレード(最低要件:VSCode 1.93)
  2. 互換性のある Shell 環境を選択:コマンドパレットを開く(ショートカット Ctrl+Shift+P または Cmd+Shift+P)→「Terminal: Select Default Profile(ターミナル:デフォルトプロファイルを選択)」を実行 → bash、zsh、PowerShell、fish のいずれかを選択
  3. Windows PowerShell ユーザー:コマンド Set-ExecutionPolicy RemoteSigned -Scope CurrentUser を実行し、VSCode を再起動
  4. WSL ユーザー:~/.bashrc ファイルに . "$(code --locate-shell-integration-path bash)" を追加

ターミナル統合関連設定

VJSP では、Shell 統合の動作を調整するための詳細な設定オプションを提供しており、VJSP サイドバーの「Settings(設定)→ Terminal(ターミナル)」からアクセスできます。

基本設定

ターミナル出力制限

ターミナル出力からキャプチャする最大行数を制御します。行数が閾値を超えると、先頭 20% と末尾 80% の内容が保持され、中間は切り捨てインジケーターで区切られます。これにより、トークンの過剰消費を抑えつつ、コアなコンテキストを保持します。デフォルト値:500 行。

ターミナル Shell 統合タイムアウト

コマンド実行前に Shell 統合の初期化が完了するまで待機する最大時間を定義します。「Shell Integration Unavailable(Shell 統合が利用できません)」エラーが頻発する場合は、この値を適宜増やしてください。デフォルト値:15 秒。

ターミナルコマンド遅延

コマンド実行後に一時的な一時停止を追加し、VJSP がすべての出力内容を完全にキャプチャできるようにします。OS や Shell 設定によって VSCode のターミナル統合の実装が異なるため、この設定は Shell 統合の安定性に大きな影響を与えます。

  • デフォルト値:0 ミリ秒
  • 推奨値:
    • 0 ミリ秒:新しい VSCode ユーザー向け、最も適合
    • 50 ミリ秒:従来のデフォルト値、多くのユーザーに適用
    • 150 ミリ秒:PowerShell ユーザーに推奨
  • 注意:数値の適合度は以下に依存します。
    • 使用中の VSCode バージョン
    • Shell のカスタム設定(oh-my-zsh、powerlevel10k など)
    • OS および実行環境

高度な設定

💡 重要な注意

以下の設定を変更した後、ターミナルを再起動する必要があります

高度なターミナル設定の変更は、ターミナルを再起動した後にのみ有効になります。ターミナルの再起動手順:

  1. ターミナルパネルのゴミ箱アイコンをクリックし、現在のターミナルウィンドウを閉じる
  2. 「Terminal(ターミナル)→ New Terminal(新規ターミナル)」またはショートカット Ctrl+`(バッククォート)で新しいターミナルを開く

高度な設定を変更した後は、開いているすべてのターミナルウィンドウを必ず再起動してください。

PowerShell カウンター互換性修正

PowerShell で同じコマンドを連続して複数回実行できない問題を解決します。PowerShell 環境で VJSP が同一コマンドを連続実行できない場合、このオプションを有効にしてください。

ZSH 行末マーカーの削除

ZSH が出力行の末尾に特殊文字を自動的に追加するのを防ぎ、VJSP のターミナル結果の解析を妨げないようにします。

Oh My Zsh 統合

VJSP と人気の Shell カスタマイズフレームワーク [Oh My Zsh] の互換性を最適化します。Oh My Zsh 使用時にターミナル関連の問題が発生する場合は、このオプションを有効にすることを推奨します。

Powerlevel10k 統合

VJSP と ZSH テーマ Powerlevel10k の適合性を向上させます。カスタムターミナルプロンプトにより VJSP の動作が不安定になる場合は、このオプションを有効にしてください。

ZDOTDIR 設定サポート

VJSP がカスタム ZSH 設定に適応できるようにし、個人の Shell 基本設定やカスタム項目に干渉しません。

Shell 統合のトラブルシューティング

PowerShell 実行ポリシー設定(Windows システム)

PowerShell はデフォルトでスクリプト実行を制限しているため、手動で実行ポリシーを設定する必要があります。手順は以下の通りです。

  1. 管理者権限で PowerShell ウィンドウを開く
  2. 現在の実行ポリシーを確認:コマンド Get-ExecutionPolicy を実行
  3. 適切な実行ポリシーを設定:コマンド Set-ExecutionPolicy RemoteSigned -Scope CurrentUser を実行

主な実行ポリシーの説明:

  • Restricted:すべてのスクリプトの実行を禁止(デフォルト)
  • RemoteSigned:ローカルスクリプトは直接実行可能、ダウンロードしたスクリプトは署名検証が必要
  • Unrestricted:すべてのスクリプトの実行を許可、実行前に警告が表示
  • AllSigned:すべてのスクリプトに署名検証が必要

Shell 統合の手動インストール

自動統合に失敗した場合は、対応する設定行を Shell 設定ファイルに追加して手動でインストールできます。

Bash(設定ファイル ~/.bashrc

bash
[[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path bash)"

Zsh(設定ファイル ~/.zshrc

bash
[[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path zsh)"

PowerShell(設定ファイル $Profile

powershell
if ($env:TERM_PROGRAM -eq "vscode") { . "$(code --locate-shell-integration-path pwsh)" }

Fish(設定ファイル ~/.config/fish/config.fish

fish
string match -q "$TERM_PROGRAM" "vscode"; and . (code --locate-shell-integration-path fish)

ターミナルカスタム設定の競合トラブルシューティング

ターミナルカスタムツールを使用している場合は、Powerlevel10k を例に、以下のように互換性設定を行う必要があります。

bash
# ~/.zshrc ファイル内で、powerlevel10k 設定を読み込む前に以下を追加
typeset -g POWERLEVEL9K_TERM_SHELL_INTEGRATION=true

代替案:VJSP 設定で直接「Powerlevel10k 統合」オプションを有効にします。

Shell 統合の有効化状態の確認

以下のコマンドで Shell 統合が正常に有効化されているか確認できます。

Bash

bash
set | grep -i '[16]33;'
echo "$PROMPT_COMMAND" | grep vsc
trap -p DEBUG | grep vsc

Zsh

zsh
functions | grep -i vsc
typeset -p precmd_functions preexec_functions

PowerShell

powershell
Get-Command -Name "*VSC*" -CommandType Function
Get-Content Function:\Prompt | Select-String "VSCode"

Fish

fish
functions | grep -i vsc
functions fish_prompt | grep -i vsc

Shell 統合が正常に有効化された場合の視覚的特徴:

  1. ターミナルタイトルバーに Shell 統合状態インジケーターが表示
  2. コマンドラインに検出ハイライト効果が表示
  3. 作業ディレクトリの変更に応じてターミナルタイトルが自動更新
  4. コマンド実行完了後、実行時間と終了コードが表示

WSL 環境でのターミナル統合方法

Windows Subsystem for Linux(WSL)を使用する場合、VSCode と WSL の接続方法には 2 種類があり、Shell 統合の動作に影響します。詳細は以下の通りです。

方法 1:Windows 版 VSCode + WSL ターミナル

この設定の特徴:

  • VSCode は Windows 上でネイティブに動作
  • VSCode 組み込みの WSL ターミナル統合機能を使用
  • Shell コマンドは WSL ブリッジ機構を介して実行
  • Windows と WSL 間の通信オーバーヘッドにより、追加の遅延が発生する可能性
  • Shell 統合マーカーがクロスシステム境界の影響を受ける場合があり、WSL 環境で手動で Shell に設定 source "$(code --locate-shell-integration-path <shell>)" を読み込む必要がある(自動読み込み不可)。設定方法は上記を参照。

方法 2:WSL 内部で VSCode を実行

この設定の特徴:

  • WSL 環境で直接 code . コマンドで VSCode を起動
  • VSCode サーバーは Linux 環境でネイティブに動作
  • Linux ファイルシステムと各種ツールに直接アクセス可能
  • Shell 統合のパフォーマンスと安定性が向上
  • VSCode が Linux 上でネイティブに動作するため、Shell 統合が自動的に読み込まれる
  • WSL 開発に推奨される設定方法

WSL 環境で Shell 統合を最適に動作させるには、以下の手順を実行してください。

  1. インストール済みの WSL ディストリビューションを開く
  2. プロジェクトディレクトリに移動
  3. コマンド code . を実行して VSCode を起動
  4. VSCode 組み込みの統合ターミナルを使用

既知の問題と互換性ソリューション

Windows システムにおける Fish + Cygwin の VSCode Shell 統合設定

Cygwin 環境で Fish ターミナルを使用する Windows ユーザー向けに、以下に専用の VSCode Shell 統合設定方法を示します。

  1. (任意)Shell 統合スクリプトの場所を確認

    VSCode 内で Fish ターミナルを開き、以下のコマンドを実行して shellIntegration.fish スクリプトのパスを取得し、記録します。

    bash
    code --locate-shell-integration-path fish
  2. Fish 設定ファイルを更新

    Fish 設定ファイル config.fish(通常 Cygwin ホームディレクトリの ~/.config/fish/config.fish)を編集し、以下の設定を if status is-interactive ブロック内、またはファイル末尾に直接追加します。

    fish
    # config.fish 設定例
    if status is-interactive
        # その他のインタラクティブ Shell 設定...
        # 自動的に統合スクリプトを検索して読み込む(推奨)
        string match -q "$TERM_PROGRAM" "vscode"; and . (code --locate-shell-integration-path fish)
    
        # 上記が失敗する場合は手動で読み込む(実際のパスに置き換え)
        # VSCode Shell 統合スクリプトを読み込む
        # 重要:以下の例のパスをステップ1で取得した実際のパスに置き換え、Cygwin 形式(/cygdrive/c/...)にする
        # source "/cygdrive/c/Users/YourUser/.vscode/extensions/..../shellIntegration.fish"
    end
  3. VSCode ターミナルプロファイルを設定

    VSCode の settings.json ファイルを開き(ショートカット Ctrl+Shift+P →「Preferences: Open User Settings (JSON)」を実行)、terminal.integrated.profiles.windows ノード内で Fish ターミナル設定を更新または追加します。

    json
    {
      // ... その他の設定 ...
    
      "terminal.integrated.profiles.windows": {
        // ... その他のターミナル設定 ...
    
        // 推奨設定:bash.exe をログイン Shell として起動し、fish を実行
        "fish": {
          "path": "C:\\cygwin64\\bin\\bash.exe", // 実際の Cygwin bash パスに置き換え
          "args": [
            "--login", // ログインスクリプトを読み込み、Cygwin 環境を初期化
            "-i",      // インタラクティブモードで bash を実行
            "-c",
            "exec fish" // bash プロセスを fish プロセスに置き換え
          ],
          "icon": "terminal-bash" // 任意:ターミナルアイコンを設定
        },
        // 代替設定:直接 fish を起動(上記が失敗する場合)
        "fish-direct": {
          "path": "C:\\cygwin64\\bin\\fish.exe", // Windows PATH に含まれているか、絶対パスを指定
          // args ではなく options を使用する必要がある。そうしないと「terminal process terminated exit code 1」エラーが発生
          "options": ["-l", "-c"], // 例:ログインモードとインタラクティブモードを有効
          "icon": "terminal-fish" // 任意:fish 専用アイコンを設定
        }
      },
    
      // 任意:fish をデフォルトターミナルに設定
      // "terminal.integrated.defaultProfile.windows": "fish", // または "fish-direct" を使用する設定に合わせて
    
      // ... その他の設定 ...
    }

    注:Cygwin 環境では bash.exe --login -i -c "exec fish" で fish を起動することを推奨します。これにより、fish 起動前に環境が完全に初期化されます。この方法が失敗する場合は fish-direct 直接起動方式を試してください。

  4. VSCode を再起動

    VSCode を完全に閉じてから再度開き、すべての設定を有効にします。

  5. 設定の効果を確認

    VSCode で新しい Fish ターミナルを開き、Shell 統合機能(コマンド装飾、最適化されたコマンド履歴ナビゲーションなど)が有効になっていることを確認します。簡単なコマンド(例:echo "Hello from integrated Fish!")を実行し、基本機能が正常に動作するかテストしてください。

この設定方法は、Cygwin、Fish、Starship プロンプトを組み合わせた Windows システムで実証済みであり、同様の設定での互換性問題を解決できます。

VSCode 1.98 以降の Shell 統合無効化問題

問題現象:VSCode を 1.98 以降にアップグレードすると、Shell 統合が無効になり、ターミナルに「VSCE output start escape sequence (]633;C or ]133;C) not received(VSCE 出力開始エスケープシーケンスが受信されませんでした)」エラーが表示される場合があります。

解決策

  1. ターミナルコマンド遅延を調整

    • VJSP 設定で「ターミナルコマンド遅延」を 50 ミリ秒に設定
    • 変更後、すべてのターミナルを再起動
    • この設定は旧バージョンのデフォルト動作を復元し、多くの互換性問題を解決します(一部ユーザーは 0 ミリ秒の方が効果的と報告)。これは VSCode の上流問題に対する一時的な互換性ソリューションです。
  2. VSCode バージョンをダウングレード

    • VSCode 履歴バージョンページ から 1.98 バージョンをダウンロード
    • 現在インストールされている VSCode を置き換え
    • VJSP の設定をバックアップする必要はありません
  3. WSL 環境専用ソリューション

    • WSL 環境を使用している場合は、WSL 内部から直接 code . コマンドで VSCode を起動してください
  4. ZSH ユーザー専用ソリューション

    • VJSP 設定で、ZSH 関連の互換性修正オプションを一部またはすべて有効にしてみてください
    • これらのオプションはすべての OS で有効です

Ctrl+C ショートカットの実行動作問題

問題現象:VJSP がコマンドを実行しようとするとき、ターミナル入力欄に未完成のテキストがある場合、VJSP は先に Ctrl+C をトリガーして入力行をクリアし、実行中のプロセスが中断される可能性があります。

解決策:VJSP にターミナルコマンドの実行を要求する前に、ターミナルプロンプトが空白で、未入力のコマンドやテキストがないことを確認してください。

複数行コマンドの解析問題

問題現象:複数行にまたがるコマンドは VJSP の解析を混乱させ、現在のコマンドの出力に過去のコマンドの出力が混在する場合があります。

解決策:複数行コマンドを使用せず、&& を使用してコマンドを連鎖させ、1 行にまとめてください(例:echo a && echo b を使用し、2 行に分けて echo コマンドを入力しない)。

PowerShell 環境特有の問題

  1. コマンドの早期完了:PowerShell はコマンド出力が完全に表示される前に、VJSP にコマンド実行完了を通知する場合があります。

  2. 重複コマンドの実行失敗:PowerShell 環境で同じコマンドを 2 回連続して実行できない場合があります。

解決策:VJSP 設定で「PowerShell カウンター互換性修正」オプションを有効にし、「ターミナルコマンド遅延」を 150 ミリ秒に設定して、コマンド実行と出力キャプチャに十分な時間を確保してください。

ターミナル出力の不完全問題

問題現象:一部のシナリオで、VSCode がコマンドの出力内容を完全に表示またはキャプチャできない場合があります。

解決策:出力が欠落していることに気付いた場合は、現在のターミナルタブを閉じ、新しいターミナルを開いてから再度コマンドを実行し、ターミナル接続をリフレッシュすることで解決できます。

トラブルシューティングリソース

デバッグログの表示

Shell 統合に異常が発生した場合、デバッグログで問題を特定できます。手順は以下の通りです。

  1. VSCode 上部メニュー「Help(ヘルプ)→ Toggle Developer Tools(開発者ツールの切り替え)→ Console(コンソール)」を開く
  2. ログレベルを「Show All Levels(すべてのレベルを表示)」に設定し、完全なログ情報を表示
  3. [Terminal Process] を含むログメッセージをフィルタリングし、ターミナル関連の異常に焦点を当てる
  4. エラーメッセージ内の preOutput フィールドの内容を重点的に確認:
    • preOutput が空('')の場合、VSCode が VJSP にデータを送信していないことを示します
    • この現象は通常、VSCode 自身の Shell 統合の問題、または VJSP の制御を超えた上流の不具合を示します
    • ログに Shell 統合マーカーが含まれていない場合は、関連設定を調整し、上流の不具合やローカルワークステーションの設定問題(Shell 初期化、VSCode 統合フックの読み込み異常など)を回避してください。

VSCode ターミナル統合テスト拡張機能の使用

VSCode ターミナル統合テスト拡張機能は、様々な設定の組み合わせをテストすることで、Shell 統合の問題を迅速に診断できます。使用方法は以下の通りです。

  1. コマンド実行が停滞した場合の対処

    • ターミナルに「command already running(コマンドが既に実行中)」と表示された場合、「Reset Stats(統計のリセット)」をクリックしてターミナル状態をリセット
    • このメッセージは Shell 統合が正常に動作していないことを示します
    • 様々な設定の組み合わせを試し、正常に動作する組み合わせを見つけてください
    • ターミナルが完全にフリーズした場合は、VSCode ウィンドウを閉じて F5 キーで拡張機能を再起動
  2. 設定の組み合わせテスト

    • 「ターミナルコマンド遅延」と「Shell 統合関連設定」の組み合わせを体系的に試す
    • 各組み合わせの実行結果(成功/失敗)を記録
    • 結果を分析し、Shell 統合問題の傾向を特定
  3. 問題の報告

    • 異常な設定の組み合わせを特定したら、完全な設定パラメータを記録
    • 現在の実行環境(OS、VSCode バージョン、Shell の種類、Shell プロンプトのカスタム設定など)を明記
    • 上記情報を含む Issue を提出し、公式の Shell 統合機能の改善に協力してください