朝、コーヒーを淹れながら見た画面に「Rork が $15M を調達」という見出しが並んでいました。ちょうど手元では、壁紙アプリの新作を Rork で試作している最中でした。
正直なところ、最初に浮かんだのは金額ではありませんでした。「この試作を、このまま本番まで持っていっていいのか」という、もっと地味な問いです。
個人開発者にとって、開発ツールの調達ニュースは他人事ではありません。乗ったプラットフォームが半年後に方針を変えれば、書きかけのコードごと立ち往生します。私自身、個人でアプリを運用してくる中で、消えたSDKや畳まれたサービスに何度か付き合わされてきました。
そこで、この調達を「投資の話」ではなく「自分の判断材料」に翻訳し直す作業をしました。以下は、その手順と、乗ると決めたあとに実際にやったことの記録です。
調達の中身を、憶測抜きで並べ直す
まず、確認できる事実だけを並べます。ここに推測を混ぜると、あとの判断が全部ずれます。
シード段階で $15M という数字は、AI 開発ツールの分野でも大きい部類に入ります。ただ、私が引っかかったのは金額ではなく、この表の下から2行でした。
「開発ツールで世界の上位」という報道が正しければ、Rork の収益はすでにユーザーからの課金で回り始めている、と読めます。ただし順位の具体値は一次情報で確認できていないので、ここは「そうかもしれない」程度に留めておきます。調達前から売上がある会社と、調達で初めて息をつく会社とでは、値上げの切迫度が違うはずです。
そして Paperline の買収。ここが一番、言葉より正直にロードマップを語っていました。
ニュースを「乗るか見送るか」に翻訳する3つの観測項目
調達の記事を読むとき、私は3つだけ見るようにしています。プレスリリースの美文よりも、この3点のほうが将来を当てます。
1. 投資家の顔ぶれは、次の資金調達の予告になる
Left Lane Capital、Peak XV、True Ventures、Goodwater。この並びは、シードにしては後段のラウンドを引ける陣容です。既存投資家の a16z Speedrun が残っている点も、初期から見ていた側が降りていないことを示します。
個人開発者にとっての意味は単純です。次の1〜2年で資金が尽きて畳まれる確率が下がった 、ということ。それ以上でも以下でもありません。「だから値段が上がらない」とは、まったく別の話です。
2. 買収は、口で語るロードマップより正確
Paperline は、macOS 上で AI がネイティブ Swift アプリを作るツールです。これを買ったということは、Rork が「React Native ではなくネイティブ Swift 生成」にも力を入れる意思がある、と読めます。なお資金の使途そのものは公表されていませんので、ここから先は私の推測です。
実際、Rork Max はネイティブ Swift を出力するプランで、Claude Code と Claude Opus 4.6 を基盤にしています。買収と Max の方向は一致しています。
ここから導ける実務的な判断が一つあります。標準の Rork(React Native / Expo)で作っているアプリの改善速度は、Max ほどには加速しないかもしれません 。私が試作していた壁紙アプリは Expo 側だったので、この読みは行動を変えました。詳しくは後述します。
3. 課金体系の「単位」を見る
値上げが来るかどうかを月額だけで予想しても外れます。見るべきは課金の単位です。
Rork の課金の実体はクレジット制で、AI とのやり取り1回につき1クレジットを消費します。「ログイン画面を作って」も1回、「そのボタンの色を少しだけ濃くして」も1回です。指示の重さは関係ありません。
調達で強化されるのがモデルの性能である以上、1回のやり取りあたりの原価は上がります。つまり値上げが起きるとしたら、月額表示ではなくクレジット単価や消費ルールのほうが先に動く と考えるのが自然です。プラン表だけを毎月眺めていても、この変化は見えません。
現在の料金水準の詳しい内訳は、Rorkの料金プランを正直に比較する にまとめてあります。
早期ユーザーが得られるもの、得られないもの
ここは切り分けが必要な箇所です。「早く使い始めた人は優遇される」という期待は、スタートアップの歴史を見れば半分は当たり、半分は外れます。
Rork について私が確認できた範囲では、生涯価格の据え置きや、早期ユーザー限定の永久ディスカウントといった公式プログラムは存在しません。他社の事例を根拠に「たぶんあるはず」と考えて意思決定するのは、事業としては危うい賭けです。
一方で、早期ゆえに実際に得られるものは確かにあります。
私が実際に価値を感じているのは3行目です。同じお題を投げ続けていると、生成品質が上がった月がはっきり分かります。これは早く始めた人にしか蓄積できない情報でした。
撤退線は、感覚ではなく数字で置く
先ほどの表の1行目に「値上げ時の撤退線を先に決めておく」と書きました。これは心構えの話ではなく、計算で出せます。
私の壁紙アプリの主な収益源は AdMob のインタースティシャル広告です。日本向けで eCPM がおよそ300円、1セッションに1回表示、DAU あたり1日1.5セッション。この前提なら、DAU 1人が1ヶ月に生む広告収益はこうなります。
1.5セッション × 30日 × 300円 ÷ 1,000 = 約13.5円(1ドル150円で換算。料金は執筆時点の想定なので、契約前に公式の料金表をご確認ください)
あとは、プラン料金をこの数字で割るだけです。
この表を手元に置いてから、判断がずいぶん速くなりました。DAU が300に届いていないアプリで Max を契約するなら、それは収益ではなく学習に投資している、と自覚できます。
学習への投資が悪いわけではありません。ただ、収益化のつもりで赤字を続けるのとは、まったく別の行為です。
私の撤退線は「この表の DAU が実質2倍になったとき」に置いています。クレジットの消費ルールが変わり、同じ作業に往復が倍かかるようになれば、月額表示が据え置きでも実質は倍額です。定点観測の1つ目の項目が、そのまま撤退の判断材料になります。
手計算だと、eCPM やセッション数を変えるたびに数字を追い直すのが億劫になります。そこで次の短いスクリプトを手元に置き、前提を変えて何度か回しました。上の表の数字は、実行して確かめたものです。
import math
def break_even_dau (plan_usd, fx = 150 , ecpm = 300 , sessions = 1.5 , days = 30 ):
"""プラン料金を回収するのに必要な DAU(切り上げ)"""
revenue_per_dau = sessions * days * ecpm / 1000 # 円 / 月
return math.ceil(plan_usd * fx / revenue_per_dau)
for name, usd in [( "Junior" , 25 ), ( "Senior" , 100 ), ( "Max" , 200 )]:
print (name, break_even_dau(usd))
# Junior 278 / Senior 1112 / Max 2223
eCPM が半分の150円に落ちれば、必要な DAU はちょうど倍になります。広告単価は私の手の届かない場所で動くので、撤退線は「いまの数字」だけでなく「単価が半分になった場合の数字」でも一度引いておく——それがいまの私の線引きです。
乗ると決めたあと、まず作った「戻れる状態」
調達を見て私が出した結論は「Expo 側で続けるが、いつでも降りられる形にしておく」でした。プラットフォームを信用するかどうかと、依存の深さを設計するかどうかは別の問題です。
最初にやったのは、生成物を自分の Git リポジトリに毎回スナップショットすることでした。Rork の画面上で履歴を追えても、手元に残っていなければ「先月の生成物と何が変わったか」を後から検証できません。
#!/usr/bin/env bash
# rork-snapshot.sh — Rork からエクスポートした zip を自分のリポジトリに取り込み、
# 生成のたびに差分を追えるようにする。
# 使い方: ./rork-snapshot.sh ~/Downloads/rork-export-2026-04-09.zip "AdMob 導入後"
set -euo pipefail
ZIP = " ${1 :? エクスポートした zip のパスを渡してください } "
NOTE = " ${2 :- } "
REPO = " $HOME /apps/wallpaper-rn" # 自分で管理するリポジトリ
STAGE = " $REPO /generated" # 生成物だけを置く場所
[ -d " $REPO /.git" ] || { echo "リポジトリが見つかりません: $REPO " ; exit 1 ; }
# 生成物の置き場だけを丸ごと入れ替える。手書きコードは generated/ の外に置く。
rm -rf " $STAGE "
mkdir -p " $STAGE "
unzip -q " $ZIP " -d " $STAGE "
# node_modules や lock が混ざると差分が読めなくなるため落とす
find " $STAGE " -name node_modules -type d -prune -exec rm -rf {} + 2> /dev/null || true
find " $STAGE " -name "*.log" -delete 2> /dev/null || true
cd " $REPO "
STAMP = "$( TZ = Asia/Tokyo date +%Y-%m-%d-%H%M)"
git add generated
if git diff --cached --quiet ; then
echo "生成物に差分はありませんでした ( $STAMP )"
exit 0
fi
# 何行増えて何行消えたかを、コミットメッセージに残す
SUMMARY = "$( git diff --cached --shortstat )"
git commit -q -m "gen: ${ STAMP } ${ NOTE }" -m "${ SUMMARY }"
git tag -f "gen-${ STAMP }"
echo "記録しました: ${ SUMMARY }"
このスクリプトの肝は、generated/ の外に手書きコードを置くという境界です。生成物は毎回まるごと入れ替わる前提にしておくと、AI が意図せず書き換えた箇所を git diff で一目で見つけられます。
逆に、生成された画面ファイルに直接手を入れ始めると、次の生成でその修正が消え、消えたことにも気づけません。私は最初の2週間これで無駄な時間を使いました。
境界を引いたうえで、外に出すべきものは3つでした。
AdMob のユニット ID とリモート設定のキー — 生成物に埋め込むと、再生成のたびに本番 ID が消えてしまいます
App Store / Google Play の申請メタデータ — 生成の対象外なのに、なぜか毎回探し直すことになります
端末で撮ったスクリーンショットと審査用の説明文 — 資産としていちばん再利用が効きます
// src/config/ads.ts — generated/ の外に置く。ここだけは AI に触らせない。
type AdSlot = "wallpaper_detail" | "download_complete" ;
const UNIT_IDS : Record < AdSlot , { ios : string ; android : string }> = {
wallpaper_detail: {
ios: "ca-app-pub-XXXXXXXXXXXXXXXX/1111111111" ,
android: "ca-app-pub-XXXXXXXXXXXXXXXX/2222222222" ,
},
download_complete: {
ios: "ca-app-pub-XXXXXXXXXXXXXXXX/3333333333" ,
android: "ca-app-pub-XXXXXXXXXXXXXXXX/4444444444" ,
},
};
// 開発ビルドで本番 ID を叩くと、AdMob 側で無効トラフィック扱いになります。
// テスト ID への切り替えは実行時ではなくビルド時に決めます。
// インタースティシャル用の公式デモ ID。バナー用のデモ ID を流用すると、
// 広告フォーマットが合わず読み込みに失敗します。
const TEST_UNIT = {
ios: "ca-app-pub-3940256099942544/4411468910" ,
android: "ca-app-pub-3940256099942544/1033173712" ,
};
export function adUnitId ( slot : AdSlot , platform : "ios" | "android" ) : string {
if (__DEV__) return TEST_UNIT [platform];
return UNIT_IDS [slot][platform];
}
__DEV__ での分岐をここに集約しておくと、生成された画面側は adUnitId("wallpaper_detail", Platform.OS) を呼ぶだけになります。画面が何度再生成されても、広告の設定は生き残ります。
収益設計そのものについては、RorkアプリのAdMob収益化戦略 で別途整理しています。
申請で詰まった4点は、いずれも生成物の外側にあった
試作を実際に App Store と Google Play に出す過程で止まった箇所は、コードの品質ではなく、生成の対象外にある設定でした。同じ構成なら再現すると思うので、具体的に残しておきます。
権限の説明文は、app.json に書けば Expo のビルド時に反映されます。
{
"expo" : {
"ios" : {
"infoPlist" : {
"NSPhotoLibraryAddUsageDescription" : "選んだ壁紙を写真アプリに保存するために使用します。" ,
"NSUserTrackingUsageDescription" : "広告の表示回数を適正に保つために使用します。オフのままでもアプリのすべての機能をご利用いただけます。"
}
},
"android" : {
"permissions" : [ "POST_NOTIFICATIONS" ]
}
}
}
ATT の文言で一度差し戻された経験から、私は「オフのままでも機能は使える」と明記するようにしています。ここを曖昧にすると、審査側が機能制限の有無を確かめられず、質問が往復して数日失います。
Privacy Manifest は SDK の依存が増えるほど厄介になります。監査の手順はRork の Privacy Manifest と SDK チェーンの事前監査 に分けて書きました。
4点に共通していたのは、どれも生成されたコードの品質とは無関係だった ことです。AI がアプリを書いてくれる時代でも、審査を通すのは依然として人間側の準備でした。ここを見誤ると「Rork の生成品質が低いせいで落ちた」と原因を取り違えます。
調達後の変化を、自分の手元で測る
プラットフォームが良くなったかどうかを、公式の発表文で判断するのは無理があります。私は月に一度、同じお題を投げて記録することにしました。
回帰テストのつもりで、次の3つを毎月同じ文面で投げています。
一覧・詳細・保存の3画面を持つ最小構成のアプリを生成させます
そこに「保存済みだけを絞り込むフィルタ」を後から追加させます
生成物をエクスポートして、そのままビルドが通るかを確かめます
記録するのは4つの数字だけです。
4番目が一番大事だと考えています。AI 生成ツールの実用性は、最初の生成の見栄えではなく、追加指示を重ねたときに前の実装が生き残るか でほぼ決まります。ここが崩れるツールは、試作までは楽しく、運用に入った瞬間に破綻します。
3ヶ月続けると、数字が判断してくれるようになります。感想で乗り換えを決めるより、はるかに落ち着いていられます。
結局、乗るかどうかをどう決めたか
私は Expo 側で続けることにしました。理由は資金調達の規模ではなく、上の定点観測で「後追い指示での破壊」が起きにくくなっていたからです。
調達ニュースは、判断のきっかけにはなっても、判断の根拠にはなりませんでした。根拠になったのは、自分の手元に溜めた4つの数字のほうでした。
もしいま同じ場所に立っているなら、最初の一手として定点観測の3つのお題を決めることをお勧めします。乗るにせよ見送るにせよ、来月には自分の数字で判断できるようになります。
私自身まだ手探りの部分が多く、来月の記録が読みを裏切ることも十分あり得ます。それでも記録があれば、裏切られたことに気づけます。お読みいただきありがとうございました。
(調達の事実関係は複数の報道で照合しました。Paperline の買収は報道ベースで、資金の使途と開発ツール内の具体的な順位は公式には確認できていません。)