Macを持ってないけどiOSアプリを作りたい。そんな思いを持った初心者が、Windows環境において最終的にApp Storeでアプリのリリースにまで至った備忘録です。個人開発。
この記事は、僕がアンビエントBGMアプリ「SÉtelier(セトリエ)」をWindows一台で開発し、App Storeに配信するまでに辿った道のりを共有する連載の第1回目です。
技術選定で何時間も溶かしたこと、課金実装で挫折しかけたこと、Mac無しでも本当にiOS申請できたのかという結論まで――備忘録+同じ環境や目的を持っている方のために書き留めます。
この連載で扱うこと・扱わないこと
最初にざっくり書いておきます。
扱うこと
- Windows + iPhone1台で個人がiOSアプリを公開するまでの全工程
- 「なぜその技術を選んだか」の意思決定の理由
- 実装でハマった具体的なポイントと、リカバリした方法
- RevenueCat / AdMob を使った個人開発のマネタイズ実装
- EAS Build を使った Mac無しでのiOSビルド・申請
扱わないこと
- React Nativeの基礎文法そのものの解説(公式ドキュメントが詳しいです)
- 細かいUIコンポーネントの全コード掲載(要点だけ抜粋します)
- 「絶対これが正解」という押しつけ(あくまで僕の事例です)
ターゲット読者は、プログラミングに少し触れたことがあって、これから個人でアプリを作ってみたい人です。完全な未経験者には少し難しいかもしれませんが、「こういう世界観なんだ」と地図を眺める用途には使えると思います。プログラミング経験皆無でも、逐一ChatGPTやClaudeに聞けばなんとかなります。
僕の作ったアプリ「SÉtelier -セトリエ-」 について
具体的なイメージがないと話が進まないので、先にアプリの中身を簡単に紹介させてください。
(宣伝も込みで笑)
SÉtelier(セトリエ) は、「音を置く、自分だけのBGM」をコンセプトにしたアンビエント音楽生成アプリです。SE(効果音)×Atelier(アトリエ)を複合して命名しました。
- 画面上のグリッドに、オトダマ(音の玉)を自由に配置する
- 上から落ちてくるボールがオトダマに衝突すると音が鳴る
- 音階はペンタトニック(黒鍵だけのスケール)なので、どう置いても不協和音にならない
- 焚き火・雨音・コオロギなどの環境音BGMを重ねて、自分だけの空間を作れる
操作はシンプル。でも、ボールの落ち方は毎回ランダムなので、結果は二度と同じにならない。ASMR・作業用BGM・睡眠導入として使えるアプリ、というイメージです。

画面は1画面で完結する設計にしています。ハニカム状のグリッドに色とりどりのオトダマを置いて、▶ボタンを押すとボールが落ちてくる。これだけ。
技術的には、Matter.jsで物理演算をして、WebAudio APIでオシレーターからリアルタイムに音を生成しています。初リリース段階では音源ファイルは1つも持っていません。これは後の回でじっくり書きます。
なぜWindowsでiOSアプリを作りたかったのか
「素直にMac買えばいいのでは?」と聞かれることがあるので、ここも書いておきます。
僕の理由は単純で、メインPCがWindowsで、それで何の不自由もなかったからです。仕事もWindows、趣味もWindows、ゲームもWindows。今さらMacに乗り換えるモチベーションがなかった。
そして個人開発は、初期投資をできる限り小さくしたいという現実的な理由もあります。Mac mini を新しく買うとなると、それだけで5〜10万円。アプリが当たるかも分からない段階で、その出費は心理的ハードルが高すぎる。
「今ある環境で、できるところまで行ってみよう」というのが、この開発のスタートラインでした。
そして実際、結論から言うと――Windows一台でも、iOSアプリは出せます。ただし、いくつか壁があるので、その壁の越え方を順番に書いていくのがこの連載の役割です。
Windows開発者がぶつかる4つの壁
実際に作ってみて、Windowsで個人がiOSアプリを作ろうとすると、だいたい4つの壁にぶつかります。

それぞれを軽く解説しておきます。詳細は連載の各回で深掘りします。
壁1:iOSビルドにはMacが必要、という常識
公式の手順を読むと、Xcodeが必要 → Macが必要、と書いてあります。これは半分本当で、半分そうでもありません。
クラウドサービス「EAS Build」(Expo社が提供)を使えば、ビルド処理をExpoのクラウド上のMacが代わりにやってくれます。手元には .ipa(iOSアプリのパッケージ)だけが届きます。これをそのままApp Storeに申請できる。
これがWindows個人開発の最大の助け舟で、第5回で詳しく書きます。
壁2:物理エンジンの選定で詰む
SÉtelierは物理演算でボールを落とすので、物理エンジンが必須でした。
僕は最初Flutter + Forge2D で作り始めて、見事にハマりました。描画エリアが極端に小さくなる現象が解決できず、何時間溶かしても直らない。最終的にReact Native + Matter.jsに乗り換えて解決しました。
この撤退判断と、なぜその組み合わせに辿り着いたのかは、第2回のメインテーマです。**個人開発で一番怖いのは「粘りすぎて時間を溶かすこと」**だと、このとき学びました。
壁3:音源ファイルの管理が面倒
音楽系アプリだと、音色 × 音階の数だけ wav ファイルを用意する……というのが常識的な発想です。マリンバのC4、D4、E4……ベルのC4、D4……これだけで何十ファイルにもなる。
SÉtelierではWebAudio APIのオシレーターでリアルタイム合成にしました。結果、音源ファイル0個で10種類の音色を実装できています。
「合成音は不自然になる」という弱点もあって、実際 bird(小鳥)と cat(ネコ)は不自然すぎて削除しました。この線引きの話も第3回で書きます。
壁4:課金実装が個人には重ため
ここが地味に一番怖かったところです。
iOSのStoreKit、サブスクリプションのレシート検証、復元処理……これを個人開発者がゼロから書くのは現実的じゃない。
RevenueCatというSDKに丸投げすることで、月額・年間・買い切りの三本立てを比較的少ないコードで実装できました。第4回でじっくり書きます。
連載全5回の地図
ここまで読んでくださった方は、ある程度この連載に興味を持ってくれているはずです。全5回の構成を載せておくので、気になる回からつまみ食いしてもらってOKです。

各回のざっくりした内容
第1回(この記事):はじめに — 全行程の地図 連載全体の見取り図と、SÉtelierがどんなアプリかの紹介。
第2回:Flutterを諦めてReact Nativeに移った話 連載のハイライト。技術選定で詰まり、撤退を決めた判断のタイミング。React Native + Expo + Matter.js + WebAudio API という組み合わせに落ち着いた理由。
第3回:実装で詰まったポイント集 — 物理・音・状態管理の地雷 iOSのAudioContext数制限、Zustandのrace condition、ペンタトニック設計、reanimated削除に至った経緯など、実装で何時間も溶かしたポイントを共有します。
第4回:RevenueCatとAdMobで個人開発を持続可能に 月額/年間/買い切りの三本立てにした思想、AdMobとリワード広告で「15分Pro体験」を実装した話、無料/Pro機能の線引き。
第5回:Mac無しでApp Store公開編 — EAS Buildで本当に出せるのか Apple Developer登録(Windowsからの手続き)、EAS Buildの仕組みと料金、TestFlight、審査で引っかかりやすいポイント、アイコン・スプラッシュ・プライバシーポリシーまで。連載のゴール。
読者タイプ別おすすめルート
全部読んでいただけるのが一番嬉しいですが、忙しい方のために:
- 技術選定で迷っている人:第2回 → 第3回
- アプリは作れたけど課金で詰まっている人:第4回 → 第5回
- Mac持ってないけどiOSやりたい人:第1回 → 第5回(先に結論を確認してから戻ってくる)
開発環境の前提情報
最後に、僕の開発環境を共有しておきます。同じ環境を準備してくれれば、連載の手順がほぼそのまま再現できるはずです。
| 項目 | 内容 |
|---|---|
| メインPC | Windows |
| エディタ | VSCode |
| テスト端末 | iPhone(実機) |
| 言語 | TypeScript |
| フレームワーク | React Native + Expo (Development Build) |
| 物理エンジン | Matter.js |
| 音声合成 | react-native-audio-api(WebAudio API互換) |
| 状態管理 | Zustand + persist |
| 課金 | RevenueCat |
| 広告 | Google AdMob |
| ビルド | EAS Build(クラウド) |
最低限必要なもの
- Windows PC(普通のスペックでOK、ゲーミング機じゃなくて大丈夫)
- iPhone実機(Expo Goアプリで動作確認するため)
- Apple Developer Program 登録(年額約15,000円、第5回で詳述)
- Google Play Developer 登録(一回約4,000円、Android展開する場合)
- インターネット接続
これだけ揃っていれば、Macは不要です。ここが今回一番伝えたいポイントでした。
次回予告
第2回は連載のハイライト、「Flutterを諦めてReact Nativeに移った話」です。
最初なぜFlutterを選んだのか、Forge2Dで何が起きたのか、撤退を決めた瞬間、そしてReact Native + Expoという答えに辿り着くまでの紆余曲折を書きます。個人開発で「やめどき」を見極めるのは技術力以上に大事なスキルだと、僕は今でも思っています。
追記:記事公開しました↓

それではまた次回お会いしましょう。
質問や「ここもっと詳しく書いて」というリクエストがあれば、ぜひコメントでお寄せください。連載の途中でも反映できるところは反映していきます。
iOSアプリ開発備忘録 (もとい、SÉtelier 開発記) 第1回 / 全5回
↓公開したアプリのリンクです(興味あれば!フィードバックも大変有難いです!)↓



コメント