コンテンツにスキップ
この記事はパブリックドメイン(CC0)です。自由にご利用ください。 CC0 1.0 Universal

リキッドウェア時代の全方位エンジニア

生成AIが画像を生成して、指示を与えるだけで写真のようなリアルな画像や、イラストや絵を描くことができることはよく知られています。

一方で、ビジネスの世界では、生成AIによるプログラム生成能力に注目が集まっています。

チャット型のAIは、大規模言語モデルという基盤技術により実現されており、様々な言語で会話をしたり、別の言語に翻訳することが非常に得意です。

プログラムを作成する際に用いられるプログラミング言語も、言語の一種であり、人間のプログラマも、いわば言葉で受け取ったソフトウェアへの要望を、プログラミング言語に翻訳しているようなものです。

このため、大規模言語モデルを用いた会話型の生成AIは、プログラミングも非常に得意なのです。

また、プログラミングは知的作業の中でも、作業結果の正しさが、自動的かつ即座に分かる部分の多い作業です。作ったプログラムを実行して、求められた結果が出力されるかを自動判定できるためです。

実際、人間のプログラマも、プログラム本体を作成した際に、同時に結果をテストするためのテスト用のプログラムも作成して、プログラム本体が意図通りに動くことをチェックしながら開発を進めます。

生成AIも、同じようにテストをしながらプログラミングを進められるため、人間が的確に指示を出せば、後はテストをパスするまで自動的に試行錯誤しながらプログラムを完成させる、といった仕組みが可能です。

もちろん、生成AIのプログラミング能力の限界や、人間の指示の曖昧さのために、何度試行錯誤してもテストをパスできない場合は多々あります。また、テストが甘かったり間違っていて、完成したプログラムにバグや問題が含まれていることも多くあります。

しかし、生成AIの能力が向上し、人間のエンジニアが指示の与え方を洗練させ、かつ生成AIによるインターネット検索でのプログラミング知識強化の仕組みにより、日を追うごとに自動的に適切なプログラムが生成できる範囲が増えています。

加えて、ビジネス界が注目していることで、生成AIの研究開発を行なっているトップ企業も、生成AIのプログラミング能力の向上に力を注いでいます。

このような状況の中で、生成AIに自動プログラミングを任せられる領域と分量の拡大は、加速していくことが予期されています。

これまでプログラム開発をしたことのない人が、インターネットの情報を元に基本的な開発環境を整えて、後は生成AIにプログラミングをさせて、二人三脚でプログラムを完成させた、という事例は多くあります。

私自身もプログラマとして生成AIにプログラミングをさせていますが、コツをつかめば私がプログラムを全く編集することなく、生成AIの指示に従ってファイルにプログラムをコピーしたり、プログラムを切り貼りしていくだけで、ソフトウェアを完成させていくことができます。

もちろん、途中で躓く場面も多々ありますが、それらは主に私の使っているパソコンやプログラミング開発ツールの設定が一般的な設定と少し違っていることが原因だったり、無料で利用できるソフトウェアの部品が生成AIが学習した時点よりも新しくなっていて知識にズレが生じていたり、あるいは少し私が要望した内容が特殊であったりするような場面がほとんどです。

そのあたりの細かな差異や特殊事情がなく、ごく一般的なソフトウェア機能を作るように指示をすれば、多くの場面で適切なプログラムが生成されます。

リキッドウェアの時代へ

私はソフトウェアの開発者として、開発したソフトをリリースすることができます。そして、私たちエンジニアがリリースしたソフトウェアが、様々なユーザに利用されます。

このソフトウェア開発が、生成AIにより誰にでも行えるようになる、という未来が先ほどまでの話の延長線上にあります。

一方で、これはソフトウェアの開発サイドの変化だけではありません。ユーザサイドにも大きな変化が訪れます。

生成AIに言葉で指示をして、ソフトウェアへ自動的に機能を追加したり変更したりする作業は、ソフトウェアをリリースする前の開発段階だけでなく、利用中に行うこともできます。それも、ソフトウェアのユーザ自身で行うことができます。

ソフトウェアの開発者が変更しても良い範囲と変更不可の範囲を決めて、生成AIによるカスタマイズ機能付きでソフトウェアをリリースすれば良いわけです。

そうすれば、ソフトウェアのちょっとした使い勝手の悪さや画面デザインの好み程度なら、ユーザ側で生成AIに依頼して変更することが可能になります。

また、他のアプリについている便利機能を追加したり、複数の操作の組み合わせをワンクリックで行えるようにしたり、よく閲覧する画面を1つの画面で閲覧できるようにしたりすることができます。

ソフトウェア開発者側も、こうしたユーザによるカスタマイズを可能にすることで、自分が要望を受けて機能追加するという手間がなくなりますし、それによって使い勝手が悪いという不評や不満を避けてソフトウェアの人気が高まることを考えれば、大きなメリットがあります。

このようにユーザ側で自由自在に画面や機能を変更することができるようになると、従来私たちが「ソフトウェア」と呼んできた概念とは大きくかけ離れたものに見えてきます。

それは、ハードウェアより柔軟という意味を持つソフトウェアよりも、さらに流動的で自在に変化し、かつユーザにピッタリとフィットするという意味で「リキッドウェア」と呼ぶことがふさわしいでしょう。

かつてはハードウェアだけで機能が実現されていましたが、そこに入れ替え可能なソフトウェアが登場して、ハードウェア+ソフトウェアの組み合わせで機能が実現できるようになりました。

そこからさらに、生成AIによる改変が可能な部分という意味でのリキッドウェアが登場する、と考えればよいわけです。すると、全体としてはハードウェア+ソフトウェア(開発者が提供)+リキッドウェア(ユーザの改変)により機能が実現されることになります。

このリキッドウェアの時代になると、ユーザ側で、改変のアイデアが爆発していきます。

あるユーザが発明した画期的な改変方法のアイデアがSNS等で話題になり、他の人たちも真似をして様々なリキッドウェアを改変するということも起きるでしょう。

また、様々なソフトウェアを統合的に扱えるリキッドウェアも登場するはずです。複数の異なるSNSのタイムラインを1つのアプリで見ることができたり、検索結果に多数のプラットフォームの結果が統合されたりするわけです。

このようにして、リキッドウェアが普及した世界では、パソコンやスマホをはじめとして、様々なデバイスが、私たち一人ひとりの生活や活動にピッタリとフィットする機能を提供するようになります。

現在進行形の現象

私のようなソフトウェアエンジニアにとって重要なことは、リキッドウェアが未来の話や数年先の話題ではない、という点です。

なぜなら、ごくシンプルなリキッドウェアであれば、既に実現可能だからです。

例えば、私が自社の通販サイトのWebアプリを開発しているエンジニアだとします。

こうしたWebアプリは、自社で管理しているサーバやクラウドサービスで契約しているサーバ上に、データベースや販売管理システム、商品発送業務システムを持ち、ユーザが買い物をすると、それらが連動して集金と商品の発送が行われることになります。

このような業務の基幹部分のシステムやデータベースは、勝手に変更させるわけにはいきません。

しかし、ユーザが見る通販サイトのWeb画面のデザイン程度であれば、ユーザごとに使い勝手のよいように改変されても困ることはほとんどありません。もちろん、あるユーザの変更が他のユーザの画面に影響すると問題ですが、個々のユーザ独自のカスタマイズであれば問題ありません。

例えば文字を大きくしたり、背景をダークトーンにしたり、左手で操作しやすい位置によく押すボタンの位置を変えたり、一覧画面で価格順に並べ変えたり、2つの商品の詳細を横に並べて表示させたりと、様々な改変が考えられます。

こうした改変は、技術的にはブラウザ上で画面表示をしているHTML、CSS、JavaScriptといった設定ファイルやプログラムを改変すれば実現できます。

セキュリティという意味では、もともとこれらのファイルはWebブラウザ上で動作しているため、Webアプリに詳しいエンジニアであれば改変することができる部分ですので、改変されても問題ないような機能やデータしか扱っていません。

このため、通販Webアプリのサーバ側では、ログインしたユーザ毎にこれらのファイルを別々のファイルとして保管し、チャットAIとの会話ができる画面を付け足し、ユーザからの要望に応じて、サーバ上のそのユーザのHTML、CSS、JavaScriptファイルを変更する仕組みを作れば良いわけです。

この文章と、既存の通販Webアプリの構成情報やソースコードを生成AIに提示すれば、このような機能追加をする手順と必要なプログラムを教えてくれるでしょう。

このように、リキッドウェアは、既に現在の話であり、現在進行形の現象であっても不思議ではないのです。

全方位エンジニア

AIによる自動プログラミングの範囲が広がり、リキッドウェアの時代が既に始まっているとしても、まだまだ生成AIだけでソフトウェア開発が進められるわけではありません。

一方で、ソフトウェア開発におけるプログラミングの比重が大幅に小さくなっていくことは確実です。

加えて、スムーズにソフトウェアを開発するためには、一般的なプログラムのことだけでなく、クラウドインフラやネットワークやセキュリティ、プラットフォームや開発フレームワークやデータベース、といったシステム全体が機能するための上から下までの幅広い知識とエンジニアリングスキルが必要です。

こうした知識やスキルを持つ人材はフルスタックエンジニアと呼ばれます。

これまでは、一部のフルスタックエンジニアが全体の設計を行い、残りのエンジニアはプログラミングに専念したり、システムスタックの中のプログラミング以外の特定の分野に特化してエンジニアリングを行う、という形で役割分担をしていました。

しかし、生成AIがプログラミング部分を担うようになると、ソフトウェア開発コストが大幅に引き下げられ、それに伴って様々なソフトウェア開発が企画されるようになります。

すると、各開発プロジェクトでは単にプログラムを書けるエンジニアはほとんど必要とされず、多数のフルスタックエンジニアが求められることになります。

さらに、この状況の中では、単にフルスタックの知識とスキルだけでは不十分です。なぜなら、様々なソフトウェア開発プロジェクトでは、求められるソフトウェアの種類が多様化され、毎回同じようなシステムスタックでの開発が要望されるわけではなくなるためです。かつ、複数のシステムスタックを必要とする複合型のシステムへの要求も増えていくはずです。

例えばWebアプリのシステムスタックと、業務システムや基幹システムのシステムスタックは異なります。このため、Webアプリのフルスタックエンジニアに、基幹システムの開発プロジェクトを任せることはできません。

また、Webアプリと、スマホアプリやパソコンのアプリもシステムスタックが異なります。IoTのように組込みソフトの世界になれば、組込まれるデバイス毎でもシステムスタックが全く違ってきます。

しかし、プログラミングの比重が小さくなり、ソフトウェア開発全体のコストが低くなれば、こうした異なるシステムスタックを持つソフトウェアを組み合わせた複合システムの開発が増えてくるはずです。

複数の別々のフルスタックエンジニアを集めて開発する必要がありますが、そこには全体を見渡して基本設計をすることができるエンジニアが重要な位置を占めることになります。

それは、個々のシステムスタックの壁を超えて、多数のシステムスタックの全方位的な知識とスキルを持つエンジニアが求められることになります。

そうしたエンジニアは、全方位エンジニアと呼ばれることになるでしょう。

そして、生成AIによりプログラミングしかできないエンジニアの需要が減るように、やがて単一のシステムスタックに閉じたフルスタックエンジニアの需要も減る時代がやってくるでしょう。

その時代においてもITエンジニアとして活躍したいのであれば、今すぐにでも、全方位エンジニアを目指して走り始めなければなりません。

全方位エンジニアの役割

開発することになるプログラミング言語やプラットフォーム、フレームワークも多種多様です。

しかし、その全ての知識を勉強しなければならないわけではありません。なぜなら、全方位エンジニアもまた、生成AIのアシストを受けることができるためです。

生成AIに任せれば、全く自分では使ったことのないプログラミング言語やプラットフォームやフレームワークであっても、言葉で指示をすれば生成できてしまいます。

もちろん、そこにバグやセキュリティホールが混入していたり、将来の改変が難しくなるような技術負債の元が積み上がってしまう恐れがあります。

それを見極めたり、抑えるためには、その言語やライブラリの知識が必要です。ただし、その知識も生成AIに頼ることができます。全方位エンジニアは、それらの検出や混入の防止、あるいは事後対応の手順や仕組みをしっかりと組み立てることができれば良いのです。

その手順や仕組みは、システムスタックの違いによって大きく変わるわけではありません。バグやセキュリティホールの混入を抑え、将来の拡張性を確保しながら開発を進めるための手順と仕組みをルール化すれば、後は生成AIや、その部分が得意なエンジニアに任せればよいのです。

全方位エンジニアが個々のシステムスタックの詳細な知識や長期的な経験を持っている必要はありません。

そして、複数の異なるシステムスタック上で連携して動作する複合型のソフトウェアを、どのように機能分担させ、どのように連携させるかを設計することが全方位エンジニアの大きな役割の1つです。

加えて、そのソフトウェア全体をどのように開発し、どのように管理していくのかを考えることも、全方位エンジニアの重要な役割になります。

全方位ソフトウェア

全方位エンジニアが求められるのは、どのようなソフトウェア開発であるのか、考えてみましょう。

先ほど、通販Webアプリの開発の例を挙げました。

この通販Webアプリの刷新を企業トップから命じられた担当役員の指示の下、企画チームが出してくる要望は次のようなものになる可能性があります。

ユーザコミュニティプラットフォーム化。これは単に通販専用のアプリやサイトではなく、商品のユーザ同士が商品自体や商品の使い方について交流するプラットフォームを用意するというものです。ユーザの定着、口コミ効果、ユーザ発信によるコンテンツ充実の他に、良い点も悪い点も含めた商品開発へのフィードバックと新商品企画やマーケティングとの一体化を狙いとします。

オムニデバイス対応。これはWebアプリだけでなく、スマホアプリや音声アシスタント、ウェアラブルデバイス、スマート家電等のあらゆるデバイスからユーザコミュニティや商品情報へアクセス可能にします。

オムニプラットフォーム対応。これは自社のユーザコミュニティプラットフォームだけでなく、例えば総合通販サイトへの商品掲示と口コミ情報の共有や、SNSとの連携、あるいは各種AIツールとの機能や情報連携を含みます。

業務システム刷新。既存の販売管理システムや商品配送システムと当面は連携しつつ、これらのシステムの刷新にも対応していきます。刷新後には、リアルタイムでの販売データ集計と需要予測、在庫管理システムとの連携を視野に入れています。また、配送業者が提供する地域分散の在庫システムと配送業者側での商品発送サービスと連携も段階的に進めるため、情報システムもそれに合わせて段階的に連携していく必要があります。

リキッドウェア対応。ユーザ向けのインターフェースは、もちろん全てリキッドウェアに対応します。加えて、情報の集計やフィードバックなどの商品開発や商品企画、システム運用部門、経営層へのレポートなどの社内向けのユーザインターフェースも、全てリキッドウェア化します。

上記のような複合ソフトウェアの開発企画が提示されたら、従来のソフトウェア開発チームなら、すぐに引き受けることはないでしょう。あるいは、システム仕様をすり合わせる中で、膨大な開発費と開発期間が必要になることを論理的に示して、仕様を大幅に削るように仕向けるでしょう。

しかし、生成AIがプログラミングのほとんどを自動化でき、かつ提示されたシステムスタックの半数以上は、チーム内のメンバーの誰かが経験を持っており、かつ、これまでも新しいシステムスタックやプラットフォーム、フレームワークを生成AIのアシストを受けながら1から導入してプロジェクトを成功させた経験がチームの中にあったらどうでしょう。そして、あなたが全方位エンジニアとして既に走り出しており、これからその道を走っていこうと思っていたら、どうでしょう。

そうした目線で見ると、とても魅力的なプロジェクトに見えるはずです。企画トップの指示で、野心的な提案を打ち出してくる企画チーム、そして全方位ソフトウェア開発チームへと成長する可能性を持った開発チームと仕事ができるのです。

また、既に既存のシステムがあるという安心感もあります。アジャイル的な開発プロセスで、すぐに作れて効果高いところから作り、アーリーアダプターユーザからのフィードバックを受けながら段階的に成長させていくことのできるプロジェクトでもあります。

このように考えると、この全方位ソフトウェアの開発は、魅力的なプロジェクトに見えてくるはずです。

さいごに

生成AIによる自動プログラミングにより、リキッドウェアや全方位ソフトウェア開発は、既に現在進行形になりつつあります。

そのような状況の中で、ITエンジニアはフルスタックを超えて、全方位エンジニアを目指す必要が出てきつつあります。

さらにその先には、ITシステムの範囲を超え、顧客、社内の従業員、そしてAIをつなぎ合わせた組織活動自体を全方位的にエンジニアリングしていく全方位ビジネスエンジニアリングや、全方位コミュニティエンジニアリングへと、その守備範囲を拡大させていくことになるでしょう。

そして、さらにその先には、社会を全方位的に改善するための全方位ソーシャルエンジニアリングという分野も出現するというのが、私の見立てです。