ChatGPT(GPT-4)と0から開発やってみた感想
はじめに
ChatGPT(GPT-4)を開発プロセスに導入した経験を振り返り、実体験を深掘りしてみます。開発の各段階でChatGPTをどのように活用し、その結果として見えてきた活用方法について解説します。
初期段階:要件定義
開発プロセスの最初のステップとして、要件定義では、ChatGPTがアイデアの生成と概念の設計に貢献しました。たたき台としての提案は、議論を促進し、新しい視点を提供することで、プロジェクトの方向性を定めるのに役立ちました。
機能要件の整理
ChatGPTは、プロジェクトの初期段階で機能要件を整理する際にも役立ちます。プロジェクトの目的やビジョンに基づき、必要な機能やシステムの動作条件を明確にすることは割と得意そうです。ChatGPTによって、このプロセスを加速し、より包括的な機能要件リストを作成することを可能にします。
活用方法
- 機能要件の質問リスト作成: ChatGPTに特定のプロジェクトやアプリケーションに必要な機能に関する質問をさせ、その回答を基に機能要件のリストを作成します。
- 要件の優先順位付け: ChatGPTによる提案を元に、ステークホルダーとの対話を通じて機能要件の優先順位を決定します。
ChatGPTの出力例:
質問:Eコマースアプリケーションに必要な基本機能は何ですか?
- ユーザー登録・ログイン機能: ユーザーがアカウントを作成し、ログインする機能。
- 商品閲覧機能: ユーザーが商品をカテゴリやキーワードで検索し、閲覧できる機能。
- カートに追加・購入機能: ユーザーが商品をカートに追加し、購入手続きを行う機能。
- 支払い処理機能: クレジットカードや電子マネーによる支払いを処理する機能。
- ユーザーレビュー機能: 商品に対するユーザーのレビューを投稿・閲覧できる機能。
- 管理者用ダッシュボード: 商品の追加・編集や注文状況の管理ができる機能。
DB構成の出力
DB構成の設計は、アプリケーションのパフォーマンスと保守性に直接影響を与える重要な要素です。ChatGPTは、初期のDB構成案を提案することで、このプロセスを支援します。特に、機能要件に基づいたデータの種類や関連性を分析し、それっぽいデータモデルを提案することができます。
活用方法
- データモデルの提案: 機能要件に基づいて、ChatGPTによるデータモデルの初期案を生成します。これには、テーブル構造、フィールド、データ型、リレーションシップが含まれます。
- 正規化とパフォーマンス考慮: ChatGPTに正規化の原則に基づいた提案をさせつつ、パフォーマンスの観点からの最適化提案も求めます。
ChatGPTの出力例:
質問:上記の機能要件に基づくDB構成を提案してください。
テーブル構成:
-
Users
- userId (PK)
- username
- password
- createdAt
-
Products
- productId (PK)
- productName
- productDescription
- price
- categoryId
-
Categories
- categoryId (PK)
- categoryName
-
Orders
- orderId (PK)
- userId (FK)
- totalAmount
- orderStatus
- createdAt
-
OrderDetails
- orderDetailId (PK)
- orderId (FK)
- productId (FK)
- quantity
- price
-
Reviews
- reviewId (PK)
- productId (FK)
- userId (FK)
- rating
- comment
- createdAt
リレーションシップ:
- UsersとOrdersは1対多の関係。
- OrdersとOrderDetailsは1対多の関係。
- ProductsとOrderDetailsは1対多の関係。
- ProductsとReviewsは1対多の関係。
- ProductsとCategoriesは多対1の関係。
ちなみにPluginsを使えばそのまま図式化できます。
開発段階:コーディングの現実
コード生成の有効性と限界
ChatGPTは、なんとなく正確に見えるコードを提供する能力により、開発速度の向上に貢献しました。しかし、この「なんとなく正確」なコードが、特に未知のツールや技術に対しては、誤解を招くことがあり、余計な時間を費やす原因となりました...
チーム開発と保守の観点から
チームでの開発とプロジェクトの長期的な保守を視野に入れると、ChatGPTの提案するコードの利用には慎重さが求められます。全体のコードベースとの整合性や、後々の保守性を考慮する必要があります。ここはプロジェクト全体を理解している人間の修正が必要になることがほとんどでした。
高速開発を目指して
GitHub Copilotとの比較
ChatGPTとGitHub Copilotを比較すると、公式ドキュメントに基づくCopilotの提案は、技術的な精度においてかなりそのまま使えるものを提示してくれることが多いです。一方で、ChatGPTは初期段階での概念設計やたたき台の提案において、その速度と柔軟性で優れた価値を提供してくれた印象です。
命名と型定義の課題
ChatGPTを使って実装を進める過程で、命名規則や型定義が崩壊しやすいという問題に直面しました。これは、ChatGPTが全体のコードベースやプロジェクトのコンテキストを完全には理解していないためです。その結果、細部の一貫性を保つことが難しくなりました...
現実的な活用ポイントの落とし所
ChatGPTの活用ポイントとしては以下が現実的な使い所のように感じました。(現時点では)
- 仕様策定のサポート
- コードリーディング
- それらしいコード(たたき台)を要件に応じて作成する
- 既存のコードの修正、リファクタ
総括:ChatGPTとの共存戦略
ChatGPTとの共同開発は、その可能性と同時に、明確な限界にも直面しました。開発プロセスの各段階でChatGPTを活用する際には、その提案を盲目的に受け入れるのではなく、技術的な精度とプロジェクトの目標とのバランスを見極める必要があります。ChatGPTは、特に初期段階でのアイデア生成や概念設計において、顕著な効果を発揮しますが、実装の精度やチーム開発の文脈では、その限界を認識し、適切に対処することが不可欠なようです。
ただし、すでに一定の実装スキルを持っている方にとっては、開発において有能なパートナーになってくれることは違いないです。また、プロンプトの使い方を洗練させていくことで全体的な生産性にも大きく影響するようなので、そこの技術も求められるようになるのかもしれませんね。
Discussion