大手ゲーム企業から転職して実感した圧倒的成長。エンジニアの技術的挑戦を支えるミスリルのカルチャーとは | MYTHRIL Inc.
こんにちは!ミスリル株式会社の成岡です。今回は現場で活躍している社員へインタビューを行い、ミスリルでの仕事内容や、実際に働いてみて感じたことについて、たっぷりと語ってもらいました!ミスリル入社後...
https://www.wantedly.com/companies/company_3239475/post_articles/505535
当社ミスリル株式会社では、エンジニアの生産性を高めるため、希望エンジニア社員全員に対してGitHub Copilotを導入することが決定されました!
導入までの検証結果とそこから見えてきたGitHub Copilotの活用テクニックを紹介したいと思います。
生産性向上の観点で注目されているGitHub Copilotですが、ゲーム開発における有用性はどの程度なのでしょうか?
当社のAI活用プロジェクトから有志のエンジニアメンバーが、1ヶ月間現場で使い倒して検証したので、その結果の一部をご紹介します。
※ AI活用プロジェクトとは、AIをゲーム開発の現場で応用するための検証・ツール作成・ワークフロー整備を目的とした社内プロジェクトです。興味がある方は下記記事もご参照ください。
GitHub CopilotとはAIを活用したコーディング支援ツールです。具体的には、コードを書き始めるとエディタの自動補完機能のようにコードの候補を提案する機能があります。従来の自動補完とは違い、「ここで書きたいコードを前後の文脈から汲み取って提案してくれる」使用感があることが特徴です。
裏側にはGPTをベースにした大規模言語モデルがあります。世界中の大量のオープンソースコードで学習されており、パブリックリポジトリで使用されている全てのプログラム言語をカバーしています。
またVisual Studio, Visual Studio Codeだけでなく、 RiderなどのJetBrainsのIDEとも簡単に連携できるため、多くのプロジェクトに導入しやすいことも特徴です。
GitHub Copilotを効果的に使いこなすためには、ChatGPT同様に、コンテキストを正確に与えることが重要です。大量のコードを学習したGitHub Copilotですが、前後のコードが無い空ファイルだけが与えられても、何が求められているのかを推論することは難しいということです。
GitHub Copilotは、現在編集中の箇所の前後のコード、コメント情報、あるいはIDEが開いているファイルの情報(後で詳しく説明します)など、様々な情報をコンテキストとして取得しています。
コンテキストの精度がコード提案の品質と密接に関連しているという特徴から、以下のような得意・不得意があることがわかります。
※ AI技術は日々進化していますので、ここで紹介するGithub Copilotの特徴やテクニックは半年後には古くなっているかも知れません。この記事は2023年6月時点の情報を基にしていることをご了承ください。
ここからは具体的な利用方法について見ていきましょう。
※ 例に出るソースコードは、この記事専用のサンプルとして用意しました。
GitHub Copilotに最もストレートにコンテキストを提供する方法は、コードを書く前にやりたいことをコメントとして記述することです。
例として「データベースから指定したuserIdのユーザーデータを取得する」コードをCopilotに提案させたASP.NET Core (C#)のコードを示します。
取得の方法など細かく指定することなく、人間向けに書く通常のコメントの粒度であっても十分な精度の提案を出してくれました。
人間がコードを提案するとしたら、頭の中で例えば以下のような情報処理が行われると思います。
こうした情報を開発者が明示的に指定することなく、GitHub Copilotが暗黙的にコンテクスト情報として収集しています。そのため、シンプルなコメントを書くだけで、「空気を読んで、コード提案をしてくれた」という感覚が得られました。
開発中のプロジェクトにおいて、「このコードは読みにくいからコメントを付け足したい」と思った時もGitHub Copilotは役立ちます。コメントを開始して1秒ほど待つと、前後のコードの内容に基づいた最適なコメントを提案してくれます。
こちらはグラフ探索のPythonコードでコメントを補完させた例で、コメントが入ることでコードの可読性が向上しています。
GitHubによれば、IDEを使っている場合、編集中のファイルだけでなく、開いている別タブのファイル情報も参照してコード提案に影響を与えているとのことです。
つまり、編集中のソースファイルと似たロジックを持つファイルや、仕様情報が記載されたマークダウンのドキュメント等を別タブで開いておくことで、コード提案の精度が向上する可能性があります。
コードの記述を補助するだけでなく、GitHub Copilotは設計書などのドキュメント作成においても有用な提案をしてくれます。例えば、データベースのテーブル情報の概要からDDLを生成したり、PlantUMLやMermaidでER図を書かせたりなど、応用の幅は広いです。以下はMermaidのER図を生成した例です。
Few-shot promptingとはいくつかの出力例を与えることで、期待する出力を高い確率で得られるようにするプロンプトエンジニアリングの手法です。この手法はGitHub Copilotでも有効でした。
例えば、社内独自の形式でデータベースのDDLファイルを出力させたいとき、「このようなCREATE TABLE文の時は、このように出力をしてください」というサンプル情報をコメントとして記載しておくと、新しいCREATE TABLE文を入力として与えた時に、サンプルを参考に適切な出力を提案をするようになります。提案の精度が今一歩上がり切らないと感じた時に有効な手法だと考えています。
プラットフォーム固有であり、記述頻度が少なく忘れがちなコードを書かなければならない際にもGitHub Copilotは有効です。記述方法を調べる手間が省け、作業時間の短縮に繋がります。
下記にUnityでの使用例を示します。
この例では保持しているマテリアルの解放を補完しています。メモリリークを防ぐため、マテリアルは明示的に解放することが望ましく、オブジェクトが破棄される際のコールバックで解放するように提案されました。
こちらはシェーダプロパティIdの取得の例です。このようなプラットフォーム固有の記述についても高い精度で補完してくれました。
GitHub Copilotは、前提知識がなくてもその便利さを実感できるほど強力なツールですが、この記事で紹介した得意・不得意や活用テクニックを知っておくことで、エンジニアの生産性はさらに高まり、プロジェクトに大きな価値をもたらすと考えています。当社では、今後もAIを活用したゲーム開発のプロセスの革新を続けてまいります。
\クライアントエンジニアのご応募はこちらから!/
\サーバーエンジニアのご応募はこちらから!/
\その他、各職種のご応募はこちらから!/