effect-time-tracing-logging について
Effect を使う開発者向けのコーディングスキルです。時間操作、タイムアウト、トレーススパン、構造化ログを扱い、実装前にローカルの Effect ソースとテストを確認する方法も示します。
主な機能
- 01現在時刻の取得とスリープ
- 02操作のタイムアウト設定
- 03トレーススパンで操作をラップ
- 04複数レベルのログ出力
- 05ローカルの Effect ソースとテストを検索
活用シーン
- 01Effect 操作に期限を設ける
- 02重要区間のレイテンシを測定
- 03構造化ログで問題を調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mepuka/ effect-ontology --skill effect-time-tracing-loggingインストール後、Claude Code で/effect-time-tracing-loggingを入力して読み込まれたか確認します。
詳細
時間、トレーシング、ロギング
使用する場面
- タイムアウト、期限、またはスリープが必要な場合
- レイテンシ分析用のスパンや、デバッグ用のログが必要な場合
時間
import { Clock, Duration } from "effect"
const now = yield* Clock.currentTimeMillis
yield* Effect.sleep(Duration.seconds(1))
タイムアウト
const guarded = yield* Effect.timeout(task, Duration.seconds(2))
トレーシング(スパンラッパーパターン)
const op = Effect.withSpan("operation")(Effect.succeed(1))
ロギング
yield* Effect.logInfo("message")
yield* Effect.logDebug("debug")
yield* Effect.logError("error")
実例:Layer を使って最小ログレベルを設定する
import { Effect, Option, Logger, LogLevel, Layer } from "effect"
export const setMinimumLogLevel = (cliLevel: Option.Option<LogLevel.LogLevel>) =>
APP_CONFIG["LOG_LEVEL"].pipe(
Effect.map((envLevel) => Option.zipLeft(cliLevel, envLevel)),
Effect.map(Option.getOrElse(() => LogLevel.Info)),
Effect.map((level) => Logger.minimumLogLevel(level)),
Layer.unwrapEffect
)
ガイダンス
- 単位を明確にするため、
Durationヘルパーを優先してください - 重要なセクションをスパンでラップし、コンテキスト用の属性を付与してください
- 構造化ログを使用し、その場しのぎのコンソール出力は避けてください
注意点
- ミリ秒の数値を混在させること →
Durationを一貫して使用してください - 外部呼び出しにタイムアウトがないこと → 処理がハングするリスクがあります
関連リンク
- タイムアウトと競合状態については「エラーとリトライ」を参照してください
- 時間ベースの処理を協調させる方法については「並行処理」を参照してください
ローカルソースの参照
重要:実装前にローカルの Effect ソースを検索してください
Effect のソースコード全体は docs/effect-source/ にあります。Effect のコードを書く前に、必ず実際の実装を検索してください。
主なソースファイル
- Clock:
docs/effect-source/effect/src/Clock.ts - Duration:
docs/effect-source/effect/src/Duration.ts - Effect(withSpan、log):
docs/effect-source/effect/src/Effect.ts - Logger:
docs/effect-source/effect/src/Logger.ts - LogLevel:
docs/effect-source/effect/src/LogLevel.ts
検索例
# Find Clock operations
grep -F "currentTimeMillis" docs/effect-source/effect/src/Clock.ts
grep -F "sleep" docs/effect-source/effect/src/Clock.ts
# Study Duration helpers
grep -F "seconds" docs/effect-source/effect/src/Duration.ts
grep -F "millis" docs/effect-source/effect/src/Duration.ts
grep -F "minutes" docs/effect-source/effect/src/Duration.ts
# Find span and logging patterns
grep -F "withSpan" docs/effect-source/effect/src/Effect.ts
grep -F "logInfo" docs/effect-source/effect/src/Effect.ts
grep -F "logError" docs/effect-source/effect/src/Effect.ts
# Look at Logger implementation
grep -F "minimumLogLevel" docs/effect-source/effect/src/Logger.ts
ワークフロー
- 必要な時間/ロギング API(例:Clock、Duration、withSpan)を特定します
docs/effect-source/effect/src/で実装を検索します- 型と時間ベースのパターンを確認します
- 使用例についてテストファイルを確認します
- 実際の実装に基づいてコードを書きます
実際のソースコード > ドキュメント > 推測
参考資料
- Agent Skills の概要:https://www.anthropic.com/news/skills
- Skills ガイド:https://docs.claude.com/en/docs/claude-code/skills
コメント
Markdown 対応