「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- 生成AIに主にプログラミング・コードを生成させる。
- ChatGPTの登場に合わせて、このユースケースが増えていった。
- ただし、この程度のことは実はGPT-2(2019)でもできていた。
- 以下のようなインストラクションにも対応
- 「AAA, BBB, CCC, DDD...をアルファベット順で並び替えるプログラムを JavaScriptで書いてください。」など。
- 「簡単なゲームを作成する例」もあるが暗記物件を提示しているダケに見える(指示詳細がないので当然と言えば当然)。
- プログラミングだけでなく、フレームワーク導入の際の導入手順なども出力できるのが良い。
- このため、開発ツールも生成AIと親和性が高いGUIからCUIにシフトしているという話がある。
- (Visual Studio や、他のIDEの新規作成→プロジェクトが、VSCなどのエディタ+CLI化)
- リバース・エンジニアリング、リファクタリング、コンバージョンなどの用途でも使える。
- トラブルシューティングでは、現象の説明(エラー・ログなど)を入力し問題を特定
- お陰で「stackoverflow.com」のPV激減に繋がった。
- 開発者コミュニティ依存から、GitHub上での公式と開発者のやり取りへのシフトが進んでいる可能性。
詳細 †
ツール類 †
GitHubにもCopilotと言うスニペット生成機能がある(若しくはCursor、Claude Codeなど)。
- コード補完(オートコンプリート)中で使うコーダー向け機能で、昨今のIDE・エディタ事情でCLIとして提供されている。
- コード補完のスニペットではスコープの広いフレームワーク導入などの分野は苦手(アーキテクトはChatUIがメイン)
- 特殊なPE(Context Injection)に加え、コマンドやChatUIも用意されている。
Vibe Coding †
自然言語のプロンプトを用い、コード生成のすべてをAIに委ねる開発スタイル
- 「書く」から「対話する」、「理解」より「反復」など。
- 思想としては「手抜き」ではなく人間は「クリエイティブな意思決定に集中」する。
- 顧客エキスパート自身がVibe Codingでプロトタイピングすることは非常に有効。
- 無限ループ課金やセキュリティ事故が発生しているので生成物はレビューが必要。
※ ただし、Proから見るとEUC向けの認識に落ち着いている。
EUC or Pro †
EUC向け †
作業の自動化やプロトタイピング
- 表計算ソフトの関数記述、マクロ、VBAなどに利用できる。
- 各種著名なBIツールにおけるクエリ作成、ダッシュボード構築
- テキスト処理とデータクレンジング(スクレイピング・コード、正規表現)
Pro向け †
各種アプリ、システムの開発実務支援
- フレームワーク導入
- テンプレート開発
- リファクタリング
- 職業プログラマ向け入力支援
- デバッグ、トラブルシュート
事例 †
フロントエンド開発 †
ML/DL Pythonプログラミング †
パッケージのアップデートが頻繁で生成されたコードが動作しない。
考察 †
一般的なプログラミング †
- 「プログラミング言語、やりたいことや仕様」をプロンプトとして伝えてプログラムを生成できる。
- 「生成した、作成した」プログラムのワーニング、コンパイル・エラー、実行エラーなどを修正できる。
- 昨今は、開発環境多用化で、開発環境準備段階にも適用できる(エディタ化に加えAI対応でCLI化が加速)
- 粒度の大きいタスクはChatUIから、粒度の細かいコード補完(オートコンプリート)はタスクはIDE、エディタ上から利用。
- 人間があまり得意ではないマークアップ言語(HTML、◯ML、JSON)や非手続き言語(SQL、正規表現)などにも強い。
- ただし、Snippetableなマークアップ言語であるCSSは苦手(「正しさ」の検証がテキスト空間で完結しないため)
...については生成AIを活用したシステム開発で。
Vibe Coding †
予定
アーキテクト向け †
主にフレームワーク導入、テンプレート開発、リファクタリングについてChat上で実施。
- 段階を経て利用
- 開発環境の準備
- プロジェクト準備
- フレームワーク導入
- プロジェクト・テンプレート化
- コンパイラのワーニング・エラー、実行エラーの修正
- 機能の実装(やりたいことや仕様を入力)
- リファクタリング(共通化、パッケージ導入、フォルダ構成見直し)
- 粒度毎の考慮事項
- 小:ワンライナーやスニペット・レベルのコード生成は簡単なプロンプトで対応出来る。
- 中:コード量が増える場合も、必要に応じて対応する仕様を詳細に記載すれば良いレベル。
- 大:複数ファイルに渡る変更は、明確な方針に基づいて指示を行う必要がある。
- ヤりたいことに基づいた処理方式の明確化、パッケージの選定など。
- 選定した処理方式、パッケージでも実装を指摘の実装箇所に実装する。
- 反復的リファインメント
- 生成AIも人間と同じで、一回の生成で正確な処理を生成し切ることが難しい(特定のお代で丸暗記しているケースを除く)。
- 従って、生成されたコードを次コンテキストとして利用し、コードを正解に近づけて行くようにする。
職業プログラマ向け入力支援 †
IDE、エディタ上からコード補完(オートコンプリート)が利用できるが、
- ワンライナー、スニペット生成、コンパイラのワーニング・エラー修正、類似見直し等に便利ではある。
- コード量産フェーズでは邪魔になる事があるのでOFFにすることを検討しても良い。
デバッグ、トラブルシュート †
- コンパイラのワーニング・エラーなどはIDE、エディタ上からコード補完(オートコンプリート)で修正可能に。
- 実行エラーの原因の特定に必要な情報は生成AIが手引きするので指示された情報をChatUIからプロンプトで正確に渡すようにする。
事例ベース †
フロントエンド開発 †
以下、生成AIの支援を受けながらの作業が捗る。
- 多言語化(JS、ES、TS、Dart、WebAssembly系、Android系、iOS系)が進んでいるため。
- 同一プラットフォーム上でも言語、フレームワーク、パッケージなどが乱立しているため。
- UI開発で使用されるマークアップ言語は人間があまり得意でない分野。
- UIサブシステムはフレームワークやパッケージの塊なので、実装を始める前の定義や初期化が多い。
※ ココでの生成AIは、SPAの闇を照らすランタンのようなもの。
※ そもそも、ブラウザ・プロセス上のUIサブシステムのアーキテクチャが難しい。
ML/DL Pythonプログラミング †
以下、生成AIの支援を受けながらの作業が捗る。
- ML/DLで使用されるPythonは配列 / 行列 / テンソル操作に特化した言語仕様が多いため。
- 特に、入出力の行列・テンソルの形状が問われるので、生成AIは便利複雑なテンソル形状の推論
※ ただし、LLM系のLangChainやHugging Faceなどの変更が激しいパッケージに関するコード生成は上手く出来ないことが多い。
品質やセキュリティに関する考慮点 †
- コレは、プログラミングに限らず、生成AIが騒がれ出したときから「ググった結果の利用と同じ」と言っている通り。
- 生成されたコードを使用する際は、「ググった結果の利用と同じ」で、以下のようにすると良い。
- 使用するコードがどのようなものか?を一通り読む(生成AIにクロスチェックさせても良い)。
- 生成されたプログラムを実行した際にシステム上でどの様に振る舞うか?を理解した上で問題が無いことを推察できる必要がある。
- 生成されたプログラムはコメントが少ないので、コメント比率を上げる(コード補完(オートコンプリート)を使用しても良い)。
- 末端作業員は...
- 「決められたコードパターンでコードを量産する際のコード補完(オートコンプリート)」レベルの使用に留めると良い。
- 新しいパターンでのコード実装や、共通関数の抽出などを生成AIを用いて行った場合、上位エンジニアのチェックを受ける。
参考 †
Vibe Coding †