コンピュータ科学において、自動プログラミング[ 1 ]は、何らかのメカニズムがコンピュータプログラムを生成することで、人間のプログラマがより高い抽象レベルでコードを記述できるようにするコンピュータプログラミングの一種である。
自動プログラミングの正確な定義についてはほとんど合意が得られていない。これは主に、その意味が時代とともに変化してきたためである。デイビッド・パルナスは、発表された研究における「自動プログラミング」の歴史をたどり、1940年代には紙テープに穴を開ける手作業の自動化を指していたと指摘した。その後、 FortranやALGOLのような高水準プログラミング言語の翻訳を指すようになった。コンパイラとして識別できる最も初期のプログラムの1つはAutocodeという名前である。パルナスは、「自動プログラミングは常に、当時プログラマが利用できたよりも高水準の言語でプログラミングすることの婉曲表現であった」と結論付けた。 [ 2 ]
プログラム合成は、数学的な要件に基づいて手順をゼロから作成する、自動プログラミングの一種である。
UNIVACの初期プログラマーであるミルドレッド・コスは次のように説明しています。「機械語を書くには、プロセスを個別の命令に分解し、すべてのコマンドに特定のメモリ位置を割り当て、I/Oバッファを管理するなど、いくつかの面倒な手順が必要でした。これらの手順に従って数学ルーチン、サブルーチンライブラリ、ソートプログラムを実装した後、私たちの課題は、より大きなプログラミングプロセスを検討することでした。テスト済みのコードをどのように再利用し、マシンがプログラミングを支援するかを理解する必要があったのです。プログラミングを行うにつれて、プロセスを調べ、これらの手順を抽象化してより高レベルの言語に組み込む方法を考えようとしました。これが、他のプログラムを操作または生成するように設計されたプログラム、つまり自動プログラミングであるインタプリタ、アセンブラ、コンパイラ、ジェネレータの開発につながりました。」[ 3 ]
生成プログラミングと関連用語のメタプログラミング[ 4 ]は、自動化によって衣料品、自動車、化学薬品、電子機器などの従来商品の生産が改善されたのと同様に、 「ソフトウェアコンポーネントを自動化された方法で製造する」 [ 5 ]プログラムを作成できる概念である[ 6 ] [ 7 ] 。
目標はプログラマーの生産性を向上させることです。[ 8 ]これは、コンポーネントベースのソフトウェアエンジニアリングなどのコード再利用のトピックと関連していることが多いです。
ソースコード生成とは、問題の説明[ 9 ]やテンプレートなどのオントロジーモデルに基づいてソースコードを生成するプロセスであり、テンプレートプロセッサや統合開発環境(IDE)などのプログラミングツールを使用して実行されます。これらのツールを使用すると、さまざまな方法でソースコードを生成できます
現代のプログラミング言語は、Json4Swift [ 10 ] ( Swift ) や Json2Kotlin [ 11 ] ( Kotlin ) などのツールによって十分にサポートされています。
COBOLコードを生成できるプログラムには、以下のようなものがあります。
これらのアプリケーションジェネレータは、COBOLの挿入とオーバーライドをサポートしていました。
C プリプロセッサなどのマクロプロセッサは、比較的単純なルールに従ってソースコード内のパターンを置き換えるため、ソースコードジェネレータの単純な形式です。ソースからソースへのコード生成ツールも存在します。[ 13 ] [ 14 ]
ChatGPTのような大規模な言語モデルは、自然言語で与えられたプログラムの説明からプログラムのソースコードを生成することができる。[ 15 ]
多くのリレーショナルデータベース管理システム(RDBMS)には、データベースの内容をSQLデータ定義クエリとしてエクスポートする機能が備わっています。このクエリを実行することで、テーブルとそのデータを再インポートしたり、別のRDBMSに移行したりすることができます。
一部の言語では、アノテーションを使用してソースコードを生成し、それを挿入します。たとえば、JavaやKotlinでは、アノテーションを使用してこれが行われ、たとえば、コンパイル時にアノテーションプロセッサで実行される Project Lombok ライブラリなどがあります。C ++では、コンパイル時のリフレクティブ プログラミング(リフレクション)を使用してトークン シーケンスの挿入を追加する提案があります。[ 16 ]
ローコード開発プラットフォーム(LCDP)とは、プログラマーが従来のコンピュータプログラミングではなく、グラフィカルユーザーインターフェースと設定を通じてアプリケーションソフトウェアを作成するために使用する環境を提供するソフトウェアです。
Vibeコーディングは、人工知能(AI)によって支援されるソフトウェア開発手法であり、ソフトウェア開発者がプロジェクトやタスクを大規模言語モデル(LLM)へのプロンプトで記述し、LLMがソースコードを自動的に生成します。Vibeコーディングでは、出力の徹底的なレビューを行わずにAI生成コードを受け入れ、結果とフォローアッププロンプトに基づいて変更をガイドする場合があります。[ 17 ] [ 18 ]
この用語は、 OpenAIの共同創設者であり、テスラの元 AI リーダーであるコンピュータ科学者のAndrej Karpathyによって 2025 年 2 月に造語されました。Merriam -Webster は、 2025 年 3 月にこの用語を「スラングと流行語」表現として掲載しました。[ 19 ]これは、2025 年のCollins English Dictionary Word of the Yearに選ばれました。[ 20 ] [ 21 ]
バイブコーディングの支持者は、ソフトウェアエンジニアリングに必要な広範なトレーニングやスキルがなくても、アマチュアプログラマーでもソフトウェアを作成できると主張している。[ 22 ] [ 23 ]批判者は、説明責任の欠如、保守性の欠如、結果として生じるソフトウェアにセキュリティ脆弱性を導入するリスクの増加を指摘している。 [ 17 ] [ 23 ]
メタプログラミングのサブドメインである生成プログラミングは、実行の一部として他のプログラムを生成するプログラムを作成する手法を指します。
他のプログラムを合成するプログラムを開発することによって、ソフトウェアコンポーネントを自動的に製造しようとする試みである。
従来のプログラミングではなく、問題の説明からアプリケーションプログラムを生成するソフトウェア。高水準プログラミング言語(例:...)よりも高レベルで使いやすい。
{{cite web}}: CS1 maint: 複数の名前: 著者リスト (リンク)やAnthropicなどの企業の大規模言語モデル(LLM)によって可能になったこの技術は、ソフトウェア作成の参入障壁を下げる可能性があるとして注目を集めている。しかし、Cursor Composer、GitHub Copilot、Replit Agentなどのツールによってプロセスがプログラマー以外の人にもますますアクセスしやすくなっているにもかかわらず、このアプローチが現実世界のアプリケーションに適したコードを確実に生成できるかどうかについては疑問が残る。
カルパシーの「バイブコーディング」は、高度なAIシステムがどのように進化してきたかを認識するものです。X(旧Twitter)での説明の中で、彼はSonnetのCursor ComposerのようなLLMが、従来のコーディングメカニズムの使用をほぼ排除するレベルまで進歩していると付け加えました。自身の経験を説明する中で、カルパシーは、AIツールとほとんど受動的な方法で会話する方法、つまり単に話しかけてAIに残りを処理してもらう方法について説明しました。この方法は、手動でコードを入力することや、プログラム内のすべての細かい情報を追跡することを不要にします。
バイブコーディング(vibecodingとも表記)(Vibecode/Vibecoder)は、AIプログラムに何が欲しいかを伝えるだけで、AIプログラムが製品を作成してくれるという、コードを書いたり、ウェブページを作成したり、アプリを作成したりする手法を表す、最近作られた用語です。バイブコーディングでは、コーダーはコードがどのように、またはなぜ動作するのかを理解する必要はなく、多くの場合、一定数のバグや不具合が存在することを受け入れなければなりません。この単語の動詞形はvibe codeです。