MORU'S ORANGE BLOG

自分専用スマホアプリを作った

ここ最近、久しぶりにXcodeを開いて、iOSアプリを作りました。
過去にはいくつかアプリを作っていました(しばらくメンテしていなかったので、今現在は配信はしていません)。

今回作ったのは、情報アプリ・スマートホームアプリ・位置ゲームの3つです。

動機

これまでもiOSアプリはその都度勉強し、頑張って作っていました。
Apple Watchアプリの作り方なども手探りでやったり。
そんなに機能のあるアプリではないのですが、結構時間がかかっていました。

Coding Agentの登場により、ここが簡単になったから自分アプリを作れるのだという話は、チラホラ聞こえていましたが、友達が作ったと見せてくれたのが決定打となりました。

情報アプリ

まずは情報アプリもるみかんINTELです。
RSSをタイムラインに見立ててボットを常駐させ、基本的にはRSSを表示しつつ、ほかにも次のような機能を作りました。

  • 自分の知識を貯める
  • 特定のサイトを見張って、変更があったら教えてもらう類の情報を集める
  • 記事などから得たイベントや発売日などを登録できるカレンダー

もるみかんINTELのタイムライン。RSSの記事がタグやおすすめの印付きで並ぶ

サイトの見張りを頼んだスレッド。みかんねこが見張りタスクを作成する

それらを全て横並びにして、AIエージェントが情報同士を結びつけます。
例えば、RSSで発売日の情報が手に入ったら、それをカレンダーに追加するかどうかを提案してきたり、自分の知識メモに関係する記事が来たらマークを付けたりといったことをやっています。

「この記事をかんたんに解説して」と頼むと、みかんねこが要点をまとめて返すスレッド

使っているAI

価格の問題もあるので、普段の判断は全てDecision ModelのJevに任せています。
サイトに本当に更新が来たかどうかの判定もJevです。
見張りの設定作りや修復、知識をどのようにするかなど、その先の複雑な部分はClaudeのSonnetに回す構成にしています。

この構成のおかげで、今のところ結構安く済んでいます。
Decision Modelはかなり便利。
値段も安いし、ほとんどのタスクはこれに委ねることができると思います。

ほかにも、エージェントにはClaudeでその日の特集記事を作らせています。
その日までに直近であった気になる記事をピックアップして記事にし、通知してもらっています。
自分のアプリを作ると通知なども簡単に実装できるのでいいですね。

みかんねこが書いた「今日の特集」の記事画面

スマートホームアプリ

次はスマートホームアプリすまとほです。

今まではAmazon EchoのAlexaをベースにスマートホームを実現していました。
使うスマートホームデバイス自体はSwitchBotの機材に統一していて、それをAlexa経由で操作する形でした。
これについて少し面白いアイディアが思い浮かんだので、自前でやってみようと思いました。

SwitchBotは実はAPIのトークンを取得することができて、APIベースで制御が可能です。
なので、そのAPIで制御することでスマホアプリを作ることができました。

すまとほのホーム画面。室温のグラフと操作セットのボタンが並ぶ

トグル式の機器

バックエンドもサーバーレスで自分で作りました。
例えばテレビの電源ボタンのように、押したらオン、もう一度押したらオフになる、1つのボタンでトグル形式のものは、これまでその状態を自分で制御することができませんでした。
テレビが今オンなのかオフなのか分からないので、電源ボタンを押すという操作しかできなかったのです。

しかし実際にやりたいのは、テレビをオンにする、オフにするという操作です。
そこで、サーバーで現在オンなのかオフなのかというステートを持つことで、宣言的に「テレビをオンにする」などの操作ができるようにしました。

状態のセットとモード

また、複数のデバイスを一気に操作したいこともあると思います。
例えば帰宅後、夜だったらライトをつけて、冬だったら暖房をつけて、というような一連の操作です。

これらを1つのくくりとして作り、「帰宅後、冬の夜だったらこういう状態になってほしい」というセットを作ります。
暖房オン、ライトオン、テレビオンというような状態です。
アプリではこのセットを「モード」と呼んでいます。
その状態に変える、宣言的スマートホームが作れてちょっと面白い。

モードの一覧。帰宅時・就寝時・起床時・外出時ごとに機器のON/OFFを決めておく

位置ゲーム

最後は位置情報ゲームです。

このゲームを作ろうと思ったのは、自分の運動のため、というか、普段行かないところに行ったり外出したりする動機にするため、また日常の通勤などの経路でも一応遊べるゲームにするためです。
Pokémon GOを昔やっていたので、そのようなゲームを作りたいと思って作り始めました。

しかしまだ簡易的なもので、Pokémon GOのようなモンスターを集めて戦う要素は今のところありません。
とりあえずエリア開拓ができる仕組みを用意して、あとは世界観や、どのように遊ばせていくのかといったところを今試作して、ガラッといろいろ変えているところです。

例えば今作っているのは、Falloutのような世界が荒廃した世界観のものです。
いろいろな施設などを砦などに見立ててポイントを用意し、そこを探したりします。
また、そもそも歩いた場所を記録していって、セグメントを解放していくという機能も付けています。
これはPokémon GOには無かったと思います。

位置ゲームの地図画面。歩いて開いた六角形の区画と、砦などの拠点が地図に重なる

ここはまだお試し中という感じで、アイディアも欲しいところです。

最後に

今まではこんなアプリは作れるとしても、今の数倍以上は時間がかかったはずです。
バックエンドの構築もAWS CDK経由でエージェントに依頼していたり、どんどん楽になっています。
皆さんも何か作ってみてはいかがでしょうか。

次回は、これらのアプリを開発しているherdrを使ったエージェントオーケストレーションの仕組みの紹介をしたいと思いますが、まだ落ち着いていないので、落ち着いてからで・・。