VSCodeの統合ターミナルに表示される内容を保存したい場合は、主にシェルのリダイレクト機能やteeコマンドを利用します。
VSCode自体が、統合ターミナルに表示されたすべての内容を通常の.logファイルとして自動保存しているわけではありません。
そのため、ビルドログやエラーログ、開発サーバーの実行ログなどを確実に残したい場合は、コマンド実行時にファイルへ出力する方法が適しています。
保存方法は、WindowsでPowerShellを使っている場合と、macOS・Linux・Git Bashなどを使っている場合で少し異なります。
VSCodeのターミナルログをファイルへ保存する基本方法
>を使ってログを保存する
もっとも基本的なのは、>を使ってコマンドの出力をファイルへリダイレクトする方法です。
たとえば、Node.jsのプログラムの実行結果を保存する場合は、次のようにします。
node app.js > output.log
Pythonの場合は次のようにできます。
python app.py > output.log
npmスクリプトなら次のように指定できます。
npm run build > build.log
この方法では、通常ターミナルへ表示される標準出力が指定したファイルへ保存されます。
ただし、>を使った場合、同じ名前のファイルがすでに存在すると基本的には上書きされます。
>>を使ってログを追記する
既存のログを残しながら新しい内容を追加したい場合は、>>を使います。
npm run build >> build.log
これにより、build.logの末尾へ新しい内容が追記されます。
複数回の実行結果を1つのログファイルへ蓄積したい場合に便利です。
エラーも含めてターミナルログを保存する方法
BashやZshでは2>&1を使う
単純に>を使った場合、標準出力は保存されても、エラーメッセージが保存されないことがあります。
これは、多くのプログラムがエラーを「標準エラー出力」に出しているためです。
BashやZshなどでは、次のように指定します。
npm run build > build.log 2>&1
一般的に、
1 = 標準出力
2 = 標準エラー出力
として扱われます。
2>&1は、標準エラー出力を標準出力と同じ出力先へ送るという意味です。
そのため、次のコマンドでは標準出力と標準エラー出力の両方がbuild.logへ保存されます。
npm run build > build.log 2>&1
Bashでは&>も利用できる
Bashでは、次のような短縮記法も利用できます。
npm run build &> build.log
これも標準出力と標準エラー出力の両方を保存できます。
ただし、&>はPOSIX標準の記法ではないため、シェル間の互換性を重視する場合は、次の書き方の方が無難です。
npm run build > build.log 2>&1
ターミナルへ表示しながらログも保存する方法
macOS・Linux・Git Bashではteeを使う
>を使うと出力がファイル側へ送られるため、ターミナル上でリアルタイムに確認しにくくなります。
そこで便利なのがteeです。
npm run build | tee build.log
この方法を使うと、出力をターミナルへ表示しながら、同時にbuild.logへ保存できます。
エラーも含めてteeで保存する
標準エラー出力も含めたい場合は、次のようにします。
npm run build 2>&1 | tee build.log
開発中にログを確認しながら保存したい場合は、この形式が使いやすいでしょう。
既存ログへ追記する
既存のログを残しながら追記する場合は、-aオプションを使います。
npm run build 2>&1 | tee -a build.log
これにより、以前のログを削除せず、新しい内容を末尾へ追加できます。
PowerShellでターミナルログを保存する方法
Tee-Objectを使う
WindowsでVSCodeのターミナルとしてPowerShellを利用している場合は、Tee-Objectを使う方法があります。
npm run build | Tee-Object -FilePath build.log
この方法では、ターミナルへ表示しながら、同時にbuild.logへ内容を保存できます。
ログを追記する
既存のログファイルへ追記する場合は、-Appendを指定します。
npm run build | Tee-Object -FilePath build.log -Append
複数回の実行結果を蓄積したい場合に便利です。
PowerShellの複数ストリームを保存する
PowerShellには標準的な出力だけでなく、エラー、警告、Verboseなど複数のストリームがあります。
それらをまとめてファイルへ保存したい場合は、次のような書き方があります。
Some-Command *> output.log
すべてのストリームを1つにまとめてTee-Objectへ渡す場合は、次のようにできます。
Some-Command *>&1 | Tee-Object -FilePath output.log
単純な外部コマンドの標準出力・標準エラーを保存する場合と、PowerShell独自のコマンドレットの出力を保存する場合では、扱いが少し異なる点に注意してください。
すでに表示されたターミナルログを保存する方法
ターミナル内の内容をコピーする
コマンド実行後にログを保存したくなった場合は、VSCodeの統合ターミナルから内容を選択してコピーできます。
コピーした内容を新しいファイルへ貼り付け、
terminal.log
などの名前で保存します。
短いログや、一時的に記録しておきたい場合には簡単な方法です。
Shell Integrationの「Copy Output」を利用する
VSCodeのShell Integrationが有効になっている場合、コマンド単位で出力を扱いやすくなります。
コマンドのデコレーションメニューなどから「Copy Output」を利用すると、特定のコマンドに対応する出力だけをコピーできます。
長いターミナル履歴の中から、特定のコマンドの実行結果だけ保存したい場合に便利です。
Bash、Zsh、PowerShellなどの対応シェルで利用できますが、シェル設定や実行環境によっては自動的にShell Integrationが有効にならないこともあります。
ターミナルのスクロールバックを増やす方法
terminal.integrated.scrollbackを設定する
VSCodeの統合ターミナルでは、古い出力はスクロールバックの上限を超えると確認できなくなります。
現在の標準的な設定では、保持されるスクロールバックは1000行です。
より多くのログを残しておきたい場合は、settings.jsonで次のように設定できます。
{
"terminal.integrated.scrollback": 10000
}
これにより、最大10000行までスクロールバックに保持できます。
ただし、スクロールバックはあくまでターミナルの表示履歴です。
ログを長期間確実に残す用途では、
command 2>&1 | tee output.log
のように、最初からファイルへ保存する方法の方が適しています。
ターミナルセッションの復元とログ保存は別物
Persistent Sessionsはログファイル保存ではない
VSCodeにはPersistent Sessionsという仕組みがあり、ウィンドウの再読み込みや再起動後にターミナルの状態やスクロールバックを復元できる場合があります。
ただし、これは一般的な意味でのログファイル保存とは異なります。
つまり、ターミナル内容が復元できたとしても、
build.log
server.log
terminal.log
のようなファイルが自動的に作られるわけではありません。
ビルド結果や障害調査用ログを確実に残したい場合は、リダイレクトやteeを利用した方が適切です。
日時付きでログファイルを保存する方法
Bashで日時付きログを作る
毎回同じログファイルへ上書きするのではなく、日時ごとにファイルを分けることもできます。
npm run build 2>&1 | tee "build-$(date +%Y%m%d-%H%M%S).log"
たとえば、次のようなファイル名になります。
build-20261004-102500.log
実行ごとのログを残したい場合に便利です。
PowerShellで日時付きログを作る
PowerShellでは次のようにできます。
npm run build | Tee-Object -FilePath "build-$(Get-Date -Format 'yyyyMMdd-HHmmss').log"
これも実行日時を含んだログファイルを作成できます。
障害発生時刻とログを対応させたい場合にも便利です。
logsフォルダを作って管理する方法
プロジェクト内でログを整理する
ログファイルが増えてくる場合は、プロジェクト内にlogsフォルダを作成すると管理しやすくなります。
my-project/
├─ src/
├─ package.json
└─ logs/
├─ build.log
├─ test.log
└─ server.log
Bash系の環境では、次のように保存できます。
npm run build 2>&1 | tee logs/build.log
日時付きにする場合は次のようにします。
npm run build 2>&1 | tee "logs/build-$(date +%Y%m%d-%H%M%S).log"
ログファイルをGit管理から除外する方法
.gitignoreへ追加する
開発中に生成されるログファイルは、Gitへコミットする必要がないことが多いです。
logsフォルダ全体を除外する場合は、.gitignoreへ次のように記述します。
logs/
すべての.logファイルを除外したい場合は、次のようにします。
*.log
ただし、テスト用の固定ログやサンプルログをリポジトリへ含めるケースもあるため、プロジェクトの運用方針に合わせて設定してください。
npmスクリプトでログ保存を自動化する方法
package.jsonへログ保存用スクリプトを追加する
毎回長いコマンドを入力したくない場合は、ログ保存用のnpmスクリプトを作成できます。
macOS・Linux・Git Bashなど、teeが使える環境では次のようにできます。
{
"scripts": {
"build": "vite build",
"build:log": "vite build 2>&1 | tee logs/build.log"
}
}
実行するときは次のコマンドを使います。
npm run build:log
ただし、teeやリダイレクトの構文は使用するOSやシェルによって異なります。
Windows、macOS、Linuxが混在するチームでは、クロスプラットフォーム性を考慮した仕組みを採用した方が安全です。
VSCodeのTasksでログ保存を自動化する方法
tasks.jsonにログ保存コマンドを登録する
VSCodeのTasks機能を使えば、ログ保存用のコマンドをタスクとして登録できます。
たとえばBash系環境では、.vscode/tasks.jsonを次のように設定できます。
{
"version": "2.0.0",
"tasks": [
{
"label": "Build with log",
"type": "shell",
"command": "npm run build 2>&1 | tee logs/build.log",
"problemMatcher": [],
"presentation": {
"reveal": "always",
"panel": "new"
}
}
]
}
タスクを実行すると、ビルド結果を統合ターミナルへ表示しながら、同時にlogs/build.logへ保存できます。
ただし、VSCode Tasks自体にログファイルを自動保存する機能があるわけではありません。
実際にログを保存しているのは、
2>&1 | tee logs/build.log
の部分です。
Tasksは、そのコマンドの実行を簡単にしていると考えると分かりやすいでしょう。
OSごとのシェル差に注意する
typeがshellのタスクでは、実際に使用されているシェルによってコマンドの解釈が変わります。
たとえばBashでは、
npm run build 2>&1 | tee logs/build.log
を利用できます。
一方、PowerShellでは、
npm run build 2>&1 | Tee-Object -FilePath logs/build.log
のような書き方が適しています。
複数OSで共有するプロジェクトでは、OS別のタスク設定を用意する方法も検討するとよいでしょう。
開発サーバーのログを保存する方法
Node.jsやViteのログを保存する
開発サーバーを起動しているときのログも保存できます。
Node.jsの場合は次のようにします。
node server.js 2>&1 | tee server.log
Viteなら次のようにできます。
npm run dev 2>&1 | tee vite.log
Next.jsなどでも同じ考え方を利用できます。
npm run dev 2>&1 | tee next.log
長時間稼働するサーバーではログファイルが大きくなる可能性があるため、本番環境ではログローテーションや専用のログ管理システムも検討した方がよいでしょう。
テスト結果をログとして保存する方法
npm testの結果を保存する
テスト結果もファイルへ保存できます。
npm test 2>&1 | tee test.log
pytestの結果を保存する
Pythonのpytestなら、次のようにできます。
pytest 2>&1 | tee pytest.log
エラー内容を後から確認したり、CIの失敗をローカルで調査したりするときに役立ちます。
Dockerのログを保存する方法
コンテナログをファイルへ保存する
Dockerコンテナのログを保存したい場合は、次のようにできます。
docker logs my-container > docker.log 2>&1
リアルタイム表示しながら保存する
コンテナログをリアルタイムに確認しながら保存したい場合は、次のようにします。
docker logs -f my-container 2>&1 | tee docker.log
ただし、大量のログを長期間保存するとファイルサイズが大きくなります。
本番環境では、Dockerのログドライバーやログローテーションなども検討する必要があります。
VSCodeのTerminalとOutputの違い
Terminalはシェルコマンドを実行する場所
VSCodeの統合ターミナルでは、Bash、Zsh、PowerShell、Command Promptなどのシェルを利用できます。
たとえば次のようなコマンドの出力は、基本的にTerminalへ表示されます。
npm run dev
python app.py
docker logs
Outputパネルは別の機能
VSCodeにはTerminalとは別に「Output」パネルがあります。
Outputには、VSCode本体や拡張機能、Language Serverなどのログが表示されることがあります。
そのため、
ターミナルで実行したプログラムのログ
と、
VSCode本体や拡張機能のログ
は同じものではありません。
何のログを保存したいのかによって、適切な方法が異なります。
VSCode自体のターミナル障害ログを確認する方法
Developer: Set Log Level...を利用する
統合ターミナルで実行しているアプリのログではなく、
ターミナルが起動しない
ターミナルが突然終了する
ターミナル表示がおかしい
といったVSCode自体の問題を調査したい場合は、VSCodeの内部ログを確認します。
コマンドパレットから、
Developer: Set Log Level...
を実行し、必要に応じてTraceなどへ変更します。
その後、問題を再現します。
Developer: Open Log...でログを確認する
問題を再現したら、コマンドパレットから、
Developer: Open Log...
を実行します。
TerminalやPty Hostなど、関連するログを確認できます。
これらは、
npm run dev > output.log
のようなアプリケーションログとは別物です。
また、内部ログにはファイルパスやコマンド、環境情報などが含まれる場合があるため、他人へ共有するときは機密情報が含まれていないか確認することが重要です。
デバッグ実行時のログ保存で注意すること
launch.jsonのargsに>を書くだけでは保存できないことがある
VSCodeでデバッグ実行するときに、
>
や、
2>&1
をlaunch.jsonのargsへ書いても、必ずシェルのリダイレクトとして解釈されるとは限りません。
デバッガや実行環境によっては、単なるアプリケーション引数として渡されます。
そのため、デバッグ時にログファイルへ出力したい場合は、プログラム側のログ設定を使ったり、ターミナルから対象プログラムを起動してAttachしたりする方法が必要になることがあります。
VSCodeのターミナルログ保存方法の選び方
一度だけ保存したい場合
単純にファイルへ保存するだけなら、次の方法が簡単です。
command > output.log 2>&1
ターミナルでも確認したい場合
macOS・Linux・Git Bashなどでは次の方法が便利です。
command 2>&1 | tee output.log
PowerShellなら次のようにできます。
command 2>&1 | Tee-Object -FilePath output.log
実行済みのログを保存したい場合
短いログであればターミナルからコピーします。
Shell Integrationが利用できる場合は、「Copy Output」を使うとコマンド単位でコピーしやすくなります。
繰り返しログを保存したい場合
VSCode Tasksやnpmスクリプトへログ保存用コマンドを登録すると便利です。
長期間ログを保存したい場合
ターミナルのスクロールバックだけに頼らず、最初からログファイルへ出力する方法がおすすめです。
まとめ
VSCodeのターミナルログを保存する場合、もっとも確実なのは、使用しているシェルのリダイレクト機能を利用してファイルへ直接出力する方法です。
単純に保存する場合は、
command > output.log 2>&1
とします。
ターミナルへ表示しながら保存したい場合は、BashやZshなどで、
command 2>&1 | tee output.log
を使うと便利です。
PowerShellでは、
command 2>&1 | Tee-Object -FilePath output.log
という方法があります。
また、VSCodeのShell Integrationを利用すれば、実行済みのコマンド単位で出力をコピーできます。
terminal.integrated.scrollbackを増やせば長い出力を後から確認しやすくなりますが、スクロールバックはあくまで表示履歴です。
ビルドログ、テストログ、開発サーバーのログ、Dockerログなどを確実に残したい場合は、最初からファイルへ保存する運用にしておくと管理しやすくなります。
以上、VSCodeのターミナルログを保存する方法についてでした。
最後までお読みいただき、ありがとうございました。










