VSCodeのターミナルログを保存する方法について

採用はこちら

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のターミナルログを保存する方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次