BLOG
【Flutter】GitHub Copilotを業務で活用する方法について考察
今回は、GitHub Copilotの概要を簡単に紹介し、実際に業務で活用する際の制約や注意点、使い方について個人的な見解を述べます。
タイトルの結論が気になる方は、「GitHub Copilotを業務で活用するには?」を読んでいただければと思います。
GitHub Copilotについて簡単に説明
GitHub Copilotは、開発者がコードを書く際にサポートをするAIベースのプログラミング支援ツールです。
自然言語のコメントやコードの一部を入力すると、関連するコードの提案を行い、開発者が効率的にコードを書くことのサポートをします。GitHub Copilotは、現時点(2024年3月)では、OpenAIのGPTモデルをベースにしており、様々なプログラミング言語に対応しています。一部の機能(Pull request summaries)では、GPT-4を使用していることが記されています。
GitHub Copilotの機能
GitHub Copilotには、主に4つの機能があります。
1. Code completion(コード補完)
GitHub Copilot は、多数の言語とさまざまなフレームワークに対する候補を提示しますが、特に Python、JavaScript、TypeScript、Ruby、Go、C#、C++ に適していると言われています。
Dartは明記されていませんが、使用することができます。上に挙げられている言語に比べて、コード補完率や正確性はもしかしたら劣るのかもしれません。
※本記事では、他の言語やフレームワークとの比較は行なっていません。
まず、使用する言語のファイルを作成します(例えば、main.dart, main.jsなど)。
次に、関数ヘッダーなどを入力すると、Copilotからコードが提案され、そのコードを使用するか否か、ユーザーが選択できます。
→Getting started with GitHub Copilot
2. Copilot Chat(チャット)
コードに関するヘルプをCopilotに尋ねることができます。Chatに質問をすると、コードの提案や実装の手順の説明などを明示してくれます。
Copilot Chatを使用するには、プラグインの追加が必要な場合があるので、設定方法などは以下の公式ドキュメントをご参照ください。
→Getting started with GitHub Copilot
3. Pull request summaries(プルリクエストの要約)
以下のような内容の概要を作成できるAI搭載の機能です。
・Pull requestで行われた変更
・影響を受けるファイル
・レビュー担当者が注目すべきポイント
※Enterpriseプランのみ使用可能
→About Copilot pull request summaries
4. Knowledge bases(ナレッジベース)
1つのリポジトリ、または複数のリポジトリからKnowledge basesを作成することができます。
そのKnowledge basesに基づいたコンテキストを持つCopilot Chat in GitHub.comを使用することができます。
※Enterpriseプランのみ使用可能
→Managing Copilot knowledge bases
GitHub Copilotの料金プラン
GitHub Copilotのプランは3種類あります。
上記で説明した以下の二つの機能を使用するには、Copilot Enterpriseプランに登録する必要があります。
3. Pull request summaries(プルリクエストの要約)
4. Knowledge bases(ナレッジベース)
「GitHub Copilotを学習したい」「個人的に業務で使いたい」「個人開発で使いたい」などの方は、Copilot Individualプランで十分かと思います。
企業単位、プロジェクト単位などチームで使用する場合は、Copilot Enterpriseの方が良さそうです。
各プランの違いは上記の表以外にもあるので、より詳しくご覧になりたい方は、公式ドキュメントをご参照ください。
→About GitHub Copilot Individual
→About GitHub Copilot Business
→About GitHub Copilot Enterprise
GitHub Copilotを業務で活用するには?
GitHub Copilotを業務で活用する際の制約、注意点、付き合い方について述べます。
GitHub Copilotを業務で活用する際の制約
ディレクトリ・ファイル構成と言語に関する制約について述べます。
ディレクトリ・ファイル構成についての制約
業務でソースコードを書くときは、機能ごとにディレクトリやファイルが分割されています。
しかし、GitHub Copilotの機能では、1つのファイルに対してのみ、ソースコードを書くサポートを提供しています。
Copilot Chatを上手く活用すれば、ディレクトリ構成やファイル分割も提案してくれるかもしれませんが、どれを採用するかの判断はエンジニアが行わなければなりません。
そのため、エンジニアは前提知識を持ちつつ、ディレクトリやファイルの構成を検討していく必要があります。
言語についての制約
GitHub Copilotの精度は、各言語の学習量に依存します。
学習データの少ないDartは、PythonやJavaScriptなどのような人気のある言語よりもコード補完率や正確性などが落ちてしまうことが考えられます。
GitHub Copilotを業務で活用する際の注意点
GitHub CopilotのようなAIベースのコード補完ツールを使用する際に注意すべき点は、2つあります。
それは、セキュリティ上のリスクとライセンス侵害のリスクです。
セキュリティ上のリスク
セキュリティ上のリスクに関しては、大きく分けて2種類の可能性が考えられます。
ソースコードの流出によるセキュリティリスク
1つは、GitHub Copilotの学習データやGitHubやMicrosoftなどから、開発製品のソースコードが流出してしまうリスクです。しかしながら、これに関しては、GitHub Copilotの公式ページで「GitHub Copilotで使用されたソースコードや文章を含むプロンプトは破棄される」と明記されています。
"Copilot for Business does not retain any prompts—including code and other context used for the purposes of providing suggestions—for training its models or any other development of Microsoft or GitHub products. Prompts are discarded once a suggestion is returned."
GitHub Copilot Trust Center
「Copilot for Businessは、モデルのトレーニングやMicrosoftまたはGitHub製品のその他の開発のために、提案を提供する目的で使用されたコードやその他のコンテキストを含むプロンプトを保持しません。プロンプトは、提案が返されると破棄されます。」
そのため、Copilot Business又はCopilot Enterpriseを利用していれば、GitHub Copilotの学習データやGitHubやMicrosoftなどから、開発製品のソースコードが流出してしまうリスクは回避することができます。
提案された脆弱性を含むソースコードによるセキュリティリスク
Hammond Pearceらの研究では、GitHub Copilotは脆弱性を含むソースコードを提案する場合があったと報告しています。
このリスクへの対処は、どのソースコードを採用するかを検討する、レビューの際に脆弱性リスクを発見するなどプログラマーの力量に依存します。
ライセンス侵害のリスク
ライセンス侵害のリスクに対しても、GitHub Copilotの個人設定にて、「公開されているコードに一致するコード補完候補をブロックする」という設定により、ライセンス侵害のリスクを軽減することができます。
"Your personal settings for GitHub Copilot include an option to either allow or block code completion suggestions that match publicly available code. If you choose to block suggestions matching public code, GitHub Copilot checks code completion suggestions with their surrounding code of about 150 characters against public code on GitHub. If there is a match, or a near match, the suggestion is not shown to you."
Configuring GitHub Copilot settings on GitHub.com
「GitHub Copilot の個人設定には、公開されているコードに一致するコード補完候補を許可またはブロックするオプションがあります。公開コードに一致する提案をブロックすることを選択した場合、GitHub Copilot はコード補完の提案とその周囲の約 150 文字のコードを GitHub 上の公開コードと照合します。一致するか、ほぼ一致する場合、その提案は表示されません。」
GitHub Copilotとの付き合い方
GitHub Copilotの1番のメリットは、実装例をWeb上で探す時間を節約できることだと思います。
コードを書くときの細々とした知識は、補完をしてくれます。
しかし、課題をシステムに落とし込む設計力、限られた制約の中で決断し実行する力は、現状、人間にしか培えません。
そのため、GitHub Copilotを使用する際には、開発業務中に提案されるコードを都度評価し、エンジニアやプログラマー自身がその提案を受け入れるかどうかを判断することが重要です。
GitHub Copilotとうまく付き合っていくには、それが持つ制約と注意すべき点を理解することも必要です。
今回の場合は、ディレクトリ・ファイル構成や言語についての制約、セキュリティやライセンス侵害についての注意点を言及しましたが、これらを理解することでFlutterアプリ開発においてGitHub Copilotを業務でより活用しやすくなると考えています。
まとめ
本記事では、GitHub Copilotの概要を簡単に紹介し、実際に業務で活用する際の制約や注意点、使い方について個人的な見解を述べました。
GitHub Copilotの機能には、コード補完、Copilot Chat、プルリクエストの要約、ナレッジベースなどがあり、これらを活用することで効率的な開発が可能になります。
ディレクトリ・ファイル構成や言語についての制約、セキュリティやライセンス侵害についての注意点についても触れました。
コード補完により細かい知識が補われますが、設計力や制約の中での決断力は人間にしか培えません。
そのため、GitHub Copilotを使用する際には、ディレクトリ・ファイル構成・言語に制約があることを理解し、提案されるコードを都度評価することでセキュリティやライセンス侵害のリスクを考慮しながら開発を進めることが重要であると思いました。
この記事がGitHub Copilotを調べている方に少しでも参考になれば幸いです。