自動プログラミング(じどうプログラミング、英: Automatic programming)は、人間のプログラマがコードを書くのではなく、何らかの機構によってプログラムを生成するプログラミングの一種である[1]。時代はすでに変わっており[2]、人工知能の専門家は、現時点で自動プログラミングを使えないプログラマーは、使えるプログラマーに取って代わられる可能性が高いと警告している[3]。
概要
自動プログラミングという用語に関しては、これまでその意味がさまざまに変化してきたため、定義について明確な合意が得られているとは言い難い。例えば、デイビッド・パーナスが公開されている研究成果から「自動プログラミング」の歴史を調査したところ、1940年代では、紙テープのパンチ処理を自動化することを意味していたとされる。その後、FORTRANやALGOLといった高水準言語で書かれたプログラムの変換を指すようになった。実際、初期のコンパイラには Autocode と名づけられたものがあった。パーナスは、「自動プログラミングとは、いつの時代もその当時のプログラマが使える言語より高水準の言語でプログラミングすることを意味する婉曲表現だった」と結論付けた[4]。
例
自動プログラミングはコンピュータプログラムの歴史と共にある。より高いプログラミング効率を求めて、より高水準の自動化が長い間推し進められている。
現在のところ、人の指示なしにプログラムを自動生成する技術は実用化されていない。すなわち現在の自動プログラミングは全自動プログラム生成ではなく、抽象度の高いソースコードを基にしたコード生成・変換および記述の省力化と同義である。
以下は自動プログラミングの例である。
- 紙テープへのコードパンチング自動化(現代でいうタイピングが当時のパンチング。両方ともコードを「打ち込む」)
- コード変換
- ソースコード生成
- スキーマ定義言語で書かれたスキーマからプログラミング言語で書かれたclientコードの生成
- スキーマ定義言語で書かれたスキーマからプログラミング言語で書かれたserverスタブの生成
- スキーマ定義言語で書かれたスキーマからDSLで書かれたバックエンドプロビジョニングコード (Infrastructure as Code) の生成、それによるプロビジョニング
- テンプレートと変数セットからのコード生成(テンプレートエンジン)
生成的プログラミング
生成的プログラミング(英: Generative programming)とは、ジェネリックなクラス、プロトタイプベース、テンプレート、アスペクト、コード生成などの技法を使ってソースコード作成を自動化し、プログラマの生産性を向上させるプログラミングのスタイルである。ソフトウェアコンポーネントなどのコード再利用の技法とも連携して使用される。
ソースコード生成
ソースコード生成(英: Source code generation)とは、テンプレートなどのオントロジー的モデルを使ってソースコードを生成することであり、テンプレートエンジンや統合開発環境(IDE)などのプログラミングツールを使って行われる。これらのツールは、様々なソースコード生成手段を提供する。ソースコード生成器の単純な例としてマクロプロセッサ(例えば、C言語のプリプロセッサ)があり、ソースコード上のパターンを比較的単純な規則に従って置換する。
Microsoft Visual Studio などの IDE はさらに進んだソースコード生成を行う。プログラマは、ソースコードの「スニペット(snippet、断片)」と呼ばれるものを対話的に選択しカスタマイズできる。プログラム「ウィザード」もソースコード生成の典型的な形態であり、プログラマは対話的にグラフィカルユーザインタフェースを設計し、その結果を自動的に反映したソースコードが生成される。Windows Formsではフォームデザイナーを使って視覚的にGUI部品を配置したり、プロパティを設定したりすると、対応するC#やVB.NETによるプログラムコードが自動生成される。
3次元コンピュータグラフィックスの統合ソフトウェアやグラフィックスエンジンの中には、直感的な操作によって各種視覚効果のノードをつなぎ組み合わせることで、リアルタイムまたは非リアルタイムのシェーダープログラムを自動生成する、「ノードエディター」と呼ばれるオーサリングツールを備えているものもある。
実装例
問題点
著作権の問題だけでなく、自動プログラミングにはコードのセキュリティとデバッグの問題があり、プログラミング・エンジニアは自動プログラミングを使う際にセキュリティとデバッグに深い関心を持つこと[5]。
関連項目
脚注
参考文献
- Generative Programming: Methods, Tools, and Applications by Krzysztof Czarnecki and Ulrich W. Eisenecker, Addison Wesley, 2000.
外部リンク