gabor-ops
WIP(現在進行中)
Work In Progress
このプロジェクトで現在進行中の作業と、過去のスナップショットを記録する。
現在の状況
どこまで進んだか
- Play Console の 2026/8/31 期限(対象 API レベル)に対応した vc14 / 1.3.8 を製品版へ昇格し、審査提出済み
- targetSdk 34 → 36、Google Play Billing Library 6.2.1 → 8.3.0(Unity IAP 4.15.1)
- あわせて AdMob プラグインを 10.5.0 → 11.4.0(GMA Android SDK 25.4.0)、メディエーション4種も更新
- minSdk は 23 → 24(AppLovin アダプタの要件。Android 6.0 が新規インストール対象外に)
- 実機(Android 10)で全画面・広告表示・データ保持を検証済み。クラッシュなし
- ネイティブ デバッグ シンボルを別途生成してアップロード済み
- 実装リポジトリ
gabor-unityをgabor-ops/gabor-unityにクローンして参照できる状態(gabor-ops 側では追跡しない)
次に何をするか
- 審査結果を確認し、製品版に反映されたら Play Console の期限警告が消えることを確認する
- Pangle 経由の広告品質が悪い件をどうするか決める。AdMob の広告ソース別収益シェアを見て、切るか残すか判断
- レビュー依頼ポップアップの誤字(「協力してれくれませんか」→「してくれませんか」)を次回アップデートで修正
- iOS 側の確認。AdMob 11.4.0 は GMA iOS 13.0 / UMP 3.1 に上がるため、次に iOS ビルドを作るときに影響が出る可能性がある
詰まっていること・未決事項
- Pangle の扱い(収益シェアを見ないと判断できない)
- Android 版には課金導線が無いため、Unity IAP を Android ビルドから外せば Billing Library の年次バージョン要件から恒久的に解放される。ただし iOS と同一プロジェクトのため分離作業が必要で、やるかどうか未決
過去のWIPアーカイブ
(新しい「現在の状況」を書く前に、古いものをここに追記でアーカイブする。新しいものが上)
2026-08-29 14:06 時点の更新前スナップショット
どこまで進んだか
- リポジトリを初期化し、README / CLAUDE.md にプロジェクトのスコープ(運用全般)と iOS 側のアプリ情報を記載した
- 対象アプリは App Store ID
1607971341/ Bundle IDjp.thomsons.Eyesight
次に何をするか
- Android の package 名 / Google Play URL を確認して README・CLAUDE.md に記入する
- KPI のベースライン(DAU・継続率・売上)を一度取って記録する
- 定点観測の型(何を・どの頻度で・どこに)を決める
詰まっていること
- 特になし
ROADMAP(計画)
ロードマップ
今週
- Android 側の package 名を CLAUDE.md に記入する(
jp.thomsons.Eyesight) - Play の 2026/8/31 期限対応(targetSdk 36 / Billing Library 8.3.0)を vc14 としてリリース
- vc14 の審査結果を確認し、Play Console の期限警告が消えることを確認する
- Pangle 経由の広告品質問題への対応を決める(AdMob の広告ソース別収益シェアを見て、無効化するか判断)
- 現状の KPI(DAU・継続率・売上)のベースラインを一度取って記録する
今月
- 定点観測の型を決める(何を・どの頻度で・どこに記録するか)
- iOS / Android 双方の直近レビューを棚卸しし、対応が要るものを洗い出す
- レビュー依頼ポップアップの誤字を修正する(「協力してれくれませんか」→「してくれませんか」)
- iOS 側への影響確認。AdMob 11.4.0 で GMA iOS 13.0 / UMP 3.1 に上がるため、次回 iOS ビルド時に検証が要る
今四半期
- Unity IAP を Android ビルドから外せるか検討する。Android 版に課金導線は無いが、 バイナリに含まれる限り Billing Library の年次バージョン要件の対象になり続ける
いつか
- ASO の見直し(タイトル・サブタイトル・キーワード・スクリーンショット)
- KPI 取得の自動化(App Store Connect MCP / GA4 を叩くスクリプト化)
DECISIONS(意思決定)
意思決定記録
このプロジェクトで下した重要な意思決定を記録する。 最新が上に来る。
2026-08-29 minSdk を 23 から 24 に引き上げる
背景: AdMob 11.4.0 に合わせた AppLovin メディエーションアダプタ 13.6.4.0 が minSdk 24 を要求し、minSdk 23 のままではマニフェストのマージが失敗してビルドできない。
決定: minSdk を 24 に引き上げる。Android 6.0(API 23)は新規インストールの対象外になる。
理由: Android 6.0 は 2015年の OS でシェアはごくわずか。既存の Android 6.0 ユーザーはインストール済みのバージョンを使い続けられる。代替案の「AppLovin アダプタだけ旧版に固定」は Google が検証した組み合わせから外れるため採らなかった。
2026-08-28 Unity IAP は 5.x ではなく 4.15.1 を選ぶ
背景: Play の 2026/8/31 期限に向けて Google Play Billing Library を 8.0 以上にする必要があった。プロジェクトは Unity IAP 4.12.2(Billing 6.2.1)だった。
決定: Unity IAP を 4.15.1 に上げる(Billing Library 8.3.0)。最新の 5.4.2(Billing 9.0.0)は採らない。
理由: 4.15.1 は 4.x 系の API を維持しているため、IStoreListener ベースの既存 PurchasingManager.cs を無改修のまま要件を満たせる。5.x は API の破壊的変更があり、期限まで3日という状況で移行リスクを取る理由がなかった。
2026-08-28 期限対応と AdMob 更新をコミット単位で分離する
背景: Play の 8/31 期限対応(targetSdk 36 + Billing 8.3.0)と、期限とは無関係な AdMob プラグイン更新を同じリリースに含めることになった。
決定: 先に期限対応だけをコミットして「いつでも出せる状態」を作り、その上に AdMob 更新を積む。
理由: AdMob の更新は minSdk 引き上げや R8 のクラッシュなど不確定要素が多かった。分離しておけば、行き詰まっても期限対応コミットに戻すだけでリリースできる。期限を人質に取らずに済む。
2026-08-28 実装リポジトリは運用リポジトリ直下にクローンして参照する
背景: 運用作業(ストア対応・ビルド・提出)で実装コードを直接触る必要が出てきたが、gabor-ops はスコープ上アプリ実装を持たない方針だった。
決定: gabor-unity を gabor-ops/gabor-unity にクローンし、gabor-ops 側では .gitignore で追跡しない。実装の変更は gabor-unity 内で commit / push する。
理由: 参照とビルドのために手元にある必要がある一方、運用リポジトリに実装を取り込むと「運用と実装を分ける」当初の方針が崩れる。追跡しないクローンなら両立できる。
2026-08-28 リリース署名は keystore.properties 方式に統一する
背景: 署名済み AAB をビルドする経路が無く、キーストアのパスワードをどう扱うか決める必要があった。
決定: kowai-android と同じく、gitignore 済みの keystore.properties にパスワードを置き、ビルドスクリプトがそれを読む方式にする。
理由: 既に別プロジェクトで実績のある方式で、運用を揃えられる。パスワードがリポジトリにも ProjectSettings にも残らないことを確認済み。
2026-08-28 リポジトリのスコープを「運用」に限定する
決定
gabor-ops はアプリ「THE 視力回復」の運用(ストア運用・KPI 観測・プロモーション・ユーザー対応)を扱い、アプリ本体の実装コードは置かない。
理由
アプリはすでに iOS / Android の両方でリリース済みで、実装リポジトリは別に存在する。 運用の記録・判断は実装のリリースサイクルと寿命が違うため、混ぜるとどちらも追いにくくなる。
DEVLOG(作業ログ)
開発日誌
このプロジェクトでの作業を時系列で記録する。 最新のエントリが上に来る。
2026-08-29
14:00 - vc14 の実機検証・製品版昇格・ネイティブシンボル対応
やったこと
- 実機(Huawei YAL-L21 / Android 10 / arm64)で内部テスト版 vc14 を全画面確認
- バナー広告・インタースティシャル広告とも実表示を確認(更新した AdMob 11.4.0 経由で配信されている)
- トレーニング3モード(同じ図形を探そう / 間違い探し / 見るだけ)、視力測定、各結果画面、トレーニング履歴カレンダーすべて正常
- 自己ベスト・実施履歴がセッションをまたいで保持されることを確認。クラッシュなし
- 広告が毎回割り込んで結果画面に到達できなかったため、端末の通信を一時的に切って残りの画面を検証(検証後に復帰済み)
- トムソンの確認 OK を受けて製品版へ昇格し、審査に提出(You が実施)
- Play Console が「ネイティブ デバッグ シンボルが無い」と警告した件を調査・解決
- AGP が生成していた zip は armeabi-v7a / x86 / x86_64 の Firebase ライブラリのみで、実際に配信している arm64-v8a のシンボルが1つも入っておらず使用不能だった
- Unity の中間生成物からストリップ前シンボルを回収し、ELF の build-id でアップロード済み AAB と同一ビルドであることを照合したうえで zip を作成
Builds/gabor-1.3.8-vc14_native-debug-symbols.zip(libil2cpp / libunity / libmain)を You が手動アップロード
- 再発防止として、リリースビルドスクリプトに
androidCreateSymbols = Publicを明示(cb84e88)
詰まったこと / 気づき
- Pangle 経由のインタースティシャル広告の品質が悪い。スキップボタンを狙ったタップで Google Play が開き、バックキーを4回押しても閉じられず、動画→エンドカード→別動画と連鎖した。検証中に自アプリの広告を2回誤クリックしてしまった
- メディエーション経由の広告は AdMob の広告レビューセンターでクリエイティブ単位のブロックができない。対処するならネットワーク単位で切るしかない
- Android 版には課金が存在しないことが判明。ペイウォールへの導線が
#if UNITY_ANDROIDで全て塞がれており、Play 側にも定期購入が0件。ただし Unity IAP がバイナリに含まれる以上 Billing Library のバージョン要件の対象にはなる - レビュー依頼ポップアップに誤字(「協力してれくれませんか」)。今回は見送り
次回やること
- 審査結果の確認と、製品版反映後の Play Console 警告の解消確認
- Pangle の扱いを AdMob の広告ソース別収益シェアを見て判断
2026-08-28
14:30-19:00 - gabor-unity のクローンと Play 2026/8/31 期限対応
やったこと
- アプリ本体が Unity 2022.3.62f2 製であることを確認し、実装リポジトリ
ichirokisanuki/gabor-unityをgabor-ops/gabor-unityにクローン(gabor-ops 側では追跡しない) - Android package
jp.thomsons.Eyesight、Unity バージョンを CLAUDE.md に記載 - Play Console の 8/31 期限警告2件に対応(
d78ba3e)AndroidTargetSdkVersion34 → 36- Unity IAP 4.12.2 → 4.15.1(Google Play Billing Library 6.2.1 → 8.3.0)
- versionCode 13 → 14(versionName は 1.3.8 のまま)
- AdMob プラグイン 10.5.0 → 11.4.0、メディエーション4種(AppLovin / Line / Pangle / LiftoffMonetize)も 11.4.0 検証済みの組み合わせに更新(
9e7cd37) - 署名済み AAB のビルド経路を整備(
keystore.properties方式 +Assets/Editor/AndroidReleaseBuild.cs) gabor-1.3.8-vc14.aabをビルドし、mapping ファイルとともに内部テストトラックへアップロード- API 36 / API 35(16KB ページサイズ)両エミュレータで起動・動作確認、ネイティブ .so の 16KB アライメント準拠も検証
詰まったこと / 気づき
- メディエーションの新パッケージは asmdef のファイル名が変わっており、旧ファイルが残るとアセンブリ名重複でコンパイルが停止する。EDM4U のバージョンハンドラは batchmode では走らないため、旧ファイルを手動で掃除してから unitypackage を直接展開して解決
- AGP 7.4.2 同梱の R8 が
androidx.profileinstaller 1.4.0の処理で StackOverflowError を起こす。baseProjectTemplate.gradleで 1.3.1 に固定して回避 - Unity は Gradle を
-Dorg.gradle.jvmargs付きで起動するため、gradleTemplate.propertiesの同名プロパティは上書きされて効かない - Unity を二重起動すると、先に終了した方が
AndroidGradleStopDaemonsOnExitにより後発ビルドの Gradle デーモンを停止させてしまう
2026-08-28 プロジェクト初期化
new-project-setupSkill で~/cdev/gabor-opsを作成し、GitHub private リポジトリ(ichirokisanuki/gabor-ops)と連携した.devnotes/4ファイル、.gitignore、README.md、CLAUDE.mdを配置dev-trackedtopic を付与- App Store Connect MCP の
list_appsで対象アプリを特定:- 「THE 視力回復~ガボールパッチで視力回復トレーニング」 / App Store ID
1607971341/ Bundle IDjp.thomsons.Eyesight
- 「THE 視力回復~ガボールパッチで視力回復トレーニング」 / App Store ID
- スコープを「運用全般(ストア運用・KPI・プロモ・ユーザー対応)」と定義し、README / CLAUDE.md に記載
- Android 側の package 名・Play URL は未取得(次にやること)
最近のコミット
README
gabor-ops(THE 視力回復 運用)
概要
iOS / Android でリリース済みのアプリ 「THE 視力回復~ガボールパッチで視力回復トレーニング」 の運用を管理するリポジトリ。
ガボールパッチ(Gabor patch)を使った視力トレーニングアプリで、リポジトリ名の gabor はこれに由来する。
アプリ本体の実装コードは別リポジトリで管理し、ここでは運用(ストア対応・KPI観測・プロモ・ユーザー対応)を扱う。
対象アプリ
| 項目 | 値 |
|---|---|
| アプリ名 | THE 視力回復~ガボールパッチで視力回復トレーニング |
| App Store ID | 1607971341 |
| iOS Bundle ID | jp.thomsons.Eyesight |
| App Store | https://apps.apple.com/jp/app/id1607971341 |
| Android package | (要記入) |
| Google Play | (要記入) |
| ステータス | iOS / Android ともリリース済み |
このリポジトリで扱うこと
運用全般を扱う。
- ストア運用 — 審査・リジェクト対応、バージョン更新、レビュー返信、規約変更への追従
- KPI / 売上 — DAU・継続率・売上の定点観測、レポートの記録
- プロモーション — ASO、告知文面、LP、ストア掲載素材
- ユーザー対応 — 問い合わせ・不具合報告のトリアージ、告知
セットアップ
(記入予定)
使い方
(記入予定)
開発メモ
.devnotes/ 配下で管理する。
.devnotes/DEVLOG.md— 作業の時系列記録.devnotes/WIP.md— 現在進行中のメモ.devnotes/DECISIONS.md— 意思決定記録.devnotes/ROADMAP.md— 計画