← 一覧に戻る

fasting-ops

GitHub ↗ 最終push: 2026/9/25 19:28

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-unity bf0b855)を同じパスに上書き(.meta はそのまま)→ versionCode を上げてビルド → 16KB エミュ kowai16k で共有シートが開き落ちないことを確認。経緯は schulte-operation の .devnotes(2026-09-24〜25)、差し替えたクラスのソースは schulte-operation/patches/nativeshare-flag-mutable/
  • 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-tracked topic 付与
  • 対象アプリの特定(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-tracked topic 付与済)
  • .devnotes/ 4ファイル、.gitignore、README.md、CLAUDE.md を配置
  • 運用対象アプリを特定: Fasting Timer: 16:8 Tracker
  • 運用スコープは「全般」= ストア運用 / ユーザー対応 / 監視・障害対応 / KPI・分析 の4カテゴリと定義
  • 成果物の置き場として store/ support/ reports/ を README 付きで用意

最近のコミット

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 を参照。