趣味開発の近況(25/9)

どうも、あるぱかです。趣味での開発関係の近況報告です。

最近は多少余裕が出てきて、余暇で開発とかする時間も確保できるようになってきた。

身内・自分用

タクシー業務アプリ

父親がタクシー運転手なんだけど、お客さんの予約を管理・表示するようなアプリを作ってほしいと言われて作った。

github.com

タクシー業務アプリUI



お客さんから電話で予約を受けた際に、予約日時・氏名・電話番号・迎え先・行き先を入力して登録すると一覧に追加される。その後、予約を選んでホーム画面にピン留めし、現在時刻と共に確認できるという感じ。付箋に受け付けた予約をメモって、ダッシュボードに貼り付ける・・・という流れをそのままデジタル化した感じ。時刻に応じて勝手に切り替えるとかもできなくはないけど、まずは今までのやり方に沿った形のほうが使いやすいかなと思ってこうした。

あと、次の乗車が予約配車であることを忘れないようにするための単純な「予約配車」表示機能とか、勤種(勤務時間の種別)表示機能とか、父親のタクシー業務に沿った機能を付け加えている。

Androidアプリ開発自体は前職で製品検査や物流の記録をするハンディ端末アプリを作っていたのでそこそこ経験があったのだけど、古典的な方法(FragmentクラスとxmlでのUI定義)で作ったことしかなかったので、せっかくだから宣言的UI(Jetpack Compose)を使ってみることにした。

こういう使ったことないの使うときって、まずドキュメントを読み込んでサンプル試して・・・ってのが定石だったのだけど、生成AIのおかげでこれも変わった。自分の要件に合わせておおまかに作ってくれるので、これを参考にして作っていけばよく、めちゃくちゃ簡単にできてしまった。

ほとんど修正の必要ないものもあるし・・・。例えば、アナログ時計なんかはほぼ何も手を加えていない。https://github.com/ritsu2891/KokuboTaxiApp/blob/576f74dc41f6506c0b5b782c0fe91f013a15e5e2/app/src/main/java/jp/rpakafarm/kokubotaxi/ui/AnalogClock.kt

アナログ時計

あと、宣言的UIはすばらしいね。レイアウトだけ別で書く必要がなくて楽だし、全部Kotlinで書けるし、ものすごくコードの見通しが良い・・・。前職のハンディ端末アプリも宣言的UIで作りたかったなと思った(引き継げるようにJavaで書いてほしいという要望があったから諦めたのだけど)

Androidにしたのは、端末が比較的安価に手に入るというのもあるのだけど、配信をGoogle Play Store経由で対象を絞ってできるからというのもある。自分の持ってる適当なドメインGoogle Workspaceの組織を作成して、無料のCloud Identity Freeを割り当ててアカウントを発行し、その組織のアカウントだけを対象としてGoogle Play Store上で限定配布するということができる。Google Playの登録料はかかるけど、一度きりの支払いなのでランニングコストはかからない。こういう身内向けアプリはAndroid一択だなぁって感じ。

※クローズドテストを使えばいちいち組織を作らなくとも良いが、運用中のアプリをいつまでもテスト扱いなのって気持ち悪いし、あくまでリリース扱いにするためには上記の方法がよいかと。

予算管理

私はMoneyForwardで収支を管理している。現金・貯金・投資信託・クレジットなど、過去の収支の管理はMoney Forwardでもできるのだけど、それだけでは十分でない。予定している支出を管理し、将来の支出推移・収支バランスを見通す必要がある。

これまでは過去実績から何となく予測してスプシで適当に計算していたのだけど、何となくのままだとお金を使いたいと思うことがあるときに自信をもって判断できないので、きちんとシステム化することにした。

具体的には、過去の収支実績と未来の収支予定をDB上に記録して、将来の収支を計算して可視化できるようにした。

予算管理のデータフロー

github.com

まず、過去の確定した収支実績をMoneyForwardから取り込んでDBに登録する。

予算管理のデータ取り込み

予算管理の実績収支データ

次に、未来の収支予定をDBに登録する。定常的なものはマスタとして登録してからスクリプトで指定月の収支予定を生成するようにし、一時的なものは手動で登録する。

収支予定に対応するMoneyForwardの収支実績が上がってきたら、予定と実績を紐づけて消し込む。

予定支出の生成

実績支出での予定支出の消込

収支実績と、消し込まれていない収支予定を合わせれば将来の収支額が計算できる。

これを元に実績と予定の支出が見れる画面を作った。

予算可視化(合計額表示)

予算可視化(各予算項目)

カテゴリごとに実績は塗りつぶし、予定はストライプ柄で表現して合計金額を出して合計の支出額の比較が視覚的にできるようにした。

また、これらの実績+予定の支出を合計して将来の支出額を計算し、収入額と比較して今月はあと何円使う予定を立てたら赤字というのが明確にわかるようになった。

※ただし、食料品など一部のカテゴリについては月の支出額(予算額)を定めて、実績+予定がこれを超えていなければ、予算額を将来の支出額として扱うようにする(いつにどれだけ使うという形での登録が難しいので)

DBはLightsailのPostgreSQL、DBのレコード操作はnocodb、グラフ表示はStreamlit。今回の予算管理みたいな内輪向けのお手軽な情報管理システムは、この構成でだいたいなんでもできそう。

まだちゃんと作り切れていないところもあるが、きちんとできたら同じ構成を再現できるようチュートリアル記事を書こうと思っている。支出予定を管理するって発想があんまりないかもしれないけど。アプリ化してもいいんだけど、実績の管理がベースだから、それって収支記録アプリを作るってことになってかなり手間かかりそうだから難しいよねぇ。

一般公開

カラオケ風MIX表示アプリ(MixFlow)

単純に自分が使いたかったからというノリで作ったアプリ。音楽再生アプリで歌詞がタイミングに合わせて表示されてカラオケできるようになってるのってよくあるけど、アイドル現場のMIX(コール)も同じようにできたら面白いんじゃないかな・・・と思って。

MixFlow LP

mixflow.rpaka-farm.jp

MixFlow

MixFlow

  • Kokubo Ritsuki
  • エンターテインメント
  • 無料

apps.apple.com

note.com

あと、今後いろいろとアプリを出していこうと思ってるのだけど、なんか簡単なアプリで一通りの流れを経験しときたいなと思った時に、うってつけの題材だった。MIXは単語に拍を割り当てて一定の速度で叫ぶので、タイミング管理が単純で作りやすい。アプリリリースをおためしするのにちょうどよい規模のものだった。

このアプリも宣言的UI(SwiftUI)を使っている。ネイティブなiOSアプリは全く作ったことなかったので、生成AIに大変お世話になった。未経験言語・未経験フレームワークの時は特に心強いね。

まぁこのアプリ、ニッチでユーザは限られているが、リリースに向けてのもろもろの準備が把握できたのが個人的には収穫だった。今回のアプリはきちんと利用状況を把握して、改善に生かすということができるように、Firebase AnalyticsとAmplitudeを仕込んでいる。このイベントの仕込み方とか、広告(Google AdMob)の仕込みとか、プライバシーポリシー・利用規約の準備とか、問い合わせフォームの準備とか・・・をちゃんとやってみた。

まぁ利用状況見てになるけど、リポジトリデータの整備や機能追加はしばらく保留の予定。究極大富豪の優先度を一番にしたいと考えている。iOS 26が正式配布されたら、UIをiOS 26に適合させるとかはちょっとやってみたいかも。

究極大富豪

なんらかのモバイルアプリを出したいというのは終わったし、転職・引っ越しして落ち着いたのもあり、しばらく休止していた究極大富豪の開発にいよいよ腰を据えて取り組めるときが来たと思っている。

究極大富豪 LP

umefugo.rpaka.dev

store.steampowered.com

ゲームサーバは純粋にGoで書くWebサーバとして、クライアントは一旦Unityで作るものの代替可能とできるようなシステム構成にしたいと考えている。

とりあえず秋の終わりごろまでにv1のベータ版程度のローカルルールを実装した大富豪を搭載したゲームサーバを作り、秋~冬ごろに簡易的なクライアントを実装、年明けにベータ版再開というスケジュールを目標としている。

究極大富豪のシステム構成

あと、大富豪に限らずいろいろなトランプゲームができる感じにしたいと思っているのだけど(例のゲームとか・・・)これの基本的な部分だけでもOSSとして公開するとか、あるいはAPIとして提供するなりして、ほかのゲーム内のミニゲームとして使うとか、トランプゲームの研究用途で使うとかできたら面白いんじゃないか、とか思ったり。トランプゲームのOEMてきな。

まぁ妄想は脇に置いといて、ひとまずきちんと大富豪ゲームを実現するところから、やね。Steamのページは公開しっぱなしなんだけど、まあまあインプレッションあるので完成したら結構盛り上がりそうな気がしている。今これの開発がいちばんモチベ高いね。

作りたいアプリ

他にもいろいろアプリ作りたいなぁ・・・と。特に以下は順次取り組んでいきたい。

経済圏

家庭内や、小規模な組織で使えるポイントを発行・消費ができるポイントカードアプリ。通貨の代替ではないけど、通貨もどきみたいな。社内通貨みたいなものはこれに近いと思うのだけど、もっとプライベートなところでも使いどころあるんじゃないかなと。子供のお手伝いに対してポイントを発行するとかそういうアプリはあるみたいだけど、ポイントのやり取りに特化して汎用的に使える感じにしたい。

www.nikkei.com

以前はWebアプリで作ったことがあったが、まずモバイルアプリでローカルでやり取りする感じにしたいと思ってる。

ポイントカードアプリのイメージ

あと、このポイントをただ単に付与・消費するだけじゃなくて、銀行・証券・株とか現実の通貨にあるような金融システムを再現できないかと思っている。おもちゃとしても面白いし、金融教育にも使えるんじゃないかなと。アナログなボードゲームでそういうことをしているところもあるみたいだし、これがデジタルなポイントでできたら面白そう。

法令・規約・辞書

最近、デジタル庁の主導もあって法令のデジタル化が進んだのもあり、法令がものすごく見やすい環境が整っている。しかも、この法令データのフォーマット(e-LAWS XML)は公開されており、再利用性が高く、本当に素晴らしい取り組みをしていると思う。

laws.e-gov.go.jp

laws.e-gov.go.jp

最近、気になる法令改正のニュースを見かけたときとかに、e-LAWSに対応したお気に入りの法令ビューアを使って法令を見るとかしているのだが、非常に快適だ。データフォーマットが公開されているからこそ、自分の好きなツールで閲覧、あるいは編集できるのはとても価値があると感じた。

それで、法令については上記のように素晴らしい環境になっているのだけど、会社などの組織で規定される規約についても、このようなオープンなデータフォーマットとビューアの提供がなされれば良いんじゃないかと考えた。会社に限らず、家庭内、サークル、あるいは個人でも規約・ルールを定めることは重要だ。法令のようにガチガチに固めなくても、なんとなくそうなっている「自然とできている」ルールを明文化することで、行動を見直すきっかけになる。自分は現在、Notionに自分ルールを規約として定めて定期的に見直している。これをe-LAWSのようなフォーマットで記述できて、かつそれに対応したビューアがあれば便利だなと思った。

あと、会社内での独自用語など、特定の組織内での独自の言葉とかを辞書として定義して、それをきれいに見れたら面白そうというのも前々から思っていた。これもオープンなデータフォーマットにすれば、ツールにとらわれずこの辞書の活用・編集が活発に行えるんじゃないか。デジタル辞書アプリは多数出ているが、データフォーマットが公開されていて、自分で作成した辞書データを取り込んで表示するアプリというのはなさそう。

上記のような考えから、e-LAWSに加えて、新しく規約・辞書のオープンなデータフォーマットを策定し、それに対応したビューアアプリを作りたいと考えている。

AgreementKit

規約といえば、最近「カラオケ風MIX表示アプリ(MixFlow)」を作ったときに思ったのが、プライバシーポリシー・使用許諾契約をちゃんと作って、見れる状態にするのってまぁまぁ面倒だなということ。これ以外に独自の規約とかがあって、アプリ内とかで同意を取りたいという場合はなおさら面倒だろう。

それでちょっと思ったのが、このような規約の公開・アプリ内での同意の仕組みをSDKとして提供するサービスがあれば楽になるんじゃないかなぁ・・・と。アプリの使用許諾契約とかプライバシーポリシーはよくあるテンプレートみたいなのを作っておいて、基本これ使うだけでOKですとかできれば楽に作れそう。(似たようなサービスあるか調べてないから既にあるかもだけど)それで、規約は上記のオープンなデータフォーマットにして、ほかにも持ち出せる・使えるようにするとか。

関係性・倫理観距離

他人との関係性って、他人との関わり合いの中で他人の考え、とりわけ価値観や倫理観をお互いに知ることで変わっていくものと思っている。人と分かり合えないのは、どちらかの価値観や倫理観が誤っているのではなく、ただ単に距離が離れているだけなんだと思う。価値観や倫理観の要素を何か数値化して次元空間を構成したときに、ベースとなるような空間は存在せず、ただ単に離れた位置にあるというだけのこと。だから、人を嫌いになるというのは間違っていて、単に「違う」というだけのことでしかない。これについては、もっとかみ砕いて別途記事にしたいと考えている。

倫理観距離のとらえ方

その根拠となるような関わり(会う・会話する・メッセージをやり取りする・SNSの発信を見る・・・)とそれに対する感じ方は、確実にこの「距離」に影響しているのだけど、時間がたつと忘れてしまう。本当に、全ての価値観で距離があるのか。距離があるとして、その根拠がなんなのか、距離にどの程度の影響を与えているのかを冷静に見つめ直すべきだ。こうすることで闇雲に嫌うとか、そういうネガティブな反応を無くしていき、幸せに生きる助けとなるんじゃなかろうか、と最近強く思っている。

人とあった日の記録、とか人に対するメモアプリとかはあるのだけど、上記のような考えをベースにし、人との関係性・価値観や倫理観の距離に着目した、人とのかかわりを記録するアプリを作るというのもありかなと思っている。

まずは究極大富豪

上以外にもいろいろとアイデアがあるんだけど、あれもこれも手を出してると何も作れないので、まずは究極大富豪に集中したいと思ってる。年明けにベータ版出すのは頑張ってやりたいなぁ・・・の気持ち。あと、こういうアプリのアイデアとか話すの好きな人いたら話したいねぇ。こうして記事に起こしてみると結構ネタあるし、ちゃんとスライド作って一回くらい個人LTみたいなのを配信でやろうかなぁとちょっと思ってる。