生成AIの機能をプログラムに組み込むことで、これまで通常のプログラムでは実現できなかった仕組みを作ることができます。
また、生成AIによりプログラムが自動生成できるようになると、思いついたプログラムを気軽に自由に作って動かすことができるようになります。
私はこれまで、自分の書いたブログ記事を英語に翻訳して英語のブログに投稿したり、プレゼン動画で解説動画を作成してYouTubeに投稿したり、インデックスやカテゴリ分けやタグを付けた自作ブログサイトを生成して公開したりできる仕組みを作ってきました。
このように、元になるコンテンツを原材料として、生成AIの機能を組み込んで様々な派生コンテンツを生産する仕組みを、知的工場と呼ぶことができるでしょう。
また、この知的工場を操作したり、状況を管理したりするためのWebアプリを作成し、パソコンでもスマホでも利用できるようにしました。また、トリガーを受けて自動処理する部分は、バックエンドの先にバッチ処理用に用意した仮想マシンに実行させています。
このようにパソコンとスマホのフロントエンド、Webサーバでのバックエンド、仮想マシン上のバッチ処理、そしてこれらのインフラの整備を、生成AIのサポートを受けて1人で開発しました。
これは単なるフルスタックのエンジニアリングではなく、システムの様々な面を全面的に開発する全方位エンジニアリングと呼ぶことができます。
また、開発したWebアプリの使い勝手が悪い点を改良したり、思いついた機能を追加する際にも、生成AIにプログラミングを任せることができるため、使いながら気軽に改善を加えています。
これは従来のソフトウェアよりもさらに柔軟で流動的であり、私の使用方法にピッタリとフィットするものを作り出すことができます。これを、私はリキッドウェアと呼んでいます。
これらは私自身が実際に開発して、実際に利用しています。単にコンセプトではなく、既にソフトウェア開発の現実です。
また、開発はしていませんが、業務システムの分野であれば、業務プロセス指向という開発方法論が現実のものになると想定しています。
それはシステムを複雑にするプログラムの全体最適化を目指さず、個々の業務プロセスの単位でソフトウェアモジュールを分割する、という考え方です。
ユーザーインターフェースの基本的な枠組みの定義とユーザーの権限管理、業務プロセス間で共有する必要のあるデータモデルのみを業務システムの外枠として共有します。
その他のシステム内部の処理や一時的なデータは、業務プロセスの単位で管理します。
その中には、2つ以上の業務プロセスで共有できるような関数やデータ構造も含まれている可能性はあります。しかし、それを共有モジュールや自作ライブラリにしてしまうと、コードと品質の再利用性が向上する代わりに、ソフトウェア構造が複雑化し、変更時に他の業務プロセスへの影響を常に検討する必要が出てきてしまいます。
生成AIがプログラムを自動生成する状況下では、後者のデメリットが、前者のメリットを上回ります。このため、全体最適ではなく個別最適を重視する業務プロセス指向という考え方が、合理的になるのです。
加えて、例えば「新規の社員の基本情報を入力する」「社員の基本情報を更新する」「社員を名前で検索する」といった単位を個々の業務プロセスとしてイメージしてください。
それぞれのユーザーインターフェース、フロントエンド処理、バックエンド処理、バッチ処理は、従来の開発方法論では、異なるディレクトリの異なるファイルに分割されます。また、それぞれを別々のエンジニアが開発します。
しかし、1人のエンジニアが生成AIにプログラミングをさせながら全方位エンジニアリングをする場合、1つの業務プロセスに必要なこれらのコードは、1つのファイルや1つのフォルダに集約した方が理にかなっています。
加えて、同じ場所で要求分析結果、テスト仕様、テスト結果、レビュー記録も集約することができます。
これにより、1つの業務プロセス単位で、ソフトウェアエンジニアリングの全ての成果物を管理することができます。そして、全体最適化を考える必要がないため、その業務プロセス内部に集中して改善をしたり、新しい業務プロセスを容易に業務システムに追加することができます。
このように、プログラム開発やプログラムで開発できるものが、生成AIによって大きく変化しています。これは将来の話ではなく、既に現在地であり、近い将来はその完成度が高まっていく方向に進むしかありませんし、さらに次の段階は、その先に進むしかありません。
シミュレーションシステム
プログラムで実現されるものは、ここで挙げた業務システムや知的工場に限定されません。
私が言及していない残りの分野は、大きく分類すればシミュレーションシステムです。
単純な物理の方程式を1行の解析的な計算式で解く場合も、複雑な物理現象を反復的なプログラムで計算する場合も、シミュレーションシステムと言えます。
また、物理に限らず化学や生物学、あるいは社会学や経済学などでもシミュレーションシステムを活用できます。また、学問だけでなく工学や医療、制度や経営などの業務においてもシミュレーションは活用されます。
また、ゲームも一種のシミュレーションシステムです。どのようなゲームでも、そのゲームの世界観内での物理、社会、ルールなどを、いわばシミュレーションしていると言えます。
それだけでなく、私たちの人生計画や旅行の計画、お小遣いの使い道などを考える際にも、私たちは一種のシミュレーションを行っています。
これらのシミュレーションは、プログラムを作成して実行したり、紙の上で計算式を作って算出したり、頭の中で考えたり、ホワイトボードに文字と矢印を使って整理したり、エクセルでグラフを描いてみたりと、様々なやり方で行われてきました。
特定の問題のためのシミュレーションプログラムを開発すれば、解析的な方程式よりも複雑なシミュレーションが可能です。しかし、プログラム開発のスキルと手間と時間が必要になります。
また、シミュレーションモデルを明確にする必要があり、そのためのスキルや検討の手間や時間も必要です。
加えて、プログラムで表現できるような形でしかシミュレーションはできず、これまでは計算で表現できるものしかシミュレーションできませんでした。
この状況を、生成AIが大きく変えます。
生成AIは気軽にシミュレーションシステムのプログラムを開発できるだけでなく、生成AIをシミュレーションシステムに組み込むことで、数式で表現できない要素もシミュレーションが可能になります。それは、あいまいな定性的なシミュレーション要素や、人間のような知的エージェントを含むシミュレーションを可能にします。
加えて、そうしたシミュレーションのモデルを、数式だけでなく自然言語で表現して、生成AIに解釈させることもできます。
これにより、私たちが様々な場面で行なってきた様々なシミュレーションを、容易にシミュレーションシステム化することができるようになります。
これにより、より精度が高く、見逃しや思い込みの混入可能性を低減して、効率的で効果的なシミュレーション結果を得ることができるようになります。
また、複雑な問題を検討したり議論したりする際にも、各自の頭の中でのシミュレーションではなく、シミュレーションシステム化して検討したり議論したりすることができるようになります。
それは検討の精度を高め、議論を建設的なものにします。互いの知性や考えの間違いを指摘するのではなく、シミュレーションの前提となるモデルや、そこに含まれる要素の抜け漏れ、不確実性の高い部分をどのように見積もっているか、結果のうちのどの指標を重視しているか、という明確なポイントに焦点を当てた議論ができるようになるためです。
このようにシミュレーションシステムが容易に作れるようになることで、私たちが物事を考える方法が、直感や思い込みや他者の悪意や間違いに焦点を当てる直線思考から、シミュレーション思考へと遷移していきます。
それは、話し合いをしている最中に、スマホでインターネット検索をしてニュースソースやwikipediaや一次情報源を確認するようなものです。お互いの記憶だけを頼りに終わりのない口論をする必要がなくなります。
議論をしている最中に、生成AIが議論の内容からシミュレーションモデルとシミュレーションルールと前提条件を整理していきます。
議論している人たちは、そのモデルやルールに情報や前提を追加したり訂正し、シミュレーション結果を確認すれば済みます。信頼できるニュースソースを見つけた時と同じように、そのシミュレーション結果を共通認識として、議論を深めていくことができます。
そうすれば、議論を聞いている人たちは、誰が正しいかや、誰が信頼できるかを考える時代ではなくなります。また、議論に表れる難解な専門用語や概念を理解しようとして本質を見失うこともなくなります。
不確実性をどう評価するかや、どの価値を重視するか、というごくシンプルなことを考えるだけで済むようになります。