
大規模言語モデルによるソースコード生成:GitHub CopilotからCopilot Xへの進化と未来

こんにちは。調和技研 研究開発部の高松です。この記事では、大規模言語モデル(LLM)によるソースコード生成の能力とその進化について説明します。特に、GitHub Copilotの機能とその進化形であるGitHub Copilot Xを説明し、その効果、制限事項、及び今後の展望について考察します。
LLMとそのソースコード生成の能力
ChatGPTをはじめとするLLMの利用は非常に広範囲に渡りますが、その活用事例の一つとしてソフトウェア開発における利用があります。この記事では、まずはソースコード生成にどのように活用されているのかについて解説します。特に、GPTモデルがどのようにソースコードを学習し、それを生成する能力を持つのかについて説明します。
現在、登場している多くのLLMの学習データ(コーパス)にはプログラムのソースコードが含まれていることが多いです。ChatGPTの前身のモデルであり、GitHub Copilotに使われているOpenAI社のCodeXと呼ばれるモデルは、GPT-3をベースにGitHubのpublicリポジトリで学習したものです。大量のデータで学習しており、Pythonコードだけで、GitHubの5400万件のリポジトリから159GBのデータを学習に使っている[1]と報告されています。10以上の言語を扱えますが、特に、「Python」「JavaScript」「TypeScript」「Ruby」「Go」「C#」「C++」あたりが得意な言語と言えるようです。
自然言語よりもソフトウェアプログラムの方が構造が規則的であるため、LLMはソースコードの生成を簡単に扱うことができます。
GitHub Copilot
GitHub Copilotは最も先行しているソフトウェア生成支援サービスの1つで、前述のCodeXのモデルをベースとしてコード補完を行います。Visual Studio Code、Visual Studio、Neovim、JetBrainsなどのIDEから利用可能です。コード生成そのものはChatGPTなどでもできるわけですが、コードを書くツールに連携することで飛躍的に利用しやすくなります。
GitHub Copilotの基本的な使い方
GitHub Copilotの使い方を具体的な生成例を用いて説明します。
一般的な利用の形態は、関数の説明やシグネチャなどソースコードの途中までを入力した状態で、その続きを生成させる形になります。以下は、関数の説明とシグネチャを入力すると、その実装をCopilotが生成して提案した例です。利用者はその提案を受け入れたり、別な提案をさせるといった操作ができます。
※以降もオフィシャルサイトの例 https://github.com/features/copilot です。
複数の言語を学習しているため、こちらで決めた構造体定義とテーブル定義を参考にSELECT文を生成し、構造体に値を詰めるといったコードも生成することができます。
こちらは、テストコードを生成する例です。テスト対象の説明をコメントしたうえでテストコード(JUnit)のシグネチャを書いて生成させています。
このほか、テキストのパース処理なども厳密な定義なしに例示ベースの説明で実装するなどよくある処理は概ね対応できる感触です。
GitHub Copilotの効果と制限
GitHub Copilotの効果と制限を詳細に説明します。生産性については、厳密な効果測定がなかなか難しい部分ではありますが、GitHub自身が提供しているレポートでは、提案したコードの26%が採用され、全体で50%の生産性向上に寄与していると報告しています[2]。特に利用者の満足度は高く、当社でも利用したメンバーは、これなしでコードを書きたくないと考えるメンバーが増えています。
制限としては、正しいコードを出力する保証はなく、コンパイルが通るか、動作が正しいかを利用者側で確認する必要があります。また、LLMの常として、一度に見られる範囲(コンテキスト)は限られています。このため、例えば、自作のライブラリを利用するようなコードを書く場合、そのライブラリのヘッダだけを開いておくなど、LLMが参照する範囲をある程度ユーザ側で調整する必要があります。
GitHub Copilot X
Copilot Xは2023年3月に発表された次世代のコード生成のビジョンですが、その一部であるCopilot Chatは既に利用できるようになっています。ポイントは、モデルがGPT-4ベースとなってより高性能になったこと、及び、対話形式のインタフェースを取ることで、より利用の敷居が下がったことが挙げられます。つまり、他の人間に頼むような感覚でCopilotに指示を出すことができます。
以下は、単体テストを生成させる例です。
テスト対象を選択したうえで、「選択したコードの単体テストを書いて」と指示するだけです。前述した補完の手法に比べて、より直感的な利用ができるようになったと思います。
また、GPT-4ベースとなってコード生成の能力自体が底上げされたほか、自然言語での説明力も上がっています。以下は、コードの内容を説明される例です。対話形式になって会話のインタラクションもできるので、未知のコードを読み解いたり、デバッグを一緒に行うといった活用が見込めます。
競技プログラミング
LLMが持つコード生成能力はどれくらいなのでしょう。GPT-4が登場した際のレポートでは、競技プログラミングでの成績は下位5%[3]という数字でした。GPT-4の受け答えを知っているとかなり低く感じるのではないでしょうか。ただ、実際には人間がアシストするとかなり成績もあがります。先日、Google (DeepMind)がGeminiを発表しましたが、合わせてAlphaCode2も発表されました。Gemini Proをベースとしてチューニングを行い、競技プログラミングで上位15%の成績が出せるようになってきます[4]。
今後の展望
1つの潮流は、学習データのライセンス関係をクリーンにしたコーディング特化のLLMも性能向上が進んでおり、ChatGPT-3.5相当のモデルが出てきています。これらはモデルパラメータ規模が相対的に小さくローカル実行が可能なため、完全にクローズドな動作環境を求める状況でも利用が可能になってくるでしょう。もう1つの方向性は、ソフトウェア開発のより幅広い範囲をサポートすることです。実行環境と合わせてデバッグしたり、ChatDev[5]などは仮想のソフトウェア会社としてプログラマ、テスターなど複数のロールのAgentがチャットしながら開発をするといった内容が研究されています。
大規模言語モデルによるソースコード生成は、ソフトウェア開発の効率化に大きな可能性を秘めています。調和技研でも、希望者にはGitHub Copilotを導入していますが、一度利用するとAIアシストなしでの開発が考えられないという状況になってきています。
【参考文献】
[1]Evaluating Large Language Models Trained on Code, https://arxiv.org/pdf/2107.03374.pdf
[2]Productivity assessment of neural code completion | Proceedings of the 6th ACM SIGPLAN International Symposium on Machine Programming
[3][2303.08774] GPT-4 Technical Report ( arXiv.org e-Print archive)
[4] AlphaCode2_Tech_Report.pdf (storage.googleapis.com)
[5] [2307.07924] Communicative Agents for Software Development (arxiv.org)

研究開発部 部長。言語系AIとプロダクトを管轄。2001年に当社の母体である北海道大学 調和系研究室を卒業(修士)。B2Bミドルウェアの開発、通信関連の研究開発を経て、AI研究が再度の盛り上がりを見せてきた2019年1月、調和技研に参加。大きなうねりの中にあるAI業界に身を置くことができて、毎日スリリングです。
関連記事


OpenAI o3 & o4-mini:推論性能が向上した AIモデルの特性
- ChatGPT
- 生成系AI
- 言語系AI

LLM:量子化とファインチューニング
- 生成系AI
- ChatGPT
- 言語系AI

AI導入を成功させる!データ準備の完全ガイド

【MoA】 ローカルモデルを組み合わせてgpt-4o-miniと同等の性能?「Mixture of Agents」を試してみる
- 生成系AI
- ChatGPT
- 言語系AI

「Gemini 2.0 Flash Thinking」の画像入力を試してみる
- 生成系AI
- ChatGPT
- 言語系AI

人間のフィードバックによる強化学習とデータセット構築
- 生成系AI
- ChatGPT
- 言語系AI

OpenAI Canvas - AIと共同作業を加速する新たな作業空間 -
- 生成系AI
- ChatGPT
- 言語系AI

AI Agent Vol.3【Agent の 学習と評価】
- ChatGPT
- 生成系AI
- 言語系AI

Google のLLM「Gemini 2.0 Flash Thinking」を試してみる
- 生成系AI
- ChatGPT
- 言語系AI

【GroqCloud】 爆速回答!?GroqCloudの実力とは

【まとめ】GPT-4.5 登場!史上最強のAIモデルがリサーチプレビューを公開
- ChatGPT
- インタビュー
- 生成系AI
- 言語系AI

AI Agent Vol.2【Agent の 4つの要素】
- ChatGPT
- 生成系AI
- 言語系AI

Google のLLM「Gemini 2.0 Flash」を試してみる
- 生成系AI
- ChatGPT
- 言語系AI

2024年 年末のAI関連発表について
- ChatGPT
- 生成系AI
- 言語系AI

OpenAIが公開したLLMの事実性を評価する指標「SimpleQA」でモデルを測定してみた
- 生成系AI
- 言語系AI
- ChatGPT

AI導入に必須!PoC(概念実証)を成功させる進め方とポイント

The AI Scientist:AIによる論文の自動生成|さまざまな研究テーマを提案させてみる
- 生成系AI
- ChatGPT
- 言語系AI

AI Agent Vol. 1【Single AgentとMulti Agent】
- ChatGPT
- 生成系AI
- 言語系AI

AI活用成功に導く「AI導入アセスメント」とは――数理最適化AI事例をもとにポイントを解説

Llama 3 の日本語継続事前学習モデル「Llama-3-ELYZA-JP-8B」を試してみる
- 生成系AI
- 言語系AI
- ChatGPT

「戻れない変化」を生み出し続ける。コンサルを通して見極める業界DX実現への道筋
- インタビュー
- 生成系AI
- ChatGPT

サステナビリティ領域で活躍するAI―SDGs×AI活用事例
- 数値系AI
- 画像系AI

MetaのオープンLLM「Llama3.2 3B-Instract」の精度を検証してみた|GPT4o-miniとの比較あり
- 生成系AI
- 言語系AI

OpenAIの軽量モデル「GPT-4o mini」を試してみる
- 生成系AI
- 言語系AI
- ChatGPT

Microsoft「GraphRAG」とLangchainの知識グラフを活用したRAGを比較
- ChatGPT
- 言語系AI
- 生成系AI

Langchain+Neo4j で「GraphRAG」を実装してみる
- ChatGPT
- 生成系AI
- 言語系AI

数理最適化ソルバー活用事例|組合せ最適化で社内交流会の班分けを自動化
- 数値系AI

GoogleのマルチモーダルLLM「Gemini.1.5 Flash」の精度を検証してみる
- ChatGPT
- 生成系AI
- 言語系AI

3次元点群データを用いた物体検出
- 画像系AI

GPT-4oを活用した画像検索システムの構築方法
- 画像系AI
- ChatGPT

Pythonコーディングを簡単に|LangChainで効率化【LLMことはじめ Vol.2】
- ChatGPT
- 言語系AI
- 生成系AI

Microsoft 365 Copilot:AIによる業務効率化の革新
- ChatGPT
- 生成系AI
- 言語系AI

Google のオープンLLM「Gemma」を試してみる|GPT-3.5 Turboとの比較あり
- ChatGPT
- 生成系AI
- 言語系AI

3次元点群データとAIを用いたオガ粉の体積計測
- 画像系AI

Llama 3 の日本語継続事前学習モデル「Llama 3 Youko 8B」を試してみる|他LLMとの比較あり
- ChatGPT
- 言語系AI
- 生成系AI

RAG(Retrieval Augmented Generation)を「Command R+」で試してみた|精度をGPT-4 Turboと比較
- ChatGPT
- 生成系AI
- 言語系AI

Wood Powder Volume Calculation using Point Cloud Data and AI
- 画像系AI

Dify(ディファイ)をGoogle Cloudにデプロイしてみた
- 生成系AI

“Azure OpenAI”で始めるPythonプログラミング【LLMことはじめ Vol.1】
- 生成系AI
- 言語系AI
- ChatGPT

Combating the Malicious Use of AI-Powered Image Editing: A Deep Technical Dive
- 生成系AI
- 画像系AI

最新版「GPT-4 Turbo」を試してみた|GPT-4oとの比較あり(5/14追記)
- ChatGPT

PrecisionとRecallを何度も調べ直さないために
- 言語系AI

Stable Diffusion+LoRAを使って異常画像データを生成できるか検証してみた
- 生成系AI
- 画像系AI

AI導入の前に知っておくべき基礎知識(後編)――効率的に自業務にAIを導入するための4ステップ
- 数値系AI
- 画像系AI
- 言語系AI

配達ルート最適化AIにより作業時間80%削減を実現。成功の鍵は“人とAIの調和”
- インタビュー
- 数値系AI

AI画像生成の法的リスク(後編):著作権侵害を回避するために
- 生成系AI
- 画像系AI

AI画像生成の法的リスク(前編):著作権法の基本を学ぼう
- 画像系AI
- 生成系AI

AIというツールを使い 「生命たらしめるもの」が何かを見つけたい【調和技研✖️AIの旗手 Vol.4】
- インタビュー

AI導入の前に知っておくべき基礎知識(前編)――AIのキホンと活用事例
- 数値系AI
- 画像系AI
- 言語系AI

AIアルゴリズムの構築には、 課題の本質を見極めることが重要 【調和技研✖️AIの旗手 Vol.3】
- インタビュー

CNNで浮世絵画風変換はできるのか――Ukiyolator開発ストーリー Vol.2
- 画像系AI
- 生成系AI

住宅写真という資産をAIで利活用し、工務店とお客様をつなぐ新たなビジネスを創造
- インタビュー
- 画像系AI
- ChatGPT

シフト最適化への応用が期待される強化学習を用いた組合せ最適化の解法
- 数値系AI

多彩なサービスと紐づく「交通」の課題解決で地域の活性化や住みやすさの向上を【調和技研×AIの旗手 Vol.2】
- インタビュー

AIプロダクトを開発する際に考えるべき品質保証のキホン
- 数値系AI
- 生成系AI
- 画像系AI
- 言語系AI

Microsoft GuidanceでのFunction Calling機能の使い方とその特徴
- ChatGPT
- 言語系AI

Segment Anything Model(SAM)を使いこなそう!パラメータ設定のポイントも徹底解説
- 画像系AI

Stable Diffusionを使って異常画像データを生成できるか検証してみた
- 画像系AI
- 生成系AI

基礎から解説!数値系異常検知の概要と代表的な手法
- 数値系AI

実践!ChatGPT×Slackの具体的な連携方法と日常業務での効果的な活用事例
- ChatGPT
- 言語系AI
- 生成系AI

最先端AI技術で浮世絵を現代に再現する――Ukiyolator開発ストーリー Vol.1
- 画像系AI
- 生成系AI

PaDiMとPatchCoreどちらを選ぶべき?異常検知モデルの選択肢を見極めるポイント
- 画像系AI

社内の暗黙知を可視化するナレッジネットワークでイノベーションが生まれやすい環境に
- インタビュー
- 言語系AI

人の幸せや社会の豊かさに、AIをいかに「調和」させるか【調和技研×AIの旗手 Vol.1】
- インタビュー