Chapter 8: 高機能なDebugシステム
Timelineライブラリは高機能なDebugシステムを提供しており、AIコーディングにも極めて有効に機能します。
1. 有効化と制御:柔軟なデバッグモード管理
Section titled “1. 有効化と制御:柔軟なデバッグモード管理”デバッグモードは、多様な環境で柔軟に有効化できます。
- 環境に応じた自動検知:
- Node.js: 環境変数
process.env.NODE_ENV === 'development'
で有効化。 - ブラウザ: URLパラメータ (
?debug=true
)、localStorage
のフラグ (timeline-debug: 'true'
)、またはlocalhost
や特定のIPアドレスでのアクセスといった、開発環境と推定される場合に自動で有効になります。
- Node.js: 環境変数
- APIによる手動制御:
DebugControl
オブジェクトを使い、開発者コンソールからenable()
/disable()
を呼び出して永続的な設定の変更が可能です(リロードが必要)。enableTemporary()
を使えば、リロード不要でそのセッション中だけ一時的に有効化することもできます。
2. 情報収集:全ての依存関係の完全な記録
Section titled “2. 情報収集:全ての依存関係の完全な記録”デバッグモードが有効になると、DependencyCore
は内部的な動作を詳細に記録します。
- イリュージョン(Illusion):
bind
やusing
などで生成される依存関係のグループがDebugInfo
として記録されます。これには、自身のID、所属するdependencyIds
の配列、生成時刻、そしてツリー構造を構築するためのparentIllusion
IDが含まれます。 - 依存関係(Dependency): 個々の依存関係は
DependencyDebugInfo
として記録されます。これには、自身のID、sourceId
(どのタイムラインから)、targetId
(どのタイムラインへ)、所属するillusionId
、クリーンアップ関数の有無(hasCleanup
)、生成時刻といった詳細なメタデータが含まれます。
3. ランタイム保護:循環参照の実行時ガード
Section titled “3. ランタイム保護:循環参照の実行時ガード”デバッグモード有効時、define
関数はcurrentlyUpdating
というSet
を用いて、データ更新が無限ループに陥っていないかを監視します。もし同一の更新処理中に同じタイムラインが再度更新されようとした場合、循環参照と判断し、コンソールに警告を出力して処理を中断します。
4. 開発者向けAPI:情報の可視化と操作
Section titled “4. 開発者向けAPI:情報の可視化と操作”DebugUtils
オブジェクトを通じて、収集された情報にアクセスし、可視化することができます。
getInfo()
: 記録された全てのイリュージョンと依存関係の生データ配列、およびそれぞれの総数(totalIllusions
,totalDependencies
)をオブジェクトとして取得できます。printTree()
: これがデバッグシステムの最も強力な機能です。- ツリー構造の表示: 収集した
parentIllusion
の情報を元に、イリュージョンの親子関係を再構築します。そしてconsole.group
を使い、コンソール上で階層的にインデントされた依存関係ツリーを表示します。 - 詳細な情報: ツリー内の各イリュージョンには、そのID、親ID、生成時刻、含まれる依存関係の数が表示されます。さらにその下には、所属する各依存関係について、そのID、ソースとターゲットのタイムラインID、クリーンアップ関数の有無などが詳しく表示されます。
- ツリー構造の表示: 収集した
以上の機能群により、開発者はシステムの内部状態を深く理解し、複雑な問題の診断を効率的に行うことが可能になっています。