GitHub Copilotを使わずに生成AIを活用してセキュアに開発効率化した話

2023年12月23日掲載

キービジュアル

こんにちは、ソフトバンクの辻です。

この記事は、ソフトバンク 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といったツール群を組み合わせることで、セキュアかつ効率的な開発環境を構築する方法について解説します。

目次

この記事は、特に以下のような方を対象としています:
  • AIを活用して開発効率を向上させたいが、セキュリティに関する懸念がある開発者
  • GitHub Copilotの代替となるツールを探している技術リーダーやマネージャ
  • Azureのエコシステムに興味があり、その中でAIを活用する方法を探求しているエンジニア

なぜGitHub Copilotを使わないのか?

GitHub Copilotの概要と利点

GitHub Copilot は、Visual Studio Codeなどの統合開発環境(IDE)の拡張機能として導入することで、開発者のコーディングを支援するAI ペア プログラマー ツールです。

OpenAI社のモデルを用いたコードの自動補完、コード例の提案、ドキュメントの生成、チャットによるサポートなど、多くの機能が提供されています。これらの機能により、開発者はコーディングをより効率的に作業を進めることができるようになります。

GitHub Copilotが使えないケース

しかし、企業において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

Azure OpenAI Serviceの概要

Azure OpenAI Service(以下、AOAI)は、Microsoft Azureが提供するサービスで、OpenAI社の強力なAIモデルをクラウド上に専用のインスタンスとしてデプロイして利用できるようにするものです。このサービスは、特に企業や開発者がセキュリティとスケーラビリティを重視しつつ、AIの機能を活用したい場合に最適なソリューションです。

また、ソフトバンクが提供する SmartVPNOnePort などとAzureの各種サービス群とを組み合わせることで閉域接続での構成も可能となり、よりセキュアなAI環境を構築することが可能です。

Azure OpenAI Serviceの主な特長

  • 大規模言語モデルの利用: GPT-3.5やGPT-4モデルなどの大規模言語モデルを提供しています。これにより、高度な自然言語処理や文章生成が可能です。
  • 柔軟なAPIのサポート: 開発者向けに柔軟なAPIサポートを提供できます。さまざまなタスクやアプリケーションに AI 機能を簡単に統合できます。テキスト分析、画像認識、音声処理などの幅広い機能を利用し、制御やカスタマイズも可能。柔軟性の高いAIソリューションを構築できます。
  • クラウドネイティブなスケーラビリティ: クラウドネイティブな環境で動作します。これにより、必要に応じてリソースをスケールアップ・ダウンし、処理能力を柔軟に調整することができます。
  • セキュリティとコンプライアンス: Microsoft Azureのセキュリティとコンプライアンス基準に準拠しています。データの暗号化、アクセス制御、監査ログなどのセキュリティ機能が提供され、企業や組織のデータ保護を支援します。OpenAIにより無料公開されているChatGPT等のサービスとは環境が異なり、Azureの高度なセキュリティで保護されています。
  • グローバルな展開: Azureのグローバルなインフラストラクチャを利用することで、Azure OpenAI Serviceは世界中の地域で利用可能です。これにより、地理的な制約を超えてサービスを展開し、ユーザに高速な応答性を提供することができます。

Azure API Management

Azure API Managementの概要

Azure API Management(以下、APIM)は、APIの公開、管理、分析、保護を行うためのAzureのフルマネージドサービスです。このサービスを使用することで、APIのライフサイクル全体を効率的に管理し、セキュリティと監視を強化することができます。

Azure API Management導入による利点

APIMを活用すると、APIの呼び出しと応答のログを保管し、これらのデータに基づいて詳細な分析を行うことができます。これにより、管理者はAPIの使用状況を正確に把握することができ、利用者の活用方法を分析したり、セキュリティ上の脆弱性やパフォーマンスの問題を早期に発見したりすることが可能になります。

今回提案する仕組みにおいて、APIMの導入は必須ではありません。しかし、AOAI単体では標準でAPIの利用ログを詳細に分析する機能が提供されていないことから、企業でのAOAIの導入においては、利用状況の分析や監視の観点で同時に導入を検討することになるコンポーネントの一つと言えます。

Genie AI

Genie AIの概要

Genie AI はVisual Studio Code(以下、VSCode)の拡張機能で、OpenAI社のAIモデルを活用してコーディングを支援するためにOSSプロジェクトとして開発されているものです。コードの自動補完やドキュメントの生成、コードの解析など、チャットベースでのサポートなど、多岐にわたる機能を提供しています。

Genie AI vs GitHub Copilot

Genie AIは、GitHub Copilotと同様の機能を提供しますが、よりカスタマイズ性が高い点が特長です。特に、OpenAI社のAPIだけでなくAOAI上にデプロイしたAIモデルのAPIも利用できるようになっているため、機密性の高いプロジェクトにおいても安全に導入することが可能です。

費用面においては、OpenAI社またはAOAIの従量課金のAPIを利用することから、開発者の数や使い方によってはGitHub Copilotよりも安価に運用できる可能性があります。

ただし、Genie AIにはGitHub Copilotの「インライン候補」に相当する機能が現段階では実装されていないため、開発効率化の効果最大化という観点では唯一劣る点かもしれません。

 GitHub CopilotGenie AI
チャット
コード補完
インライン候補

非インライン
カスタマイズ性低い高い
AOAI対応 
費用月額課金従量課金

Genie AI の導入と初期設定

Genie AIは、それぞれの開発者自身がIDEに導入・設定することが必要になります。
以下にVSCodeに導入する場合の導入方法と設定方法を示します。

まず、VSCodeにGenie AIの拡張機能をインストールします。

続いて、Genie AIの設定をするために、Genie AIの設定画面を開きます。

設定画面では以下の設定を実施します。

設定項目設定すべき値
Genieai › Azure: Url

構成に応じて以下の形式のURLを入力します。その後、APIキーの入力が求められるので、AOAIリソースのAPIキーを入力します。

AOAIのエンドポイントを直接指定する場合:
https://{aoai-resource-name}.openai.azure.com/openai/deployments/{deployment-id}/chat/completions?api-version={api-version}

APIMを経由する場合:
https://{apim-resource-name}.azure-api.net/openai/deployments/{deployment-id}/chat/completions?api-version={api-version}

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

PR-Agentの概要

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には多くの機能がありますが、代表的な機能を以下に列挙します。

  • PR自動執筆: PRのタイトルや概要を自動で生成する機能です。これにより、開発者はPRの文書作成にかかる時間を節約し、よりコーディングなどの重要なタスクに集中できます。また、一貫性のあるPR文書が生成されるため、担当メンバー間のスキルやコミュニケーション能力に差があっても、一定の品質での記述が保証されるようになります。
  • 自動レビュー: 潜在的な問題や改善点をインラインコメントで指摘する機能です。この機能によって、コードの品質を維持しつつ、レビュー時間を短縮するのに役立ちます。また、経験の浅い開発者にとっては、ベストプラクティスを学ぶ機会にもなります。
  • QA機能: PRに含まれる変更内容に関する質問にも自動的に回答することができます。これにより、PRのレビューにおける問答に開発者が拘束される時間を最小限にすることが期待できます。
  • コード提案: PRに含まれる修正において、より望ましいコードを提案してくれる機能です。自動レビューと同様に、経験の浅い開発者にとっては、ベストプラクティスを学ぶ機会にもなります。

プライベートリポジトリへの導入

企業における多くのプロジェクトにおいては、プライベートリポジトリでソースコードが管理されているかと思います。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のエンドポイントを直接指定する場合:
https://{aoai-resource-name}.openai.azure.com/

APIMを経由する場合:
https://{apim-resource-name}.azure-api.net/

AOAI_API_VERSION利用するAPIバージョン
2023-09-01-preview など
AOAI_DEPLOYMENT_IDAIモデルのデプロイ時につけた名前

また、同様に組織または対象リポジトリの 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 BusinessAOAI + 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 Azureは、Microsoftが提供するパブリッククラウドプラットフォームです。コンピューティングからデータ保存、アプリケーションなどのリソースを、必要な時に必要な量だけ従量課金で利用することができます。

MSPサービス

MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。

Azure OpenAI Service スターターパッケージ

Azure OpenAIを利用できる環境を迅速に構築し、検証することができるサービスです。セキュアな環境で安心してAIを活用することができます。

おすすめの記事

条件に該当するページがございません