◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Expo SDK 58 が 10/15 に正式リリースされました(Beta は 09/15 から)。上げる前に依存の対応状況を確認しましょう●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Expo SDK 58 が 10/15 に正式リリースされました(Beta は 09/15 から)。上げる前に依存の対応状況を確認しましょう●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/AIモデル
◉ AIモデル/2026-10-18中級

AI で作ったアイコンや画像をストアに出す前に、出どころの台帳と4つの確認を済ませます

AI が作ったアイコンやイラストをそのまま出してよいか。迷う前に、出どころの台帳・利用規約・既存作品との類似・提出サイズの4点を確認する手順と、動く確認スクリプトをまとめました。

アプリアイコンAI生成画像App Store審査10Google Play39Rork590権利確認

提出ボタンを押す直前に、審査担当者から「このアイコンの権利はどうなっていますか」と尋ねられた場面を想像してみます。AI に何十枚も出してもらった案のうち、どれを採用したのか。どのツールの、どの規約の下で作ったのか。三か月後の自分が、その問いに答えられるかどうかは正直なところ心もとありません。

お伝えしたいのは、AI が作った画像を使ってよいかどうかを一言で決める方法ではありません。決められない部分は決められないと認めたうえで、あとから説明できる状態を提出前に作っておくことが、個人開発でできる現実的な備えだ、ということです。

公式が求めているのは「作ったか、使用許諾があるか」です

App Store 審査ガイドラインの 5.2.1 は、保護されたサードパーティの素材(商標・著作物・特許になっているアイデア)を許可なく使わないこと、そして「アプリは、知的財産を所有または使用許諾を受けている人または法人が提出する」ことを求めています。節の冒頭には、アプリに入れてよいのは「自分で作ったか、使用許諾を得ているコンテンツ」だという趣旨の一文もあります。

ここには、AI 生成かどうかを問う文言はありません。見られているのは、出どころを説明できるかです。Google Play 側にも知的財産となりすましに関するポリシーがあり、考え方は同じ方向です。

AI 生成画像の権利が国や制度でどう扱われるかは、私には断定できません。ツールごとの利用規約でも書き方が違います。ここでは法的な結論は出さず、次の4点を確認する手順に絞ります。

確認1:画像ごとに「台帳」を1行つくります

最初にやることは、使うつもりの画像を1枚ずつ表に書き出すことです。専用のツールは要りません。プロジェクトの直下に、CSV を1つ置きます。

列書くこと例
fileプロジェクトからの相対パスassets/images/icon.png
source生成・自作・購入・無料素材のどれか生成
tool使ったツール名と、プロンプトの保存場所画像生成ツールA(プロンプトは別紙)
date作った日2026-10-02
license_note規約のどこを根拠にしたか商用利用の条項を確認済み

「いつか整理しよう」と思って最初の1行を後回しにすると、画像が増えるほど出どころを辿れなくなります。私は、画像を採用したその場で1行足すことを決まりにしています。

確認2:使ったツールの規約を、日付つきで残します

台帳の license_note に「確認済み」とだけ書いても、規約は書き換わることがあります。確認した日と、読んだ条項の見出しを一緒に残してください。可能であれば、規約ページを PDF か保存したテキストにして、台帳と同じ場所に置いておきます。

見る点は次の三つです。

  • 生成した画像を商用アプリに使ってよいか
  • 無料プランと有料プランで、使える範囲が違わないか
  • 生成物の権利が、利用者・サービス側のどちらにあると書かれているか

どれも読み取れないときは、そのツールで作った画像をアイコンのような顔になる素材には使わない、という判断も十分に成り立ちます。

確認3:既存の作品や商標に似ていないかを見ます

生成した画像が、既存のキャラクターやロゴに近いことはありえます。審査ガイドライン 4.1 の Copycats の項目は、人気アプリの見た目を少し変えただけのものを出さないよう求めています。

私が行っているのは、地味な作業です。採用候補のアイコンを画像検索にかけ、似たものが上位に出ないかを見ます。アプリ名は、ストア内の検索と、特許庁の商標検索(J-PlatPat)の両方で調べます。検索に何も出なければ安全だという話ではなく、調べた記録を台帳に残すことに意味があります。

確認4:提出サイズの条件を、スクリプトで機械的に見ます

ここは判断ではなく、機械が得意な確認です。公式の記述を整理すると、次のとおりです。

対象条件出典
iOS のアイコン(元画像)正方形。1024x1024 が目安。角丸や透明なピクセルを含めないExpo 公式「App icons」
Google Play のアイコン32 ビット PNG(アルファ付き)、512x512px、1024KB 以下Play Console ヘルプ「プレビュー アセットを追加する」
Google Play のフィーチャー グラフィックJPEG または 24 ビット PNG(アルファなし)、1024x500px同上

見た目では気づきにくい透明ピクセルは、書き出しや加工の途中で混ざることがあります。台帳と合わせて確認できるように、次のスクリプトを用意しました。

#!/usr/bin/env python3
"""画像素材の出どころ台帳と、ストア提出サイズの確認。
 
使い方:
  python3 asset_ledger_check.py <プロジェクトのルート> [台帳CSV]
 
台帳CSV(既定: assets-ledger.csv)の列:
  file,source,tool,date,license_note
  file は プロジェクトのルートからの相対パス。
"""
import csv
import sys
from pathlib import Path
from PIL import Image  # pip install pillow
 
SKIP_DIRS = {"node_modules", ".git", "ios", "android", ".expo", "dist"}
EXTS = {".png", ".jpg", ".jpeg", ".webp"}
 
 
def has_transparency(img: Image.Image) -> bool:
    if img.mode in ("RGBA", "LA"):
        return img.getchannel("A").getextrema()[0] < 255
    return "transparency" in img.info
 
 
def main() -> int:
    root = Path(sys.argv[1]).resolve()
    ledger_path = Path(sys.argv[2]) if len(sys.argv) > 2 else root / "assets-ledger.csv"
 
    ledger = {}
    if ledger_path.exists():
        with ledger_path.open(encoding="utf-8", newline="") as f:
            for row in csv.DictReader(f):
                ledger[row["file"].strip()] = row
 
    problems = 0
    for path in sorted(root.rglob("*")):
        if path.suffix.lower() not in EXTS:
            continue
        if SKIP_DIRS & set(path.relative_to(root).parts):
            continue
        rel = path.relative_to(root).as_posix()
        with Image.open(path) as img:
            w, h = img.size
            alpha = has_transparency(img)
        kb = path.stat().st_size / 1024
        notes = []
 
        row = ledger.get(rel)
        if row is None:
            notes.append("台帳に行がありません")
        else:
            for col in ("source", "tool", "date", "license_note"):
                if not (row.get(col) or "").strip():
                    notes.append(f"台帳の {col} が空です")
 
        name = path.name.lower()
        if "icon" in name and "splash" not in name and "adaptive" not in name:
            if w != h:
                notes.append(f"アイコンが正方形ではありません({w}x{h})")
            elif w != 1024:
                notes.append(f"1024x1024 ではありません({w}x{h})")
            if alpha:
                notes.append("透明なピクセルを含んでいます(iOS のアイコンは不透明に)")
 
        status = "要確認" if notes else "OK"
        problems += bool(notes)
        print(f"[{status}] {rel}  {w}x{h}  {kb:.0f}KB  alpha={'有' if alpha else '無'}")
        for n in notes:
            print(f"        - {n}")
 
    # 台帳にあるのに実ファイルがないもの
    for rel in sorted(ledger):
        if not (root / rel).exists():
            print(f"[要確認] {rel}  台帳にあるがファイルが見つかりません")
            problems += 1
 
    print(f"\n要確認: {problems} 件")
    return 1 if problems else 0
 
 
if __name__ == "__main__":
    sys.exit(main())

ファイル名に icon を含む画像だけを、アイコンとして扱います。スプラッシュ用やアダプティブ用の画像は対象外にしてあります。Play 用の 512px 版を調べたいときは、別途 1024KB 以下かどうかだけを見てください。

手元の検証用フォルダ(icon.png、四隅が透明な icon-rounded.png、1000x1024 の store-icon.png、台帳に行のない画像を意図的に混ぜたもの)で動かすと、出力は次のようになりました。

[要確認] assets/images/icon-rounded.png  1024x1024  6KB  alpha=有
        - 台帳に行がありません
        - 透明なピクセルを含んでいます(iOS のアイコンは不透明に)
[OK] assets/images/icon.png  1024x1024  6KB  alpha=無
[OK] assets/images/shot1.png  1242x2688  15KB  alpha=無
[要確認] assets/images/splash-icon.png  512x512  1KB  alpha=有
        - 台帳に行がありません
[要確認] assets/images/store-icon.png  1000x1024  5KB  alpha=無
        - 台帳に行がありません
        - アイコンが正方形ではありません(1000x1024)
[要確認] assets/images/old.png  台帳にあるがファイルが見つかりません
 
要確認: 4 件

icon-rounded.png は、左上のたった1ピクセルを透明にしただけのファイルです。画面で見ても違いは分かりませんが、スクリプトは見つけます。ここが、目視ではなく機械に任せる理由です。終了コードが 1 になるので、提出前のチェックに組み込むこともできます。

この方法が言えないこと

この手順は、権利の問題が起きないことを保証するものではありません。台帳はあくまで、何を根拠に採用したかを後から説明するための記録です。規約の読み方に迷う場合や、収益の大きいアプリでは、専門家に相談する価値があります。

また、スクリプトが見ているのは画像のサイズと透明度、台帳の空欄だけです。画像が既存の作品に似ているかどうかは、見ていません。

次に1つだけやるなら

提出予定のアプリで、いま使っている画像のうちアイコンの1枚だけ、台帳に1行書いてみてください。出どころを書こうとして手が止まるなら、そこが提出前に確認すべき場所です。

原則として、AI が作った画像は「使ってよいか」を悩む前に「説明できるか」を整えておく。

関連する記事もあわせてどうぞ。

シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

◉ AI モデル2026-10-17
プレビューが真っ黒のまま動かないとき、AI に頼み直す前にやる3つの切り分け
Rork で生成した直後のプレビューが真っ黒のとき、同じ修正を頼み直す前に、端末側・画面の描画・ネイティブ側のどこで止まっているかを3段階で切り分ける手順です。
◉ AI モデル2026-10-14
プロンプトをアプリから外して Edge Function に置く。守りは入力側でなく、出力側に作りました
アプリに入れた AI の指示文は、配信した日から読める側に回ります。プロンプトを Supabase Edge Function に寄せ、クライアントにはタスク名だけを言わせ、守りを出力の許可リストに置く構成を、テスト付きのコードで整理しました。
◉ AI モデル2026-10-05
Sonnet 5.5・GPT-6.1 Sol・Opus 5.5 のどれに頼むかを、修正の種類で先に決めておきます。クレジットの行き先を1週間記録して引いた割り当て
Rork のモデルメニューが Sonnet 5.5・GPT-6.1 Sol・Opus 5.5 の三つになったあと、修正を三種類に分けてモデルと effort を割り当てました。変更履歴に書かれた違いの読み方、クレジットの行き先を記録する小さな台帳、そこから引いた線引きを書き残します。