VS Code のターミナルが前回の状態を復元する仕組みは、主に "Persistent Terminal"(永続的なターミナル) の機能によるものです。
具体的には、以下のような方法でターミナルの情報を保存・復元しています。
1. ターミナルのプロセス管理
VS Code はターミナルのセッションを バックグラウンドで管理 しており、エディターを閉じてもターミナルのプロセスは完全には終了しません。
例えば、VS Code を再起動すると、前回開いていたターミナルが自動的に復元されます。
- Windows:
conpty
(Windows 10 以降)またはwinpty
- macOS/Linux:
pty
(擬似ターミナル)を使用
この機能によって、プロセスが完全に終了しない限り、ターミナルの状態を保持できます。
2. シリアライズとストレージ
VS Code はターミナルの情報を workspaceStorage
に保存 し、復元時に利用します。
保存される情報
- ターミナルのセッション ID
- 実行していたシェル(bash、zsh、powershell など)
- ターミナルの作業ディレクトリ(カレントディレクトリ)
- 環境変数(特定のシェルオプションなど)
保存場所
ローカルの workspaceStorage
ディレクトリ内に JSON 形式で保存されます。
~/.config/Code/User/workspaceStorage/(Linux/macOS)
%APPDATA%\Code\User\workspaceStorage\(Windows)
3. ターミナル復元の流れ
- VS Code 起動時に
workspaceStorage
から前回のターミナル情報を取得 - セッションが生きている場合、同じプロセスに再接続
- セッションが終了している場合、新しいターミナルを作成し、作業ディレクトリや環境変数を復元
- ユーザーが
history
コマンドを実行すると、シェルの履歴(.bash_history など)から過去のコマンドを確認可能
4. コマンド履歴の保持
実際の コマンド履歴(history) は、ターミナル自体の機能によって管理されます。
例えば:
- Bash/Zsh:
~/.bash_history
や~/.zsh_history
- PowerShell:
$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
- Fish:
~/.local/share/fish/fish_history
VS Code 自体はコマンド履歴を保存せず、ターミナルの履歴ファイルを利用します。
5. もし復元を無効化したい場合
VS Code の設定で ターミナルの永続化を無効化 できます。
"terminal.integrated.enablePersistentSessions": false
また、手動で workspaceStorage
を削除することでも復元を防げます。
まとめ
- VS Code はターミナルの状態を
workspaceStorage
に保存している。 - シェルの履歴 (
~/.bash_history
など) は VS Code ではなく OS 側が管理。 -
terminal.integrated.enablePersistentSessions
を無効にすれば、復元を防げる。
VS Code は単にターミナルの情報を保存し、再接続しているだけで、履歴の管理はシェル自身が行っています。
VS Code のターミナルの復元に関係する state.vscdb
、state.vscdb.backup
、workspace.json
について、それぞれ詳しく説明します。
1. state.vscdb
(ターミナルの状態管理)
このファイルは、VS Code の アプリ全体の状態(State)を SQLite データベース形式で保存 するものです。
ターミナルの永続化だけでなく、ウィンドウの配置、開いていたエディタの状態、拡張機能の状態などが記録されています。
主な役割
- ターミナルのセッション情報(どのシェルを開いていたか、作業ディレクトリなど)を記録
- VS Code のウィンドウレイアウトやエディタの開閉状態を管理
- ユーザーが変更した一時的な UI 設定の保存
保存場所
-
Windows:
%APPDATA%\Code\User\globalStorage\state.vscdb
-
macOS:
~/Library/Application Support/Code/User/globalStorage/state.vscdb
-
Linux:
~/.config/Code/User/globalStorage/state.vscdb
確認方法
このファイルは SQLite 形式なので、sqlite3
コマンドで開いて中身を確認できます。
sqlite3 state.vscdb
例えば、ターミナルの情報が含まれているか確認するには、以下のような SQL を実行できます。
SELECT * FROM ItemTable WHERE key LIKE '%terminal%';
関連ファイル
-
state.vscdb.backup
:state.vscdb
のバックアップファイル。VS Code が異常終了した場合に備えて、一つ前の状態を保存。
2. workspace.json
(ワークスペースごとの設定管理)
このファイルは、VS Code がワークスペース(プロジェクトごとの作業環境)の設定を管理するために使います。
主な役割
-
ワークスペースごとのターミナル情報を記録
- どのターミナルが開いていたか(bash, zsh, PowerShell など)
- ターミナルの作業ディレクトリ
- ターミナルのレイアウト(分割ターミナルの配置など)
- エディタの開いていたファイルやタブの情報を保持
- ワークスペースごとの拡張機能の状態を管理
保存場所
-
Windows:
%APPDATA%\Code\User\workspaceStorage\<ワークスペースID>\workspace.json
-
macOS:
~/Library/Application Support/Code/User/workspaceStorage/<ワークスペースID>/workspace.json
-
Linux:
~/.config/Code/User/workspaceStorage/<ワークスペースID>/workspace.json
<ワークスペースID>
は、ワークスペースごとに VS Code が自動的に割り当てたランダムな ID になります。
確認方法
このファイルは JSON 形式 なので、cat
や jq
コマンドで中身を確認できます。
cat ~/.config/Code/User/workspaceStorage/<ワークスペースID>/workspace.json | jq .
ワークスペースをリセットする場合
特定のワークスペース設定を削除したい場合は、このファイルを削除すると、次回 VS Code 起動時にデフォルト設定で開くようになります。
まとめ
ファイル名 | 役割 | 保存場所 |
---|---|---|
state.vscdb | グローバルな状態管理(ターミナル、ウィンドウレイアウトなど) | globalStorage/state.vscdb |
state.vscdb.backup |
state.vscdb のバックアップ(異常終了時に使用) |
globalStorage/state.vscdb.backup |
workspace.json | ワークスペースごとのターミナルやレイアウトの記録 | workspaceStorage/<ワークスペースID>/workspace.json |
VS Code のターミナル情報は state.vscdb
(グローバル)と workspace.json
(ワークスペースごと)で管理されており、次回起動時に復元される仕組みになっています。