🍏

App Storeの「リジェクト地獄」を終わらせる——Greenlightで提出前にリスクを自動検出&修正提案

に公開

はじめに:審査リジェクト、つらすぎ問題

iOSアプリを開発したことがある人なら、一度はこう思ったことがあるはずだ。

「なんでこれでリジェクトされるの……?」

数日かけてコードを書き、ようやくApp Store Connectにビルドを提出。審査結果が届くまで数日待ち、ワクワクしながらメールを開いたら——

❌ Guideline X.X.X - ○○○○

心が折れる瞬間である。

しかも厄介なのは、リジェクト理由がわかりにくいこと。Appleの審査ガイドラインは膨大で、解釈の幅も広い。修正して再提出しても、また別の理由でリジェクトされる「リジェクト地獄」にハマることも珍しくない。

そんな開発者の悲鳴が聞こえたのか、提出前にリジェクトリスクを自動検出し、修正案までセットで提示してくれるOSSツールが登場した。

その名も Greenlight

まずは実際に使ってみた結果からお見せしたい。

実際に試してみた

百聞は一見にしかず。手元のiOSプロジェクト(DocToMarkdownというアプリ)でClaude Code上から greenlight preflight . を実行してみた。
greenlight preflight の実行結果

結果は2件検出(致命的: 1、警告: 1)。判定は「未準備」だった。

CRITICAL(致命的)— リジェクトされます

[CRITICAL] [privacy] §5.1.1 プロジェクトに PrivacyInfo.xcprivacy が見つかりません
プライバシーマニフェストは2024年5月以降必須です。欠落している場合、ITMS-91061 エラーが発生します。
修正方法: プロジェクトに PrivacyInfo.xcprivacy ファイルを作成してください。

これは2024年5月からAppleが必須化したプライバシーマニフェストの欠落だ。提出すれば確実にITMS-91061エラーでリジェクトされる、まさにCRITICALな問題。自分では見落としていた。

WARNING(警告)— リジェクトリスクが高い

[WARN] [metadata] §2.3 Info.plist に CFBundleDisplayName がありません
対象: DocToMarkdown/App/Info.plist
アプリアイコンの下に表示される表示名が設定されていません。
修正方法: Info.plist に CFBundleDisplayName を追加してください。

Info.plistにアプリの表示名が未設定という指摘。なくても動くが、審査でツッコまれる可能性がある項目だ。

注目すべきポイント

実際に使ってみて感じたのは、出力が非常に実用的だということだ。単に「問題があります」で終わらず、以下の情報がセットで提示される。

  • 重要度(CRITICAL / WARNING)
  • 該当するガイドライン条項(§5.1.1、§2.3 など)
  • 問題の具体的な説明
  • 修正方法(何をすればいいかが明確)

そして画面の最後に表示された 「両方修正しますか?」 というClaude Codeからの提案。ここで「はい」と答えるだけで、PrivacyInfo.xcprivacyファイルの作成とInfo.plistへのCFBundleDisplayName追加を、Claude Codeが自動で実行してくれる。

検出→修正提案→実行まで、ターミナルから一歩も出ずに完結する。 これは体験してみると想像以上に快適だった。

Greenlightとは何か

Greenlightは、RevylAIが開発したオープンソースのApp Store提出前コンプライアンススキャナーだ。MITライセンスで公開されている。

ひとことで言えば、ソースコード・プライバシーマニフェスト・IPAバイナリ・App Store Connectのメタデータを、Appleの審査ガイドラインに照合してスキャンし、リジェクトリスクをAppleより先にキャッチしてくれるツールである。

しかも完全にローカルで動作し、コードをどこかにアップロードする必要はない。スキャンは1秒以内に完了する。

Greenlightがカバーするリジェクト原因は、メタデータの不備(スクリーンショット不一致、プライバシーポリシーURL無効など)、コード上の問題(プライベートAPI使用、外部決済、ATT未実装など)、プライバシー関連(PrivacyInfo.xcprivacy不備、Required Reason API未申告など)と多岐にわたる。これらはApp Store Review Guidelinesの100以上のセクションに散らばっており、すべてを人力でチェックするのは現実的ではない。

Greenlightのインストール

インストール方法は3通り。

Homebrew(macOS)

brew install revylai/tap/greenlight

Go install

go install github.com/RevylAI/greenlight/cmd/greenlight@latest

ソースからビルド

git clone https://github.com/RevylAI/greenlight.git
cd greenlight && make build
# バイナリは build/greenlight に生成される

Goで書かれているため、macOS / Linux / Windowsいずれの環境でも動作する。

基本的な使い方:greenlight preflight だけでOK

Greenlightの最も基本的な使い方は、プロジェクトのルートで以下を実行するだけだ。

greenlight preflight /path/to/your/project

たったこれだけで、以下の4つのスキャナーが並列で実行される。

スキャナー チェック内容
metadata app.json / Info.plistのローカル分析(アプリ名、バージョン、バンドルID、アイコン、プライバシーポリシーURL、パーミッション説明文など)
codescan 30以上のリジェクトリスクコードパターン検出
privacy PrivacyInfo.xcprivacyの完全性、Required Reason API、トラッキングSDK vs ATT実装
ipa バイナリ検査(Info.plistキー、起動ストーリーボード、アプリアイコン、アプリサイズ、フレームワークのプライバシーマニフェスト)

IPAファイルも一緒にスキャンしたい場合は、こう書く。

greenlight preflight . --ipa build.ipa

アカウント登録不要。完全オフライン。所要時間1秒以内。 控えめに言って最高である。

何を検出してくれるのか:30以上のコードパターン

greenlight codescan が検出するパターンの一部を紹介する。重要度はCRITICAL(致命的)とWARN(警告)に分かれている。

CRITICALレベル(ほぼ確実にリジェクト)

  • プライベートAPI使用(§2.5.1)
  • ハードコードされたシークレット・APIキー(§1.6)
  • デジタル商品の外部決済(§3.1.1)
  • 動的コード実行(§2.5.2)
  • 暗号通貨マイニング(§3.1.5)

WARNレベル(リジェクトリスクあり)

  • ソーシャルログイン使用時にSign in with Appleが未実装(§4.8)
  • アプリ内課金のリストア購入ボタンがない(§3.1.1)
  • 広告・トラッキングSDK使用時にATTが未実装(§5.1.2)
  • アカウント作成機能はあるのに削除オプションがない(§5.1.1)
  • 文字列中のプレースホルダーコンテンツ(§2.1)
  • 競合プラットフォームへの言及(§2.3)
  • ハードコードされたIPv4アドレス(§2.5)
  • 安全でないHTTP URL(§1.6)
  • Info.plistのパーミッション説明文が曖昧(§5.1.1)

ガイドラインの条項番号まで紐づいてくれるので、何がどう問題なのかが一目でわかる。

便利なサブコマンド

個別スキャン

特定の領域だけをチェックしたい場合は、個別コマンドが使える。プライバシー対応だけ確認したい、IPAの最終チェックだけしたい、といった場面で便利だ。

greenlight codescan /path/to/project   # コードパターンのみ
greenlight privacy /path/to/project    # プライバシーマニフェストのみ
greenlight ipa /path/to/build.ipa      # IPAバイナリのみ

ガイドライン検索

Appleの審査ガイドラインを毎回Webで調べるのが面倒な人に朗報。Greenlight内にガイドラインデータベースが内蔵されており、CLIから直接検索できる。

greenlight guidelines list             # 全セクション一覧
greenlight guidelines show 2.1         # 特定のガイドラインを表示
greenlight guidelines search "privacy" # 全文検索

App Store Connect連携:メタデータもチェック

APIキーまたはApple IDで認証すれば、App Store Connect上のメタデータもチェックできる。

# APIキーの初回設定
greenlight auth setup

# または Apple IDでログイン
greenlight auth login

# スキャン実行
greenlight scan --app-id YOUR_APP_ID

こちらはTier 1〜4の4段階でチェックが走る。メタデータの完全性、スクリーンショット検証、ビルド処理状況、年齢レーティング、暗号化コンプライアンスなど、App Store Connect側の不備も拾ってくれる。

CI/CDパイプラインへの組み込み

チーム開発では、GitHub Actionsなどに組み込むのが効果的だ。CRITICALレベルの問題があればパイプラインを止める、という運用ができる。

以下はワークフロー内のステップの例だ。Greenlightのインストールステップと組み合わせて使う。

- name: App Store compliance check
  run: |
    greenlight preflight . --format json --output greenlight-report.json
    if jq -e '.summary.critical > 0' greenlight-report.json > /dev/null; then
      echo "CRITICAL issues found — fix before submission"
      exit 1
    fi

出力形式は --format terminal(デフォルト)と --format json(CI/CD向け)が選べる。ファイル出力は --output report.json で指定する。

Claude Codeと組み合わせて自動修正

個人的に一番「強い」と思ったのがこれ。GreenlightはClaude Codeのスキルとして動作し、検出→修正→再スキャン→合格まで自動で回してくれる

セットアップ

mkdir -p .claude/skills
cp /path/to/greenlight/SKILL.md .claude/skills/greenlight.md

使い方

Claude Codeに対してこう指示するだけ。

「Run greenlight preflight and fix everything until it passes」

すると、Claudeが以下を自動で繰り返す。

  1. greenlight preflight . を実行
  2. 検出された問題をすべて読み取る
  3. CRITICALから順に各問題を修正
  4. 再スキャン → 問題が残っていれば再修正 → 合格になるまでループ

先ほどの「実際に試してみた」で紹介したスクリーンショットの「両方修正しますか?」も、まさにこの仕組みが動いている。検出して終わりではなく、修正まで自動化できる。これは控えめに言って革命的だ。

個人開発者にとっての価値

このツールが特に刺さるのは、個人開発者だと思う。

チーム開発であれば、過去のリジェクト経験を持つメンバーがいたり、QAチームが審査前にチェックリストを回したりできる。しかし個人開発者にはそのセーフティネットがない。

審査で数日待たされ、リジェクトされ、修正してまた数日待つ——このサイクルが1回増えるだけで、モチベーションへのダメージは計り知れない。副業や趣味で開発している場合はなおさらだ。

提出前にリスクをゼロに近づけられるなら、その時間的コストと精神的コストの削減効果は非常に大きい。

注意点:ツールは万能ではない

ただし、いくつか注意点もある。

まず、Appleの審査には人的判断が含まれる。ガイドラインに明記されていないグレーゾーンの判断は、ツールでは完全にカバーできない。

また、審査基準は時期やレビュアーによって多少のブレがあるのも事実だ。同じアプリが通ったり通らなかったりするケースも報告されている。

さらに、Greenlightはまだv0.1.0(2026年2月リリース)の初期段階であり、今後のアップデートで対応範囲が広がっていくことが期待される。

とはいえ、明確なルール違反を提出前に潰せるだけでも、リジェクト率は大幅に下がるはずだ。ツールで機械的にチェックできる部分は任せ、人的判断が必要な部分にリソースを集中する——という使い分けが現実的だろう。

まとめ

項目 内容
ツール名 Greenlight
GitHub RevylAI/greenlight
ライセンス MIT
言語 Go
対応 Swift / Objective-C / React Native / Expo
動作 完全ローカル・オフライン(スキャン1秒以内)
主な機能 コードスキャン / プライバシーマニフェスト検証 / IPAバイナリ検査 / App Store Connectメタデータチェック / ガイドライン検索
AI連携 Claude Code / Codexスキルとして自動修正まで対応

App Storeのリジェクト地獄は、多くのiOS開発者にとって長年の悩みだった。Greenlightの登場は、その苦しみを大きく軽減する可能性がある。

「リジェクトされてから直す」時代から、「提出前にリスクをゼロにする」時代へ。

まずは greenlight preflight . を一度走らせてみてほしい。きっと何かしら見つかるはずだ。

Discussion