メタプログラミング【metaprogramming】

メタプログラミングとは?

プログラムが他のプログラムを生成・操作したり、実行中に自身の構造を読み書きしたりする手法の総称。通常のプログラムデータを処理対象とするのに対し、メタプログラミングはプログラムコードそのものを操作の対象とする。
メタプログラミングのイメージ画像

この手法の具体的な形態の一つが「コードジェネレータ」(code generator)で、データベースの定義や設定ファイルなどを元にソースコードを自動生成する。人手で同じような記述を繰り返すと量が膨大になりミスも起きやすいが、生成を自動化することで正確性を保ちながら開発の手間を減らせる。

マクロ」(macro)もソースコードを操作する仕組みで、短い記述をコンパイル前に別のコードへ展開する。C言語などではコンパイラの前に事前処理を行うプリプロセッサの機能として実装されており、LispRustなどでは言語仕様として組み込まれている。

実行時の手法としては「リフレクション」(reflection)がある。プログラムが動作中に自身のクラスメソッドの一覧を調べたり、名前を文字列で指定して処理を呼び出したりできる機能である。RubyPythonJavaなどが標準でこの機能を持っており、テストフレームワーク依存性注入ライブラリなど、多くの開発者が日常的に使うツールの内部で活用されている。

メタプログラミングを活用すると、繰り返しの多いコードを削減でき、修正箇所を一か所にまとめやすくなる。フレームワークの内部でも広く使われており、利用者が少ない記述量で高度な機能を扱うことができる。一方、実際にどのコードが実行されるかがソースコードの見た目から追いにくくなるため、デバッグの難易度が上がる。リフレクションの多用は実行速度の低下を招く場合もあり、可読性保守性・性能のバランスを考慮しながら適用することが求められる技術である。

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。