← ブログ一覧

コインは投げるけど従わない。記録アプリ Style Life をリリースした話

感謝日記・コイントス・やめたいことトラッカー・寝る前チェックインを1本にまとめたAndroidアプリ「Style Life」をGoogle Playで公開。「結果に従うためではなく、結果を見た瞬間の感情を記録する」コイントスの設計思想と、開発中に踏んだ日付・通知権限の罠を紹介。


この記事の結論: 生活を整える4つの記録(感謝日記・コイントス・やめたいこと・寝る前チェックイン)を1本にまとめたAndroidアプリ「Style Life」をGoogle Playで無料公開した。核はコイントスの設計思想——コインの結果に従うためではなく、結果が出た瞬間の「ホッとした/逆がよかった」を記録して自分の本音を可視化するという反転にある。通信なし・広告なし・アカウント不要の完全ローカル設計。

リナ社長(高校生社長のやり手ギャル)× タクヤ(入社3年目)— 今回は、Crowse に続いて個人開発していた2本目のアプリ「Style Life」が公開できたので、その紹介と開発中に踏んだ罠の回。(登場人物について


リナ社長「タクヤ、また新しいアプリ出したんだって? この前レビュー帳出したばっかじゃん」

タクヤ「Style Life っていいます。実はこっちの方が構想は先で、ずっと温めてたやつなんです。生活の質を上げるための記録を4種類、1本にまとめました」

リナ社長「4つも入れたら結局どれも使わなくなるパターンでは?」

タクヤ「その懸念はもっともで、だから4つとも『1分以内に終わる記録』だけに絞りました。日記は3行、チェックインは3タップ、コイントスは1回押すだけ。習慣化アプリでよくある目標設定とか計画立案は一切入れてません」


4つの機能:全部「書くだけ・押すだけ」

機能やること見えるもの
感謝日記(3 Good Things)今日よかったことを3つ書くカレンダーのマーク・連続記録日数
コイントス選択肢を2つ入れて投げる結果への感情の傾向・実際の選択との一致率
やめたいことトラッカーやめたい習慣を登録続いている日数・再発の履歴
寝る前チェックインエネルギー・気分・一言調子の波のグラフ

リナ社長「感謝日記はよくあるやつだよね。差別化どこ?」

タクヤ「感謝日記単体は正直ありふれてます。ただストリークの数え方は少し工夫していて、『今日まだ書いてない』状態でも昨日までの連続日数を表示するようにしました」

リナ社長「え、それ普通じゃないの」

タクヤ「素直に実装すると、朝アプリを開いた瞬間『0日連続』って出るんですよ。今日の分がまだ無いので。12日続けてた人が朝イチで0を見せられるとやる気を折られるので、今日が未記録なら昨日を起点に数えて、書いたらその分が加算される形にしました」

核心はコイントス:結果に従わせないための設計

リナ社長「で、コイントス。これ一番よく分かんない。アプリに人生決めてもらうのちょっと怖くない?」

タクヤ「そこがまさに設計の勘所で、このコイントスは結果に従うためのものじゃないんです。大事なのは結果が出た瞬間の自分の反応の方で」

リナ社長「反応?」

タクヤ「例えば『転職する/しない』でトスして『する』が出たとき、ホッとしたか、それとも『いや待って、やっぱ違うかも』って思ったか。後者なら、あなたの本音は『しない』側にあるってことです。心理学でよく言われる話ですけど、これをきちんと記録できるアプリが見当たらなかった」

リナ社長「あー、コインが決めてるんじゃなくて、コインで自分の反応を引き出してるわけね。それはちょっと面白いかも」

タクヤ「なので結果表示の直後に『😊 ホッとした・これでいい』/『😕 逆がよかったかも』の2択が出ます。後日『で、実際どうしたか』と『その選択に満足したか』も追記できます」

リナ社長「それ溜まると何が見えるの」

タクヤ「分析画面に『結果にホッとした率』『コインに従った率』『満足度の平均』が出ます。自分が直感型なのか熟考型なのか、コインに背中を押されたときの結果が良かったのかどうかが、感覚じゃなくて件数で見える」

リナ社長「自分の意思決定の癖のログか。あたし即決しすぎて後悔するタイプだから、数字で出たらちょっと凹みそう」

タクヤ「実はこの機能、最初の実装ではトスする前に直感を聞いていて、しかもその値をどこにも使っていませんでした。作り直しのときに『意思決定法として意味があるのは結果を見た後の感情の方だ』と気づいて、記録タイミングごと反転させています」

やめたいことトラッカー:再発してもゼロに戻すだけでは終わらせない

タクヤ「タバコ、夜更かし、間食、なんとなく開くSNS——そういうのを登録すると、やめてから何日目かを数えます」

リナ社長「これも定番アプリいっぱいあるよね」

タクヤ「差があるとしたら再発の扱いです。多くのアプリはカウンターがゼロに戻って終わりなんですけど、Style Life は再発を1件ずつ日付とメモ付きで履歴に残します。カレンダーにも印が付く」

リナ社長「失敗の記録が残るのって、しんどくない?」

タクヤ「逆で、間隔が空いてきたことが見えるんですよ。前は週1で再発してたのが今月は1回、みたいな。ゼロに戻すだけだと『またゼロか』しか残らないけど、履歴があれば右肩上がりの部分が見える。あと、やめきれたら『達成』にして一覧の下部にしまえます」

寝る前チェックイン:3タップで調子の波を残す

タクヤ「エネルギーを1〜5で選んで、気分を絵文字から選んで、今日を表す一言を入れる。一言は任意なので、実質2タップで終わります」

リナ社長「これは何のために取るの」

タクヤ「溜まるとグラフになります。『毎週水曜に落ちてる』『月末が毎回きつい』みたいな周期って、体感では気づけないんですよね。線で見ると分かる」

リナ社長「それ気づいたところでどうしようもなくない?」

タクヤ「予定の入れ方が変わります。落ちる曜日が分かってるなら、その日に重い打ち合わせを置かない、くらいはできる。もちろん体調の判断を代わりにするものではないので、あくまで自分用のメモですけど」

プライバシー:通信コードを1行も書いていない

リナ社長「日記って一番プライベートなやつじゃん。どっかに送られてない?」

タクヤネットワーク通信を実装していません。分析SDKも広告SDKも入れてないですし、アカウント登録も不要です。記録は端末内のSQLiteに入るだけで、開発者の僕からも中身は見えません」

リナ社長「じゃあ機種変で全部消える系?」

タクヤ「そこはJSONのエクスポート/インポートを用意してます。書き出したファイルを新端末で読み込めば復元できる。同じファイルを2回読み込んでも記録が二重にならないように、重複判定も入れました」

リナ社長「実際やってみた?」

タクヤ「パッケージ名を変えた関係で新旧2本が端末に並んだので、旧アプリから書き出して新アプリに読ませる移行を実機でやりました。カレンダーのマークの日付まで一致することを確認済みです」

開発中に踏んだ罠を2つだけ

リナ社長「作ってて一番ハマったのどれ」

タクヤ「日付です。継続日数を DateTime.now().difference(登録日).inDays で出してたんですけど、これ登録した当日はずっと0なんですよ。24時間経たないと1にならないので」

リナ社長「登録した瞬間『0日目』って出るってこと? 出鼻くじかれるじゃん」

タクヤ「そうなんです。時間差じゃなくて暦日の差で数えるように直して、登録日と再発日を『1日目』と数える形にしました。日付は時刻を含む型で扱うと、こういうズレが静かに紛れ込みます」

リナ社長「もう1個は?」

タクヤ「通知の権限です。Android 14以降、正確なアラームの許可を求めるAPIがダイアログじゃなくて設定アプリの画面を開く仕様なんですね。それを起動時の権限リクエストにまとめて入れていたせいで、アプリを起動するたびにOSの設定画面に放り出されてました」

リナ社長「それ最悪の第一印象じゃん」

タクヤ「ストア用のスクリーンショットを撮ってる最中に気づきました。今は通知権限だけを起動時に求めて、正確なアラームは設定画面のタイルからユーザーが自分で許可する形に分けています。許可しなくてもリマインダーは(時刻が多少前後する形で)ちゃんと動きます」

技術構成

同じFlutter製ですが、Crowseとは別のスタックで組んでいます。

項目採用
フレームワークFlutter
状態管理Riverpod 2.x(コード生成あり)
ローカルDBDrift(SQLite)
画面遷移go_router(ShellRoute でタブ管理)
グラフ/カレンダーfl_chart / table_calendar
通知flutter_local_notifications

リナ社長「なんでDrift? 前のアプリと揃えなかったの」

タクヤ「こっちは日付をキーにした更新(同じ日に書き直す)とか、習慣と再発の親子関係とか、SQLの制約に任せたい処理が多かったからです。日記もチェックインも『1日1件』なので、日付にUNIQUE制約を張って上書き保存にしています」

まとめ:小さく記録して、自分の傾向を見る

リナ社長「結局このアプリって何をするものなの、一言でいうと」

タクヤ自分の傾向を、記憶じゃなくて記録で把握するためのものです。よかったことも、迷ったときの反応も、やめられなかった日も、調子の落ちる周期も。どれも記憶だと都合よく歪むので」

リナ社長「4つバラバラに見えて、そこは一貫してるんだ」

タクヤ「はい。だから通知も1日1回だけにして、それ以上は急かさない設計にしました。続かない日があっても履歴は消えないので、思い出したときに戻ってくれば十分です」

リナ社長「じゃああたし、コイントスから使ってみるわ。次の仕入れ、ずっと決めきれてないやつあるし」

タクヤ「ぜひ。ただし——コインの言うとおりにしないでくださいね。出た瞬間に自分がどう思ったか、そっちを記録してください」

現在Android版をGoogle Playで公開中です。無料・広告なし・アプリ内課金なし。

Google Play — Style Life

コメント