LINEヤフー Tech Blog

LINEヤフー株式会社のサービスを支える、技術・開発文化を発信しています。

Yahoo!フリマ Android開発チームの GitHub Copilot 活用事例

こんにちは。Yahoo!フリマのAndroid開発を担当している菅野です。

私の開発チームではGitHub Copilotを導入し、開発の生産性を高めています。今回は私たちの開発チームがどのようにGitHub Copilotを活用しているのか、その具体的な事例を紹介します。この記事を通じて、GitHub Copilotの導入方法や活用のポイントを学び、皆さんの開発プロセスの効率化に役立てていただければと思います。

GitHub Copilotとは

GitHub CopilotはAIを活用したコーディングアシスタントで、コードの記述を助けるためにリアルタイムでコードの提案を行います。コード補完として入力中のコードに対してコーディングの補完提案をしてくれたり、チャット機能を利用してコードに関する質問をCopilotに投げかけることができます。

Android StudioにGitHub Copilotを導入する手順

GitHub Copilot はさまざまなIDEに対応しています。私の開発チームではAndroid Studioを使って開発しているため、Android StudioにGitHub Copilotを導入する手順をご紹介します。

  1. Android Studioを起動し、メニューバーから「Android Studio」→「Settings」を選択します。
  2. 「Settings」画面が表示されたら、「Plugins」を選択して「Marketplace」タブで「GitHub Copilot」を検索します。
  3. 「GitHub Copilot」をインストールしてAndroid Studioを再起動します。

画像1

以上の手順でGitHub Copilotが利用できるようになります。

Yahoo!フリマ Androidチームでの課題と活用事例

Yahoo!フリマ Androidチームでは、次のような課題を抱えていました。

  • 単純なテストコードやCompose Previewなどの実装が面倒
  • 関数名やリソース名の命名に迷うことがある
  • API開発が完了する前にAPIレスポンスのモックデータを作成して動作確認を行いたい

GitHub Copilotの導入により、これらの課題を大きく解消しました。実際の活用事例について紹介します。

単純なテストコードやCompose Previewの提案

まずはテストコードをGitHub Copilotによって自動生成する例について紹介します。私の開発チームでは案件ごとに実装するコードとユニットテストをセットで実装するルールがあるため普段からユニットテストを書いています。テストコードも実装したコードと同等の規模感の実装が必要であるため記述にはコストがかかります。GitHub Copilotを導入することで、テストコードの記述を効率化することができました。

例として次のような支払い状態を管理するPaymentStatusクラスと、その状態に応じたメッセージを返す関数getPaymentStatusMessageがあるとします。

sealed class PaymentStatus {
  data object Unpaid : PaymentStatus()
  data object Processing : PaymentStatus()
  data class Paid(val price: Int) : PaymentStatus()
  data class Failed(val error: String) : PaymentStatus()
}

fun getPaymentStatusMessage(status: PaymentStatus): String {
  return when (status) {
    is PaymentStatus.Unpaid -> "未払い状態です"
    is PaymentStatus.Processing -> "処理中です"
    is PaymentStatus.Paid -> "${status.price}円支払いました"
    is PaymentStatus.Failed -> "支払いに失敗しました:${status.error}"
  }
}

このようなシンプルな関数をユニットテストで記載する場合にGitHub Copilotはテストコードを提案してくれます。

単純な関数であればほぼ理想的な形でテストコードを生成してくれます。複雑な関数の場合でも、テストコードのベースとなる部分を自動生成してくれるため、開発者はテストコードの記述にかかる時間を大幅に削減できます。Compose Previewに関しても同様にコードを自動生成してくれるため、開発者はよりクリエイティブな作業に集中できるようになりました。

自動生成に関しては具体的な指示がなくても自動で提案してくれますが、コメントで期待することを記述すると精度が上がるので具体的に提案してほしい時はコメントを記入するようにしています。

変数名や関数名の提案

変数名や関数名の提案についてもGitHub Copilotは役立ちます。提案してもらう際に、コメントを用いて期待する動作を記述することで、適切な変数名や関数名を提案してもらえます。

モックデータを生成する

アプリ開発においては、新機能の追加や既存機能の修正が頻繁に行われます。これに伴いバックエンドの開発も並行して開発することがあります。アプリの開発が先行で着手する場合があります。私の開発チームでは、APIのレスポンスデータを指定することで、アプリ側の開発を進めています。

これまでは手動でAPIのレスポンスデータを作成していましたが、レスポンスデータが複雑であったり、データ量が多かったりすると、この作業は非常に手間がかかります。レスポンスデータのパターンを変えたい時などもあると思います。

そこで、GitHub Copilotを活用することで、APIのモックデータを迅速かつ効率的に生成することができるようになります。これにより、APIの開発が完了していない状況でも、アプリ側の開発を進めることが可能となり、開発プロセスのスピードアップが期待できます。

例として、以下のようなレスポンスデータを返すAPIがあるとします。

data class Response(
  val totalResultsAvailable: Int,
  val totalResultsReturned: Int,
  val nextOffset: Int,
  val items: List<Item>
) {

  data class Item(
    val id: Int,
    val title: String,
    val status: String,
    val images: List<String>,
    val price: Int
  )
}

Android StudioのツールウィンドウにあるGitHub Copilotのチャット機能を使って、モックデータを生成するように依頼します。チャット機能は、プロジェクト内のソースコードであれば自動で解析してくれるため、コードのコンテキストに合わせた提案をしてくれます。

画像2

その他の生成AIの活用

今回はGitHub Copilotの活用事例を紹介しましたが、GitHub Copilotのようなコーディングアシスタントだけではなく、LINEヤフーの対話チャット型の独自AIアシスタント「LY ChatAI」も活用しています。

おわりに

今回はYahoo!フリマ AndroidチームでのGitHub Copilotの活用事例について紹介しました。GitHub Copilotの導入により開発の生産性が向上し、単純なコードの自動生成から複雑な問題の解決まで生成AIは必要不可欠な存在になりました。

また、生成AIは日々の開発業務においても新たな学びの機会を提供してくれます。AIが提案するコードを通じて、新しいコーディングのアプローチやパターンを発見することができ、これがチーム全体の技術力向上にも寄与しています。最近では、Androidスマートフォンに搭載されている生成AI「Gemini」も注目されています。Google I/O 2024で紹介されたGeminiは、Android Studioに統合されプロジェクトに特化したコード生成が可能になりました。他にもクラッシュレポートの分析やGemini 1.5 Proの導入予定も発表されておりAndroid開発者はより生産的な高品質なアプリを効率的に開発できるようになるので、これらにも期待しています。

私たちの経験が、他の開発チームの皆さんにとっても参考になれば幸いです。GitHub CopilotをはじめとするAI技術を活用することで、より効率的かつ革新的な開発が可能になることを、私たちは実感しています。皆さんもぜひ、この先進的なツールを活用して、開発の質の向上を目指してみてはいかがでしょう。

最後に告知になりますが、LINEヤフーのYouTubeサブチャンネルでYahoo!フリマのプロダクト紹介動画が公開されています! 私がプロダクト紹介者として出演していますのでぜひご覧ください!

※この文章は生成AIを活用して執筆し、最終的に社員が内容調整しています

参考文献