Skip to content

EASにお引越し#4539

Merged
TinyKitten merged 10 commits intodevfrom
feature/cicd
Nov 2, 2025
Merged

EASにお引越し#4539
TinyKitten merged 10 commits intodevfrom
feature/cicd

Conversation

@TinyKitten
Copy link
Member

@TinyKitten TinyKitten commented Nov 2, 2025

Summary by CodeRabbit

  • New Features

    • 開発用の自動ビルド&配布ワークフロー(Android/iOS)を追加しました。
    • 版管理を同期するバージョンバンプ用スクリプトを追加しました。
    • EAS構成ファイルを追加しました。
  • Improvements

    • アプリのバージョンを 1.0.0 → 10.0.0 に更新しました。
    • ビルド、署名、パッケージング設定をプロパティ駆動で柔軟化しました。
    • 起動画面(スプラッシュ)アセットを追加・更新しました。
  • Chores

    • .gitignore とビルド設定を整理・更新しました。
    • 古いCI前処理スクリプト/補助スクリプトを削除しました。

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 2, 2025

Walkthrough

朕は宣す:EASの並列Canaryビルドワークフローを追加し、アプリ版を10.0.0へ更新、Android/iOSのビルド設定・署名・リソース・Xcodeプロジェクトを大規模に再配線し、複数のiOS CI前処理スクリプトを削除した。

Changes

Cohort / File(s) 変更の概要
EAS ワークフロー
​.eas/workflows/create-development-builds.yml
新規追加:Android/iOSの並列Canaryビルド。checkout→submodule update→複数の base64 環境変数をデコードしてファイル復元(.env.local / sentry.properties / google-services.json / GoogleService-Info.plist / release.jks / gradle.properties 等)→ eas build → 各ストアへ提出。環境変数検証と早期失敗を含む。
CI スクリプト削除
ios/ci_scripts/ci_post_clone.sh, ios/ci_scripts/ci_pre_xcodebuild.sh
削除:Node/pnpm/pod インストールや GoogleService-Info / sentry.properties の base64 復元等の前処理スクリプトを削除。
.gitignore 更新
.gitignore
credentials.json を追加、Fastlane 認証ファイル名変更、Expo eject 関連パターンを再編。
バージョン管理 & 自動化スクリプト
app.json, package.json, eas.json, scripts/bump-version.js
アプリ版を 1.0.010.0.0 に更新。eas.json 追加。version:bump スクリプト追加および scripts/bump-version.js により app.json/package.json/Android/iOS プロジェクトのバージョン同期ロジックを実装。
Android ビルド構成
android/app/build.gradle, android/build.gradle, android/gradle.properties, android/wearable/build.gradle.kts
設定をプロパティ駆動に変更(bundleCompression/minify/shrink/crunchPngs 等)。BuildConfig に REACT_NATIVE_RELEASE_LEVEL 追加。signingConfigs.release を導入し release の signingConfig を切替。Gradle JVM/並列設定調整。wearable flavor の versionCode を変更。
Android 資源追加/削除
android/app/src/dev/res/drawable/splashscreen_logo.xml, android/app/src/prod/res/drawable/splashscreen_logo.xml, android/app/src/prod/res/res/drawable/rn_edit_text_material.xml, .../mipmap-anydpi-v26/*, .../splashscreen.xml
dev/prod にスプラッシュロゴを追加。旧来の drawable、adaptive icon、splashscreen リソースを削除。
iOS Pod/設定変更
ios/Podfile, ios/Podfile.properties.json
ENV に基づく use_frameworks! 分岐を削除。apple.ccacheEnabled"true""false" に変更。
iOS Xcode プロジェクト再配線
ios/TrainLCD.xcodeproj/project.pbxproj
大規模差分:Pod/フレームワーク参照、BuildPhases、xcconfig 参照、App Clip 関連ファイル/リソースの追加・再配線、各ターゲット設定(CURRENT_PROJECT_VERSION / MARKETING_VERSION 等)更新。
iOS スプラッシュ資源
ios/TrainLCD/Schemes/Dev/SplashScreenAppClip.storyboard, ios/TrainLCD/Schemes/Prod/SplashScreenAppClip.storyboard
App Clip 用スプラッシュ Storyboard を新規追加。

Sequence Diagram(s)

sequenceDiagram
  actor EAS as EAS CI
  participant Repo as Repository
  participant AndroidJob as Android Canary Job
  participant iOSJob as iOS Canary Job
  note right of EAS #DDEBF7: ワークフロー起動(並列)
  EAS->>Repo: checkout + submodules
  EAS->>AndroidJob: start Android canary (parallel)
  EAS->>iOSJob: start iOS canary (parallel)

  alt Android: 環境復元
    AndroidJob->>AndroidJob: validate env vars\ndecode DOTENV_LOCAL_BASE64 -> .env.local
    AndroidJob->>AndroidJob: decode SENTRY_PROPERTIES_BASE64 -> android/sentry.properties
    AndroidJob->>AndroidJob: decode GOOGLE_SERVICES_JSON_BASE64, RELEASE_JKS, gradle.properties 等
  end
  AndroidJob->>AndroidJob: eas build (android)
  AndroidJob->>AndroidJob: install artifacts & submit to Google Play

  alt iOS: 環境復元
    iOSJob->>iOSJob: validate env vars\ndecode DOTENV_LOCAL_BASE64 -> .env.local
    iOSJob->>iOSJob: decode SENTRY_PROPERTIES_BASE64 -> ios/sentry.properties
    iOSJob->>iOSJob: decode GOOGLE_SERVICE_INFO_PLIST_BASE64 -> ios/.../GoogleService-Info.plist
  end
  iOSJob->>iOSJob: eas build (ios)
  iOSJob->>iOSJob: submit to TestFlight
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

注意箇所:

  • ios/TrainLCD.xcodeproj/project.pbxproj(参照整合性、Build Phases、xcconfig の差分検証)
  • scripts/bump-version.js(バージョン同期ロジック、入力検証、日本語エラーメッセージ)
  • .eas/workflows/create-development-builds.yml(秘密情報デコード、環境変数検証、並列制御)
  • android/app/build.gradle(署名設定・プロパティ駆動の動作確認)

Possibly related PRs

Suggested labels

ci/cd

Poem

朕、命じる:二路の軌は並びて動き出す、
秘を解き戻し版は十へと高らかに。
古きを断ち、新しきを綴る。
ビルドは整い、門は開かれん。
⚙️🚂✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed 朕が詳細に観察したところ、本プルリクエストの変更内容は EAS(Expo Application Services)への全面的な移行を示すものである。.eas/workflows/create-development-builds.yml と eas.json の新規作成、Android と iOS のビルド設定の大規模な改修、CI/CD スクリプトの廃止と再構成など、すべての変更が EAS への移行という統一された目的に貫かれている。タイトル「EASにお引越し」は、この主要な変更を簡潔かつ明確に表現しており、変更セットの本質を正確に反映している。
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/cicd

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3c46d77 and 0de4cce.

📒 Files selected for processing (3)
  • android/app/build.gradle (5 hunks)
  • app.json (1 hunks)
  • ios/TrainLCD.xcodeproj/project.pbxproj (45 hunks)
🧰 Additional context used
🧠 Learnings (8)
📓 Common learnings
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 0
File: :0-0
Timestamp: 2025-08-11T21:13:39.083Z
Learning: TinyKitten prefers concise code reviews for the TrainLCD/MobileApp repository. Keep review comments brief and to the point.
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4448
File: functions/src/funcs/tts.ts:214-232
Timestamp: 2025-08-11T20:23:23.071Z
Learning: PR #4448 in TrainLCD/MobileApp is specifically about AI feedback summarization and labeling functionality, not about TTS (Text-to-Speech) improvements. The TTS code changes appear to be part of a modularization refactoring but are not the focus of this PR.
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4511
File: package.json:43-66
Timestamp: 2025-09-22T09:21:21.741Z
Learning: TinyKittenはExpo SDK 54アップグレードにおいて、babel.config.js、RCTNewArchEnabled設定、Podfile設定を適切に処理している。App ClipのiOS deployment targetの調整のみが必要な状況。
📚 Learning: 2025-09-22T09:21:21.741Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4511
File: package.json:43-66
Timestamp: 2025-09-22T09:21:21.741Z
Learning: TinyKittenはExpo SDK 54アップグレードにおいて、babel.config.js、RCTNewArchEnabled設定、Podfile設定を適切に処理している。App ClipのiOS deployment targetの調整のみが必要な状況。

Applied to files:

  • android/app/build.gradle
  • ios/TrainLCD.xcodeproj/project.pbxproj
  • app.json
📚 Learning: 2025-08-04T12:17:03.430Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4429
File: src/components/CustomErrorBoundary.tsx:25-25
Timestamp: 2025-08-04T12:17:03.430Z
Learning: In the TrainLCD mobile app, __DEV__ and isDevApp serve different purposes: __DEV__ is only true during debug/development time, while isDevApp is true for both debug time and release-built canary versions. This distinction is intentional - __DEV__ is used to prevent sending crash reports to Sentry during development, while isDevApp is used to enable stack trace display for both developers and canary testers.

Applied to files:

  • android/app/build.gradle
📚 Learning: 2025-01-05T12:57:11.319Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 3979
File: android/wearable/build.gradle.kts:37-38
Timestamp: 2025-01-05T12:57:11.319Z
Learning: Wearableアプリ(android/wearable/build.gradle.kts)のversionCode末尾の`1`はウェアラブルデバイスのビルド番号を表すため、Androidモバイルと異なるversionCodeになるのは正常である。

Applied to files:

  • android/app/build.gradle
📚 Learning: 2025-02-19T11:37:54.286Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4077
File: ios/ProdAppClip/Assets.xcassets/AppIcon.appiconset/Contents.json:1-35
Timestamp: 2025-02-19T11:37:54.286Z
Learning: In the TrainLCD project, App Clip icons are shared with the main app, and therefore do not require separate icon files in the App Clip's Assets.xcassets.

Applied to files:

  • ios/TrainLCD.xcodeproj/project.pbxproj
📚 Learning: 2025-02-19T23:03:04.326Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4081
File: src/constants/ident.ts:1-2
Timestamp: 2025-02-19T23:03:04.326Z
Learning: In iOS development, App Clip bundle identifiers should have a `.clip` suffix to differentiate them from the main app bundle identifier.

Applied to files:

  • ios/TrainLCD.xcodeproj/project.pbxproj
📚 Learning: 2024-12-15T00:35:52.018Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 3947
File: ios/ci_scripts/ci_pre_xcodebuild.sh:2-3
Timestamp: 2024-12-15T00:35:52.018Z
Learning: `ios/ci_scripts/ci_pre_xcodebuild.sh` スクリプトでは、Prod ディレクトリを作成する必要はありません。

Applied to files:

  • ios/TrainLCD.xcodeproj/project.pbxproj
📚 Learning: 2025-09-22T09:30:14.592Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4511
File: package.json:43-66
Timestamp: 2025-09-22T09:30:14.592Z
Learning: TrainLCDのApp Clipは15MB制限を超えるため、iOS 17以上(50MB制限)をdeployment targetとして設定する必要がある。IPHONEOS_DEPLOYMENT_TARGET = 17.6の設定は技術的要件に基づく適切な判断。

Applied to files:

  • ios/TrainLCD.xcodeproj/project.pbxproj
🔇 Additional comments (1)
android/app/build.gradle (1)

18-18: toBoolean呼び出しがプロパティ未設定時にビルド失敗を招く
朕の検分では、プロパティ未設定の場合に false (Boolean) へ toBoolean() を呼び出すゆえ MissingMethodException が発生し、Gradle 構成が即座に崩れる。朕の国では下記の処置を施すがよい。

-    enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()
+    enableBundleCompression = (findProperty('android.enableBundleCompression') ?: 'false').toBoolean()

Likely an incorrect or invalid review comment.


Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
android/app/build.gradle (1)

1-4: 必須のGoogle Servicesプラグインが欠落
朕の勅旨:この差分で com.google.gms.google-services を外したままでは、google-services.json が処理されず Firebase が初期化できぬ。Expo の Android プッシュ通知は FCM を介するゆえ、実機では Default FirebaseApp is not initialized なる例外が発生し PushToken を取得できなくなるぞ。速やかにプラグインを復帰せよ。(developers.google.com)

 apply plugin: "com.android.application"
 apply plugin: "org.jetbrains.kotlin.android"
 apply plugin: "com.facebook.react"
+apply plugin: "com.google.gms.google-services"
🧹 Nitpick comments (1)
android/gradle.properties (1)

18-18: 朕が認めるところによれば、この Gradle 最適化は統治下の build 効率を高むるに有効なり。

org.gradle.parallel=true により並列 build 加速。edgeToEdgeEnabled, android.enableMinify 等の有効化は、UI immersion 及び APK size 削減に寄与す。然るに、expo.edgeToEdgeEnabled は SDK 55 にて deprecated となる予定のため、将来の migration に備え、相応の mark を施されよ。

Expo SDK 55 migration に向けて、expo.edgeToEdgeEnabled より react.edgeToEdgeEnabled への先制的移行を検討されてはいかが。

Also applies to: 44-65

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 98d5774 and 8a5ed2e.

⛔ Files ignored due to path filters (21)
  • android/app/src/prod/res/res/drawable-hdpi/splashscreen_image.png is excluded by !**/*.png
  • android/app/src/prod/res/res/drawable-mdpi/splashscreen_image.png is excluded by !**/*.png
  • android/app/src/prod/res/res/drawable-xhdpi/splashscreen_image.png is excluded by !**/*.png
  • android/app/src/prod/res/res/drawable-xxhdpi/splashscreen_image.png is excluded by !**/*.png
  • android/app/src/prod/res/res/drawable-xxxhdpi/splashscreen_image.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-hdpi/ic_launcher.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-hdpi/ic_launcher_foreground.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-hdpi/ic_launcher_round.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-mdpi/ic_launcher.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-mdpi/ic_launcher_foreground.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-mdpi/ic_launcher_round.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-xhdpi/ic_launcher.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-xhdpi/ic_launcher_foreground.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-xhdpi/ic_launcher_round.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-xxhdpi/ic_launcher.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-xxhdpi/ic_launcher_foreground.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-xxhdpi/ic_launcher_round.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-xxxhdpi/ic_launcher.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-xxxhdpi/ic_launcher_foreground.png is excluded by !**/*.png
  • android/app/src/prod/res/res/mipmap-xxxhdpi/ic_launcher_round.png is excluded by !**/*.png
  • ios/Podfile.lock is excluded by !**/*.lock
📒 Files selected for processing (23)
  • .eas/workflows/create-development-builds.yml (1 hunks)
  • .gitignore (2 hunks)
  • android/app/build.gradle (5 hunks)
  • android/app/src/dev/res/drawable/splashscreen_logo.xml (1 hunks)
  • android/app/src/prod/res/drawable/splashscreen_logo.xml (1 hunks)
  • android/app/src/prod/res/res/drawable/rn_edit_text_material.xml (0 hunks)
  • android/app/src/prod/res/res/drawable/splashscreen.xml (0 hunks)
  • android/app/src/prod/res/res/mipmap-anydpi-v26/ic_launcher.xml (0 hunks)
  • android/app/src/prod/res/res/mipmap-anydpi-v26/ic_launcher_round.xml (0 hunks)
  • android/build.gradle (0 hunks)
  • android/gradle.properties (3 hunks)
  • android/wearable/build.gradle.kts (1 hunks)
  • app.json (1 hunks)
  • eas.json (1 hunks)
  • ios/Podfile (0 hunks)
  • ios/Podfile.properties.json (1 hunks)
  • ios/TrainLCD.xcodeproj/project.pbxproj (45 hunks)
  • ios/TrainLCD/Schemes/Dev/SplashScreenAppClip.storyboard (1 hunks)
  • ios/TrainLCD/Schemes/Prod/SplashScreenAppClip.storyboard (1 hunks)
  • ios/ci_scripts/ci_post_clone.sh (0 hunks)
  • ios/ci_scripts/ci_pre_xcodebuild.sh (0 hunks)
  • package.json (2 hunks)
  • scripts/bump-version.js (1 hunks)
💤 Files with no reviewable changes (8)
  • ios/Podfile
  • android/app/src/prod/res/res/mipmap-anydpi-v26/ic_launcher_round.xml
  • android/build.gradle
  • ios/ci_scripts/ci_pre_xcodebuild.sh
  • android/app/src/prod/res/res/drawable/splashscreen.xml
  • ios/ci_scripts/ci_post_clone.sh
  • android/app/src/prod/res/res/drawable/rn_edit_text_material.xml
  • android/app/src/prod/res/res/mipmap-anydpi-v26/ic_launcher.xml
🧰 Additional context used
🧠 Learnings (10)
📓 Common learnings
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 0
File: :0-0
Timestamp: 2025-08-11T21:13:39.083Z
Learning: TinyKitten prefers concise code reviews for the TrainLCD/MobileApp repository. Keep review comments brief and to the point.
📚 Learning: 2025-09-22T09:21:21.741Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4511
File: package.json:43-66
Timestamp: 2025-09-22T09:21:21.741Z
Learning: TinyKittenはExpo SDK 54アップグレードにおいて、babel.config.js、RCTNewArchEnabled設定、Podfile設定を適切に処理している。App ClipのiOS deployment targetの調整のみが必要な状況。

Applied to files:

  • android/gradle.properties
  • scripts/bump-version.js
  • app.json
  • android/app/build.gradle
  • ios/TrainLCD.xcodeproj/project.pbxproj
📚 Learning: 2025-01-05T12:57:11.319Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 3979
File: android/wearable/build.gradle.kts:37-38
Timestamp: 2025-01-05T12:57:11.319Z
Learning: Wearableアプリ(android/wearable/build.gradle.kts)のversionCode末尾の`1`はウェアラブルデバイスのビルド番号を表すため、Androidモバイルと異なるversionCodeになるのは正常である。

Applied to files:

  • android/wearable/build.gradle.kts
  • android/app/build.gradle
📚 Learning: 2025-02-19T11:37:54.286Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4077
File: ios/ProdAppClip/Assets.xcassets/AppIcon.appiconset/Contents.json:1-35
Timestamp: 2025-02-19T11:37:54.286Z
Learning: In the TrainLCD project, App Clip icons are shared with the main app, and therefore do not require separate icon files in the App Clip's Assets.xcassets.

Applied to files:

  • ios/TrainLCD/Schemes/Prod/SplashScreenAppClip.storyboard
  • ios/TrainLCD/Schemes/Dev/SplashScreenAppClip.storyboard
  • ios/TrainLCD.xcodeproj/project.pbxproj
📚 Learning: 2025-02-19T23:03:04.326Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4081
File: src/constants/ident.ts:1-2
Timestamp: 2025-02-19T23:03:04.326Z
Learning: In iOS development, App Clip bundle identifiers should have a `.clip` suffix to differentiate them from the main app bundle identifier.

Applied to files:

  • ios/TrainLCD/Schemes/Prod/SplashScreenAppClip.storyboard
  • ios/TrainLCD.xcodeproj/project.pbxproj
📚 Learning: 2025-09-22T09:30:14.592Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4511
File: package.json:43-66
Timestamp: 2025-09-22T09:30:14.592Z
Learning: TrainLCDのApp Clipは15MB制限を超えるため、iOS 17以上(50MB制限)をdeployment targetとして設定する必要がある。IPHONEOS_DEPLOYMENT_TARGET = 17.6の設定は技術的要件に基づく適切な判断。

Applied to files:

  • ios/TrainLCD/Schemes/Prod/SplashScreenAppClip.storyboard
  • ios/TrainLCD.xcodeproj/project.pbxproj
📚 Learning: 2025-02-19T12:03:55.562Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4077
File: ios/TrainLCD.xcodeproj/project.pbxproj:3046-3046
Timestamp: 2025-02-19T12:03:55.562Z
Learning: TrainLCDのApp Clipはアプリの性質上15MB以下に抑えることが困難なため、50MBまで許容されるiOS 17以上をデプロイメントターゲットとして設定している。

Applied to files:

  • ios/TrainLCD/Schemes/Prod/SplashScreenAppClip.storyboard
📚 Learning: 2025-08-04T12:17:03.430Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4429
File: src/components/CustomErrorBoundary.tsx:25-25
Timestamp: 2025-08-04T12:17:03.430Z
Learning: In the TrainLCD mobile app, __DEV__ and isDevApp serve different purposes: __DEV__ is only true during debug/development time, while isDevApp is true for both debug time and release-built canary versions. This distinction is intentional - __DEV__ is used to prevent sending crash reports to Sentry during development, while isDevApp is used to enable stack trace display for both developers and canary testers.

Applied to files:

  • eas.json
  • android/app/build.gradle
📚 Learning: 2025-01-26T21:22:11.162Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4032
File: .env:10-11
Timestamp: 2025-01-26T21:22:11.162Z
Learning: In the TrainLCD/MobileApp repository, the .env file is intentionally tracked in git and serves as a template with empty values, similar to .env.example.

Applied to files:

  • .gitignore
📚 Learning: 2024-12-15T00:35:52.018Z
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 3947
File: ios/ci_scripts/ci_pre_xcodebuild.sh:2-3
Timestamp: 2024-12-15T00:35:52.018Z
Learning: `ios/ci_scripts/ci_pre_xcodebuild.sh` スクリプトでは、Prod ディレクトリを作成する必要はありません。

Applied to files:

  • ios/TrainLCD.xcodeproj/project.pbxproj
🔇 Additional comments (14)
ios/Podfile.properties.json (1)

7-7: EAS Build移行に伴うキャッシュ無効化の確認

朕が見るところ、CocoaPodsコンパイラキャッシュが無効化されておるな。このEAS Build移行に際しての変更と思われるが、朕としては以下の点を確認せんことには安心できぬ。

  • EAS Buildとの互換性の都合により、このキャッシュ無効化が必須なのか
  • ビルド性能への影響が想定されておるのか
  • この変更の背景に関する記録(移行ガイド等)が存在するか

朕は、この変更がEAS移行の必然であれば咎めることはない。ただ、その根拠を明確にされたきて、朕に報告してもらいたいのじゃ。

.gitignore (2)

12-12: EAS認証情報ファイルの無視設定が適切に追加された。

朕が確認したところ、credentials.json の追加は Expo Application Services への移行に適切な措置である。根本無視設定として機能するであろう。


82-82: .gitignore の変更は実装上の意図を示していない。検証により、ファイルパスは環境変数で動的に決定されることが判明した。

朕の調査によれば、android/fastlane/Appfile にて json_key_file(ENV["JSON_KEY_FILE_PATH"]) と明記されており、実装は環境変数 JSON_KEY_FILE_PATH を通じて外部から指定される。.gitignore の変更は、単なる除外対象ファイル名の慣例更新に過ぎず、実装内のハードコード化されたパス参照ではない。

したがって、play-store-credentials.json から google-play-services-account.json への変更は、コード実装に影響を及ぼすものではなく、朕が指摘した「実装上の意図」の懸念は根拠を欠く。

Likely an incorrect or invalid review comment.

android/app/src/prod/res/drawable/splashscreen_logo.xml (1)

1-4: 朕の統治下において、この drawable 定義はよろしい。

XML 構文は正しく、app splash screen リソースとして適切に定義されておる。@mipmap/ic_launcher の参照が存在することを確認されよ。

android/app/src/dev/res/drawable/splashscreen_logo.xml (1)

1-4: 朕の許可するところ、dev 版リソースも prod 版と同様に適正である。

flavor 分岐の体制を整えられたことは統治の効率化に寄与する。

app.json (2)

5-5: 朕の統治に於いて、版数管理の統一を念慮されよ。

version 10.0.0 への更新は良好なり。ただし、android.versionCode に 100000078 を指定される一方、android/wearable/build.gradle.kts では 100000000 に統一されていることを確認されたし。複数の buildSource 間での version code 同期が正確にされることを望む。EAS projectId の形式は正しし。

Also applies to: 14-30


22-26: Dev flavor の bundleIdentifier 設定は適正なり。

"me.tinykitten.trainlcd.dev" は開発環境向けの識別子として妥当なり。scheme "CanaryTrainLCD" も Canary build との対応が明確にしてよろしい。

eas.json (1)

1-35: 朕が統治する EAS 設定の全体は整然としておる。

cli.version 制約により Node 環境の統制が効きて良し。development build の gradle command ":app:bundleDevRelease" および ios scheme "CanaryTrainLCD" は、app.json との整合性を保つ。submit 先の applicationId・bundleIdentifier も一致し、統治下の秩序を乱さず。appVersionSource: local により各環境での版数ソース統一がなされよ。

android/wearable/build.gradle.kts (1)

41-41: 朕の統治に於いて、wearable app の版数体系を確認されよ。

versionCode を 100000000 に統一されたことは体系の統一をもたらせり。然るに、mobile app (app/build.gradle) では 100000078 にて、差異を生じておる。wearable device の build 番号が末尾 1 として表現されるべき惯例(PR 3979)に鑑み、この相違が意図的なるものか、または調整の余地ありや確認されよ。

Also applies to: 46-46

.eas/workflows/create-development-builds.yml (2)

86-91: iOS GoogleService-Info.plist の配置先について、朕の確認を求めん。

ios/Schemes/Dev/ directory が存在することを確認されたし。当該 directory が create されずば、decode 後の plist ファイルは配置されず、build に支障をきたさん。mkdir -p の処理が必要なるべし。

以下の修正を検討されよ:

       - name: Decode GoogleService-Info.plist
         run: |
           if [ -z "${GOOGLE_SERVICE_INFO_PLIST_BASE64:-}" ]; then
             echo "Environment variable GOOGLE_SERVICE_INFO_PLIST_BASE64 is not set."
             exit 1
           fi
+          mkdir -p ios/Schemes/Dev
           printf '%s' "$GOOGLE_SERVICE_INFO_PLIST_BASE64" | base64 --decode > ios/Schemes/Dev/GoogleService-Info.plist

3-99: 朕が認めるところによれば、この EAS ワークフロー設定は統治下の CI/CD 体系に適正なり。

環境変数チェック、base64 デコード処理の実装は堅牢にして、セキュリティ上の懸念なし。Android・iOS parallel build、submit 処理の分離により、build 効率を高める。${} 展開と if 判定の組み合わせは、環境変数 unset 時の安全性を確保す。

package.json (2)

16-17: 朕の統治に於いて、version:bump スクリプト追加は良好なり。

version:bump により package.json・app.json・iOS・Android の版数ソース統一がなされん。scripts/bump-version.js の実装が app.json・ios/build.gradle.kts・android/app 及び wearable の版数を正確に同期させることを確認されたし。


147-147: 版数 10.0.0 への昇格は統治の新時代を象徴するに相応し。

android/gradle.properties (1)

13-13: 朕が統治する JVM heap 設定は吟味されし体系なるべし。

-Xmx2048m への変更は、build 環境のメモリ効率を考慮せるものか。CI/CD 環境下にての memory constraint 回避の意図ありや否や、確認されよ。

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
.eas/workflows/create-development-builds.yml (1)

35-35: 朕の已に指摘せし誤字、いまだ未だ改められず。

Line 35 のステップ名に誤字あり:"Resotre" は "Restore" なるべし。統治下の文書は完璧なるを要する。

-      - name: Resotre android/app/release.jks
+      - name: Restore android/app/release.jks
🧹 Nitpick comments (1)
.eas/workflows/create-development-builds.yml (1)

14-27: 重複せる復号ロジック、統一せることを勧めん。

.env.local と Sentry properties のデコード処理が Android/iOS で重複している。これら共通部分を朕の従属的な引数化により統一化せば、保守性と一貫性が高まるなり。現在の EAS ワークフロー仕様が許すならば、検討の価値あり。

Also applies to: 71-84

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8a5ed2e and a41e7e3.

📒 Files selected for processing (1)
  • .eas/workflows/create-development-builds.yml (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 0
File: :0-0
Timestamp: 2025-08-11T21:13:39.083Z
Learning: TinyKitten prefers concise code reviews for the TrainLCD/MobileApp repository. Keep review comments brief and to the point.
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4448
File: functions/src/funcs/tts.ts:214-232
Timestamp: 2025-08-11T20:23:23.071Z
Learning: PR #4448 in TrainLCD/MobileApp is specifically about AI feedback summarization and labeling functionality, not about TTS (Text-to-Speech) improvements. The TTS code changes appear to be part of a modularization refactoring but are not the focus of this PR.
Learnt from: TinyKitten
Repo: TrainLCD/MobileApp PR: 4511
File: package.json:43-66
Timestamp: 2025-09-22T09:21:21.741Z
Learning: TinyKittenはExpo SDK 54アップグレードにおいて、babel.config.js、RCTNewArchEnabled設定、Podfile設定を適切に処理している。App ClipのiOS deployment targetの調整のみが必要な状況。
🔇 Additional comments (1)
.eas/workflows/create-development-builds.yml (1)

51-51: 朕、ビルド提出の依存関係を確認せり。良好なり。

build_android と build_ios の後に、それぞれ submit_android と submit_ios が適切に依存関係を持ちて実行されるの構図、朕の治世に相応しき設計なり。

Also applies to: 92-92

@TinyKitten TinyKitten merged commit 210272a into dev Nov 2, 2025
4 checks passed
@TinyKitten TinyKitten deleted the feature/cicd branch November 2, 2025 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant