Google Antigravityでランニングルート生成アプリを開発

Google Antigravityでランニングルート生成アプリを開発


ランニング愛好家向けのルート生成Webアプリ「RunAnyWay」を開発しました。このアプリは、ユーザーが希望する距離や好みを指定するだけで、最適なランニングルートを自動生成します。開発にあたってはGoogle Antigravityという新しいAI駆動型コーディングアシスタントを活用し、従来よりもはるかに短期間で実装することができました。


プロジェクトの背景

マラソンやランニングの練習をする際、毎回同じルートを走っていては飽きてしまいます。かといって、目標距離に合わせて新しいルートを地図とにらめっこしながら計画するのも手間がかかります。この課題を解決するため、距離や好みを指定するだけで自動的にルートを生成してくれるアプリを作ることにしました。


主な機能

距離指定によるルート生成

ユーザーが希望する走行距離(例: 5km, 10km)を指定すると、その距離に最も近いルートを自動生成します。アプリは内部で複数回のルート計算を実行し、誤差が最小となる最適なルートを選び出します。

ループと片道の切り替え

スタート地点に戻るループルートと、目的地を設定してそこまでの片道ルートの両方に対応しています。トレーニング目的に応じて使い分けることができます。

詳細な好み設定

ユーザーは以下の項目をカスタマイズできます:

  • 景観: 公園や自然を経由
  • 都市景観: 都市部を経由
  • 安全性: 人通りの多い道を優先
  • 静かな道: 車の少ない道を優先
  • 平坦: 高低差の少ないルート
  • 信号少なめ: 信号の少ない道を優先
  • ターン最小化: できるだけ直線的なルート
  • 繰り返し回避: 毎回異なるルートを生成(幾何学的なアルゴリズムを使用)

高度情報の表示

生成されたルートの標高獲得(Elevation Gain)を計算し、どれだけアップダウンがあるかを確認できます。これにより、自分の体力や練習目的に合ったルートを選択できます。

インタラクティブな地図操作

スタート地点と目的地をドラッグして位置を調整できます。現在地から自動的にルート生成することも可能です。生成されたルートは地図上に視覚的に表示され、ルート全体が見やすいように自動的にズーム調整されます。

リトライ機能

生成されたルートが気に入らなかった場合、2つの方法で再生成できます。同じ設定で別のルートを生成するか、好みの設定をリセットして距離のみ維持することができます。


技術スタック

フロントエンド

  • React + TypeScript: 型安全性を確保しつつ、モダンなUIを実装
  • Vite: 高速な開発環境
  • TailwindCSS: 洗練されたスタイリング
  • Leaflet / React-Leaflet: インタラクティブな地図表示
  • Lucide React: アイコンライブラリ

外部API

  • OSRM (Open Source Routing Machine): ルート計算エンジン
  • Overpass API (OpenStreetMap): POI(景観、都市部、静かな道など)の取得
  • Open-Elevation API: 標高データの取得

主要アルゴリズム

繰り返し回避機能では、スタート地点を中心に三角形や四角形のパターンでウェイポイントを生成する幾何学的ループ生成を採用しています。ユーザーの好みに応じてOpenStreetMapからPOIを取得し、そこを経由するルートを生成するPOIベースのルート最適化も実装しました。複数回の試行(最大10回)で目標距離に最も近いルートを選択することで距離精度を向上させ、ランダム生成で失敗した場合は東西南北の4方向を試す緊急フォールバックメカニズムも用意しています。


Google Antigravityとは何か

Google Antigravityは、Google DeepMindチームが開発した先進的なAI駆動型コーディングアシスタントです。従来のコード補完ツールとは一線を画し、開発プロセス全体を包括的にサポートする「エージェンシック(Agentic)AI」として設計されています。

Antigravityの特徴

Antigravityの最大の特徴は、単なるコード生成ツールではなく、まるで経験豊富なペアプログラマーと一緒に作業しているかのような開発体験を提供することです。コードを書くだけでなく、設計、デバッグ、テスト、ドキュメント作成まで、開発ライフサイクル全体にわたって支援します。

自然言語での指示を理解し、プロジェクトの文脈を把握した上で最適な実装を提案します。コードベース全体を理解し、既存のアーキテクチャパターンやコーディングスタイルに沿った実装を生成できるため、一貫性のあるコードを維持できます。

また、ブラウザ操作やターミナルコマンドの実行など、IDE外の作業も自動化できます。これにより、実装からテスト、デプロイまでの一連の流れをシームレスに実行できます。

このプロジェクトでAntigravityが果たした役割

今回の開発では、Antigravityが以下のような形で貢献しました。

まず、UI/UXの実装面では、Reactコンポーネントの設計から始まり、TailwindCSSを使った洗練されたスタイリングまで一貫して提案してくれました。地図表示やインタラクティブな操作を実装する際も、React-Leafletのベストプラクティスに基づいた実装を素早く提供してくれました。

複雑なロジックのデバッグでは特に力を発揮しました。ルート生成アルゴリズムの精度向上や、エッジケースへの対応など、何度も試行錯誤が必要な部分でも、問題の根本原因を分析し、適切な修正案を提示してくれました。

外部APIとの統合も大きな助けとなりました。OSRM、Overpass API、Open-Elevation APIという3つの異なるAPIを統合する際、それぞれのAPI仕様を理解した上で、エラーハンドリングやリトライ処理を含む堅牢な実装を提案してくれました。

TypeScriptの型定義についても、単に動くだけのコードではなく、型安全性を保ちつつコードの可読性を向上させるような提案をしてくれました。これにより、後々のメンテナンスが容易になりました。

開発中の問題をその場で解決できるリアルタイムフィードバックも非常に価値がありました。実装した機能をすぐに検証し、問題があればその場で修正案を提示してくれるため、迅速なイテレーションが可能になりました。

Antigravityによる開発体験の変化

従来の開発では、ドキュメントを読み、実装方法を調べ、コードを書き、デバッグするという一連のプロセスに多くの時間を費やしていました。Antigravityを使うことで、このサイクルが劇的に短縮されます。

特に印象的だったのは、ルート生成アルゴリズムの精度向上プロセスです。複数回の試行による距離誤差の最小化、スケールファクタによる補正、フォールバック処理など、細かな調整が必要な部分でも、Antigravityが適切なアルゴリズムを提案し、実装してくれました。これらは通常であれば設計から実装まで数日かかる作業ですが、Antigravityとの対話を通じて数時間で完成させることができました。

また、コードの品質面でも大きな違いがありました。Antigravityが生成するコードは、ベストプラクティスに基づいており、エラーハンドリングやエッジケースへの対応も含まれています。これにより、後から「この場合はどうなるんだろう」と心配する必要が大幅に減りました。


開発のポイント

課題1: 目標距離への精度

ルート計算APIは必ずしも指定した距離通りのルートを返しません。そこで、複数回の試行とスケールファクタによる補正を実装し、目標距離に最も近いルートを選択するようにしました。

課題2: フラットな道の判定

平坦な道を好むユーザーのために、標高獲得と距離の比率を計算し、一定の閾値以下ならフラットと判定する仕組みを導入しました。

課題3: 繰り返し回避の実現

毎回異なるルートを生成するため、POIベースの方法だけでなく、幾何学的アルゴリズム(三角形や四角形のパターン)を使って、バリエーション豊かなルートを生成しました。


デプロイとアクセス

アプリはVercelにデプロイしており、以下のURLからアクセスできます: https://runanyway.vercel.app/

ソースコードはGitHubで公開予定です。


まとめ

Google Antigravityを活用することで、アイデアから実装まで非常に短期間で開発できました。AI駆動型コーディングアシスタントは、単なる便利なツールではなく、開発プロセスそのものを変革する可能性を持っています。

今後は以下のような機能拡充を予定しています:

  • ルートのお気に入り保存機能
  • 過去の走行履歴の記録
  • ユーザー評価に基づくルート推薦
  • 天候データとの統合

ランニングをもっと楽しくするため、これからも改善を続けていきます。


Comments

Discussion

感想やコメントをお待ちしています。