メタプログラミング【metaprogramming】
メタプログラミングとは?

この手法の具体的な形態の一つが「コードジェネレータ」(code generator)で、データベースの定義や設定ファイルなどを元にソースコードを自動生成する。人手で同じような記述を繰り返すと量が膨大になりミスも起きやすいが、生成を自動化することで正確性を保ちながら開発の手間を減らせる。
「マクロ」(macro)もソースコードを操作する仕組みで、短い記述をコンパイル前に別のコードへ展開する。C言語などではコンパイラの前に事前処理を行うプリプロセッサの機能として実装されており、LispやRustなどでは言語仕様として組み込まれている。
実行時の手法としては「リフレクション」(reflection)がある。プログラムが動作中に自身のクラスやメソッドの一覧を調べたり、名前を文字列で指定して処理を呼び出したりできる機能である。RubyやPython、Javaなどが標準でこの機能を持っており、テストフレームワークや依存性注入のライブラリなど、多くの開発者が日常的に使うツールの内部で活用されている。
メタプログラミングを活用すると、繰り返しの多いコードを削減でき、修正箇所を一か所にまとめやすくなる。フレームワークの内部でも広く使われており、利用者が少ない記述量で高度な機能を扱うことができる。一方、実際にどのコードが実行されるかがソースコードの見た目から追いにくくなるため、デバッグの難易度が上がる。リフレクションの多用は実行速度の低下を招く場合もあり、可読性・保守性・性能のバランスを考慮しながら適用することが求められる技術である。