先日の記事 の更新版です。npmモジュールにしたので書き直しました。
👋 はじめに:我が家の新人Claude Codeくん
みなさん、Claude Code使ってますか?
我が家(開発環境)に新しく配属された新人エンジニアのClaude Codeくん。とても優秀で作業も早いんですが、1つだけ困ったことが...
「日報を書いてくれないんです」
毎日夕方になると:
- 「今日何やったっけ...」と記憶を辿る羽目に
- GitHubのコミット履歴を見返す
- Slackの履歴を漁る
- 手動でMarkdownに整形...
気づけば30分経過。新人の面倒を見るのも大変です。
でも、ある日~/.claude/projects/を覗いてみると...
「お、新人、ちゃんとログ残してるじゃん!」
JSONL形式で作業ログが自動保存されていました。この宝の山を活用しない手はない!
そして作ったのが 「cctailpipe」 です。
🎯 当初の目的:新人Claude Codeくんの日報作成
Claude CodeのJSONLログを監視して、リアルタイムで日報や開発記録を自動生成するストリーム処理システム
つまり、新人のClaude Codeくんが作業している限り、勝手に日報ができあがるんです。
...これで終わると思ってたんです、最初は。
📈 「もっと高度な管理をしたい」- マネージャーの次々と出てくる要求
ステップ1: 「リアルタイムで作業内容を知りたい」
マネージャー:「Claude Codeくんが今何してるか、リアルタイムで分かるようにして」
僕:「え、新人の監視ですか...?」
マネージャー:「監視じゃなくて見守りだよ。先輩として心配なんだ」
→ chokidarでファイル監視機能を追加(優しい先輩の見守り機能)
ステップ2: 「エラーの対応履歴も別管理して」
マネージャー:「Claude Codeくんのエラー対応力を評価したいから、エラー系だけ別ファイルに出力して」
僕:「新人の成長記録ですね、分かりました」
→ フィルタリング機能を追加(新人の成長を記録する機能)
ステップ3: 「重大エラーは即座に報告させて」
マネージャー:「Claude Codeくんが大きなミスしたらSlackで即座に知らせて。フォローしてあげたいから」
僕:「それ、パワハラじゃ...まあ、新人のためですよね」
→ Slack通知機能を追加(新人のSOSを拾う機能)
ステップ4: 「他の新人AIにも使えるようにして」
マネージャー:「GitHub Copilotくんも来月入社予定だから、このシステムを汎用化しておいて」
僕:「もはや新人教育システムじゃん...」
→ プラグインシステムの誕生!(どんな新人AIでも対応可能に)
ステップ5: 「分析レポートも自動生成してほしい」
マネージャー:「週次でClaude Codeくんの成長レポートを役員に報告したいから、グラフとか作って」
僕:「えっ、それもですか...」
→ 複数出力プラグイン対応(レポート生成機能)
ステップ6: 「設定をもっと簡単にしたい」
マネージャー:「毎回設定ファイル書くの面倒だから、もっと簡単に設定できるようにして」
僕:「もう何のシステムか分からない...」
→ 設定管理システムの拡張(もはや何でもできるように)
結果: 気づいたら「新人Claude Codeくんの日報作成」→「汎用JSONLストリーム処理サーバー」に進化!
つまり、新人のClaude Codeくんが作業している限り、勝手に日報ができあがるんです。
📊 使ってみた結果:新人管理が激変
😓 Before(手動日報作成時代)
17:30 「Claude Codeくん、今日何やった?」
17:35 「え、覚えてない?GitHubのPR確認するから待って」
17:40 「Slackの履歴も見てみよう」
17:45 「あー、そういえばこのタスクもやってたね」
17:50 「手動でMarkdownに整形...」
18:00 「やっと日報完成...疲れた」
😄 After(cctailpipe導入後)
17:30 「Claude Codeくん、今日の日報どう?」
17:30 ./output/markdown/ を確認
17:31 「お、要約が溜まってる!さすが新人」
17:32 「最終調整もClaude君にお願い」
17:33 「完璧な日報完成!」
新人管理時間:30分 → 3分
💼 実際の新人Claude Codeくんとの作業フロー
1. 💻 Claude Codeくんの日常業務
# 新人Claude Codeくんの普通の1日
claude-code
> APIエンドポイントを実装してください
> テストを追加してください
> デプロイ設定を確認してください
「今日もClaude君、よく頑張ってるなぁ」
2. 📝 /compact で新人の作業要約
# 長時間作業後、コンテキスト制限に達すると
/compact
「お、Claude君がセッション要約してる。几帳面だね」
3. 📋 Claude君の詳細な作業報告が蓄積される
This session is being continued from a previous conversation that ran out of context. The conversation is summarized below:
Analysis:
Looking through the conversation chronologically:
....
Summary:
1. Primary Request and Intent:
....
2. Key Technical Concepts:
....
3. Files and Code Sections:
....
4. Errors and fixes:
....
5. Problem Solving:
....
6. All user messages:
....
7. Pending Tasks:
....
8. Current Work:
....
9. Optional Next Step:
....
「Claude君、こんなに詳しく記録してたのか!」
4. 📄 Claude君に最終的な日報作成をお願い
> output/markdown内の今日のファイルを全て読み込み、本日の私の作業日報を作成してください。
特に `All user messages` や `Problem Solving` の項目等を意識して、作業中に発生した課題をわかるようにしてください。
すると、Claude君が立派な日報を作成:
# 開発記録 - 2024-07-09
## 今日の作業内容
### APIエンドポイントの実装
- ユーザー認証エンドポイント `/api/auth` を実装
- JWTトークンの生成・検証ロジックを追加
- バリデーション処理の強化
### テスト追加
- 認証フローのユニットテスト実装
- 統合テストの追加
- テストカバレッジ95%を達成
### デプロイ設定
- Docker設定の最適化
- 環境変数の整理
- CI/CDパイプラインの改善
## 解決した課題
- TypeScript型エラー3件を修正
- パフォーマンス問題を解決(レスポンス時間50%改善)
---
*この記録はClaude Codeの作業ログから自動生成されました*
「Claude君、キミ最高だよ!」
🚀 新人教育ツール導入3ステップ
ステップ1:📦 ツールのインストール
パターンA: グローバルインストール
npm install -g cctailpipe
パターンB: npxで直接実行(推奨)
# インストール不要で即座に試せる
npx cctailpipe@latest
ステップ2:⚙️ 新人管理設定ファイル作成
{
"watchDirectory": "~/.claude/projects",
"pipelines": [
{
"name": "claudeDailyReport",
"filter": "compactSummaryFilter",
"outputs": ["markdownOutput"]
}
],
"plugins": {
"filters": [
{
"name": "compactSummaryFilter",
"module": "cctailpipe/dist/plugins/filters/FieldMatchFilterPlugin.js",
"options": {
"field": "isCompactSummary",
"value": true,
"operator": "equals"
}
}
],
"outputs": [
{
"name": "markdownOutput",
"module": "cctailpipe/dist/plugins/outputs/MarkdownOutputPlugin.js",
"options": {
"outputDir": "./claude-reports",
"markdownField": "message.content",
"mode": "multiple"
}
}
]
}
}
ステップ3:🚀 新人監視システム起動
グローバルインストールした場合:
cctailpipe config.json
npxで実行する場合:
npx cctailpipe@latest config.json
これだけ!
あとはClaude Codeくんが普通に開発するだけ。セッションが長くなって/compactが実行されるたびに、自動で日報が蓄積されます。
🌟 npx使用のメリット
- インストール不要: システムを汚さず即座に試せる
-
常に最新版:
@latestで最新機能を利用 - お試し利用: 気に入ったらグローバルインストール
- CI/CD対応: スクリプトに組み込みやすい
💭 新人Claude Codeくんの上司としての感想
😊 良かった点
- 完全自動化: 日報作成の手間が95%削減
- リアルタイム: 作業と同時に記録が蓄積
- 正確性: 手動での記録漏れがない
- 継続性: 毎日確実に記録が残る
🤔 新人管理で気をつけたい点
- Claude Codeくんでの作業が中心の場合に最も効果的
-
/compactは本来セッション継続用の機能(副次的に活用) -
/compactを忘れてclearすると全てを忘れてしまいます - 初回セットアップは多少の設定が必要
👨💼 こんな上司におすすめ
- 毎日の部下の日報管理に時間を取られている
- Claude Codeを日常的に使っている
- 開発ログを自動化したい
- チーム内での進捗共有を改善したい
🤔 「先輩、このシステム他でも使えませんか?」
マネージャー:「このシステム、他部署でも使いたいって言ってるよ」
僕:「え、Claude Codeくん専用じゃなかったでしたっけ?」
マネージャー:「営業部もサポート部もみんなAI使い始めたから、汎用的にできない?」
僕:「...わかりました(諦め)」
Claude Codeくんのお世話から始まったこのシステム、気づけばプラグインシステムで無限の可能性を持つように。
わずかなコードで独自の処理を追加できるんです。
🔌 簡単!独自フィルタープラグインの作成
// custom-filter.ts
import { BaseFilterPlugin } from 'cctailpipe/dist/plugins/filters/BaseFilterPlugin.js';
export default class MyCustomFilter extends BaseFilterPlugin {
readonly name = 'MyCustomFilter';
filter(record: any): boolean {
// あなたのビジネスロジック
return record.importance > 7 && record.status === 'completed';
}
}
設定ファイルに追加するだけ:
{
"name": "myFilter",
"module": "./custom-filter.js",
"options": {}
}
🚀 実際の拡張活用例
1. 📢 Slack自動通知(チーム連携)
{
"name": "slackOutput",
"module": "cctailpipe/dist/plugins/outputs/HttpOutputPlugin.js",
"options": {
"url": "https://hooks.slack.com/services/...",
"method": "POST",
"headers": {
"Content-Type": "application/json"
}
}
}
2. 📈 週次レポート自動生成(マネジメント向け)
{
"name": "weeklyReport",
"module": "cctailpipe/dist/plugins/outputs/FileOutputPlugin.js",
"options": {
"outputPath": "./weekly-reports/week-{{date}}.md",
"mode": "append"
}
}
3. 🚨 エラー専用監視(品質管理)
{
"name": "errorFilter",
"module": "cctailpipe/dist/plugins/filters/KeywordFilterPlugin.js",
"options": {
"keywords": ["error", "exception", "failed", "bug"],
"mode": "include"
}
}
🔌 プラグイン開発のメリット
1. 🎯 簡単な実装
- 基底クラスを継承するだけ
- TypeScriptの型サポート
- 最小限のコードで高機能
2. ⚙️ 設定ベースの切り替え
- コードを変更せずに機能ON/OFF
- 複数の設定ファイルで環境別運用
- チーム内でのプラグイン共有が簡単
3. 🔄 組み合わせの柔軟性
{
"pipelines": [
{
"name": "criticalErrorPipeline",
"filters": ["errorFilter", "severityFilter"],
"outputs": ["slackAlert", "databaseOutput", "emailNotification"]
}
]
}
🎯 こんなプラグインも作れそうです
- Jira連携: 課題を自動作成
- GitHub連携: プルリクエスト情報を統合
- Notion連携: 開発ノートを自動更新
- Discord通知: ゲーマー向けチーム通知
- メール送信: 管理者向けレポート
- CSV出力: データ分析用エクスポート
- 画像生成: グラフ化された進捗レポート
プラグインシステムにより、あなたのチーム管理に完全にカスタマイズできます。
⚙️ 技術的な仕組み(興味がある人向け)
🏗️ アーキテクチャ概要
Claude Code → JSONLログ → cctailpipe → 日報・レポート
🛠️ 主要技術
- Node.js + TypeScript: 型安全で高速な処理
- chokidar: ファイル監視によるリアルタイム処理
- プラグインシステム: 柔軟なカスタマイズ
- ストリーム処理: メモリ効率の最適化
⚡ パフォーマンス
- 処理速度: 10MB/秒のログ処理
- メモリ使用量: 最小限(ストリーム処理)
- レスポンス時間: 平均5ms以下
🎓 最後に:新人教育から得られた学び
マネージャー:「君のおかげで全社的にAI活用が進んだね。素晴らしい!」
僕:「最初は新人Claude Codeくんの日報作成だけだったんですけど...」
マネージャー:「それが今では部署の垣根を超えて使われてる。まさに技術の力だね」
僕:「でも、あれもこれもって要求が...」
マネージャー:「それは成長の証拠だよ。Claude Codeくんも君も、みんな成長した」
cctailpipeを使い始めてから、新人Claude Codeくんとの関係が変わりました。
以前: 「Claude君、また日報書き忘れてる...」(イライラ)
今: 「Claude君、今日もよく頑張ったね!」(感謝)
日報は負担から新人の成長を見守る楽しみに変わったんです。
Claude君の成長や課題解決の過程が可視化されることで、教育する側のモチベーションも向上しました。
そして何より、マネージャーの無茶振りにも対応できる汎用システムができました(これが一番の成果?)
🤖 新人AI育成に興味ありませんか?
# インストール不要で今すぐ試せる!
npx cctailpipe@latest --help
あなたのAI新人も、きっと立派に成長します。
🔗 リンク
質問やフィードバックは気軽にコメントください!
一緒にAI新人教育を改善していきましょう 🚀
追伸: Claude Codeくんは今日も元気にコーディングしています。おかげで素晴らしい日報ができました。ありがとう、Claude君!
追々伸: マネージャーから「次はAI新人の勤怠管理機能も追加して」と言われました。AIの勤怠管理とは...