こんにちは、スクーティー代表のかけやと申します。
弊社は生成AIを強みとするベトナムオフショア開発・ラボ型開発や、生成AIコンサルティングなどのサービスを提供しており、最近はありがたいことに生成AIと連携したシステム開発のご依頼を数多く頂いています。
コーディング作業において、生成AIの活用はもはや新しい常識となりつつあります。しかし、多くの開発者やプログラマーが、どの生成AIツールが自分のプロジェクトに最適か、どのようにしてコード生成を効果的に行えるかについて、まだまだ検討中なのではないでしょうか。
生成AIによる自動コーディングツールは、コードの自動生成からバグの指摘・修正、新しいプログラミング言語の学習支援まで、開発プロセスのあらゆる段階を支援してくれます。
この記事では、生成AIを用いたコード生成の基本原理、おすすめのツール、そしてそれらを活用することで開発作業がどのように変わるかを解説します。
生成AIコーディングの基本
生成AIとは何か?
生成AIとは、人間のように新しいコンテンツ(テキスト、画像、音楽など)を作り出す能力を持つ人工知能のことです。
通常のAIがデータを分析し、パターンを認識して特定のタスクを実行するのに対し、生成AIは与えられた入力から新しいデータを「生成」します。例えば、文章を書いたり、絵を描いたりすることができます。
この違いは、生成AIが単にデータを分析するだけでなく、その分析を基に「創造的な作業」を行える点にあります。従来のAIは、あらかじめ定義されたルールやパターンに基づいて動作しますが、生成AIはこれらのルールを超えて、まるで人間が新しいアイデアを思いつくように、新しいコンテンツを生み出すことができます。
生成AIの応用例には、自動記事作成、音楽制作、画像や動画の生成などがあります。これらの技術は、クリエイティブな作業を助け、時間を節約し、新しい表現の可能性を広げることが期待されています。
そして、生成AIが生成できるものの一つに「プログラム」があります。
生成AIについてより詳細に知りたい方は別の記事「【生成AI入門】わかりやすく解説:テキストと画像生成の世界」をご覧ください。
コーディングにおける生成AIの役割
生成AIはコーディングプロセスにおいて重要な役割を果たします。生成AIや、生成AIを利用したツールを活用することで、開発者はコードの自動生成、バグの特定と修正、さらに新しいプログラミング言語の習得を効率的に行うことができます。
生成AIを活用したコーディング支援ツールは、プロンプトを介した人間の指示に基づき「ほぼ」正確なコードを生成します(もちろん、人間の手による修正は必要です)。これにより、プログラマーは手作業でのコーディングに費やす時間を大幅に削減し、より創造的な業務に集中することができます。
今まではフレームワークのScaffoldingなどを利用して、汎用的なコードを自動生成することはできていましたが、今後はビジネスロジック固有のコードを生成AIが作成する時代です。生成AIが70%程度の品質のものをサッと作り、人間の手でよりエレガントに仕上げていく、というのが今後のプログラミングスタイルになりそうです。
生成AIを活用したコーディングのメリット
生成AIによるコーディングの最大のメリットは、開発プロセスの効率化と品質向上にあります。手作業でのコーディングに比べて時間と労力を大幅に削減することが可能です。
また、生成AIは潜在的なバグを早期に特定し、修正案を提案することで、ソフトウェアの品質向上にも貢献します。
生成AIの生成するプログラムはまだまだ完璧というには程遠いですが、それでも人間のように勘違いや非合理的な単純ミスをすることはありませんし、疲れによる思考能力の低下もありません。
人間が実現可能なタイピング速度よりも圧倒的に早いスピードでプログラムを出力できるため、適材適所でうまく活用できれば、コーディングのスピードと品質を劇的に上げることができると言えます。
生成AIによるコーディングの実践
プロジェクトに最適なツールの選び方
プロジェクトに最適な生成AIコーディングツールを選ぶには、いくつかの重要なポイントを考慮する必要があります。
まず、ツールがサポートするプログラミング言語と、プロジェクトで使用される言語が一致しているかを確認することです。これは前提条件になるので、必須の確認事項です。
次に、コード生成の精度と、バグの特定や修正機能がプロジェクトの要件に合致しているかも重要です。ただしこの点は、人間の手をいれることで改善、あるいは解決できるため、優先度としては低いと言えます。
また、ツールが提供する学習リソースやサポート体制も、開発チームが新しい技術を効率的に習得する上で役立ちます。具体例として、オープンソースのツールはカスタマイズ性が高い一方で、商用ツールは使いやすさやサポート面で優れている場合が多いです。
最後に、プロジェクトの規模、予算、チームの技術レベルに合ったツールを選択することが、成功に繋がります。予算をある程度避けるのであれば、有料ツールを使ったほうが精度や出力速度の面で効果的と思われます。
開発効率を上げる生成AIによるコード生成のテクニック
開発効率を上げるためのコード生成テクニックには、生成AIを活用したいくつかの効果的な方法があります。まず、プロジェクトの要件に基づいて適切な生成AIツールを選択することが重要です。この選択は、サポートされるプログラミング言語、生成されるコードの品質、そしてツールのユーザビリティに依存します。次に、開発プロセスを効率化するためには、生成AIツールのカスタマイズ機能を最大限に活用し、プロジェクト特有の要件に合わせて調整することが勧められます。
具体例として、テンプレートやフレームワークを用いて、一般的なコードパターンの自動生成を設定することができます。これにより、開発者は繰り返し発生するタスクに対して、時間を節約し、エラーの可能性を減らすことができます。また、AIによるコードレビュー機能を利用することで、バグの早期発見と修正が容易になり、全体の開発サイクルが短縮されます。
開発効率を上げるコード生成のテクニックでは、適切なツールの選択、カスタマイズの活用、そしてテンプレートやAIレビュー機能の利用がキーとなります。これらのテクニックを適切に組み合わせることで、開発プロセスの効率化と品質向上が実現します。
生成AIを用いたバグ修正と最適化
生成AIを用いたバグ修正とコードの最適化は、ソフトウェア開発の効率性と品質を大幅に向上させることができます。この技術は、コード内の潜在的なバグを自動的に識別し、修正案を提案する能力を持っています。また、コードの最適化においても、生成AIは実行効率やメモリ使用量を改善するための提案を行うことが可能です。
具体的には、生成AIはプログラムの動作を分析し、パフォーマンスのボトルネックや非効率なコードセクションを特定します。その後、これらの問題を解決するための改善策やリファクタリングの提案を行い、コードの品質と効率を向上させます。たとえば、反復処理をより効率的なアルゴリズムに置き換えることや、不要なメモリ割り当てを削減することが挙げられます。
結論として、生成AIを活用したバグ修正とコードの最適化は、開発プロセスにおける時間とコストの削減に寄与するだけでなく、最終的なソフトウェア製品の品質を高めるための重要な手段です。この技術により、開発者はより複雑で高度な問題に集中することができるようになります。
おすすめの生成AIコーディングツール
ここでは、生成AIを活用してプログラムを自動生成できるツールをいくつか紹介します。
また、本記事では生成AIを活用したコーディングツールについて記載していますが、それ以外のツールやサービスに興味がある方は、「生成AI無料ツールおすすめ15選:2023年12月版」を御覧ください。
GitHub Copilotの基本的な使い方
まずは、GitHub Copilotです。
GitHub Copilotは、開発者の生産性を向上させ、ソフトウェア開発のペースを加速させるAIベースのコーディングアシスタントです。リアルタイムでコード補完を提案し、プロジェクトのコンテキストとスタイル規約に基づいて自然言語プロンプトをコーディング提案に変換します。また、組織の知識ベースに基づいたパーソナライズされた回答を提供し、プルリクエストの説明を提案する機能も備えています。
個人開発者、フリーランサー、学生、教育者向けの「Copilot Individual」プランと、エンジニアリングの速度とコード品質を向上させたい組織向けの「Copilot Business」および「Copilot Enterprise」プランを提供しています。個人プランは月額$10USDまたは年額$100USDで、学生や教育者、人気のオープンソースプロジェクトの参加者には無料です。
Visual Studio Code、Visual Studio、JetBrains IDEs、Neovimなどの主要なエディターに統合されており、GitHub CLIを通じてターミナルでも利用可能です。GitHub Copilotは、公開リポジトリにあるすべての言語でトレーニングされており、提案の質はトレーニングデータの量と多様性に依存します。
GitHub Copilotは、開発者がより価値のある作業、イノベーション、そして幸福に集中できるように、ソフトウェア開発ライフサイクル全体でコンテキスト化されたアシスタンスを提供します。Copilotを使用する開発者は、仕事に対する満足度が最大75%高く、コードを書く生産性が最大55%向上すると報告しています。
Cursorの基本的な使い方
次にCurosorです。
CursorはAIファーストのコードエディタで、AIとのペアプログラミングに特化した環境を提供します。プロジェクト固有の情報を理解し、コードベースに関する質問に答え、ドキュメントやコード定義への参照、低レベルロジックの記述支援など、開発者の生産性を向上させる機能を備えています。自然言語での編集や、シンプルな指示からのコード生成、次の編集を予測するCopilot++など、高度なAI機能を利用できます。
CursorはVSCodeのフォークであり、VSCodeの拡張機能、テーマ、キーバインディングをワンクリックで移行できます。プライバシーモードでは、コードをサーバーやログに保存せず、プライバシーを保護します。
価格に関しては、基本プランは無料で、月に50回のGPT-4(遅い)と200回のGPT-3.5使用が可能です。Proプランは月額$20で、500回のGPT-4(高速)使用、無制限のGPT-4(遅い)とGPT-3.5使用、無制限のCopilot++補完が含まれます。ビジネスプランはユーザーあたり月額$40で、Proプランの全機能に加え、集中請求やプライバシーモードの強制、OpenAIゼロデータ保持が可能です。
GitHub Copilotと比較して、CursorはVSCodeの拡張機能としてではなく、独立したAIファーストのコードエディタとして設計されています。特に、プロジェクト固有の情報を理解し、自然言語での編集やコード生成をより深くサポートするCopilot++など、より高度なAI機能を提供します。また、プライバシーモードによるコードのプライバシー保護も大きな特徴です。
SonarSourceによる品質保証付きAIコーディング
次はSonarSourceという、オープンソースの品質管理プラットフォームであるSonarQubeの一つの機能で、正直筆者はノーマークだったのですが、ChatGPTが教えてくれました。
SonarSourceは、AIによって生成されたコードの品質、セキュリティ、信頼性を保証するためのソリューションを提供します。生成AIコーディングツールや生成AI(GitHub Copilot、Cursor、ChatGPTなど)によって生成されたコードが、人間が書いたコードと同様の品質問題を抱える可能性があるため、SonarSourceはこれらの問題を検出し、修正するのに役立ちます。SonarQube、SonarCloud、SonarLintは、開発者がAIと人間の両方によって作成されたコードのリスクを最小限に抑え、コード品質を確保し、より価値のあるコードを持続可能な方法で生み出すのを支援します。
SonarSourceのソリューションは、静的コード分析により、バグや脆弱性を検出し、IDE内やDevOpsワークフロー内でのコードの問題の修正を支援します。30以上の言語に対応し、数千のルールを備えた強力な静的コード分析を提供し、組み込みのレビューワークフローとレポートにより、修正に役立つ実用的なレポートを提供します。
VScode拡張機能Phind
最後はツールそのものではなく、人気のIDEであるVScodeの拡張機能で、プログラミング言語に特化したPhindという言語モデルを連携するというものです。
Phindは開発者向けの回答エンジン(AI版Stack Overflowのようなもの)で、生成AIを利用して数秒で解答を提供します。インターネットやオプションでコードベースに接続し、適切なコンテキストを維持することができます。特に、VS Code拡張機能を通じてエディタ内で直接Phindの支援を受けることが可能です。
Phindのモデルは、GPT-4のコーディング能力に匹敵またはそれを超える性能を持ち、GPT-4に比べて5倍の速度で動作します。具体的には、技術的な質問に対する高品質な回答を10秒で提供でき、HumanEvalスコアでは74.7%のパス率を達成しています。このモデルは、70B以上の高品質なコードと推論問題にファインチューニングされています。
PhindのVS Code拡張機能を使用すると、コードベースのコンテキストを使用して質問に答えることができます。具体的な機能としては、選択したコードに基づいて新しいチャットを開始する、現在の選択を既存のチャットに追加する、選択したコードを自動的に指示に基づいて書き換える、ターミナルの出力について質問する、などがあります。
PhindとGPT-4を比較すると、Phindは特にコーディングに関する質問に対して、より高速で正確な回答を提供する点で優れています。また、最大16kトークンのコンテキストサポートを提供し、これによりより広範なコードベースにわたる複雑な問題に対処できます。ただし、一部の難しい質問に対しては、正しい答えに到達するまでにGPT-4よりも多くの生成を必要とする場合があるとのことです。
PhindのウェブサイトやVS Codeマーケットプレイスのページから無料で利用開始することができます。
生成AIコーディングの未来と課題
コーディングの未来像
生成AIによるコーディングは、開発プロセスの根本的な変化を促します。今後、AIはプログラミング作業をより効率的かつ精密に行うためのコア技術となり、コード生成、バグ修正、さらには新しいプログラミング言語の学習支援まで、あらゆる段階で開発者を支援するでしょう。この進化は、開発サイクルを加速し、ソフトウェアの品質向上に寄与します。
しかし、この未来像を実現するには、いくつかの課題が存在します。例えば、生成されるコードの精度と信頼性を確保することや、AIが生成するコードのセキュリティ問題などが挙げられます。
生成AIのセキュリティに関する問題は実例などに関しては、「企業が知るべき生成AIのセキュリティリスクと具体的な対策」を御覧ください。
これらの課題に対処するためには、AIモデルのトレーニングにより多様で質の高いデータセットを使用し、AIの意思決定プロセスを開発者が理解しやすいようにする必要があります。
いずれにしても、今後AIの生成するコードの品質が上がっていくことは間違いないでしょう。今はせいぜい一つの関数程度の規模のコードを生成するのが限界ですが、それがクラス単位になり、いずれはプロジェクト単位になっていくと思われます。
そうすると、人間の技術者に求められるのは要件定義やアーキテクチャ設計など大枠を決めるところまでで、細部は基本的にAIにまかせてしまうという時代も来るのかもしれません。便利ではありますが、一方でプログラマは将来のキャリアパスを、AIと同居することを前提に考えないのでしょうね。
生成AIの限界と課題への対処法
生成AIコーディング技術の主な課題には、前述した通り、生成されるコードの精度とセキュリティ、開発プロセスへの適切な統合、そして開発者のスキルとAIの能力のバランスなどが挙げられます。これらの課題への対処法は、技術の進歩とともに解決されていくものと思われます。
コードの精度とセキュリティに関しては、より高度な機械学習モデルの開発とトレーニングデータの質の向上が鍵となります。
また、生成AIツールの出力を検証するための厳格なテストフレームワークの導入も必要です。開発プロセスへの統合では、AIツールを既存の開発環境に柔軟に組み込むためのインターフェースやAPIの改善が求められます。
開発者は今後ソフトウェア開発に関するスキルだけでなく、AIツールをいかに使いこなすかといった能力も問われてくるでしょう。したがって、教育とトレーニングが重要となります。
開発者には、AIツールを効果的に活用するための知識とスキルを提供する必要があります。これには、AIが生成するコードを理解し、適切に修正および改善する能力が含まれます。
最終的に、これらの課題に対処するためには、開発者、企業、教育機関が協力し、技術の進歩、教育プログラムの開発、そしてベストプラクティスの共有に努める必要があります。これらの取り組みにより、生成AIコーディング技術の潜在的な限界を超え、その全能力を引き出すことが可能になります。