fasting-ops
WIP(現在進行中)
Work In Progress
このプロジェクトで現在進行中の作業と、過去のスナップショットを記録する。
現在の状況
Play Console の2026年8月期限(対象 API レベル / Billing Library)に対応した Android 1.3.7 (versionCode 9) を production へ公開済み。警告3件はすべて解消。
できていること
fasting-unityをfasting-ops直下に clone して運用可能な状態(追跡対象外)- targetSdk 36 (Android 16) / Unity IAP 4.15.1 (Play Billing Library 8.3.0) へ更新
keystore.properties方式(kowai-android と同じ)+Assets/Editor/ReleaseBuildAndroid.csでバッチモード AAB ビルドできる体制- Google Play Developer API 経由での内部テストアップロードを自動化(認証は
~/.config/gcloud/play-console-sa.json) - 実機 HUAWEI YAL-L21 (Android 10) で回帰確認済み。クラッシュ / ANR / Unity エラーなし
- 次回リリースからネイティブデバッグシンボルが自動生成される設定(
androidCreateSymbols = Public)
次にやること
fasting-unityの3コミットを push する(masterに ahead 3、まだローカルのみ)- 次回リリース時にネイティブデバッグシンボルを Play Console へアップロード
- 次回 Android リリースで共有ボタンのクラッシュを直す(2026-09-25 記録、未着手)
- Android 12+ で共有(NativeShare)を開いた瞬間に
IllegalArgumentException(PendingIntent に FLAG_MUTABLE / FLAG_IMMUTABLE が無い)で落ちる。vitals(6/1〜9/24)でクラッシュ 1 位だが 2 件 / 2 ユーザー - 原因は
Assets/Plugins/NativeShare/Android/NativeShare.aar(2021-05 ビルド)。schulte の修正前 AAR とバイト単位で同一。呼び出し元はSettingTabDirector.cs - 直し方:
~/cdev/schulte-operation/schulte-unity/Assets/Plugins/NativeShare/Android/NativeShare.aar(修正済み、schulte-unitybf0b855)を同じパスに上書き(.meta はそのまま)→ versionCode を上げてビルド → 16KB エミュkowai16kで共有シートが開き落ちないことを確認。経緯は schulte-operation の .devnotes(2026-09-24〜25)、差し替えたクラスのソースはschulte-operation/patches/nativeshare-flag-mutable/
- Android 12+ で共有(NativeShare)を開いた瞬間に
- App Store Connect から現状のレビュー・売上を取得し
reports/に初回スナップショットを作る - 現在のストア掲載文言を
store/に書き出す
未確定・詰まっていること
- production の vc9 にはネイティブシンボルが付いていない(Play Console の警告は残るが配信・動作に影響なし。次回リリースで解消)
- Android 版には課金経路が存在しない(IAP 初期化が iOS 限定、Play Console のサブスク商品も0件)。マネタイズ方針として意図的なのか、機会損失なのかは未確認
PurchasingManager.Purchase()に Android 用ガードがない(既存の作り。ボタン非表示で到達しない前提)- 監視(クラッシュ/エラー)の仕組みは未確認のまま。Firebase Analytics は入っているが Crashlytics は未導入
過去のWIPアーカイブ
(新しい「現在の状況」を書く前に、古いものをここに追記でアーカイブする。新しいものが上)
2026-08-29 14:40 時点のスナップショット
fasting-ops リポジトリを新規作成し、運用リポジトリとしての骨組みを置いた段階。
できていること
- リポジトリ作成 + GitHub private 連携 +
dev-trackedtopic 付与 - 対象アプリの特定(Fasting Timer: 16:8 Tracker / app id 1618749450 / jp.thomsons.fasting)
- CLAUDE.md・README.md に運用スコープとディレクトリ構成を記載
store/support/reports/の3ディレクトリを README 付きで用意
次にやること
- Google Play 版の配信有無を確認する
- App Store Connect から現状のレビュー・売上を取得し
reports/に初回スナップショットを作る - 現在のストア掲載文言を
store/に書き出す
未確定・詰まっていること
- 監視(クラッシュ/エラー)の現状の仕組みが不明
- サーバーサイドの有無が不明(アプリがローカル完結かどうか)
- ストアスクショの管理場所を fasting-unity 側にするか本リポジトリ
store/にするか未決
ROADMAP(計画)
ロードマップ
今週
-
fasting-unityの3コミットを push する(masterに ahead 3、ローカルのみの状態) - Google Play 版の配信有無を確認する → 配信中。production は 1.3.7 / versionCode 9
- Play Console の2026年8月期限(対象 API レベル / Billing Library)に対応する
- App Store Connect から現状のレビュー・売上を取得し、
reports/に初回スナップショットを作る - 現在のストア掲載文言(タイトル / サブタイトル / 説明文 / キーワード)を
store/に書き出して起点を作る
今月
- 次回 Android リリース時にネイティブデバッグシンボルを Play Console へアップロードする
- 次回 Android リリースで共有ボタンのクラッシュを修正する(vitals のクラッシュ 1 位だが 2 件。NativeShare の AAR を schulte の修正版に差し替え。詳細は WIP)
-
PurchasingManager.Purchase()に Android 用ガードを入れる(m_StoreControllerが null のまま呼ばれた場合の保険) - Android 版に課金経路が無いことについて、意図的な方針なのか機会損失なのかを整理する
- KPI 定点観測の運用リズムを決める(何を・どの頻度で・どこに記録するか)
- 問い合わせ返信テンプレの初版を
support/に用意する - レビュー返信の方針(返信する対象・トーン・言語)を決めて DECISIONS.md に記録する
今四半期
- 月次レポートの型を固めて 3 か月分回す
- レビュー傾向から改善施策を 1 つ以上、本体(fasting-unity)へ差し戻す
- iOS 側のバージョンと Android 側のバージョン運用を揃える(1.3.4 と 1.3.6 でズレていた)
いつか
- クラッシュ/エラー監視の導入(Firebase Analytics は導入済みだが Crashlytics は未導入)
- ASO 改善(promo-expert と相談)
- ストアスクリーンショットの刷新(store-screenshots Skill)
- Unity 2022.3 LTS のサポート期限を見据えたエンジンアップグレード検討
DECISIONS(意思決定)
意思決定記録
このプロジェクトで下した重要な意思決定を記録する。 最新が上に来る。
2026-08-29: vc9 のネイティブシンボルは諦め、次回リリースから生成する
背景: 1.3.7 (vc9) を Debug Symbols 無効のままビルドしてしまい、Play Console にネイティブデバッグシンボルを登録できていない。既に production へ昇格済み。
決定: vc9 へのシンボル登録は見送り、ReleaseBuildAndroid.cs で androidCreateSymbols = Public を設定して次回リリースから自動生成されるようにする。
理由: シンボルを得るには再ビルドが必要だが、再ビルドした .so が出荷済み vc9 の .so とバイト一致する保証がなく、Build ID がズレたシンボルを登録すると誤ったスタックトレースに復号される。警告は残るが配信・動作には影響しないため、次回リリースでの解消を選んだ。Debugging ではなく Public にしたのは、完全なデバッグ情報は巨大でアップロード上限に触れやすく、関数名までの復号には Public で足りるため。
2026-08-29: Play Console へのアップロードを API 経由で自動化する
背景: kowai-operation では Play Console を Web UI で手動操作していた。fasting でも同じ方式にするか判断が必要だった。
決定: ~/.config/gcloud/play-console-sa.json のサービスアカウントを使い、Google Play Developer API 経由でアップロードする。keystore の扱いだけ kowai-android と同じ keystore.properties 方式に揃える。
理由: 既に Play Console API のサービスアカウントが用意されており、AAB・mapping.txt・トラック割り当て・validate・commit まで一連で自動化できるため。手動アップロードより取り違えのリスクが低く、validate を通してから commit できる。production への昇格だけは人間の判断を挟む運用とする。
2026-08-28: Play の Billing 要件対応に Unity IAP 5.x ではなく 4.15.1 を採用する
背景: Play が 2026-08-31 までに Billing Library 8 以上を要求。プロジェクトは Unity IAP 4.11.0(PBL 5.2.1)で3世代遅れだった。期限まで3日。
決定: Unity IAP を 4.x 系の最新 4.15.1 に上げる(PBL 8.3.0 同梱)。5.x へのメジャーアップグレードはしない。
理由: 当初 PBL 8 対応は 5.0.0 以降だけだと見立てていたが、4.15.1 も PBL 8.3.0 を同梱していると判明した。5.x は IStoreListener などの API に破壊的変更があり PurchasingManager.cs の書き換えと課金の再テストが必要になるが、4.15.1 なら使用中の型がすべて残存・非 Obsolete でコード改修ゼロで済む。期限が3日しかない状況で、収益に直結する課金コードに手を入れないルートを選んだ。
2026-08-28: アプリ本体を fasting-ops 直下に clone して運用する
背景: 当初は「アプリ本体のコードは fasting-ops には置かない」方針だったが、Android のビルド検証・リリース作業を運用側から行う必要が生じた。
決定: fasting-unity を fasting-ops 直下に clone し、.gitignore で追跡対象外にする。本体への変更・コミットは fasting-unity リポジトリに対して行う。
理由: ビルド検証やストア提出を運用セッションから完結させるため。ネストした git リポジトリになるので、.gitignore に入れて fasting-ops のコミット対象に混ざらないようにした(Git LFS 込みで約1.5GB あり、誤って混ぜると影響が大きい)。
2026-08-28 運用リポジトリをアプリ本体から分離する
決定: 断食タイマーの運用を、アプリ本体リポジトリ(fasting-unity)とは別の fasting-ops で管理する。
理由: 本体は Unity プロジェクトで巨大かつビルド対象であり、運用の記録・文面・レポートとは変更頻度もレビュー観点も異なる。分離することで、運用作業だけを軽量に回せる。本体は現状この Mac にクローンされておらず(Windows 側で開発の可能性)、運用作業が本体の作業環境に依存しない利点もある。
トレードオフ: リリースノートなど本体のバージョンと対応づく情報が2リポジトリに分かれる。store/ のリリースノートに本体のタグ/コミットを併記して追跡する。
2026-08-28 運用スコープを4カテゴリで定義する
決定: 運用スコープを ①ストア運用 ②ユーザー対応 ③監視・障害対応 ④KPI・分析 の4つとし、成果物の置き場を store/ support/ reports/ に対応させる。
理由: 「全般」という広い依頼を、実際にファイルが増える単位に落とし込む必要があるため。監視・障害対応は現状仕組みが未確認なので専用ディレクトリを作らず、判明した時点で追加する。
DEVLOG(作業ログ)
開発日誌
このプロジェクトでの作業を時系列で記録する。 最新のエントリが上に来る。
2026-08-29
14:40 - Play の2026年8月期限対応: Android 1.3.7 (vc9) をリリース
このセッションは 8/28 夕方から連続しているため、8/28 分の作業も含めて記録する。
やったこと(8/28)
- アプリ本体
fasting-unityをfasting-ops直下に clone(Git LFS 込み、約1.5GB)。.gitignoreで追跡対象外にし、CLAUDE.md に配置・Unity バージョン・default branch(master) を明記 - Android 版がビルド・実行できるか検証。Unity 2022.3.62f2 + Android Build Support は導入済みで、バッチモードビルド成功 → Android 16 / 16KB ページのエミュレータで起動確認(クラッシュなし)
- Play Console の警告3件(すべて対応期限 2026-08-31)に着手
- 対象 API レベル更新 → targetSdk 34 → 36 (Android 16)
- Google Play Billing Library 更新 → PBL 5.2.1 → 8.3.0
- 新規ユーザー配信継続の要件(API 35 以上)も 36 で同時に満たす
- Billing 対応は Unity IAP のメジャーアップグレード(5.x、API 破壊的変更あり)が必要と当初見立てたが、4.x 系最新の 4.15.1 が PBL 8.3.0 を同梱していると判明。
IStoreListener等の使用中の型がすべて残存・非 Obsolete のため、PurchasingManager.csの改修ゼロで対応完了 - Unity 2022.3 は AGP 7.4.2 / Gradle 7.5.1 と古いが compileSdk 36 のビルドが通ることを実測で確認。Unity 本体のバージョンアップは不要
- リリース署名を
keystore.properties方式(gitignore 対象)に統一し、Assets/Editor/ReleaseBuildAndroid.csでバッチモード AAB ビルドできるようにした - 署名済み AAB
fasting-1.3.7-9.aabをビルドし検証。targetSdk 36 / PBL 8.3.0 / arm64-v8a の .so 17個すべて 16KB アラインメント合格 / 署名検証 OK - Google Play Developer API 経由で内部テストトラックへアップロード(mapping.txt も同時登録)
やったこと(8/29)
- 実機 HUAWEI YAL-L21 (Android 10 / API 29) で動作確認。起動・3タブ・断食開始/リセット・ローカル通知の登録/キャンセル・AdMob 広告・バックグラウンド復帰まで確認し、クラッシュ / ANR / Unity エラーはゼロ。テスト用の断食記録はリセットで消してある
- Android 版は課金できないことを確認(後述)
- トムソンの OK が出て You が production へ昇格(vc9 / 1.3.7)
- ネイティブデバッグシンボルが未登録と判明。次回リリースから自動生成されるよう
androidCreateSymbols = Publicを設定
気づき
- Android 版には課金経路が存在しない。
HomeScene.csの IAP 初期化が#if UNITY_IOS、プレミアムボタンと設定タブの課金セルは#if UNITY_ANDROID return;で非表示、体重タブも Android では非表示。Play Console 側もサブスク商品 0件。したがって今回の IAP アップグレードは「PBL 8 を積むためだけ」で、実行時の課金挙動には影響しない - Play の Android 配信版は 1.3.4 だったが、リポジトリの
bundleVersionは 1.3.6 だった(iOS 側だけ先行していた可能性)。今回 1.3.7 に揃えた - 1.3.7 は Debug Symbols 無効でビルドしたため symbols.zip が出ておらず、vc9 にはネイティブシンボルを登録できない。
Library/配下にnative-debug-symbols.zipはあるが、中身が x86/x86_64 の Firebase のみでlibil2cpp.so/libunity.soを含まず使えなかった - 1回目の AAB ビルドは Gradle デーモンが
stop command receivedで失敗。メモリ 24GB 中 空き 151MB まで逼迫していたのが原因で、滞留デーモンを終了させたら通った mainTemplate.gradleはコミット済み内容とAssets/GoogleMobileAds/Mediation/Pangle/の依存定義がズレていた(ビルド時に EDM4U が Pangle を追記する)。ビルド時に自動解決されるため実害なし
次回やること
fasting-unityの3コミットを push(ローカルのみの状態が続いている)- 次回リリース時にネイティブデバッグシンボルを Play Console へアップロード
PurchasingManager.Purchase()に Android 用ガードを入れる(ボタン表示制御が崩れた場合にm_StoreControllerが null のままInitiatePurchaseを呼んで落ちる。production 1.3.4 から存在する既存の作りで急ぎではない)
2026-08-28 プロジェクト新規作成
~/cdev/fasting-opsを新規作成し、GitHub private リポジトリichirokisanuki/fasting-opsと連携(dev-trackedtopic 付与済).devnotes/4ファイル、.gitignore、README.md、CLAUDE.md を配置- 運用対象アプリを特定: Fasting Timer: 16:8 Tracker
- App Store app id
1618749450/ bundleIdjp.thomsons.fasting/ SKUfasting/ 主要ロケール en-US - 本体リポジトリ: https://github.com/ichirokisanuki/fasting-unity (Unity / C#、private、本 Mac には未クローン)
- App Store app id
- 運用スコープは「全般」= ストア運用 / ユーザー対応 / 監視・障害対応 / KPI・分析 の4カテゴリと定義
- 成果物の置き場として
store/support/reports/を README 付きで用意
最近のコミット
- 3d9b1fe .devnotes に Android 共有ボタンのクラッシュ(NativeShare)の修正予定を記録 2026/9/25
- 0db487b CLAUDE.md に Unity IAP 5 移行時の課金実装の注意を追記 2026/9/18
- 3eb4a29 .devnotes を更新(Play の2026年8月期限対応と Android 1.3.7 リリース) 2026/8/29
- 407da95 アプリ本体 fasting-unity の直下 clone を運用前提として明文化 2026/8/28
- d14006f 運用対象アプリの特定と運用リポジトリの骨組み整備 2026/8/28
- b962a3d Initial commit 2026/8/28
README
fasting-ops(断食タイマー 運用)
概要
断食タイマーアプリ Fasting Timer: 16:8 Tracker(App Store: jp.thomsons.fasting / app id 1618749450)の運用リポジトリ。
アプリ本体(Unity / C#)は ichirokisanuki/fasting-unity にある。 本リポジトリはコードを持たず、ストア運用・ユーザー対応・監視・KPI 分析といった運用側の記録と成果物を管理する。
セットアップ
クローンするだけで使える。ビルド対象なし。
git clone https://github.com/ichirokisanuki/fasting-ops.git
cd fasting-ops
使い方
| パス | 用途 |
|---|---|
store/ |
ストア掲載文言、リリースノート、審査・リジェクト対応の記録 |
support/ |
問い合わせ対応テンプレ、不具合報告のトリアージ記録 |
reports/ |
KPI 定点観測、売上・レビューのレポート |
.devnotes/ |
開発メモ(DEVLOG / WIP / DECISIONS / ROADMAP) |
詳細な運用方針は CLAUDE.md を参照。