バイブコーディングを加速させる Vibe Logger入門チュートリアル
「ClaudeCodeフレンドリーなログを作るシステムがあれば、バイブコーディングの効率があがるのでは?」という仮説から、GenAI時代のロガーを作ってみた。お暇な方は、仮説検証にお付き合いください。
AI時代のログ作成術:あなたのAI助手がコードを理解できるログを作ろう
従来のログは人間向けでしたが、今やClaude CodeやGemini CLIなどのAI助手がコードを理解し、デバッグを手伝ってくれる時代です。
VibeLoggerは、コーディングエージェントが活用しやすい「構造化されたログ」を簡単に作成できるPythonライブラリです。
🎯 なぜVibeCoding Loggerが必要なのか?
従来のログ(人間向け)
import logging
logging.info("User profile fetch failed for user 123")→ AIには「何が起きたか」しかわからない
VibeCoding Logger(AI向け)
from vibelogger import create_file_logger
logger = create_file_logger("my_app")
logger.info(
operation="fetchUserProfile",
message="User profile fetch failed",
context={
"user_id": 123,
"database": "users_db",
"query": "SELECT * FROM profiles WHERE id = ?",
"error_code": "NOT_FOUND"
},
human_note="AI-TODO: ユーザー存在確認を追加してください"
)→ AIには「なぜ」「どこで」「どうすべきか」まで伝わる。ロガーのコードはAIが書くため、冗長でも人間の負担が発生しない。
VibeLoggerを使うことで、AIが活用できる情報が大きく増加する。
🚀 はじめての10分
ステップ1: インストール(python)
pip install vibeloggerステップ1: インストール(node.js)
npm install vibeloggerCLAUDE.md に書く
### ロギング ###
* ライブラリ: vibelogger
* 使い方: https://github.com/fladdict/vibe-logger
* vibeloggerはコーディングエージェント用に高度な構造化データを出力するロガーです。
* ログにはvibeloggerを可能な限り利用し、ログからAIが自律的に何が起きてるかを把握できるようにする
* vibeloggerにはステップ、プロセス、コンテキスト情報、TODOなど様々な情報を構造化して記録できます。
* デバッグ時には./logsの出力を参照するよりちゃんと理解する場合
ステップ2: 最初のログ
from vibelogger import create_file_logger
# タイムスタンプ付きファイルに自動保存されるロガーを作成
logger = create_file_logger("tutorial_app")
# 最初のログを記録
logger.info(
operation="hello_world",
message="VibeCoding Loggerを始めました!",
context={"version": "1.0", "language": "Python"}
)
print("ログファイルを確認してください: ./logs/tutorial_app/")これだけで、AIが理解しやすい構造化ログが`./logs/tutorial_app/vibe_YYYYMMDD_HHMMSS.log`に保存されます!
ステップ3: ログファイルを確認
作成されたJSONログを見てみましょう:
{
"timestamp": "2025-01-15T10:30:45.123Z",
"level": "INFO",
"correlation_id": "req_abc123",
"operation": "hello_world",
"message": "VibeCoding Loggerを始めました!",
"context": {
"version": "1.0",
"language": "Python"
},
"environment": {
"python_version": "3.11.0",
"os": "Darwin"
},
"source": "tutorial.py:8 in <module>()"
}💡 実践例:ユーザー管理システム
実際のWebアプリケーションでの使用例を見てみましょう:
from vibelogger import create_file_logger
import uuid
# アプリケーション用のロガーを作成
logger = create_file_logger("user_management")
def register_user(email, password):
"""新規ユーザー登録"""
# 操作開始をログ
logger.info(
operation="user_registration_start",
message=f"新規ユーザー登録を開始",
context={
"email": email,
"method": "register_user",
"input_validation": "pending"
},
human_note="この処理でエラーが出る場合は、バリデーション関数を確認してください"
)
# バリデーション
if not email or "@" not in email:
logger.error(
operation="user_registration_validation",
message="無効なメールアドレス",
context={
"email": email,
"validation_failed": "email_format",
"requirements": "must contain @ symbol"
},
ai_todo="メールバリデーション強化を提案してください"
)
return {"success": False, "error": "Invalid email"}
# データベース保存(模擬)
try:
user_id = str(uuid.uuid4())
# 成功ログ
logger.info(
operation="user_registration_success",
message="ユーザー登録完了",
context={
"user_id": user_id,
"email": email,
"database_table": "users",
"registration_method": "email_password"
},
human_note="新規ユーザー登録が成功しました"
)
return {"success": True, "user_id": user_id}
except Exception as e:
# エラーログ
logger.log_exception(
operation="user_registration_database_error",
exception=e,
context={
"email": email,
"database_operation": "INSERT INTO users",
"retry_count": 0
},
ai_todo="データベース接続エラーの対処法を提案してください"
)
return {"success": False, "error": "Database error"}
# 使用例
result1 = register_user("[email protected]", "password123")
result2 = register_user("invalid-email", "password123") # エラーケース🔧 AIとの連携
Claude Codeでのデバッグ
ログが蓄積されたら、Claude Codeに分析を依頼できます:
./logs フォルダのログを分析して。
相関IDによる追跡
関連する処理を紐づけて追跡:
# リクエスト開始時に相関IDを設定
correlation_id = f"req_{uuid.uuid4()}"
logger = create_logger(correlation_id=correlation_id)
def process_user_request(user_id):
logger.info("request_start", "リクエスト処理開始",
context={"user_id": user_id})
# 複数の処理...
validate_user(user_id)
fetch_user_data(user_id)
update_user_profile(user_id)
logger.info("request_complete", "リクエスト処理完了",
context={"user_id": user_id, "duration_ms": 245})
def validate_user(user_id):
# 同じ相関IDで関連処理をログ
logger.info("user_validation", "ユーザー検証開始",
context={"user_id": user_id, "step": 1})📊 ログの活用パターン
1. エラー分析
# エラー専用フィルタ
error_logs = logger.get_logs_for_ai()
# Claude Codeに: "エラーログだけを分析して問題を特定してください"2. パフォーマンス分析
logger.info(
operation="database_query",
message="ユーザーリスト取得",
context={
"query": "SELECT * FROM users WHERE active = true",
"execution_time_ms": 1250,
"result_count": 1523,
"cache_hit": False
},
human_note="実行時間が長い場合はインデックスを確認"
)3. ユーザー行動分析
logger.info(
operation="user_action",
message="商品検索実行",
context={
"user_id": "user_123",
"search_query": "iPhone",
"result_count": 45,
"page_number": 1,
"user_session": "session_xyz"
},
human_note="人気検索クエリの分析に活用"
)⚙️ 設定とカスタマイズ
環境変数での設定
# .env ファイル
VIBE_LOG_FILE=./custom_logs/app.log
VIBE_MAX_FILE_SIZE_MB=50
VIBE_AUTO_SAVE=truefrom vibelogger import create_env_logger
# 環境変数から設定を読み込み
logger = create_env_logger()カスタム設定
from vibelogger import create_logger, VibeLoggerConfig
config = VibeLoggerConfig(
log_file="./production_logs/app.log",
max_file_size_mb=100, # 100MBでローテーション
max_memory_logs=5000, # メモリに5000件まで保持
keep_logs_in_memory=True, # メモリ保存有効
auto_save=True # 自動ファイル保存
)
logger = create_logger(config=config)メモリ効率化(長時間実行向け)
# 大量ログを扱うバッチ処理用設定
config = VibeLoggerConfig(
keep_logs_in_memory=False, # メモリ保存無効
auto_save=True, # ファイル保存のみ
max_file_size_mb=200 # 大きなファイルサイズ
)
batch_logger = create_logger(config=config)🎯 実践Tips
1. 適切な`operation`命名
# Good: 動詞_名詞_詳細
logger.info("fetch_user_profile", ...)
logger.info("validate_email_format", ...)
logger.info("save_user_preferences", ...)
# Bad: 曖昧な命名
logger.info("process", ...)
logger.info("check", ...)2. contextの構造化
# Good: 構造化されたcontext
context = {
"user": {"id": 123, "email": "[email protected]"},
"database": {"table": "users", "query_time_ms": 45},
"request": {"ip": "192.168.1.1", "user_agent": "Chrome/95"}
}
# Bad: フラットすぎる
context = {
"user_id": 123,
"email": "[email protected]",
"db_table": "users",
"query_time": 45,
"ip": "192.168.1.1"
}3. human_noteとai_todoの使い分け
# human_note: 人間への説明
human_note="この処理は外部APIを呼ぶため、ネットワークエラーが発生する可能性があります"
# ai_todo: AIへの依頼
ai_todo="このエラーパターンに対する自動リトライ機能の実装を提案してください"🚨 トラブルシューティング
よくある問題と解決法
Q: ログファイルが作成されない
# 権限エラーの可能性 - デバッグ用設定
logger = create_logger(
log_file=None, # ファイル保存無効
keep_logs_in_memory=True # メモリのみ
)
# メモリ内容を確認
print(logger.get_logs_for_ai())Q: ログが多すぎてファイルが巨大になる
# ローテーション設定
config = VibeLoggerConfig(
max_file_size_mb=10, # 10MBで自動ローテーション
max_memory_logs=100 # メモリは100件まで
)Q: 循環参照エラー
# 自動的に[Circular Reference]に変換されるため、通常は問題なし
# もし発生した場合は、contextを単純化
simplified_context = {
"user_id": user.id, # オブジェクト全体ではなくIDのみ
"action": "update"
}🎓 まとめ
VibeCoding Loggerを使うことで:
AIが理解しやすい構造化ログを簡単に作成
Claude CodeやGitHub Copilotとの連携でデバッグ効率化
相関IDで関連処理を追跡
人間とAI両方が読みやすい形式
Happy Vibe Coding! 🚀
自分で使って、ゴリゴリ改造してくと思うので、お気軽にフィードバックくださいませ。
📚 関連リンク
いいなと思ったら応援しよう!
いただいたサポートは、コロナでオフィスいけてないので、コロナあけにnoteチームにピザおごったり、サービス設計の参考書籍代にします。