tee について
表示する出力を `tail` または `head` の一部に絞る場合も、全出力を保存するエージェント向けスキルです。エラーを含むログを一意な一時ディレクトリに記録し、この方法を避ける状況も示します。
主な機能
- 01`tee` で標準出力とエラーを記録
- 02一意な `mktemp -d` ディレクトリを使用
- 03表示する `tail` または `head` の範囲を維持
- 04保存したログのパスを表示
- 05記録を避けるケースを明示
活用シーン
- 01テスト出力の末尾より前にあるエラーの確認
- 02ビルド冒頭を表示しながらログを保存
- 03実行後に保存済みログを検索
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ petr-korobeinikov/ skills --skill teeインストール後、Claude Code で/teeを入力して読み込まれたか確認します。
詳細
tee
エージェントがコマンドを実行するとき、出力をそのまま tail -n N にパイプすると、
チャットは読みやすく保てますが、
末尾より前の行はすべて黙って破棄されます。
その中には、連鎖的な障害の最初のエラー、
要約の原因となった警告、
それより前に出力された手がかりも含まれます。
解決策は、トークンを1つ挿入するだけです。
tail/head の段階の前に tee "$log" を追加すると、
すべての出力が mktemp -d ディレクトリ内のファイルに保存されます。
画面に表示される範囲はそのままです。
保存したファイルは、後から Read、grep、tail、head で確認できます。
ルール
log=$(mktemp -d)/out.log
cmd 2>&1 | tee "$log" | tail -n 100
echo "full log: $log"
- ディレクトリは、ハードコードした
/tmp/...パスではなくmktemp -dで作成します。mktemp -dは呼び出すたびに、一意でプライベートなディレクトリを標準出力に返します。 ハードコードしたパスは、並行実行や以前の実行で残ったデータと衝突します。 teeの前に標準エラーを標準出力へリダイレクトします(2>&1)。 こうすることで、エラーや警告もファイルに保存されます。- 画面に表示する範囲は
tail -n N(またはhead -n N)を通して指定します。 失敗時の末尾や要約にはtail、重要な情報が先頭にある場合はheadを選びます。 - ファイルを
Read、grep、tail、headで再度開けるように、 最後の行にログのフルパスを出力します。
使用しない場合
- 短く、出力範囲が限られている場合。
そもそも
| tail -n Nを付ける必要はありません。 パイプを完全に省きます (git status、git rev-parse、command -v foo、 1行のjqクエリなど)。 - 出力が非常に長くなると予想される場合 —
たとえば
find /、巨大なツリーに対するgrep -r、 数十 MB を出力する詳細なパッケージのインストールなどです。 出力全体を一時ファイルに保存すると、実質的な利点がないままディスクを消費します。 元の書き方どおりにコマンドを記述し (| tail -n Nとして損失を受け入れる)、 または先に出力元を絞り込みます (--quiet、--summary、-q、ツールごとのフィルターなど)。 - 対話型コマンド(
vim、less、REPL) — パイプによって UI が壊れます。 - 人がリアルタイムで追っている出力 —
たとえば、ユーザーが読んでいるサーバーログに対する
tail -fなどです。
例
悪い例 — tail への直接のパイプでは、それより前の出力が破棄されます。
npm test 2>&1 | tail -n 100
良い例 — tee を挿入して一時ファイルに保存します。
log=$(mktemp -d)/out.log
npm test 2>&1 | tee "$log" | tail -n 100
echo "full log: $log"
重要な情報が先頭にある場合の head を使った同様の書き方:
log=$(mktemp -d)/out.log
make build 2>&1 | tee "$log" | head -n 50
echo "full log: $log"
コマンドの実行後、出力されたパスをそのまま読み取れます —
たとえば、同じ範囲を広げる(より大きな N を指定して tail/head を使う)、
キーワードで検索する(grep)、
指定した行範囲を読む(Read)といった操作ができます。
tail -n 500 "$log"
head -n 200 "$log"
grep -nE 'error|fail|warning' "$log"
適用範囲
エージェントが実行するコマンドに適用されます —
主に Bash ツールの呼び出しと、
エージェント自身が実行する scripts/ 内のシェルスニペットが対象です。
人間の読者向けに示すスニペット
(インストール手順、コピー&ペースト用の例)には、
人間が出力の保存も求めていない限り、このパターンを適用しません。