RORK LABEN
BUILD — Rork Max はクラウド上の実機 Mac に Xcode と iOS SDK を載せ、SwiftUI を書き、ビルドし、エラーを読んで直す反復を回します。コードを吐いて終わりではない点が生成物の質に効いていますNATIVE — 生成されるのは React Native ではなく純粋な Swift / SwiftUI です。AR や Metal、ウィジェットなど React Native からは届かない機能に手が届くことが、他ビルダーとの実質的な差になりますPLATFORMS — 対応は iPhone・iPad・Apple Watch・Apple TV・Vision Pro に加えて iMessage まで含みます。ウォッチや拡張から入る設計を試すのに向いていますCOMPANION — Rork Companion により、有料の Apple Developer アカウントなしで生成したアプリを実機の iPhone で確認できます。最初の一本を試す段階の障壁が一段下がりましたPRICING — 無料で開始でき有料プランは月額25ドルから、Rork Max は月額200ドルの Max プランです。回収できる本数と規模を先に見積もっておく価値がありますDEADLINE — Google Play は2026年8月31日以降、新規アプリと更新の双方に対象 API レベル36 以上を要求します。残り10日で、生成物の targetSdkVersion は自分で確認が必要ですBUILD — Rork Max はクラウド上の実機 Mac に Xcode と iOS SDK を載せ、SwiftUI を書き、ビルドし、エラーを読んで直す反復を回します。コードを吐いて終わりではない点が生成物の質に効いていますNATIVE — 生成されるのは React Native ではなく純粋な Swift / SwiftUI です。AR や Metal、ウィジェットなど React Native からは届かない機能に手が届くことが、他ビルダーとの実質的な差になりますPLATFORMS — 対応は iPhone・iPad・Apple Watch・Apple TV・Vision Pro に加えて iMessage まで含みます。ウォッチや拡張から入る設計を試すのに向いていますCOMPANION — Rork Companion により、有料の Apple Developer アカウントなしで生成したアプリを実機の iPhone で確認できます。最初の一本を試す段階の障壁が一段下がりましたPRICING — 無料で開始でき有料プランは月額25ドルから、Rork Max は月額200ドルの Max プランです。回収できる本数と規模を先に見積もっておく価値がありますDEADLINE — Google Play は2026年8月31日以降、新規アプリと更新の双方に対象 API レベル36 以上を要求します。残り10日で、生成物の targetSdkVersion は自分で確認が必要です
記事一覧/開発ツール
開発ツール/2026-08-14中級

ライセンス表示に載せる依存は、lockfile の dev/prod では決まりません

AI ビルダーが書き出したプロジェクトの依存を実際に分類し、ライセンス表示に載せる範囲をどう決めたかの記録です。copyleft の検出結果と配布物の境界の食い違いを、本番プロジェクトの実データで確かめました。

Rork539Expo175ライセンスOSSApp Store87個人開発198

プレミアム記事

設定画面の一番下に「ライセンス」の項目を置くかどうかで、半日ほど手が止まりました。

置いたほうがよいことは分かっています。分からないのは、そこに何を並べるのかです。AI ビルダーが書き出したプロジェクトには、自分で選んだ覚えのないパッケージが数百件入っています。全部載せるのか、実際に配布されるものだけでよいのか。その線引きを決めないままテンプレートを貼っても、それは表示したふりにしかなりません。

そこで、運用している Next.js 16 の本番プロジェクトの lockfile を、実際に分類してみました。先に結論を書きます。最初に肝を冷やした LGPL の14件は、1件も配布物に入っていませんでした。そして本当に表示が要る依存は、lockfile の dev / prod フラグを見るだけでは確定しませんでした。

lockfile をそのまま数えるところから始める

package-lock.jsonlockfileVersion: 3 は、パッケージごとに license フィールドを持っています。node_modules を展開しなくても、lockfile 単体で全依存のライセンスを集計できます。

実際に走らせたスクリプトがこれです。標準ライブラリだけで動きます。

# license_inventory.py — lockfile 単体で依存のライセンスを分類する
import json, collections, sys
 
path = sys.argv[1] if len(sys.argv) > 1 else "package-lock.json"
with open(path, encoding="utf-8") as f:
    data = json.load(f)
 
packages = data.get("packages", {})
if not packages:
    # lockfileVersion 1 系は packages を持たないため、ここで気づけるようにする
    raise SystemExit("packages がありません。lockfileVersion 2 以上で生成し直してください")
 
def classify(meta):
    # 判定の順番が重要。dev を先に見ないと devOptional が prod 側へ流れる
    if meta.get("dev"):
        return "dev"
    if meta.get("devOptional"):
        return "devOptional"
    if meta.get("optional"):
        return "optional"
    return "prod"
 
counts = collections.Counter()
by_class = collections.defaultdict(collections.Counter)
unknown = []
 
for name, meta in packages.items():
    if not name:          # ルートプロジェクト自身は空文字キー。除外しないと1件ずれる
        continue
    kind = classify(meta)
    counts[kind] += 1
    lic = meta.get("license")
    if isinstance(lic, list):     # 古いパッケージは配列で持つことがある
        lic = " / ".join(lic)
    if lic is None:
        unknown.append(name)
        lic = "(未記載)"
    by_class[kind][lic] += 1
 
print("総数:", sum(counts.values()), dict(counts))
for kind in ("prod", "optional", "dev", "devOptional"):
    if by_class[kind]:
        print(f"--- {kind} ---")
        for lic, n in by_class[kind].most_common():
            print(f"  {n:4d}  {lic}")
print("ライセンス未記載:", len(unknown))
for name in unknown[:20]:
    print("  ", name)

出力はこうなりました。

分類件数意味
prod430本番依存として解決されたもの
dev429ビルド・テスト・リンタ側でしか使われないもの
optional70プラットフォーム別のバイナリなど、環境次第で入らないもの
devOptional3開発側かつ任意

総数932件。prod と dev がほぼ半々で、それぞれ全体の46%を占めています。copyleft を含む記載は27件、全体の2.9%でした。ライセンス未記載は0件です。

未記載が0件だったのは、正直なところ意外でした。数百件も抱えていれば数件は欠けているものと思っていたのですが、少なくともこのプロジェクトでは全件に記載がありました。個人開発の規模でも、依存の出どころ自体は思ったより整っているようです。

慌てた copyleft は、全部ビルド専用だった

分類の内訳を見て最初に目に入ったのが、LGPL-3.0-or-later の10件と Apache-2.0 AND LGPL-3.0-or-later の4件でした。合計14件。手が止まるには十分な数です。

中身を出してみると、全部が画像処理ライブラリ sharp のプラットフォーム別バイナリ(@img/sharp-libvips-*)でした。そして分類は14件とも dev です。

同じことが MPL-2.0 の13件にも起きていました。内訳は CSS 変換の lightningcss とそのプラットフォーム別バイナリ、それとアクセシビリティ検査の axe-core。こちらも全件 dev でした。

ライセンス件数分類実体
LGPL-3.0-or-later(単独および複合)14すべて devsharp の libvips バイナリ
MPL-2.013すべて devlightningcss / axe-core
CC-BY-4.01prodcaniuse-lite

つまり、名前で検索して身構えた14件は、ユーザーの端末に届くものではありませんでした。画像を変換したのはビルドマシンの上で、変換結果だけが配布されています。

ここで気づいたことがあります。ライセンスの棚卸しを「危険な名前を探す作業」として始めると、最初に見つかるのは高い確率でビルドツールです。ビルドツールは開発機の上で動く都合上、ネイティブバイナリを抱えやすく、ネイティブバイナリは copyleft を持ちやすいからです。探し方の順番が逆だと、いちばん関係のないところで時間を使います。

MPL-2.0 は実行形式で配布する場合に、対応するソースコード形式の入手方法を受領者へ知らせることを求めています(Mozilla Public License 2.0)。裏を返せば、配布していないものについてこの条項を気にする必要はありません。まず「配布しているか」を確定させるほうが先でした。

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

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
配布物に届く依存とビルド時にしか使われない依存を切り分けて、ライセンス表示に載せる範囲を自分の基準で決められるようになります
copyleft のパッケージ名を見つけた時点で作業を止めてしまう前に、それが最終成果物に入るのかを先に確かめる順番を持てるようになります
本番プロジェクトの依存932件を分類した内訳をもとに、自分のプロジェクトで最初に確認すべき箇所の見当がつくようになります
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

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

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

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

関連記事

開発ツール2026-08-20
ベータ SDK でビルドしたアプリは、TestFlight には配れても審査には出せません
ベータ版の Xcode でビルドしたアプリは TestFlight には配布できますが、App Store の審査には提出できません。手元のビルドがどの SDK で作られたかを確認する方法と、eas.json で提出用ビルドを守る設定をまとめました。
開発ツール2026-07-17
Rork の App Store 提出が「輸出コンプライアンス」で毎回止まるのを設定1行で終わらせる
Rork と Rork Max のビルドを App Store Connect に上げるたびに出る Missing Compliance 警告。免除の判断基準と、app.json / Info.plist で恒久的に消す設定、消えない場合の原因を整理しました。
開発ツール2026-07-04
「続きを読む」を出すべきか、テキストの実測で決める — Rork(Expo)の折りたたみ表示設計
商品説明やレビュー本文を3行で畳み「続きを読む」を出す実装で、短い文にまでトグルが付いてしまう問題を解決します。onTextLayout で実際の行数を測り、はみ出す時だけトグルを出す設計を、iOS と Android の差、展開アニメーション、文字サイズ拡大への配慮まで動くコードでまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →