バイブコーディング時にlog機能を実装しないのは、学習データ上再衣装構成の実装例しか学習してないからベストプラクティスをなぞっているわけではないらしいです。
って事で「バイブコーディング時にこれ入れるとLog実装してくれるよ」っていう簡易プロンプト例はこちら
【Python】
実装時、以下のロギングを必ず含めてください:
- structlog で構造化ログ(キーワード引数スタイル)
- 各関数の入口で logger.debug に主要引数を出力
- 外部I/O (DB, HTTP, ファイル) の前後にログ
- try/except 内は logger.exception() で例外情報を残す
- ビジネス的に重要な状態変化は
logger.info
- パスワードやトークンはログに出さない
テストでは pytest の caplog fixture で期待ログが出ているか検証してください。
【TypeScript】
実装時、以下のロギングを必ず含めてください:
- pino で構造化ログ (第一引数オブジェクト、第二引数イベント名)
- 共通 logger を src/lib/logger からimport、必要に応じてchild loggerを作成
- ハンドラ/サービス関数の入口でリクエスト情報を info ログ
- 外部I/O (DB, fetch, ファイル) の前後にログ
- try/catch の catch 節は log.error({ err, ...context }, "xxx_failed") 形式
- ビジネス的に重要な状態変化は info で記録
- 機密情報 (token, password等) は redact 設定で自動マスク
テストは vitest/jest で logger を spy/mock し、期待ログ呼び出しをアサート。
async context は AsyncLocalStorage で requestId を伝播。
any 型でログ payload を渡さない。
【JavaScript(Node.jsバックエンド前提)】
実装時、以下のロギングを必ず含めてください:
- pino で構造化ログ (第一引数オブジェクト、第二引数イベント名)
- 共通 logger を lib/logger からimport、必要に応じてchild logger作成
- ハンドラ/サービス関数の入口でリクエスト情報を info ログ
- 外部I/O (DB, fetch, ファイル) の前後にログ
- try/catch の catch 節は log.error({ err, ...context }, "xxx_failed") 形式
- ビジネス的に重要な状態変化は info で記録
- 機密情報は redact 設定で自動マスク
- イベント名は snake_case の {名詞}_{動詞過去形}、payloadキーは camelCase
- 頻出イベントはヘルパー関数経由で出す
テストは vitest/jest で logger を spy/mock しログ呼び出しをアサート。
async context は AsyncLocalStorage で requestId を伝播。
ファイル先頭に // @ts-check を入れて JSDoc 型チェックを有効化。
【GAS(GoogleAppsScript)】
GASで実装する際、以下のロギングを必ず含めてください:
-
Logger.gs の共通
log.info / log.warn / log.error を使用
- console.log は V8 の構造化形式で (オブジェクト イベント名文字列)
- 旧 Logger.log() は使用禁止
- すべてのトリガー関数 (doGet, doPost, onOpen, 時間駆動関数等) を
try/catch で全体を包み、catch で log.error
- 関数の入口で createLogger() を呼び、executionId を全ログに付与
- 外部API (UrlFetchApp), Sheet/Drive/Gmail 操作の前後にログ
- 関数の出口で 成功/失敗・処理件数・経過秒数を info ログ
- イベント名は snake_case の {名詞}_{動詞過去形}、payload キーは camelCase
- 個人情報は生で出さず、ID か Utilities.computeDigest でハッシュ化
- 重大エラーは MailApp.sendEmail で管理者通知
監査シートに書く場合は関数末尾で flush() で1回だけ書き込み。
試してみてね(^^♪