NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

注目のタグ

    コーディング中の面倒な作業をGitHub Copilotに支援してもらう

    本記事は  【Advent Calendar 2024】  23日目の記事です。
    🌟🎄  22日目  ▶▶ 本記事 ▶▶  24日目①  🎅🎁

    はじめに

    こんにちは、草野です。
    明日はクリスマスイブですね。私の部署では上司のみなさまからケーキのプレゼントがあるらしいので、それを楽しみに今日も頑張っています!

    最近 GitHub Copilot を使う機会があり、一瞬でその魅力に取り憑かれてしまったので、プライベートのアカウントにも導入してみました。
    今回は簡単に導入方法を記載したうえで、開発効率向上に繋がりそうな活用法を考えてみたいと思います。

    想定している読者
    • 普段からある程度開発をしている人で、面倒な作業はAIに任せたいと思っている人

    私自身の普段の業務が開発寄りであること、またかなりの面倒くさがりな性格のため、偏った視点になってしまっていることをご容赦ください。

    GitHub Copilotを個人開発で利用してみる

    GitHub CopilotはGitHubアカウントを持っていれば簡単に利用することができます。
    有料プランへの加入が必要ですが、個人用プラン(Copilot Individual)であれば 10 USD/月のうえ、無料トライアル期間もあります。
    (※トライアルの利用であっても、住所とクレジットカード情報の入力が必要です。住所は英語表記で書く必要があるので少し大変です……。)
    github.com

    <追記>
    なんと2024年12月19日からVS CodeではGitHubアカウントを持っていれば無料で使えるようになったようです!
    リクエスト件数に上限があるなど一部制限はありますが、GitHub Copilotに興味がある方はこれを機に試してみてください!
    code.visualstudio.com

    GitHub Copilotの登録が完了したら、次はIDEに導入してみます。
    今回はJavaの開発をしたいということもありIntelliJへ導入してみますが、VSCodeなどほかのIDEにも同じように簡単に導入できます。

    1.GitHub Copilotプラグインをインストールする
    まずはIntelliJのマーケットプレイスからこちらのプラグインを導入してください。
    plugins.jetbrains.com 2. GitHubにログインする
    ツール>GitHub Copilotを選択し、GitHubにログインしてください。
    このとき、IntelliJ上にDevice codeが表示されます。
    別途ブラウザ上でGitHubが開くので、表示されたDevice codeを入力して認証を行ってください。
    あとは画面の指示に従って進めていくだけで、IntelliJ上でGitHub Copilotが利用できるようになります!

    開発に活用できそうな使い方を考えてみる

    今回は、基本的な操作方法やショートカットなどの説明は割愛して、若手バックエンドエンジニア目線で開発効率向上に繋がりそうな活用法を考えてみたいと思います。
    ここで押さえておきたいのは、Copilotの役割についてです。
    Copilotは、和訳である「副操縦士」の名は体を表すように、作業の支援を担うのが本来の役割です。
    それをふまえて、エンジニアとしてもまだまだ未熟な私がこのあたりの支援からなら任せてみてもいいいかも?と思った活用法を列挙していきます。

    モデルを作成してもらう

    ドメインやエンティティなどは設計時に具体的な内容が決まっている場合も多いですよね。
    フィールドが`2、3個のモデルなら手書きでも問題ないですが、フィールド数が多いモデルは書くのがちょっと手間かもしれません。
    そういったときに設計書をもとにさくっとCopilotに作ってもらうのはアリかもしれません。
    私は英語が苦手で命名に時間を使ってしまいがちなので、日本語のプロンプトをもとにいい感じの命名をしてくれるのはかなりポイントが高いです。

    ライブラリを使ってリファクタリングしてもらう

    先ほど提案してもらったモデルは、Getter/Setterメソッドがベタに書かれていましたが、Lombokのアノテーションに置き換えたいと思ったとします。
    アノテーションを使うにはbuild.gradleに追加の記述が必要なのですが、一旦そのことは無視して命令してみます。
    指示通りに対象のクラスを修正してくれるだけでなく、ライブラリが足りていないからbuild.gradleに追加してね、と教えてくれました。
    今回build.gradleにライブラリの依存関係を記載していない状態で命令したのでこのような提案をしてくれましたが、すでに記載されている状態だと提案してきません。
    このことから、複数ファイルを参照の上で最適な提案をしてくれていることがわかります。
    私はなんとなく生成AIは単一ファイルしか見てくれないという偏見があったのですが、ワークスペース全体を見てこういった提案をしてくれることに初見ではかなり感動しました。
    やりたいことを命令するだけで簡単に環境構築を行うことができるので、sandboxや学習用環境を作るときにも便利そうです。

    コメントを書いてもらう

    クラスやメソッド単位でjavadocのようなコメントをきちんと書くのはわりと大変です。
    そんなときもGitHub Copilotにお願いしてしまいましょう。
    明示的に型情報を書くように指示すると型情報までを書いてくれます。 柔軟性があるので、プロンプトを工夫することで自分の好みやコーディング規約に沿ったコメントを書かせることが可能です。
    いわゆる生成AIっぽい文章が出力されるので適宜人力で修正が必要ですが、コメントの土台を書いてもらうには十分だと思います。

    コメントから実装を提案してもらう

    先ほどとは反対に、コメントから実装の提案をしてもらうことも可能です。
    コメントを書くと薄い文字色でコードサジェスチョンしてくれるので、その提案を採用したければTABキーを押すだけで簡単にコードを書くことができます。
    複雑なロジックを持たないメソッドであれば、この提案だけである程度形になりそうです。
    ちなみに、今回はあらかじめsaveメソッドを定義したRepository Interfaceをインジェクションしてあげているので、コメント内容すらもサジェスチョンしてくれました。便利。

    ドキュメント化してもらう

    コード内のコメント以外にも、実装をドキュメントとして書き起こすこともできます。
    仕様書が整備されていないプロジェクトのドキュメント化に対しても有用ですが、ライブラリやフレームワークの仕様をささっと確認したいときにも便利です。
    さきほどのGetterアノテーションに対して説明してもらうとこんな感じの結果が返ってきます。


    テストを書いてもらう

    テストを書くことはもちろん大切ですが、ある程度網羅するように書いていると、冗長になったりテストコードを書くことが実装コードを書くこと以上に大変……という本末転倒な事態になってしまうことも珍しくはありません。
    そんなときはGitHub Copilotを頼ってみるのもいいかもしれません。
    テストケースが決まっているのであればそのケースをもとにテストコードを作成してもらうのもよいですし、単に「xxメソッドを全網羅するようなテストコードを書いてください」といった雑な指示でも通ります。
    もちろん人の目でのレビューは必要となりますが、うまく活用することで開発効率はかなり向上するはずです。

    おわりに

    いかがでしたでしょうか。
    生成AIは業務で使用するには制約がつくことも多いですが、個人開発や学習に利用する分にはうまく使えばかなり有用だと思います。
    設計書を丸投げしてロジックを丸々書いてもらうこともできますが、個人的には普段の開発においてちょっと歯がゆさを感じているところから使っていくのがいいんじゃないかなと感じました。

    ただ、生成AIを適切に利用するためには、やはりコーディング知識や言語仕様をある程度理解しておく必要があります。
    将来的にどうなるかはわかりませんが、今のうちに知識を蓄えておくことで、生成AIがより発展した未来でもうまく共存できるんじゃないかなと思っています。
    2024年ももうすぐ終わりますが、これからも日々精進していこうと思いました!
    メリークリスマス!

    執筆者:草野理沙
    Webアプリケーションエンジニア
    緑が好き💚