コピペ道:AI駆動開発への道
ここでの開発とは
ここでの開発とはコンピューターなどの電算機器を利用してなにか仕事を行わせる仕組みを作ることをいいます。システムとかアプリケーションなどとも呼ばれます。
開発はどのようなものが欲しいのか「要望」から始まります。こんなものがあったほうがいいなという頭の中のイメージです。そこから「何を作るのか」という言語化を行います。これを「要件」といいます。更に「要件」から「いつ、どこで、何を、どのように、だれが」といった5W1Hなどに則り、詳細化を行っていきます。これを「設計」と呼んでいます。この「設計」に基づきシステムやアプリケーションを作っていきます。これを「製造」と呼びます。
そしてシステムやアプリケーションが完成した後にシステムやアプリケーションが希望通り動かくか確認します。この作業を「テストまたは検証」と言います。
これら一連の流れを「開発」といい一般的なシステム開発やアプリケーション開発はこれらの要素を含みます。
大規模かつ一本道でこれらの方式で開発する手法を「ウォーターフォールモデル(V字モデル)開発」といいます。これらの内容を細かく分解して複数回繰り返すことを「スパイラルモデル開発」と呼びます。また先の「要望」の変更(一般的には顧客の要望)に柔軟に対応するようなモデルを「アジャイル(俊敏な)開発」と呼びます。
すべての開発において「要望」「要件」「設計」「製造」「テスト・検証」は何らかの形で含まれています。
アジャイル開発を行っている人の中には、「テストしなくていいんだ」とか「ドキュメントを書かなくていいんだ」とか「要件」は変えていいんだとか「要件を開発者が選別していいんだ」といったことを話す(実行)人が散見されます。これらはアジャイル開発でもなんでもなくて、「いいからげん開発」とか「なんちゃってアジャイル開発」とか「カウボーイコーディング」といいます。
開発とは初期のシステムやアプリケーションのイメージからシステムが動くところまで変換させていく伝言ゲームであると言えます。伝言ゲームをやったことがある人はわかると思いますが、初期の言葉から後ろに行くに従って別のものにかわってしまうことがよくあります。システムやアプリケーション開発の難しさはこのようなところにあるのです。
プログラムとは?
システムやアプリケーションの製造にはプログラムを作成する必要があります。プログラムは一般的な用語でなにかコンサートや夏祭りなどのイベントのやることが書かれているものをプログラムと言ったりします。開発におけるプログラムはコンピューターなどの電算機器が行うべきやることが書かれたものを示します。
プログラムはコンピューターなどの電算機器が理解できればどのようなものでもよく、過去にはパンチカードや紙テープが使われていたこともあります。
現在ではシステム開発やアプリケーション開発におけるプログラムはプログラム言語と呼ばれる人造言語を利用して記述することが主となっています。
プログラム言語とは?
プログラム言語とはプログラムを記述するために人が考えた人造言語のことを示します。誰でも自由にプログラム言語を作ることはできますが、多くの人が利用する言語は限られています。よく利用される言語は次のとおりです。
C言語
Java
C#
JavaScript
Pyhton
Ruby
PHP
VBA
プログラミングとは?
プログラミングとはプログラム言語を利用してプログラムを作成する状況を示します。システム開発やアプリケーション開発における製造部分がプログラミングであると言えます。
プログラマーとは?
プログラム言語を利用してプログラムを作成する人をプログラマーと呼んでいます。プログラマーになるにはプログラミング言語の理解以外に、仕様(設計)の理解や実行環境の理解、エラーが起きたときの対応方法やテストの方法など幅広い知識が必要になります。
AI駆動開発とは?
AI駆動開発とは生成AIなどのAIを開発の中心に据えた開発手法を示します。システム開発やアプリケーション開発は究極的には「要望」を何らかの方法で伝えたら、後は自動で完成してほしいものですが、今はまだそこまで進んでいません。
今は生成AIなどのAIに言葉で「要望」を入力(プロンプト)することで、開発で利用することができる情報(プログラムのなど)の一部が生成されるだけです。
現在のAI駆動開発ではこれらを結びつけてシステムやアプリケーションとして動作させ、テストを行うところまで持ってくるスキルが必要になります。
コピペ道とは?
現在はまだ生成AIだけで開発を行うのは難しい状態です。生成AIが出力したプログラムをコピー&ペースとして動かすスキルが必要になります。プログラム(コード)を入力せずに開発を行う方式をコピペ道と呼んでいます。
言語による得意不得意
プログラム言語により適用分野の得意不得意があります。これはその言語を開発された年代や時代背景の影響を受けています。
C言語
C言語は1972年にデニス・リッチーらによって開発された言語です。当時のUnixと呼ばれるOS(オペレーティングシステム)を開発するために作られた言語で、速度が早く今でもOSなどに利用されています。
Java
Javaは1995年に発表された言語でネットワークとの親和性の高い言語です。また現実世界のようすをプログラミングで表現するオブジェクト指向言語でもあり、保守性やメンテナンス性の高い言語として知られています。
C#
C#はマイクロソフトが開発した言語でWindowsと高い親和性を持った言語です。
JavaScript
JavaScriptは1995年に発表された言語でブラウザ上で動作することが特徴的な言語です。そのため開発を行いやすいという特徴(とっつきやすい、入口が低い)があります。
Python
Pythonは機械学習などAIやデータサイエンスのために発達してきた言語です。比較的学習が容易なことがから多くの人が利用しています。
PHP
PHPはサーバーサイドで動作するプログラム言語です。比較的簡単にサーバーサイドで動作することから多くのサーバーシステムで利用されています。
プログラムの記述からから実行の流れ
プログラミング言語で記述したプログラムは、プログラム以外にソース(源の意味)、コード(規則や法則)、ソースコードなどと呼ばれます。これらプログラムを記述後に実行するにはいくつかのステップが必要になります。プログラムの記述から実行までの流れは次のとおりです。
何らかの方法でプログラムを記述する(開発環境)
記述したプログラムをコンピューターなどの電算機器が解釈可能な形に変換する(コンパイラー)
記述したプログラムを実行する(実行環境)
開発環境やコンパイラー、実行環境の境界は利用するプログラム言語により曖昧です。プログラムをコンパイラーで変換しないと実行でできないものをコンパイル言語といいます。実行時に自動的に変換されたり随時解釈される言語はスクリプト言語といいます。
開発環境の変遷
プログラムを記述しコンパイルを行い実行するまでの環境を開発環境といいます。「記述」「コンパイル」「実行」までの環境が分かれている場合もありますし、一緒になっている場合もあります。
例えば、C言語やJavaなどのコンパイル言語を例に話すと、初期の開発環境は
メモ帳などのエディタでプログラムを記述する
プログラムを保存する
コンパイルを行う
実行ファイルを実行環境にて実行する
という流れで開発を行っていました。2000年代にに入るとパソコンのスペックが向上したために総合開発環境というものが使えるようになりました。総合開発環境を利用すると
総合開発環境のエディタでプログラムを記述する
保存を行うと自動的にコンパイルが実行される
総合開発環境の中で実行する
といった形で開発を行うことができるようになりました。現在でも本格的な開発はこのような形式で行われることが多いようです。ところがプログラミング初学者の場合はこの総合開発環境をインストールし開発環境を整えることが学習のハードルとなっていました。
総合開発環境はバージョンもたくさんありますし、各OS(WindowsやMac)ごとに分かれていて、またインストール方法もOSやOSのバージョンによって異なるからです。更に日本語のフォルダーがあると動かなくなるなどの問題も発生しました。
そこで比較的簡単な処理はブラウザ場でできるようにしようというオンライン開発環境が出てきました。オンライン開発環境を利用した場合は、特別な設定は必要なくオンラインでアクセスするだけで気軽にプログラミングを行うことができるというのが特徴になります。
もともとのコピペ道はサンプルプログラムをオンライン学習環境へコピペし改造をしながらプログラミングを学習していくというスタイルでしたが、近年生成AIが出現した結果、生成AIにてプログラミングを生成し、オンラインプログラミング環境へプログラムをコピペし実行するというスタイルに生まれ変わりました。
どこで動くか?
オンラインプログラミング環境は基本的にブラウザがあれば開発環境を自分のPCに構築しなくてもプログラミングを行うことができます。が、次のような注意点があります。
オンラインで動くということは実行する場所が自分のPCではい、クラウド上のサーバーである
クラウド上のサーバーで動くということはPC上でできる複雑な処理はできない場合が多い
セキュリティの機能などで確認などが煩雑な場合がある
ということですが、基本的なプログラミングの学習には十分の機能が揃いつつありますし、サーバーのスペックが高いのでPC上で実行するよりも効率的な場合があります。
開発における生成AIの利用
AI駆動開発における開発とは、コードの記述は「生成AI」が行う。コードの実行はオンライン開発環境で行う。の流れになります。ChatGPT4などはPythoのコードを生成し、その場で実行することができますが、多くの場合、生成されたコードをオンライン実行環境に移動する(コピー&ペースト)する必要があります。この開発手法のメリットは基本的に生成AIは記述ミスをしないということです。人間がプログラムを記述すると例えば;(セミコロン)を全角にしてしまうということはよく起きます。全角のセミコロンが一つはいっているだけでコンパイルエラーという変換エラーになります。プログラミング初学者がこの全角半角に起因するエラーを簡単に見つけること困難です。生成AIを使うことでこのようなエラーを無くすことができるのです。
AI駆動開発における生成AIの利用
コードの生成
生成AIはコードの生成が得意です。コードを要望し生成されたコードを実行し、実行結果が要望通りか確認し、異なる場合は再度生成を行いを繰り返すような形で開発を行っていきます。
コードの解説
生成AIは生成したコードや他の人が作成したコードを解説することができます。プログラミング言語は人造言語のため文法が厳格に決まっています(曖昧な部分が少ない:作ったとおりにしか動かない)。そのため生成AIがコードの解説を行うことは得意なのです。
エラーの解消
プログラミングを行っているとエラーが起きることがあります。エラーは文法上のミスから始まり実行環境に起因するもの、ファイル名に起因するものなど多義にわたります。通常プログラマーはエラー発生時に出力されるエラーコードやエラーメッセージを参考にエラーの原因を考えて修正を行うのですが、生成AIにエラーのあるコードやエラーメッセージを伝えることでエラーの原因特定や修正を素早くこ行うことができるようになります。
テストコードの生成
プログラムが正しく動作するか確認するプログラムをテストコードと呼びます。生成AIではテストコードを生成することができます。
テストデータの生成
またテストコードで利用するテストデータや氏名や電話番号などのダミーデータを生成することができます。
リファクタリング
作成したプログラムは保守性を高めるために動作を変えずに名前や内部構造を変えることがあります。これをリファクタリングといいます。生成AIを使うことで安全にリファクタリングを行うことができます。
生成AI同士の役割分担と開発
生成AIではいくつかの生成AIを用意し会話を行わせることができます。ChatDevなどを利用すると、いくつかの生成AIに役割を与えて開発チームを作成しシステムやアプリケーションの開発を一気に行わせることができます。これらは開発途上の技術ですが、いずれはこれらの方法が洗練され、要望を伝えるとアプリケーションがそのうちにできている世界が実現するものとおもいます。