はじめに

自分の趣味の一つで、日常的にランニングをしています。
ダイエット目的とか記録を伸ばしたいとか、どれだけやったのでどのくらいの効果があったのか?成果が出たのか?などを確認するためにも、走った総距離やトータルタイム、ラップタイムなどのデータがすごく気になります。  
スマートフォンにもGPSや各種センサーが入っているので、携帯しながら走れば測定することはできますが、手元でリアルタイムに情報を見たいし、先輩のランナーの皆さんがランニング用のスマートウォッチを使っているのを見ていて、自分もランニング用のスマートウォッチを持つことに憧れていました。数年前、モチベーションを高めるためにも、ランニング用ではとてもメジャーなスマートウォッチ「Garmin」を購入しました。

Garminのスマートウォッチは計測時間はもちろんのこと、時計内の各種センサーから取得した情報をリアルタイムに見ることができます。距離や速度、心拍数など、画面に表示する情報は、一度にどれを表示するのか、標準機能でもある程度カスタマイズすることができます。また、外部から専用アプリをインストールすることができ、専用のストア経由で無償・有償のアプリをインストールして使用することが可能です。
ストアがあるということは自分でもアプリが作れるだろう、ということで、数年前に色々調べてアプリを自作しました。

このような画面表示をするアプリです。(Garminのエミュレータで表示したものをキャプチャしました)

ラップタイムやトータルタイム、心拍数、目標タイムまでの差分や現在時刻など、自分が走っていて確認したいと思った項目を盛りだくさんで入れてみました。

今でも自分のGarminにはインストールして使っていますが、作った後はアプリは更新等せず、しばらく放置していました。
余談が長くなりましたが、最近AIを活用した開発が当たり前のようになってきた状況で、あまり他の人が試していないと思われるこのアプリで色々やってみようかな、と思い立ちました。

開発環境の再構築:Gemini

初めてアプリを作成した当時は、自力でインターネットから情報を集め、先人が公開されている情報などを参考にしながら開発環境を構築・準備しました。
当時はEclipse+SDKのプラグインを使っていましたが、きっと今であればVSCodeなどの環境でもできるのでは?と思い、試しにGeminiに質問を投げてみました。

Garminのアプリを作るために必要な開発環境と、必要なツールの準備方法について教えてください。

長くなるので割愛しますが、具体的な内容が提示されました。
それによると、Eclipse+SDKのプラグインの環境はもちろんありますが、今はVSCodeのExtensionもあるようです。そこで、新たにVSCodeでの開発環境を作ってみることにしました。

Garminのアプリ開発をVSCodeを使って行う場合に必要な環境やツール、その初期設定について教えてください。

こちらも詳細は割愛しますが、Geminiに教えてもらった手順でおおよそ構築ができました。ただ、環境設定の一部だけはどうしても言われた通りのものが存在せず、試しにClaudeに聞いてみたところ、その部分に関しては正しい情報が手に入りました。
Geminiの参照や学習している情報が少し古かったのか・・・ただ、Claudeからの情報も確認してみると一部誤りがあったので、どちらも完璧ではありませんでした。
それでも、自分で1から調べて構築するのに比べたら、大幅に高速に構築ができたと思います。

コードの解析:Gemini Code Assist

VSCodeでGarminの開発環境を作った後に、昔作ったコードベースの内容を思い出したく、VSCodeの拡張機能からGemini Code Assist を入れて解析してもらうことにしました。

このコードベースを解析し、プロジェクトの概要を教えてください。

すると、

このプロジェクトは、Garminデバイス用のカスタムフィールドを開発するものです。言語はGarminのMonkey Cが使われています。
主な目的は、ランニングのアクティビティ中に、設定した目標距離と目標タイムを達成するためのペース管理を支援することです。

と解析してくれました。(以降、更に解析してくれましたが、ここでは割愛します)
「Monkey C」についても深く聞いてみました。(こちらはGeminiで確認)

Monkey Cとは、どんな開発言語か教えてください。

Monkey C(https://developer.garmin.com/connect-iq/reference-guides/monkey-c-reference/) というプログラミング言語で書かれており、Garminのスマートウォッチやウェアラブルデバイス上で動作するアプリ(Connect IQアプリ)向けの独自のオブジェクト指向言語、と回答してくれました。
すごくマイナーな言語だと思いますが、パッと出てくるところが改めてすごいな、と思いました。

次にやりたいこと

次は、Gemini CLI も使ってコードレビューをしてもらったり、改修をしてみようと思います。