フォーム読み込み中
こんにちは、ソフトバンクの辻です。
この記事は、ソフトバンク Advent Calendar 2023 の 23日目の記事です。
Happy Birthday to Me 〜♪
そうです、今日12月23日は私自身の誕生日です。昨年に引き続き記念としてこの記事を書くことにしました。
私はソフトバンクで、法人のお客さま向けに提供する Azure OpenAI Service スターターパッケージ のChatUIの開発を担当しています。今年は、OpenAI社のChatGPTをはじめとする生成AIの進歩が顕著な1年でした。これらの進化は、開発プロセスにも革命をもたらしはじめています。
とりわけ、GitHub Copilotはその最たる例であり、OpenAI社のAIモデルを活用して開発者のコーディング作業を強力にサポートしてくれるツールとして知られていますが、GitHub Copilotは企業での導入が難しい場合もあります。
この記事では、GitHub Copilotを使わずに、Azure OpenAI Service、Azure API Management、Genie AI、PR-Agentといったツール群を組み合わせることで、セキュアかつ効率的な開発環境を構築する方法について解説します。
GitHub Copilot は、Visual Studio Codeなどの統合開発環境(IDE)の拡張機能として導入することで、開発者のコーディングを支援するAI ペア プログラマー ツールです。
OpenAI社のモデルを用いたコードの自動補完、コード例の提案、ドキュメントの生成、チャットによるサポートなど、多くの機能が提供されています。これらの機能により、開発者はコーディングをより効率的に作業を進めることができるようになります。
しかし、企業においてGitHub Copilotを活用するにあたって、いくつかの懸念事項が挙げられる場合があります。
第一に挙げられるのはセキュリティの問題です。GitHub CopilotはクラウドベースのSaaSサービスであり、ソースコードを外部のサーバに送信する必要があります。これは、セキュリティ意識の高い企業や、機密性の高いプロジェクトにおいて、セキュリティリスクと判断される可能性があります。
また、GitHub Copilotは個人の場合は$10/月、法人の場合は1ユーザあたり$19/月の課金が必要となる有償のサービスです(記事執筆時点)。スモールスタートしたいプロジェクトや、開発者が多いプロジェクトでは1ユーザあたり$19/月は大きい出費という判断になる可能性もあります。
月額 | 年額 | |
---|---|---|
個人利用の場合 GitHub Copilot Individual | $10 | $100 |
法人利用の場合 GitHub Copilot Business | $19/ユーザ | - |
学生、教師、OSSメンテナー | 無料 | 無料 |
これらの背景から、本記事ではGitHub Copilotの代わりに、Azure OpenAI Service(AOAI)、Azure API Management(APIM)、Genie AI、PR-Agentを組み合わせたアプローチを提案します。これらのツール群の導入により、十分なセキュリティを確保しつつ、開発プロセスの効率化と自動化を実現します。また、従量課金での運用が可能となることから、プロジェクトの規模や体制によってはコスト削減につながる可能性もあります。
Azure OpenAI Service(以下、AOAI)は、Microsoft Azureが提供するサービスで、OpenAI社の強力なAIモデルをクラウド上に専用のインスタンスとしてデプロイして利用できるようにするものです。このサービスは、特に企業や開発者がセキュリティとスケーラビリティを重視しつつ、AIの機能を活用したい場合に最適なソリューションです。
また、ソフトバンクが提供する SmartVPN や OnePort などとAzureの各種サービス群とを組み合わせることで閉域接続での構成も可能となり、よりセキュアなAI環境を構築することが可能です。
Azure API Management(以下、APIM)は、APIの公開、管理、分析、保護を行うためのAzureのフルマネージドサービスです。このサービスを使用することで、APIのライフサイクル全体を効率的に管理し、セキュリティと監視を強化することができます。
APIMを活用すると、APIの呼び出しと応答のログを保管し、これらのデータに基づいて詳細な分析を行うことができます。これにより、管理者はAPIの使用状況を正確に把握することができ、利用者の活用方法を分析したり、セキュリティ上の脆弱性やパフォーマンスの問題を早期に発見したりすることが可能になります。
今回提案する仕組みにおいて、APIMの導入は必須ではありません。しかし、AOAI単体では標準でAPIの利用ログを詳細に分析する機能が提供されていないことから、企業でのAOAIの導入においては、利用状況の分析や監視の観点で同時に導入を検討することになるコンポーネントの一つと言えます。
Genie AI はVisual Studio Code(以下、VSCode)の拡張機能で、OpenAI社のAIモデルを活用してコーディングを支援するためにOSSプロジェクトとして開発されているものです。コードの自動補完やドキュメントの生成、コードの解析など、チャットベースでのサポートなど、多岐にわたる機能を提供しています。
Genie AIは、GitHub Copilotと同様の機能を提供しますが、よりカスタマイズ性が高い点が特長です。特に、OpenAI社のAPIだけでなくAOAI上にデプロイしたAIモデルのAPIも利用できるようになっているため、機密性の高いプロジェクトにおいても安全に導入することが可能です。
費用面においては、OpenAI社またはAOAIの従量課金のAPIを利用することから、開発者の数や使い方によってはGitHub Copilotよりも安価に運用できる可能性があります。
ただし、Genie AIにはGitHub Copilotの「インライン候補」に相当する機能が現段階では実装されていないため、開発効率化の効果最大化という観点では唯一劣る点かもしれません。
GitHub Copilot | Genie AI | |
---|---|---|
チャット | ✔ | ✔ |
コード補完 | ✔ インライン候補 | ✔ 非インライン |
カスタマイズ性 | 低い | 高い |
AOAI対応 | ✔ | |
費用 | 月額課金 | 従量課金 |
Genie AIは、それぞれの開発者自身がIDEに導入・設定することが必要になります。
以下にVSCodeに導入する場合の導入方法と設定方法を示します。
まず、VSCodeにGenie AIの拡張機能をインストールします。
続いて、Genie AIの設定をするために、Genie AIの設定画面を開きます。
設定画面では以下の設定を実施します。
設定項目 | 設定すべき値 |
---|---|
Genieai › Azure: Url | 構成に応じて以下の形式のURLを入力します。その後、APIキーの入力が求められるので、AOAIリソースのAPIキーを入力します。 AOAIのエンドポイントを直接指定する場合: APIMを経由する場合: |
Genieai › Openai: Model | プルダウンの候補からAOAIにデプロイしたモデルと合致するものを選択 |
Genie AIは標準設定では英語で回答を返してくるため、これを日本語にしたい場合は以下のように設定します。言語指定以外に追加の指示を追加することで、さらなるカスタマイズも可能です。
設定項目 | 設定すべき値 |
---|---|
Genieai › Prompt Prefix: Add Tests | このコードのテストを実装してください。 |
Genieai › Prompt Prefix: Find Problems | このコードのバグを見つけてください。 |
Genieai › Prompt Prefix: Optimize | このコードを最適化してください。 |
Genieai › Prompt Prefix: Explain | このコードを日本語で説明をしてください。 |
Genieai › Prompt Prefix: Add Comments | このコードに日本語のコメントを追加してください。 |
Genieai › Prompt Prefix: Complete Code | このコードを完成させてください。 |
ここまでの設定でGenie AIを利用できるようになっています。
実際のソースコードを開いて使ってみます。
GitHub Copilotのようにインライン候補機能は使えませんが、使い方次第でコード補完を実現することもできます。
例えば、
function now() {
// 現在日時を取得
// 取得した現在日時を表示
}
というように実現したい処理をコメントとして記述しておき、Genie AIにコード補完を依頼するには、補完したいコードを選択して右クリックし Genie > Genie: Complete code を実行すると、チャット画面で
function now() {
// 現在日時を取得
let currentDate = new Date();
// 取得した現在日時を表示
console.log(currentDate);
}
のように期待したロジックのコードを自動生成してくれ、このコードで問題なければ Insert ボタンでファイルに挿入することができます。
チャット画面では、もちろん通常のチャットのようにAIと対話することも可能です。
PR-Agent は、開発リポジトリのCI(Continuous Integration)ワークフローに統合することで、プルリクエスト(PR)の作成と管理を自動化するツールで、イスラエルのCodiumAI社がOSSプロジェクトとして開発しているものです。このツールは、PRのタイトルや概要の自動生成、ソースコードのレビュー、さらには変更内容に対する質問への回答など、開発プロセスの大幅な効率化が期待できる機能を持っており、GitHub以外のVCS(Version Control System)にも対応しています。
GitHubも Copilot for Pull Requests というプロジェクトで同様の機能を開発しており、一部でベータ提供が始まっていますが、これはGitHub Copilotと同様に有償での提供となることが予想されます。
PR-Agentには多くの機能がありますが、代表的な機能を以下に列挙します。
企業における多くのプロジェクトにおいては、プライベートリポジトリでソースコードが管理されているかと思います。PR-Agentの導入にはいくつかの導入方法が用意されていますが、GitHubのプライベートリポジトリに導入する場合はGitHub Actionsを利用することになります。
GitHub Actionsのワークフローの例を以下に示します。
on:
pull_request:
issue_comment:
jobs:
pr_agent_job:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
contents: write
name: Run pr agent on every pull request, respond to user comments
steps:
- name: PR Agent action step
id: pragent
uses: Codium-ai/pr-agent@main
env:
OPENAI.API_TYPE: azure
OPENAI.API_BASE: ${{ vars.AOAI_API_BASE }}
OPENAI.API_VERSION: ${{ vars.AOAI_API_VERSION }}
OPENAI.DEPLOYMENT_ID: ${{ vars.AOAI_DEPLOYMENT_ID }}
OPENAI_KEY: ${{ secrets.AOAI_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_REVIEWER.EXTRA_INSTRUCTIONS: "Please use Japanese in descriptions."
PR_DESCRIPTION.ADD_ORIGINAL_USER_DESCRIPTION: true
PR_DESCRIPTION.EXTRA_INSTRUCTIONS: "Please use Japanese in descriptions. Titles should have prefix of commitlint pattern such as `feat:`, `chore:`, `test:`, `fix:`, `ci:`, `docs:` etc"
PR_CODE_SUGGESTIONS.EXTRA_INSTRUCTIONS: "Please use Japanese in descriptions."
PR_UPDATE_CHANGELOG.EXTRA_INSTRUCTIONS: "Please use Japanese in descriptions."
github_action.auto_review: "true"
github_action.auto_describe: "true"
github_action.auto_improve: "true"
上記のワークフロー設定では、PR-Agentを実行する際の追加指示として、日本語を使用してPRやコメントを記述するようなプロンプトを与えています。これにより、デフォルトでは英語で記述される仕様を変更することができます。この仕組みを応用することで、より高度なカスタマイズを加えていくこともできます。
なお、このワークフローを実行するには、組織または対象リポジトリの Variables に以下の設定を入れておく必要があります。
Key | 設定すべき値 |
---|---|
AOAI_API_BASE | AOAIのエンドポイントを直接指定する場合: APIMを経由する場合: |
AOAI_API_VERSION | 利用するAPIバージョン 2023-09-01-preview など |
AOAI_DEPLOYMENT_ID | AIモデルのデプロイ時につけた名前 |
また、同様に組織または対象リポジトリの Secrets に以下の設定を入れておきます。なお、 GITHUB_TOKEN はGitHub Actionsの仕様として、実行時に自動的に生成されるシークレットであるため明示的な設定は不要です。
Key | 設定すべき値 |
---|---|
AOAI_API_KEY | デプロイしたAOAIリソースのAPIキー |
実際にPRが作成されるとワークフローが動作し、以下のように修正内容の解析結果から対象のPRのタイトルや本文が自動で更新されます。
また、同時に自動でレビューも行われ、以下のような自動レビュー結果と、修正すべき箇所にはインラインのコメントが投稿されます。
これまでご紹介してきたツール群を、私が現在取り組んでいるアプリケーションの開発プロジェクトに導入してみました。
このプロジェクトは、ソフトバンクのGitHub組織上のプライベートリポジトリでソースコードを管理しており、すでにGitHub Actionsを利用したCI/CDワークフローも存在していました。また、このプロジェクトにはNuxt 3 (Vue 3, TypeScript)やFlask (Python 3.10)で書かれたいくつかのリポジトリが存在しており、その全てに導入しています。
実際に構築した構成を以下の図に示します。
これらのツール群の導入により、開発メンバーのコーディングやドキュメント執筆、コードレビューに要する時間を大幅に削減できています。
従来はコーディング中の不明点や疑問点はGoogleなどの検索エンジンで検索して調べたり、有識者に質問する必要がありました。Genie AIの導入により、これらの多くの場合はGenie AIに質問することで解決できるようになりました。
また、機密性の高いソースコードであっても、AOAIのエンドポイントを使っているGenie AIであれば漏えいのリスクを気にすることなく引用することもできます。
プルリクエストに関しては、従来はPR起票者がPRのタイトルや本文を執筆しており、PRへの記述レベルを平準化することを目的にテンプレートも導入していましたが、開発者ごとに記載の粒度や内容がバラバラになりがちでした。PR-Agentの導入により、PRの執筆はAIに任せることができるようになり、開発者がこういった作業に時間を割くこと自体が無くなり、統一されたフォーマットで一定の記述レベルで記載されるためレビュアーにとっても読みやすいPRが作成されるようになりました。
また、PR作成と同時にAIが自動的にコードレビューや修正の提案をしてくれるため、一次レビューとフィードバックのスピードが飛躍的に向上し、レビュアーの負荷軽減にも繋がっています。
さらに、AIのコメントはベストプラクティスに基づいていることから、経験の浅い開発者に対する教育面でも役立っています。
一方で、AIが全て正しいということもなく、的外れなコメントや提案をされることもあるため、その提案を採用するか否かは人間の目でしっかりと精査する必要があります。このあたりは現時点の全ての生成AIに言える課題でもあり、今後の進化に期待したいところです。
現在のプロジェクトは9名程度の開発者がおり、もしGitHub Copilotを導入していた場合は$19 × 9名 = $171の費用が毎月かかっていた計算になります。一方で今回の仕組みを数ヵ月運用したところ月額費用は平均$79と、GitHub Copilotを導入した場合の半額以下という結果でした。今後さらに使いこなしていくことで月額費用が増えることも考えられますが、それを見越しても十分なコスト削減効果があったと判断しています。
GitHub Copilot Business | AOAI + APIM + GenieAI + PR-Agent | |
---|---|---|
月額費用 | $19 × 9名 = $171 | $79 ※Azure従量課金費用の平均 |
※全てのプロジェクトにおいてこの結果を保証するものではありません。
※Azureの従量課金費用は、要件次第で大きく変動する可能性があります。
この記事では、GitHub Copilotの代替として、Azure OpenAI Service、Azure API Management、Genie AI、PR-Agentを組み合わせて使用することで、セキュアかつ効率的な開発環境を構築する方法について詳しく説明しました。これらのツールは、開発プロセスの自動化、コードの品質向上、セキュリティの確保という、企業でのソフトウェア開発における主要な要件を満たすものです。
生成AIと自動化の技術は日々進化しており、今後も新しいツールや機能が登場することが予想されます。これらの進化に伴い、開発プロセスのさらなる効率化とセキュリティの強化が可能になるでしょう。また、これらのツールの適切な組み合わせと使用方法を理解することが、開発チームの生産性を最大化する鍵となります。
この記事が、読者の皆さんにとって、生成AIを活用したセキュアな開発環境の構築への一助となれば幸いです。
いよいよ ソフトバンク Advent Calendar 2023 も大詰めを迎えます。それでは 24日目の記事にバトンを渡します。
Microsoft Azureは、Microsoftが提供するパブリッククラウドプラットフォームです。コンピューティングからデータ保存、アプリケーションなどのリソースを、必要な時に必要な量だけ従量課金で利用することができます。
MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。
Azure OpenAIを利用できる環境を迅速に構築し、検証することができるサービスです。セキュアな環境で安心してAIを活用することができます。
条件に該当するページがございません