生成系AIで変わるソフトウェア開発
現在と未来
土屋明生
経歴の概略
静岡県静岡市で時計商の家に生れる。
1986年 3月 高校を卒業し、実家の時計商を継ぐ。(祖父の仕事ぶりに憧れを抱く)
1988年 4月 祖父の入院/引退と共に、実家の時計商が廃業する。
⇒ キャリアデザインを再検討し、地元の大学の工学部の夜間コースに入学する。
1988年 6月 昼間は、地元企業の工場の生産ラインで働き始める。
1990年 3月 同企業の設計開発専門の子会社で働き始める
1992年 4月 夜間大学を卒業し、地元企業の設計開発専門の子会社に入社する。
・組込システムのハードウェア設計、ファームウェア設計、システムシュミレータの開発、新製品企画等を担当
1998年12月 転勤を拒否して、地元のソフトウェア会社に転職
・親会社が発掘した海外のGISエンジンをカスタマイズして3D-WebGISの拡販に従事する。
⇒ 超大型商談を2件獲得し、顧客ごとGISが親会社に吸収される。
2000年11月 自治体合併対応の文字コード変換システムのミドルウェア拡販を担当。
・親会社のプロジェクトに出向し、全国のミドルウェアを採用した重点商談支援を担当
(その後、親会社に転籍)
2006年 6月 地元のSIerに転職し、自治体合併対応の文字コード変換業務を担当
2012年 7月 地元のSIerを辞め、フリーランスとなり、主に民需系システムの開発補助を行う。
・医療機器のファームウェア及びPCアプリケーションの仕様分析と開発
・流通システムの在庫管理及び部品需要予測システムの開発補助
・大手楽器メーカの音楽教室管理システムのリプレイスプロジェクトに参加
・大手重機メーカのERPリプレイスプロジェクトに参加
・自治体向けJavaソースのマイナンバー対応プロジェクトに参加
・自治体向けCOBOLソースのUnicode6.0対応に伴うソース自動修正プログラムの検証を担当
2021年 7月 地元のSIerに再就職する。
・弊社ユーザーのガバメントクラウド移行に伴う文字コード変換設計を担当中
・自社のGIS応用業務の立ち上げ中
・AIの応用業務を検討中
日本の社会情勢
--------------------------------------------------
・開発社不足:
2030年にIT人材が110万人以上増加するが、
それでも75万人以上の不足が試算されている
・具体的に不足する人材:
構築、運用、保守を行う人材の不足を懸念
- - - - - - - - - - - - - - - - - - - -
日本のIT人材不足
・グローバル市場における、
企業競争力が失われるリスクが懸念される
日本の産業構造の変化
--------------------------------------------------
・グルーバル経済の浸透:
「全ての企業がソフトウェアに依存している」
・産業構造の主体:
[製造業]⇒[ITサービス業]にシフト
- - - - - - - - - - - - - - - - - - - -
ITサービス産業における競争力の源泉
・デジタル人材の確保
・デジタルへの対応力
ソフトウェア開発の社会的課題
従来の開発スタイルでは、大量の作業をツールに行わせて、処理をしていた。
課題 大量にツールの定義や、データ整形などの単純作業が増えても、
一次的にはトータルの作業時間が短縮されるが、抜本的な効率化が出来ない。
⇒ 単純作業の割合が多く、開発者が疲弊して生産性が上がらない。
解決策 開発者の生産性を高める為に、AIに、このような単純作業を任せ、
開発者には、もっと創造的な作業が行える時間を増やせる工夫が必要。
生成系AIを利用した開発ツールのインパクト
Micrsoftが自社のツールを紹介しているデータを引用
・このツールは、2023年2月に発表され、2023年5月までに、世界で1万社を超える企業が採用。
⇒ 現時点で、世界では100万人を超える開発者が利用中(実際はID取得数と思われる)
MS社が、社内及びアメリカ国内の企業の開発者に対して行ったアンケート結果の抜粋
・ツールを利用して、開発者がコードを生成できるスピードが平均55%早くなった。
・ツールを採用した組織の新規開発したコードは、約46%がツールから生成されている。
・言語によるばらつきはあるが、最大はJavaで、平均61%がこのツールで生成されている。
開発者の生産性が50%向上した場合のビジネスに与える影響 ⇒ 企業競争力の向上
・リリースの早期化による、ユーザー満足度の向上(アジリティ性の向上)
・競争優位性の確保
・開発コストの低減による、新たなビジネス創出資産の獲得
・早期開発が実現できることで、品質向上や時間的成約で今でできなかった機能エンハンスの対応が、同じリソースで可能になる。
今までは、納期に間に合わせるために諦めていた機能向上のエンハンス
今後に備えたリファクタリング対応 が行えるようになる
・組織の内外にビジネスへの好循環サイクルをもたらし、採用する組織としない組織の差が大きく開いてゆく。
ツールが開発者に与えた影響
生成系AIを利用したコード生成ツールが開発者に与えた影響
<良い点>
・ユーザーの75%が仕事の満足感が向上した。 ⇒ モチベーションの向上に繋がっている。
・コーディングに対するフラストレーションが減少した
・満足感が得られることで、集中力の継続が行われ、より創造的な仕事が継続的に行われるようになった。
<悪い点>
・汎用的なツールなので、人への相性が存在する。
・世間一般の評価が良い事は分かっていても、自分に合わなければ、ツールは継続しては、使われない。
MS社によるツール利用者へのアンケート結果と国内サイトの検証結果
・アメリカ国内の統計では、約90%の人がコードの記述や仕事の効率化が行えたことを感じている。
・国内の有名な開発サイトが、限定事例で評価を行ったところ、約75%の生成コードに満足した結果が得らた。
・一般的なツールの平均より、かなり高い値が得られている。
ソフトウェア開発ツールの比較
従来のコード補完ツール
① 使いたいメソッドの候補をWebで検索
② メソッドの一部を入れると、メソッド全体のスペル候補を提案(コードスニフェットと呼ばれる機能)
③ メソッドが確定すると、引数となるパラメータの型や桁を提案が行われる
④ パラメータが不明な場合は、Webで利用例などを確認
⇒ 現在の開発者の多くは、コーディング時にWebブラウザの参照を多く行っている。
生成系AIを利用したコード生成ツール
① 何もない状態から、自然言語で、必要なプログラムの要求仕様を入力すると、
プログラムのスクラッチをエディタ上に展開してくる
② プログラムを書き進める際は、コメントとして自然言語でプログラムの要件を入力してゆけば、
エディタ上にコードの候補を展開して来る
・LLMの特性を活用し、ここまでのプログラム全体の文脈や、プロジェクトの内容から、
次にユーザーが必要とするプログラムのコードを的確に提案してくる
③ 開発者は、提案された候補の中から、最適なコードを選択して行けば、作りたいプログラムが完成する
⇒ Webブラウザの参照回数が、著しく少なくなる。
ソフトウェア開発とは
従来のソフトウェア開発では、集められた開発メンバの保有するスキルで、
・実現できる範囲
・品 質
・納 期
は、プロジェクトがスタートする時点で、おおよそ決まってしまっていた。
要求された機能を、必ず「納期」までに、出来るだけ「効率よく」、「高い品質」でソフトウェアによって実現を行う事
Q:品 質
D:納 期
C:コスト
生成系AIを取り入れたコーディングツールを導入する事で、
スキルの高いプログラマーがプロジェクトに参加し、
① 品質の向上を補助
② 納期の短縮に貢献
⇒ その結果、低コストで、競争力のあるプログラム開発が実現できる
「可能性がある。」
一般的に、時間を掛ければ品質は上がるが、納期とコストで限界が決まる
ソフトウェア開発工程の作業割合
これまでの開発では、「生産性を高める為」と「品質を高める為」の単純作業にマンパワーを割く必要があった
仕様理解 :40%
コーディング:20%
テスト :40%
本当に生産性の高い作業を行える時間は短く、
「品質の確保」と「生産性向上」の為に
多くの時間を使う必要があった。
生成系AIを取り入れる事で、以下の作業を補完する事が可能となりつつある。
① 仕様書の要約を作成
② コーディングを補助
③ テスト準備 ⇒ 要因分析による、テストパラメータの一部を自動生成
④ 定型テストの実施
⑤ 定型フォーマットでのテスト報告書の出力
導入のハードル:活用スキル
・あくまでもツールであるため、自社の風土に合う/合わないが存在する。
・全自動でコード開発を行ってくれるわけではなく、適切なコードの判断が行えるスキルが必要。
・マージやデプロイ等、必ず人間の最終判断が必要となる部分が存在する。
技術的なハードル
PLAN DO
仕様書
ACTION
この部分がツールで補完できる範囲 一部の作業を補完できる
ツールが出始めている領域
開発者のスキルが求められる領域
CHECK
導入のハードル:セキュリティ
セキュリティ面のハードル
・多くのコードを学習しているLLMに問合せを行い、プログラムの文脈を判断した、
適切なソースコードブロックを素早く提案してくれる反面、自社のコーディングが
一次的にLLMへ到達してしまう為、秘密性の確保面で懸念する団体も存在する。
・LLMを利用する場合、Networkの社内/社外の制約が課題。
LLM
セキュリティ確保が必須
コーディング
作業
ローカルリ
ポジトリ
ソース管理
サーバ
開発ツール
導入のハードル:その他
導入前の費用対効果の見積が難しい
・Tokenの消費や、複数のCSPを跨いだ場合の費用リスクが懸念される。
・複数の有償版、無償版の費用対効果の比較が難しい。
学習反映の禁止範囲の保証
・LLMへコードの学習反映が行われない契約の場合、ユーザーが斬新なビジネスロジックを記述した場合のプログラムの文脈
が学習に反映されない保証の確認は難しと思われる。
バグ発生時の対応
・自動生成されたコードにバグが発生した場合の対応が、開発者のスキルに大きく左右される。
提供ソース解析ドキュメントの作成許諾
・ブラックボックスで提供したソースコードの解析ドキュメント作成が、どの程度まで許諾されるのか、基準が無い。
オンプレミス対応製品
ツール Model 特徴 対応エディタ
Tabnine StableCode Anthropic、AWS、Cohere、LangChain VScode、eclips、vim、JetBrains
Captain Stack StackOverflow(検索結果)
Github Gist(検索結果)
Google検索でStackOverflowとGithub Gistの
検索結果を利用(AIではなく検索結果取得)
VScode
GPT-Code-Clippy
(GPT-CC)
GPT-Neo
code-clippy Github Code Copilot のオープンソース版 VScode、vim
Second Mate
Code Llama(Llama 2)
Replit Code 3B
EleutherAI GPT-Neo-2.7B
計算リソースにCuda(GPU)とCPUが選択可 emacs、vim、VScode
IntelliCode codex 書きたいコードの文脈解析性能が高い VisualStudio
Code Whisperer 専用モデルと思われる AWSの開発環境(console)内で利用可能 VS Code 、JetBrains、eclips、
AWS console IDE(cloud9,Lambda等)
Google ML-enhanced
code completion
code-gecko Google Cloud PlatformのVertex AIで利用可能 VScode、eclipse、JetBrains
YouCompleteMe 開発言語別のエンジン 各言語のコード補間 vim、VScode、eclipse
Kite:この分野の古参スタートアップ一社が、技術面と収益面の不備を理由に、2022年11月16日に事業の終息を発表。
単体
テスト
結果報告書
モジュール
テスト
結果報告書
要因
マトリクス
一般的なモジュール開発の流れ
仕様解読
要件分析 大まかな機能ブロックを検討
ブロック毎におおまかな流れを検討
メソッドのパラメータを調べる
パラメータの範囲を調べておく
クラスのソースを完成させる
クラスの単体テスト設計を行う
複数のクラスを組合わせる
クラスの単体テストを行う
モジュールのテスト設計を行う
モジュールのテストを行う
仕様理解
物理設計範囲
仕様書
論理設計範囲
要因分析
単体
テスト
仕様書
組合せ
マトリクス モジュール
テスト
仕様書
ロジック内で使うメソッドを決める
論理設計と物理設計に関連する作業範囲の一部を
生成系AIを利用した開発支援ツールがサポート範囲
を拡大しつつある
従来の生成系AIが
ドキュメントの要約のみ
は実現可能だが、
ポイントを押さえた
仕様解読と、
的確な要件分析を
行わせる為には、
高いプロンプト
作成スキルが必要
例:GitHub上の開発資源の流れ
ステージング コミット
ワーキングツリー
(ワークスペース)
インデックス
(ステージングエリア)
ローカルリポジトリ リモートリポジトリ
リモート
ブランチ
リモート
追跡ブランチ
ローカル
ブランチ
クローン フォーク
プッシュ
プル
マージ フェッチ
チェックアウト
自分のパソコン サーバー(GitHub)
実行環境への
デプロイなど
GitHub Action
実行環境など
WorkFlow定義
(YAML)
CI CD
※コンフリクトの解消は開発者が行う
Runner内での
JOBの実行等
を定義
GitHub Pages
簡易Webサーバ
静的なWebサイト
を自動生成
一般的な開発資源の流れ
ビルド マージ デプロイ システム
テスト
・テスト結果見直し
・修正内容検討
・原因調査
・影響範囲調査
・戻す範囲検討
GitHubActionで実行可能な範囲
論理設計 物理設計
CI CD
GitHubの守備範囲
要件定義
要求
仕様
GitHubCpilotが助けてくれる範囲
モジュール
テスト
※ コンフリクトの解消は、開発者が行う
現時点では、コードの意味や、プログラム全体の流れ、プロジェクト内の整合性が理解できていないと使いこなせない。
活用には、一定のコーディングスキルが必要となるが、従来より、プログラム開発のハードルは、著しく下がっている。
※ 現時点では、開発者が行う必要がある作業
機械学習でバージョン管理する資源
管理すべき項目
ソースコードのバージョン
データとモデルのバージョン
テストの条件とテスト結果
DCV(DataVision Control)の利用により、機械学習プロジェクト内の
データ(訓練データ、テストデータ、特徴量、モデル)をソースコードと
ともにバージョン管理
CML(Continuous Machine Learning)の利用により、CIツールと組合せ、
テスト結果レポートを自動出力
・これまでは、プログラムソースは管理しても、コンパイルによって生成されるロードモジュールや中間生成物をバージョン
管理する必要は必ずしも無かった。
・機械学習の試算は、様々な条件によってモデルの生成が変化する可能性のある為、
生成したモデルとデータも同時に管理を行う必要がある。
機械学習のプログラムテストの観点
追加すべきテストの観点 (テスト項目)
データの型や統計的性質
前処理ロジックの妥当性
モデルの収束
予測精度
・データの型を検証する項目
・データの範囲を検証する項目
・データの分布を検証する項目
・前処理から出力される特徴量の型を検証する項目
・前処理から出力される特徴量の次元をを検証する項目
・前処理から出力される特徴量の範囲を検証する項目
・損失関数の値が充分に小さくなっている事を検証する項目
・損失関数の値が大きく変動していない事を検証する項目
・ハイパーパラメータの変更により、テストデータの予測精度が改善している事を検証する項目
従来のプログラムのテスト観点に加え、機械学習のテストを検討する観点として、上記の観点なども、追加する必要がある。
近未来の開発環境
単体
テスト
結果報告書
モジュール
テスト
結果報告書
メソッドやパラメータを調べる
クラスのソースを完成させる
クラスの単体テスト設計を行う
複数のクラスを組合わせる
クラスの単体テストを行う
モジュールのテスト設計を行う
モジュールのテストを行う
正常系のクラスの
組合せマトリクス
を自動生成
モジュール
テスト
仕様書
論理設計と物理設計に関連する作業範囲の一部を生成系AIを利用した開発支援ツールがサポートしてくれる事で、
開発者は、単純作業から解放され、創造性の高い業務に集中する事が出来るようになる。
ビルドを実行するワークフローを
開発者が定義する
パラメータの範囲を調べる
テストを実行する
ワークフローを
SEが定義する
正常範囲の
要因マトリクス
の自動生成
正常テスト範囲の
要因分析マトリクス
を自動生成 テスト仕様の
レビューは
開発者が実施
テストを実行する
ワークフローを
開発者が定義する
テストを実行する
ワークフローを
開発者が定義する
単体
テスト
仕様書
実行モジュールの生成
ロジックの大まかな流れを開発者が投入
デプロイするワークフローを開発者が定義する
実行環境へのデプロイが完了する
異常値の値は
開発者が追加
異常値の値は
開発者が追加
テスト仕様の
レビューは
開発者が実施
少し先の未来の開発
マニュアル
データファイル
(WORD等)
OCR
Word
PDF
文字お越し
要求
仕様書
プロアクティブ
性の高いツール
生成された要求仕様の確認
生成した成果物の確認
過不足情報の
フィードバック
テスト
結果
報告書
実行モジュールを
指定した動作環境に
デプロイ
必要な情報の
フィードバック
・ビルド手順
・デプロイ手順
未来の開発
マニュアル
データファイル
(WORD等)
OCR
Word
PDF
文字お越し
概念図
要件を取纏める
開発ツール
複数の専門ドメインに特化したLLMに
問合せを行い、専門性の高い開発と、
ハルシネーション対策を行う
実行モジュール生成 動作環境にデプロイ 自動テスト
テスト
結果
報告書
生成した成果物の確認

生成系AIで変わるソフトウェア開発の現在と未来(修正版).pdf