動的なモジュールロードで発生する問題とその対策
さて,
(3)
可読性が低くなる──動的にモジュール名を作らない
モジュールロードをする際に文字列連結や正規表現などで動的にロードするモジュール名を作っていると,
また,
可読性が低くならないようにするため,
例外として,
循環する依存関係が作られる──依存関係をチェックする
循環するモジュールの依存関係があると,
しかし,
そうならないように,
静的にモジュールロードしている場合
静的にモジュールロードしている場合は,
- 循環している依存関係があればサブルーチン再定義の警告が出る
- モジュールロードするコードはファイル上部にまとめて書かれていることが多いので,
どのモジュールに依存しているかが視認しやすい Perl::PrereqScanner
など静的解析を利用したツールによって依存しているモジュールの検出がしやすいため,依存関係のチェックがしやすい
動的にモジュールロードしている場合
しかし,
- 動的に依存関係を解決するため,
循環する依存関係があってもサブルーチン再定義の警告が出ない - あらゆる箇所から自由に別モジュールの処理を呼べるため,
どのモジュールがどのモジュールに依存しているかが視認しにくくなり, 混沌とした依存関係になる - 静的解析を利用したツールによって依存しているモジュールの検出ができないか,
できたとしても独自に静的解析する処理を書かないと依存しているモジュールの検出ができないため, 精度の高い依存関係のチェックがしにくい
循環する依存関係を作らないようにするには
循環する依存関係を作らないようにするには,caller
で呼び出しもとを調べて記録,
しかし,
実行までモジュールロードできるかわからない──すべてのモジュールがロード可能かテストする
依存しているモジュールが文法エラーなどでモジュールロードに失敗する状態になっていても,
最近ではIDE
すべてのモジュールがロード可能であることを保証するには,all_
関数でlib
以下のすべてのモジュールがロード可能かをテストします。