-
装飾の色と状態の色をどう共存させるか。彩度を状態の軸に使う設計と、枠にだけ別の扱いが要る理由、そして小画面で情報の置き場所をどう決めたかをまとめます。
-
ストア掲載画像・SNS・LP の OG 画像を1つの生成器にまとめ、スマホ掲載を横長5枚に刷新した設計メモ。ストアの表示ロジックに合わせた判断、コピーと配色の単一情報源化、比率が違うキャンバスで崩れないレイアウトの書き方、切り出し位置の実測までをまとめます。
-
「でいりんぐ」を「ぽんっ!」へ改名した 2.0.0 の設計メモ。名前と識別子の線引き、ロケール別の表示名、外部依存の参照を切り替える順序、旧参照を恒久的に受け続ける判断、ASO とわかりやすさのトレードオフをまとめます。
-
「ぽんっ!」2.0.0 でこども画面をまるごと刷新しました。視覚語彙をシールに統一する、完了を色で示さない、地の色を変えずにコントラストを解く、書体を同梱する、テーマの適用点を1箇所に寄せる — その設計判断をまとめます。
-
「ぽんっ!」1.1.3 の設計メモ。やること単位の時刻リマインダーと週カレンダーを、既存のストリーク判定や通知予約にどう相乗りさせたか。予約 ID をレンジで管理する理由、判定を共有して取得範囲は分ける切り分け、画面の面積の配分をまとめます。
-
「ぽんっ!」1.1.2 の設計メモ。一度だけ取得する状態の無効化責務をどのスコープに置くか、配列の同一性を何で決めるか、集計クエリをどう共有するか、対応 OS を広げる判断がビルド最適化に及ぼす影響までをまとめます。
-
「ぽんっ!」1.1.1 でやることの並び替えを実装しました。並び順を専用フィールドではなく配列順に持たせた理由、表示がフィルタされたリストで並び替えを成立させる方法、そして機能の到達性をどう設計したかをまとめます。
-
Flutter アプリの E2E を 42 シナリオまで増やしたうえで、実行時間を抑えるために入れた3つの設計(実行 OS の分類、1ビルドへのバンドル実行、前提が同じシナリオの統合)と、その判断基準をまとめます。
-
こども向け習慣化アプリ「ぽんっ!」に連続達成ストリークと「できたリマインド」通知を実装しました。連続の定義をどう決めたか、取得コストをどう抑えたか、状態に応じて鳴らす通知をどう設計したかをまとめます。
-
家族向けアプリ「ぽんっ!」で入れた、アプリ内リリースノートの仕組みの記録。更新内容は独自に用意した API で管理し、アプリは取得して表示するだけ。Remote Config を採らなかった理由と、更新時ダイアログ・履歴一覧の設計・判断をまとめます。
-
個人開発アプリのフリーミアム設計を、『広告の入れ方・プレミアムの価値・無料の抜け道・画面PV計測』の観点で見直したときに整理した設計の勘所。広告とプレミアムは表裏一体で、計測を先に整えるべき、という話。
-
家族向けアプリ「ぽんっ!」の育成キャラをなでると、happy 表情・バウンス・触覚・効果音で反応するようにした記録。1 つの操作に複数のフィードバックを重ねるときの責務分離、reduced-motion と別演出との排他、音の ON/OFF ゲートとサイレントフォールバックをまとめます。
-
Xcode 26.x で「ぽんっ!」の patrol インテグレーションテストが『Total:0 / test runner timed out』になった。実は2段の別問題の重なりで、クラッシュログ起点で切り分けると、Podfile の依存埋め込みと XCUITest の quiescence 無効化でテストランナーが起動し adult_flow が通った記録です。
-
「やりなさい」を卒業。こども自身が「できた!」をスタンプで記録し、貯まるとキャラクターが進化する家族向けスタンプ帳アプリ『ぽんっ!』をリリースしました。最大3人のおとなで見守れ、離れて暮らす家族とも成長を共有できます。
-
「ぽんっ!」の全画面を、両ロール・ライト/ダークで golden テストとして PNG 化し、Apple HIG とアクセシビリティの観点で一気に監査した記録。実機なしで潰せる静的な問題(コントラスト・reduced-motion・Semantics ラベル)と、実機が要る問題の切り分けをまとめます。
-
家族向けスタンプ帳アプリ「ぽんっ!」のLPを作った記録。アプリの DESIGN.md と配色を単一ソースで揃えた話、日本語見出しの折り返し、そして Chrome では再現しない Safari(WebKit) 特有の画像の間延び(CLS)をどう潰したかを、実装ベースでまとめます。
-
「ぽんっ!」を1台の端末で兄弟が使うケースに向けて、非連携タブごとにキャラ育成の ON/OFF を選べるようにした記録。既定 OFF・一方向 ON の設計、給餌ゲートの置き場所、更新時に別フィールドを取りこぼしていた潜在バグの発見をまとめます。
-
「ぽんっ!」のメール登録に、メアドの実在確認を追加した記録。メールリンクサインインではなく確認メール(sendEmailVerification)方式を選んだ理由(Dynamic Links 廃止とディープリンク基盤の不在)、emailVerified を『登録済み』の判定に組み込んだ設計、課金との関係をまとめます。
-
「ぽんっ!」で google_sign_in を v7 に移行した直後、Google/Apple 連携を実装しない方針が確定し、機能ごと削除した記録。休眠コード(UI から到達できないコード)を抱えるコストと、v7 移行で得た設計上の学び(初期化ゲート・設定ファイル依存)をまとめます。
-
「ぽんっ!」のパスワードリセット・変更UIで、autoDispose な Notifier を ref.read だけで操作したところ、実機の await 中にプロバイダが破棄されて UnmountedRefException でクラッシュした。同期完了する fake のウィジェットテストでは再現せず E2E だけが捕まえた不具合と、回帰テストの書き方をまとめます。
-
「ぽんっ!」の Crashlytics をトリアージした記録。オフライン時に購入情報取得(getCustomerInfo)の NetworkError が未捕捉で fatal 計上されていた不具合を fail-closed で直した話と、minSdk のせいで実ユーザーには起きない『慌てなくてよいクラッシュ』の見分け方をまとめます。
-
「ぽんっ!」の依存更新を、Dependabot を週次に固定し、少し後に走らせた検証ジョブが全合格なら自動マージ・破壊的変更は自分で直す、という運用にした記録。パッチを無視して更新をまとめる設定と、外部要因でブロックされる依存の扱いをまとめます。
-
Android 15(targetSdk 36) でエッジツーエッジが強制され、「ぽんっ!」の一部画面で末尾がナビゲーションバーに隠れた。原因になりやすい画面パターンと、viewPadding を加算する統一的な修正、そして Flutter エンジン由来の非推奨API警告の扱いをまとめます。
-
「ぽんっ!」に『おとなも1日1回えいようをあげる協力育成』を足したら、過去日レコードやサイクル跨ぎで育成日数が負値になったり、卵の基準日が後退したりした。原因の日付計算と、更新系を直列化して二重適用を防いだ修正をまとめます。
-
「ぽんっ!」は QR コードで家族を連携し、相手の表示名やタブ名を画面に出す。QR の中身は外部入力なので、長さのクランプと制御文字・双方向テキスト・ゼロ幅文字の除去でサニタイズした記録。壊れたデータでホームが全停止しないための防御的パースもあわせてまとめます。
-
「ぽんっ!」のテストカバレッジを 60% 台から 80% に引き上げた記録。生成物を分母に含めると過小表示される計測の落とし穴、fresh worktree での不正確さ、そして fake 注入・autoDispose プロバイダ・無限アニメーション画面のテストで効いた実践パターンをまとめます。
-
workmanager のバックグラウンド処理は別 isolate で動く。そこで ObjectBox のストアを独立に開くと、同じDBファイルを複数ストアが触って競合・クラッシュする。ストアの開き方を一元化して解消した話です。
-
「ぽんっ!」が Google Play のファミリーポリシー(広告内容がコンテンツレーティングと不一致)で否承認になった対応記録。レーティングを下げるのではなく広告側をレーティングに合わせて制限する方向性と、AdMob の RequestConfiguration に足した設定、コード外で必要な作業をまとめます。
-
「ぽんっ!」の育成キャラ84体を、ローカルの Stable Diffusion と Claude Code で作り直した記録。txt2img/img2img で王冠などの装飾が乗らない失敗、目の統一、色違いの量産、破綻分の取り直しと目視採用など、生成AIで『量産できる部分』と『後処理に頼るべき部分』の切り分けをまとめます。
-
App Store / Google Play の掲載スクリーンショットを、実機やエミュレータなしで作る仕組みを Claude Code スキルにした記録。Flutter の golden テストで生スクショを撮り、静的HTML + Playwright + sharp で端末フレーム・キャッチコピー付きに装飾する。対象画面・ダミーデータ・ツール構成まで具体的にまとめます。
-
「ぽんっ!」はスタンプを貯めるとキャラが卵から進化し、最終進化で図鑑に登録される。この抽選ロジックを『重み付け1段』から『2段抽選+色違い』に作り直した。終盤の失速をなくし、キャラ数を増やしても自動追随する設計と、その狙いをまとめます。
-
「ぽんっ!」の App Store 審査で受けた指摘への対応記録。RevenueCat の初期化前呼び出しによる起動クラッシュ、解約手順の表示範囲(ガイドライン 2.3.10)、規約リンクを外部ブラウザで開く問題(3.1.2(c)) の3点を、どう直したかとあわせてまとめます。
-
家族向けアプリ「ぽんっ!」で、おとなからこどもへの初回連携が突然 PERMISSION_DENIED で失敗するようになった。原因は、連携処理をトランザクション化した際に足した『相手の読み取り』がセキュリティルールで弾かれていたこと。読み取りをやめた修正と、ユニットテストで見逃した理由をまとめます。
-
家族向けアプリ「ぽんっ!」の課金状態を、クライアントが直接書き込む方式から、Webhook を受けたサーバだけが更新する方式へ変更した設計の記録。なぜクライアント書き込みが危険か、ルールでのロック、Webhook 認証を定数時間比較にした理由をまとめます。
-
「ぽんっ!」の端末引き継ぎ機能で、承認後に新端末が待機のまま固まる不具合が本番で起きた。原因は Cloud Functions(第2世代) の createCustomToken が署名権限不足で失敗していたこと。gen2 の実行サービスアカウントに署名ロールを付ける定番の落とし穴と、待機画面がエラーを握りつぶしていた設計上の弱さをまとめます。
-
ゲーム記録アプリ「ログ簿」のランディングページを作った記録。背景色を交互に切り替えるセクション構成でアプリの価値を順に見せる工夫と、iOS/Androidを判定して1つのURLから最適なストアへ送るダウンロード導線について書きます。
-
個人開発のポートフォリオページを、既存の Go/Echo サーバから html/template で配信する形で自作した記録。ミニマルな配色設計に加えて、ライト/ダーク対応・WCAG AAの文字色・prefers-reduced-motion・noscript・画像のCLS対策・OGP・カード全体タップなど、地味だけど効く工夫をまとめます。
-
ネイティブAndroid時代のローカルデータを、Flutter版のObjectBoxへ引き継ぐ移行処理。変換ロジックよりも「openStore() の前に一度だけ走らせる」という実行順序の設計がすべてだった、という実装記録です。
-
Flutter へ移行したログ簿で、ローカルDBに ObjectBox を採用した理由を整理します。ネイティブAndroid時代からの継続、SQLiteベースの構成より軽量・高速に扱えること、そしてSQLiteと同じ感覚で使える扱いやすさ——という3つの観点から、技術選定の判断を残しておきます。
-
Flutter版ログ簿の一部端末だけで起動時に libflutter.so をロードできず落ちる問題。手元で再現しないネイティブライブラリのロード失敗をどう切り分けたか、そして「効きそうだから」とパッケージング設定を触ってはいけない理由を実体験からまとめます。
-
Riverpod・ObjectBox・build_runner のメジャーアップデートが同時期に重なり、生成コードとランタイムの噛み合わせでビルドが通らなくなった。コード生成に依存するライブラリは、部分的にではなく対応バージョンを一括で上げる方が安全だったという移行の教訓です。
-
Kotlin製のネイティブAndroidアプリ「ログ簿」を Flutter へ移行した経緯と、Clean Architecture + Riverpod + ObjectBox で組み直した設計判断、移行中に踏んだ落とし穴をまとめます。
-
ログ簿のネイティブ Android UI を画面単位で Jetpack Compose へ移行した記録。Route/Screen 分離で ViewModel 依存を切り離し、段階的に旧レイアウトを撤去していった手順を紹介します。
-
別リポジトリで管理していたAPI(go_api)を git subtree でアプリのリポジトリへ統合し、logbo をモノレポ化した経緯の振り返り。API×クライアントの横断変更が楽になった一方、ポートフォリオなど関心の異なるものまで同じリポに入れてしまった失敗も、コミット履歴をたどりながら正直に書きます。
-
ログ簿で、クラッシュもログも出ないのに突然ログインできなくなったユーザーがいた。Firebase Authentication のコンソールでそのユーザーを一度「無効化→有効化」したら直った、という原因不明トラブルの記録です。
-
ゲーム記録アプリ「ログ簿」の初期リリースから初期アップデートまでの履歴を1ページにまとめたものです。かつて個別に告知していた内容を、記録として統合しました。
-
フルKotlinのAndroid開発で貯まった ktx / Extension の知見を common-ktx というライブラリにまとめた話。ダブルクリック防止のクリックリスナー、SharedPreferences の委譲プロパティ、ランタイムパーミッションのチェックなど、よくある処理を Extension で手軽に呼べるようにしています。
-
iOS の fastlane match で、既存の証明書を失効させずにそのまま取り込みたい。参考記事どおりにやると NameError: uninitialized constant Match::GitHelper で失敗したので、原因(Ruby/fastlane のバージョン差)とバージョン別の対処コードを残します。
-
CIサービス Bitrise で Android アプリをビルドしようとして右往左往した記録。NDK、build.gradle の署名設定、SDK インストール失敗、Artifacts で APK が取れない——という4つのつまずきと、最終的に落ち着いた WorkFlow を紹介します。
-
Flutterで開発したアプリをApp Store Connectにアップロードする手順のメモ。Xcodeから直接ビルドして「Command /bin/sh failed with exit code 255」で詰まった原因と、flutterコマンド+Xcodeで正しくアーカイブする流れを残します。