0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VScodeのターミナル情報ってどうやって記録されるのか[備忘録]

Last updated at Posted at 2025-02-06

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. ターミナル復元の流れ

  1. VS Code 起動時に workspaceStorage から前回のターミナル情報を取得
  2. セッションが生きている場合、同じプロセスに再接続
  3. セッションが終了している場合、新しいターミナルを作成し、作業ディレクトリや環境変数を復元
  4. ユーザーが 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.vscdbstate.vscdb.backupworkspace.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.backupstate.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 形式 なので、catjq コマンドで中身を確認できます。

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(ワークスペースごと)で管理されており、次回起動時に復元される仕組みになっています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?