minne Android mobile 生成AI

JetBrains AIを1週間使ってAndroid開発における使い勝手をGitHub Copilotと比較してみた!

minne Android mobile 生成AI

minne事業部プロダクト開発チームでエンジニアリングリードをしているtepiです。先日JetBrains AIがAndroid Studioで使えるようになったという発表がありましたね!Android Studio上で製品コードに対して使えるAIコーディングツールとしては実質GitHub Copilotのみで、比較対象が無く悪くはないがGitHub Copilotしかないから使っている状態ではありました。そこに新たな選択肢が出てきましたので、移行の検討のためにもまずは1週間のトライアルを使ってプロダクトコードの開発を行ってみました。ご利用を検討している方の判断の参考になると幸いです。

  1. 利用の開始にあたって
    1. 会社のポリシーやガイドラインへの準拠の確認
    2. 開始手順
    3. 使えるAIモデル
    4. 変更した方が良い設定
  2. よかったところ
    1. コミットメッセージの出力
    2. クラスをインポートしてくれる
    3. 補完する際に勝手に行末の括弧がなくならない
    4. 補完候補の色がわかりやすい
  3. 悪かったところ
    1. 補完はGitHub Copilotの方が優秀
    2. コミットメッセージの出力
  4. まとめ

利用の開始にあたって

会社のポリシーやガイドラインへの準拠の確認

まず利用を開始する前に、ペパボのAIツールを利用する際のガイドラインにもある、生成に利用されるコードがAIモデルの学習に利用されるかを調査しました。

ソースがモデルの学習に利用されるかは、JetBrains AIの利用規約に以下のように記載があり、利用されないことが明示されています。

No Use of Your Inputs and Data for Training of Language Models

また、

Use of Inputs and Your Data for Improvements of JetBrains AI

という項目があり、入力したデータ等(Input)を利用することが書かれていますが、前提として「If You consent to detailed data collection」という記載があり、同意している場合のみのようです。

こちらは以下のような設定があり、オフになっていれば問題ないと判断しました。

Android Studioの設定画面

加えて、恐らく関係はないかと思われますが、Android Studioの利用データの送信(Appearance & Behavior -> SystemSettings -> Data Sharing)も停止した方が安全かもしれません。

以上のことからコードがAIモデルの学習に利用されないと判断しました。

※特にGoogle、JetBrainsから公式見解を得たわけではありませんので、ご利用の際はご自身でご判断ください。

開始手順

以下のような手順で利用を開始できます。

  1. PluginsからJetBrains AI Assistantのプラグインをインストール
  2. 右上のGradleやDevice Manager等の並びにアイコンが追加されるので、クリックして開く
  3. JetBrainsアカウントにログインする必要があるため、まだ作成していない場合は作成し、ログイン

使えるAIモデル

使えるAIモデルは現時点では以下のような選択肢があります。

JetBrains AIで選択できるモデル

今回はGPT-4oのみ利用しましたが、比較してみても面白そうです。また、Android Studioに付属のGeminiだと学習にソースコードが利用されてしまいますが、JetBrains AIであれば上記の条件でGeminiが利用できるのも今後に期待できる点ですね。

※IntelliJには、Gemini Code Assist Pluginがあり、そちらはAndroid StudioのGeminiとは別かつJetBrains AIと同様にモデルの学習に送信したデータは利用されないようです

変更した方が良い設定

コミットメッセージの作成結果がデフォルトのままだと英語で出力されます。

日本語に変更したい場合は設定項目に例として書かれているように、Answer in Japaneseと追加します。

プロンプトの設定変更

変更後は設定画面のApplyやOKではどうも反映されないようで、自分の場合はIDEの再起動が必要でした。

よかったところ

自身が使ったことがあるGitHub Copilotと比較してご紹介したいと思います。

コミットメッセージの出力

GitHub Copilotでも対応していますが、JetBrains AIでもコミットメッセージをボタン1つで作成することができます。

GitHub Copilot版と大きく違う点としては、コミットメッセージを生成するためのプロンプトが変更できることと、デフォルトのプロンプトでも1行サマリとさらに詳しい説明を数行追加してくれます。

JetBrains製品版のGitHub Copilotの場合プロンプトや設定で日本語の指定ができないので、気まぐれに日本語のコミットメッセージにしてくれますが確実ではありません。JetBrains AIは上記にも書きましたが、プロンプトで指定することで必ず日本語で出力してくれます。

また、1行のサマリとさらに詳しい説明を数行で加えてくれる点は、自分が怠惰なので1行で表現できる内容しかコミットメッセージに書かないことをカバーしてくれる上に、今後AIがコミットメッセージを解析したりしていくこともあると思うのですが、より詳細なコミットメッセージが残るのは良いと感じました。

クラスをインポートしてくれる

コードが補完されてimport文が必要になった際に、GitHub Copilotだと自分でショートカットなどを利用してimport文を追加する必要がありますが、JetBrains AIの場合は自動インポートも同時に動かしてくれるようで、必要なimport文の記載を済ませてくれます。 生成AIでコードを書く際それなりに長いコードをいい感じに書いてくれたとしても、import文の追加のひと手間が必要だと作業を中断させられてるように感じてしまい、Kotlin × IntelliJだと補完が優秀なだけになんとなくモヤモヤしていましたが、その煩わしさから開放されるのは思ったより気持ち良いものでした。

補完する際に勝手に行末の括弧がなくならない

個人的によくGitHub Copilotで体験するのが、補完後に行末の){が消えてしまって自分で入力が必要になったりするパターンです。JetBrains AIはこの場合()の中身だけ(=メソッドのパラメーターだけ)を追加するというようなことをやってくれて使いやすいです。

例えば、

fun someFunction() {
}

というコードがあって、(の後、)の前にメソッドの引数を補完させたい場合に、GitHub Copilotだと、

fun someFunction(param: String
}

となってしまったりするところ、JetBrains AIだと

fun someFunction(param: String) {
}

としてくれるといった具合です。

補完候補の色がわかりやすい

GitHub Copilotだと補完候補が単色なので視認しづらいかなと思うのですが、JetBrains AIの場合、以下のようにIDEの設定に合わせた色で提案を表示してくれます。

生成されたコードの色

※カーソル以降の=からがすべて補完候補です。

補完するコードを反映する際に内容は精査する必要がありますが、色がついている分読みやすく反映がしやすいです。 スクリーンショットだと一見すると自分で書いたコードとの色の差分が分かりづらいかもしれませんが、実際のところ自身で書いたあとに候補が表示されるので、使用している際にはそういった違和感はありませんでした。

悪かったところ

補完はGitHub Copilotの方が優秀

肌感でしかないですが、GitHub Copilotの方が補完を提案してくれる回数は多かったように感じました。 GitHub Copilotの補完が不正確な場合もそれなりにはありますが、「とりあえずこれはどう?」という感じで出してくれる印象です。

特に、whenを使って各種条件を記載していく際に、GitHub Copilotはよしなに書いてくれますが、JetBrains AIでは出ないことが多かったです。 他にも、自分のAIによる補完の使い方の1つとして、おおざっくりはAIのコードを採用しておいて自分で手直しするといったことをしたりするので、そういった使い方が減るのも少し不便でした。

これは利用するモデルでも差異がでそうですが、今回JetBrains AIはGPT-4oを使用し、普段GitHub Copilotは通常のGPT-3.5 Turboを使っているので、どちらかといえばJetBrains AIの方が優秀そうではあります。 今回はテストの意味合いも兼ねていたので多少なりとも近しい同じ会社のモデルを使ったのですが、上記にも書いたようにJetBrains AIはClaudeやGeminiも利用できるので、今後利用する際は試してみたいと思います。

コミットメッセージの出力

良い点としても上げていたコミットメッセージの入力ですが、一部工夫が必要かなとは感じました。

例えば、変更点のコンテキストを理解しておらずあとで読むとわかりずらい文章だったりして、多少手直しすることもありました。
より具体的な例を出すと、よく「〇〇クラスを実装しました」というような内容が出力されるのですが、〇〇クラスを実装したという事実をコミットメッセージでわかる必要もないでしょうし、実際のところそれは「あるログを送信するためのクラス」であったりします。 それ自体は変更内容を見ればわかりそうではあるのでまだまだ改善の余地がありそうです。プロンプトが変更できるので調整してみるとより良い文章になるかもしれません。

まとめ

GitHub CopilotとJetBrains AIに大きな違いはほぼなかったですが(もしくは自分がまだまだ使いこなせてないだけかもしれませんが)、やはりIDEの開発チームが作ったものというところで、上記に上げた以外にもAIが検討中はローディングのインジケータが出るなど、きちんとIDEらしい動きが実装されていて微妙なストレスを改善してくれるようなサービスでした。ただ、やはり先駆者であるGitHub Copilotの方が補完性能がよかったり、まだまだこれからな部分もありました。

それでもJetBrainsが基幹事業であるIDEの開発という点においてさらに本腰を入れてくるのは間違いないでしょうし、JetBrainsはKotlinの開発元でもあるわけなので、特にKotlinを使った開発には今後期待できそうです。また、Android StudioやKotlin Multiplatformなど、JetBrainsとGoogleとの関係性からもAndroidアプリ開発者として注目すべきサービスとなるでしょう。

ペパボでは、CursorやDevinなど他にもAIを使ったコーディングができる環境がありますので、引き続き比較しつつ自身の業務効率化や空いた時間を使ったスキルアップに励んでいきたいです。加えてVibe Codingを新卒研修で取り入れたりしてAIによるコーディングを推進していますので、一緒にわいわいAIコーディングをしていただける方をお待ちしております!