アプリコンテストへの挑戦
2024年夏にGeminiのアプリコンテストが開催され、賞品にデロリアン、賞金総額が1億円以上という魅力的な内容でした。ちなみに、賞品は米国在住者のみなので対象外というのは後でわかったのですが。。。勉強を兼ねて参加したので、Geminiの魅力と私のアプリ開発についてつらつらと書いていこうと思います。
Geminiの特徴と魅力
Google AI Studioを使うと1分間15回までなら無料で使うことができます。普通に個人で使うレベルでは、相当なヘビーユーザーでなければリミットに達しないレベル。APIも無料ですが、アプリなどで使うと15回/minだとちょっと心細いかもしれません。
しかも、競合他社のChatGPTやClaudeと比較して、10倍近い200万トークンという圧倒的な火力。ソースコードなど1ファイルで数千トークンの消費をしても全くビクともしません。しかも、速度も精度も全く劣勢ではありません。
ちなみにGoogle AI Studioは添付に対応していなので、コードを丸々投げたいときはwsl2+ubuntuの環境を整えて、catを使うと良いです。アプリのように複数ファイルがある場合は、ファイルの位置関係などもわかるので、ファイル添付よりコマンドでやった方が早くて良いです。
Gemini アプリコンテストの概要
バックトゥザフューチャーのドクが未来を変えようと言ってます。とても好きな映画です。
アプリ「The Words」のデモ動画
デモ動画です。使って面白ければコメントください。
簡単に言うと、ランダム単語を選択し、自分の関心ある単語と無い単語のデータセットを使って、未来を予測する(バケットリス作成)アプリです。
アプリケーション利用方法
興味の持たれた方は一度、使って見て頂けるとうれしいです。
Androidアプリ
Androidアプリも作成しています。
iOSアプリ
iOSも出してます。私がiPhone持ってないので友人のアカウントですが。
webアプリ
こちらがコンペに出展しているアプリです。コンペようなので今年中にはクローズする可能性があるので、面白そうだなと思った方はAndroid版をインストールしていただければと思います。
Gemini展示会への参加
アプリの説明やデモ動画などがあります。投票していただければとうれしいです。
The Words:アイデアから実装まで
アプリの構想
初期のひらめき
今まで作成したものをGeminiを使ってリメイクしようとも考えましたが、何か物足りなさを感じたため、新規に作ろうと思いました。スティーブ・ジョブズの「死後に持っていけるものは思い出だけ」という言葉に心を打たれ、良い思い出作りのためのバケットリストアプリを構想しました。本当にやりたいこと、やりたかったことを思い出せ、少しでもポジティブな思い出作りに貢献できればと思ったのが制作の初期構想になります。
LLMとの格闘から生まれたアイデア
日々の業務でLLMを多用する中で、文字を見ることへの疲労感が蓄積していきました。そこで浮かんだのが、「質問すら見たくない」というユーザーニーズです。LLMの強みである文章生成能力を活かしつつ、ユーザーの負担を最小限に抑える方法はないか。そこから生まれたのが、ランダムな単語をタップするだけで個性を捉えるというゲーム感覚のアプローチでした。
LLMの本質を生かす
LLMの本質は、膨大な量の単語間の相関関係を学習していることだと考えています。であれば、単語だけを集めて、その解釈をLLMに任せれば、MBTIやストレングスファインダーよりも柔軟で面白いものができるのではないか。この発想が、アプリの核心部分となりました。
隠された深層:時間旅行とバケットリスト
今回のコンペに合わせた内容として、過去と未来に行くことでバケットリストを変更することができます。
- 過去:前世が「モノ」だったという設定。不自由だった過去から、人間としての自由を感じ取り、前に進む力を得る。
- 未来:成功体験を疑似的に体験。これによりモチベーションを高め、バックキャストして現在すべきことの解像度を上げる。
ランダム単語生成に課題
アプリの核心部分であるランダム単語の生成には、予想以上に苦心しました。この過程で直面した主な課題と、その解決に向けた試行錯誤は以下の通りです:
LLMの限界
当初、LLMに単純に「ランダムな単語を生成して」と指示すると、予想外の結果となりました。生成される単語が非常に一般的で、ありきたりなものばかりになってしまったのです。例えば、「愛」「夢」「冒険」といった、誰もが思いつくような単語ばかりが出てきました。これでは、ユーザーの個性を引き出すという目的が達成できません。
完全ランダムの罠
そこで次に試したのが、大規模な辞書データからランダムに単語を選ぶ方法です。しかし、これも問題がありました。選ばれる単語の多くが日常的に使用頻度の低いものばかりで、ユーザーにとって意味不明な単語の羅列になってしまったのです。例えば「錐体」「胱」「諳誦」といった単語が出てきて、バケットリスト作成には全く適していませんでした。
バランスの模索
理想的なのは、珍しすぎず、かといって個性を出せる単語です。そしてバケットリストの作成に適した単語です。バケットリスト作成に当たり、個性を判断する情報と個人と社会という発想になりました。そして、社会を文化と文明に分けて、その中で必要なものを細分化したものが下記になります。さらに、テスト回数を重ねるごとにユーザーの特徴をうまく捉えるようにしたいので、2回目以降のランダム生成は、ランダムが半分と、残りの半分は個性がでるような関連ワードにしています。こうすることで、幅と深さカバーできるのでは思いました。
- 個人:あなたの物語を彩る
- パーソナル(性格・心理、価値観・倫理観、人生目標など)
- ライフステージ(家族・人間関係、仕事・キャリア、日常生活など)
- 趣味・娯楽(スポーツ・アクティビティ、文化・芸術活動、エンターテイメントなど)
- 文化:心を動かす物語の源泉
- .コトバのチカラ(一般語彙、専門用語、時代・文化要素、固有名詞など)
- 芸術(視覚芸術、音楽、舞台芸術、文学など)
- エンタメ(メディア、デジタルエンタメ、ポップカルチャーなど)
- ライフスタイル(食文化、ファッション、旅行・レジャーなど)
- 文明:物語の舞台を作り出す力
- テクノロジー(IT・デジタル技術、医療技術、エネルギー・環境技術、宇宙開発など
- 社会(政治、経済、教育、医療・福祉など)
- 歴史(歴史上の人物、歴史的事件など)
開発環境プロセス
環境サマリ
今回はとても勉強になりました。プラットフォームや開発環境としては以下のようなものを使いました。
- windows
- git bash (git hub)
- VS code
- firebase
- flutter
FlutterとFirebase
Firebaseの魅力は、その包括的なサービス提供にあります。無料でウェブサービスを展開できる点も魅力的ですが、特に印象的だったのはセキュリティ面での配慮です。ブラウザアプリ開発時によく直面する、APIキーなどの機密情報の扱いに関する悩みを、Firebaseは標準機能で解決してくれます。さらに、アナリティクス機能の豊富さにも驚きました。簡単な設定で、アプリの起動回数やインストール回数など、Google Play Consoleよりも詳細な情報を取得できます。個人開発者にとって、これはとても心強い味方になると思います。
Flutterとの出会いも、開発の概念を大きく変えるものでした。VueやReact Nativeなど、クロスプラットフォーム開発環境の存在は知っていましたが、Flutterの直感的な開発体験は特筆すべきものです。特に、Webアプリの開発でありながら、従来のHTML/CSS/JavaScriptの知識をほとんど必要としない点に驚きました。Kotlinに近い記法で、UIからロジックまでを一貫して記述できる点は、まるで魔法のようです。特に、ファイルが跨るとLLMは途端に弱くなるので、相性も良い言語だと思いました。現時点のプログラミング作成能力がこれほど高いのなら、数年後は本当にノーコードで商品レベルのものが作れそうな世の中が待ってそうで楽しみです。
実行とマルチ環境
実際の開発プロセスでは、まずブラウザベースで開発を進め、その後Androidアプリへの移植を行いました。驚いたことに、このプロセスはほとんど追加の工数を必要とせず、スムーズに進行しました。もちろん、商用レベルのアプリケーションとして仕上げるには、プラットフォームごとの細かな調整が必要になるでしょう。しかし、個人開発やプロトタイピングの段階では、Flutterの効率性は群を抜いていると感じました。
特筆すべきは、FlutterやFirebaseの使用経験がほとんどない状態から、機能的なアプリを開発できた背景にLLM(大規模言語モデル)の存在があったことです。LLMを活用することで、新しい技術やフレームワークの学習曲線を大幅に緩和することができました。質問すれば即座に回答が得られ、エラーの解決策も迅速に提示してくれるLLMの能力は、開発プロセスを大きく変えつつあります。
まとめ
- The Wordsというアプリを作成し、geminiコンペに参加した。
- 構想から実装についてまとめた
- flutterとfirebaseを初めて使ったがLLMがサポートしてくれれば何とか対応できた