Amazon Web Services ブログ
Python 初心者が生成AIとともに短期プログラミング開発に挑戦した結果
※ この投稿はお客様に寄稿いただいた記事です。
ANA システムズ 株式会社について
ANA システムズ 株式会社は、エアライン分野に精通した「IT のスペシャリスト集団」として、エアラインビジネスを中心としたシステム企画・開発、空港施設・インフラ展開から稼働後のシステム運用、ANA グループ各社の DX 推進支援、地域創生への取り組みなど、幅広く品質の高いトータルサービスを提供しています。
1. はじめに
プロジェクトチームには、様々な経験や背景を持つメンバーが集まります。当然、個々人のスキルセットは様々です。一方で、入社時の研修で学ぶ内容が、現場で求められる技術のすべてをカバーしているわけではありません。配属されて初めて触れるプログラミング言語やフレームワークに直面することも多いでしょう。加えて、プロジェクトには必ず「納期」が存在し、事前に十分な準備を行うための時間を確保することは難しいです。
本ブログでは、プログラミング経験の浅い担当者がある開発プロジェクトを「どのようにして短期間でやり遂げたのか」に焦点を当ててご紹介します。
2. 機能実装における課題
本システムのアーキテクチャは以下の通りとなっています。
図 1:アプリケーションのアーキテクチャ
機能実装にあたり、AWS Lambda における利用率が高く、各種ライブラリを扱うことから、開発言語として Python を選択しました。しかし、この選択には以下の 2 つの課題がありました。
-
担当者のスキルセット
実装の担当者は Python での開発経験がなく、コーディング経験自体も新人研修で Java に触れたのみという状況でした。そのため、扱う技術に対するスキルセットとの間に大きなギャップがありました。
-
素早い本番稼働が求めらている
プロジェクトは、1 スプリントを 1 週間とするアジャイル形式で進められました。ユーザーから早期導入の大きな期待もあり、開発初期のわずかな遅れが、全体のスケジュール遅延やスコープ変更に影響する状況であったため、Python 未経験の担当者にとっては、期待に応えるために大きなプレッシャーもありました。
限られた開発期間の中で、スキルセットのギャップを埋める時間を確保するのは困難です。この状況を打開するため、不足する知識と技術を補う手段として、生成 AI をコーディングに活用することにしました。
3. 生成 AI を活用したコーディング手法
本開発におけるコーディングには、基盤モデルとして Anthropic の「Claude3 Haiku」を採用しました。実際に活用した内容を 2 つご紹介します。
-
対話形式のコーディング
まず開発の起点となるコードの土台を得るために、システムのアーキテクチャと実現したい機能要件をプロンプトとして AI に入力しました。
図 2 : 生成 AI へのインプット
図 3 : 生成 AI からのアウトプット (抜粋)
そして生成されたコードを基に、細部の実装を進めました。具体的には、「このコードをもっとシンプルに記述できますか?」といった改善点を AI に質問し、得られた回答を元に修正を重ねるという対話形式で、コード全体の完成度を高めていきました。
-
エラー内容の解析
エラー発生時の原因特定も、生成AIを活用して大幅に効率化しました。対象コードとエラーメッセージをAIに入力するだけで、問題の根本原因を特定することができました。実際に「AWS IAMの権限不足」のエラーが発生した際も、どこのどのような処理でエラーとなっているのかを解説してくれるため、必要な権限と設定箇所を早急に特定でき、迅速な問題解決につながりました。
4. 効果・利点
実際に生成 AI と共にコーディングを行う中で得られた、効果と利点をお伝えします。
-
未経験者の開発を強力にサポート
まず最大の利点は、プログラミング経験の浅い担当者でも、短期間で実装を完遂できたことです。通常、未経験者が新しい言語で開発する際は「何から手をつければよいか」という最初のステップでつまずきがちです。しかし、生成 AI が開発の土台となるコードの雛形を提示してくれるため、この初動のハードルを大きく下げることができました。
また、従来はエラー内容の分析と調査に多くの時間が掛かっていました。このプロセスを AI に任せることで、問題解決の効率を大幅に向上させることができました。
それにより、未経験者でも 1 週間のスプリントでコーディングを行うことができました。 -
仕様変更やアーキテクチャ変更への柔軟な対応力
開発途中で発生した、アーキテクチャの変更を伴う緊急の改修作業においても、生成 AI の能力を感じられました。新しいアーキテクチャの構想を伝えるだけで、AI が変更に沿ったロジックを即座に提案してくれるため、急な仕様変更にも迅速かつ柔軟に対応することができました。
5. AI とのコーディングを通した自己成長
開発が始まったばかりの頃は、Python に関する知識や経験が全くなかったため、コーディングからデバッグに至るまで、開発プロセスのほぼすべてを AI に頼ってしまっていました。AI にコードの生成を依頼し、エラー発生時にはその解決策を AI に求めるという方法でしか開発を進めることができなかったのです。
しかし開発を進めていく中で、AI に何度も繰り返しコードレビューを依頼し、問題箇所の特定を繰り返すうちに、Python コードを読み解く能力が徐々に身につきました。徐々に AI との関わり方に変化が生じてきたのです。AI に全てを任せるのではなく、自身で問題の原因を検討したり、細かな修正を施したりするなど、プログラミングスキルを向上させることができました。それと同時に AI にはより具体的で詳細な指示ができるようになったことで、協働して解決策を見つけ出せるようになりました。AI がプログラミングの先生からパートナーへと変化したのです。
AI との連携はさらに効率的になり、コーディング速度だけでなく、エラー解決の効率も向上させることができました。結果として、緊急の改修作業が必要となった際にも、わずか 2 日半で Lambda コードのコーディングとテストを含めたシステムの改修を完了することができ、プロジェクトスケジュールへの影響を最小限に抑えられました。AI との関わり方、プログラミングスキル向上という2つの側面から自身の成長へとつなげることができました。
6. 成功のポイントと教訓
今回の開発を通じて、生成 AI を活用する上での重要なポイントと、今後の課題となる教訓が見えてきました。
-
やってみて分かった AI の能力を最大限に引き出す「対話力」の重要性
生成 AI は優れたコードを生成するものの、その回答を鵜呑みにするだけでは問題解決に至らない場面がありました。例えば、AI の回答から原因を絞り込めず、同じエラーについて何度も質問を繰り返すことがありました。また 1 機能としてコード自体は正しくても、他の機能と連携するための設定など、コード以外に起因する問題には気づくことができません。
この経験から、以下の2つの能力が重要だと分かりました。- 読解・分析能力: AI の回答を元に、根本原因を自ら推測し、検証する力。
- 背景説明能力: 開発の背景やシステム構成、制約条件といった「コンテキスト」を正確に AI へ伝え、問題解決の精度を高める力。
-
改めて実感した AI 開発における「プロンプト設計」の重要性
本番リリース後、想定していたパフォーマンスが出ず、緊急の改修作業が発生するという事態がありました。原因は、開発環境と本番環境におけるデータ量の差異を考慮した設計・コーディングができていなかったことです。
このことから、AI はあくまで指示された範囲内で最適なコードを生成するものであり、実データ量のような非機能要件や環境特有の事情までは考慮できないという限界を学びました。
逆説的に言えば、もしプロンプトの段階で「本番環境では毎分〇〇件のデータが流れる」といった具体的な条件を細かく指定していれば、AI はより堅牢な設計を提案してくれたかもしれません。AI に「何を」「どこまで」考慮させるか、といった設計も開発者の重要なスキルであることが分かりました。
7. 結論
今回、私たちは「Python 未経験」「限られた開発期間」という状況の中で、生成 AI を活用することで、無事にスプリント内に機能をリリースすることができました。スキルや時間がない状況でも、新しい技術を駆使して「動くもの」を創り上げられたことは、大きな自信と学びにつながりました。
振り返ると、仕様書などのドキュメント作成や単体テストコードの自動生成など、AI を活用できそうな領域はコーディング以外にもあります。そういった作業は AI に任せ、エンジニアは顧客との要件調整といった創造性が必要な業務に注力することで、開発プロセスのさらなる効率化が図れるはずです。
また今回はプロジェクトの時期の都合上、Amazon Q Developer の利用が出来ませんでした。今年から日本語にも対応し始めたので、導入のハードルも大きく下がりました。今後のプロジェクトでは、より開発ライフサイクルに統合された AI アシスタントとして、その能力を検証していきたいと考えています。




