「コードを書かずに、アプリなんて出せるの?」と思う方は多いんじゃないでしょうか。
正直なところ、自分も半信半疑でした。
自分は本業がWebアプリのサーバーサイドエンジニア(PHPメイン)で、スマホアプリの開発経験はゼロ。
SwiftもDartも書いたことがありません。
それでも先日、初めてのiOSアプリ「あと何回」がApp Storeで公開されました。企画からリリースまで約3週間。
この間、コードは本当に全部Claude Codeに任せて、自分がやったのは仕様決め・競合調査・判断・レビューだけです。
この記事では、アプリ案の調査から審査一発承認までの流れを、つまずいた点も含めてそのまま書き残していきます。
同じように「本業はWebだけど、アプリも出してみたい」という方の参考になれば嬉しいです。
記事の目次
「あと何回」ってどんなアプリ?|ローン・分割の”残り回数”だけを管理する
カーローン、スマホの分割、ペイディ。
こういう「毎月決まった額を、決まった回数払う」支払いの残り回数と完済時期を1画面に集約するアプリです。
- 入力は「月の支払額・支払日・回数・開始年月」だけ。金利の計算はしません
- 支払日を過ぎると、次にアプリを開いたとき自動で「支払済」が1つ進みます
- ホームには「完済まであと◯年◯ヶ月」と全体の進捗バーが主役として出ます
「金利を計算しないで大丈夫?」と思うかもしれませんが、これは意図的な割り切りです。
住宅ローンの償却計算をまじめにやり出すと、入力も検証も一気に地獄になります。
一方で、契約書には「月々◯円×◯回」が書いてある。
それを写すだけにすれば入力は1分で終わります。
厳密さより「サッと登録して、あと何回かが一目で分かる」ことを優先しました。
料金は無料で2件まで登録でき、3件目から買い切り¥300。広告なし・サブスクなしです。
なぜ作ったか|1本目のアプリは公開を諦めていた
実はこれ、最初に作ったアプリではありません。
1本目はトレーニング用のインターバルタイマーを作ったのですが、公開前の調査でApp Storeの審査ガイドライン4.3(b)——「既存アプリと見分けがつかないアプリは却下する」というスパム対策の規定——に、飽和カテゴリとして「シンプルなタイマー」が名指しされていることを知ります。
ド真ん中。個人用としては完成しましたが、ストア公開は断念しました。
次のアプリを考え始めたきっかけは、個人開発アプリがリリース初日に10万円売れたという動画を見たことです。
単純ですが「自分も出してみたい」と火がつきました。そして検討初日に出てきたのが、自分自身のこの愚痴です。
住宅ローンやカーローン、スマホの分割やペイディ。今何回払って、残額いくらで、あと何回なのか、契約書や注文完了メールを遡らないと確認できない。
各社のマイページはバラバラで、横断して見られる場所がどこにもない。
この「小さいけど確実に存在するイライラ」をそのままアプリにすることにしました。
お気づきでしょうか——愚痴の中に、すでにアプリ名が入っていました。
「あと何回」という名前は後日候補を並べて決めたのですが、元をたどれば自分の愚痴の言い回しそのままです。
競合は★4.6が2本|勝ち筋は「借金」と言わないこと
作り始める前に、競合調査をClaude Codeに投げました。
返ってきた報告は「都合の悪い事実から先に」で始まります。
複数のローンを横断管理して完済日を出すアプリは既に存在していて、しかも2本とも★4.6。
素直に作ると正面衝突する上に、例の4.3(b)にも当たる、と。
1本目をこれで諦めた身としては、ここが考えどころでした。
ただ、調査結果の中にひとつ引っかかるものがありました。
競合アプリのユーザーレビューに、「パッと見で返済アプリと分からないのがいい」をわざわざ褒めている声があったんです。
既存アプリはどれも「借金管理」の看板を掲げています。
でも、カーローンやスマホ分割やペイディを「借金」と思って払っている人は少数派じゃないでしょうか。
あれは普通の支払いです。「借金管理アプリはDLしたくない。
でも、あと何回かは知りたい」——この層に向けて、借金の看板を外して「完済までの進捗」として出す。
これを差別化の核にしました。
決めてからは徹底します。
- 名前に「返済」「ローン」を入れない(Bundle IDからも `loan` を外して `atonankai` に)
- 配色は借金っぽい赤ではなく緑系
- アイコンやストアの説明文からも「借金・返済」ワードを排除
「でも検索で『返済 アプリ』と打つ人はどうするの?」という問題は残ります。
ここはApp Storeの仕組みで両取りできました。
ストアにはユーザーには見えないキーワード欄があり、そこに「返済,借金」を仕込めば、見た目の非・借金感と検索露出を両立できます。
価格も競合ありきです。完全無料・広告なしの強い競合がいる以上、強気にはできない。
無料の2件は「集約のうまみ」ではなく操作感を試してもらう体験版と割り切り、解放は頑張っても¥300、と決めました。
作り方の全体像|Next.jsで動く設計図 → Flutterで本番
いきなりネイティブアプリには行かず、まずNext.jsでWeb版を作りました。狙いは2つです。
- 勉強を兼ねる。本業で近くNext.jsを使う予定がありました
- 手戻りの安い段階で仕様を詰める。デザインやUI、「開始年月をどこから数えるか」みたいな細かい仕様は、ブラウザですぐ触れるWeb版で試行錯誤するほうが圧倒的に軽い
Web版自体は1日で動くようになり、そこからUIや細かい仕様の詰めまで含めて4日ほど。
「動く設計図」として十分な手応えが得られたので、ネイティブ化へ進みます。
Expo(React Native)とFlutterを比較して、Flutterにしました。
ゼロから学ぶ前提なら学習コストは同等くらいという見立てでしたが、決め手は仕事側の事情です。
外注で作ったFlutterアプリを今後内製化する予定があり、どうせ学ぶなら直接資産になる方を選びました。
移植の線引きはこうです。
| 部分 | 扱い |
| 計算・バリデーションなどの純粋ロジック | TypeScript→Dartへほぼ機械的に移植 |
| 保存層 | localStorage→SQLiteに差し替え |
| UI | Flutterで作り直し |
ロジックはWeb版で固めてあったので、Flutter側は「答え合わせしながら組み立てる」感覚でした。
Flutter着手から公開までは2週間です。
コードは全部Claude Code|自分がやったのは仕様・判断・レビュー
ここまで読んで「で、実際どこまで任せたの?」と思った方へ。
コードは本当に全部です。
Next.jsのWeb版も、Dartへの移植も、課金処理も、自分は1行も書いていません。
代わりに自分がやっていたのは、こういうことです。
- 困りごとを言語化して、仕様に落とす
- 競合調査の結果を読んで、方針を決める
- 出てきた提案に「それはこの方針と矛盾しない?」と判断を返す
- 動くものを実機で触って、違和感を報告する
やってみて腹落ちしたのは、開発は実はほとんど「判断」でできているということでした。
コードを書く時間が消えても、決めることは1つも減りません。
判断が仕事になった象徴的な場面が、アイコンです。
Claude Codeが「アプリの内容が伝わるように」と¥マーク入りのアイコン案を出してきたとき、引っかかりました。
競合レビューで学んだ「他人に金融系アプリと思われたくない」というニーズに反しないか?と差し戻して、¥マークはチェックマークに変わりました。
方針を握っているのが人間なら、AIの提案が方針とズレた瞬間に気づけます。
逆に言えば、そこを握っていないと、多分ズレたまま進みます。
ちなみにNext.jsの勉強はというと、正直まだ「動くものを一緒に作った」段階です。
ここからコードレビューの形で中身を読み解いていくつもりです。
書かずに学ぶなら、レビューで学ぶ。今のところこのスタイルで進めています。
初めてのApp Store申請|つまずきポイント集
コードをAIに任せても、ここは全部自分の手を動かすしかありません。
初申請で実際につまずいた点を並べます。同じ道を通る方はどうぞ。
- Apple Developer Programの本人確認。身分証の写真が何回やっても通らず、ここで足止めを食らいました。ちなみに年会費は12,980円です
- アプリ名の重複。App Store Connectに「あと何回」を登録しようとしたら、同名の他社アプリが既にあって登録不可。ストア上の名前だけ「あと何回 – 分割・ローンの完済管理」にして、ホーム画面の表示名は「あと何回」のまま守りました。ストア名とホーム画面表示名は別設定なんです
- 実機で初めて出るバグ。数値キーボードには「完了」キーがなく、開いたキーボードで保存ボタンが隠れて詰む——シミュレータでは気づけませんでした。実機テストはやはり必須です
- 課金の審査対策。このアプリのペイウォールは「3件目を追加しようとしたとき」にしか出ません。審査員がたどり着けないと差し戻しのリスクがあるので、審査メモに出し方を英語で書いておきました。あわせて4.3(b)対策として、競合との違い3点も先回りして明記
- 提出ボタンで一度弾かれる。Flutterのデフォルト設定はiPad対応込みなので、13インチiPadのスクリーンショット提出が必須になります。iPadでは一度もテストしていなかったため、iPhone専用に設定し直して再ビルドしました
- 地味なところでは、「メタデータが不足しています」の正体が**価格とローカリゼーションの保存し忘れ**だったことも。エラー文言が不親切なので、必須項目の保存状態は先に全部見直すのが早いです
プライバシーポリシーはWebに置く必要がある|GitHub Pagesなら無料で足りる
見落としがちですが、App Storeの申請にはプライバシーポリシーのURLが必須です。
アプリ内に文章を書くだけではダメで、Web上のページとして用意して、そのURLを登録する必要があります。
「アプリを作るのにWebサイトが要るの?」となりがちな、初申請の隠れた関門です。
自分はもともとドメインを持っていたので、独自ドメイン+GitHub Pagesでアプリの公式サイトを立てて、そこにプライバシーポリシーを置きました。
GitHub Pagesは静的サイトを無料でホスティングできるサービスで、リポジトリにHTMLを置くだけで公開できます。
独自ドメインがない方も、GitHub Pagesの標準ドメイン(`ユーザー名.github.io`)がそのまま使えるので、完全無料で要件を満たせます。
ただ、独自ドメインも年数百円〜千円台からあって維持費は軽く、アプリの公式サイトとして育てられることを考えると、これから取るなら独自ドメイン+GitHub Pagesの組み合わせがおすすめです。
ひとつだけ実体験のハマりを。
独自ドメインを使う場合、DNS設定より先にPagesを有効化するとHTTPS証明書の発行が失敗したまま止まることがあります。
自分はカスタムドメインを一度外して付け直したら即再発行されました。
審査は一発承認|最後は自腹¥300で本番課金テスト
提出から約2日、リジェクトなしの一発承認でした。
4.3(b)を警戒し続けてきた身としては、審査メモの先回りが効いたと思いたいところです。
リリースは自動公開ではなく手動を選びました。
理由は課金です。
本番環境のアプリ内課金は公開後にしか確認できないので、「寝ている間に公開されて、課金が壊れたまま数時間放置」という事態を避けたかった。
公開ボタンを押したあと、自分のアプリに自腹で¥300払って、購入→機能解放→復元まで確認して完走です。
ちなみにこの¥300、手数料を引いた手取りは¥210で、振り込まれるのは翌々月です。
記念すべき初売上(自分)の着金を静かに待っています。
まとめ|コードを書かずにアプリを公開して分かったこと
3週間の初アプリ開発で腹落ちしたのは、この3つです。
- Webエンジニアの土地勘は、そのまま武器になる。仕様の詰め方、設計の考え方、レビューの目。プラットフォームが変わっても丸ごと持ち込めました
- コードを書かない開発は、判断の連続。何を作るか、何を作らないか、AIの提案のどれを差し戻すか。決める材料を揃える調査が、実は一番時間を使った仕事でした
- Web版を先に作るやり方は、Webエンジニアには特におすすめ。慣れた土俵で仕様とUIを固めてからネイティブに進むと、ネイティブ側の作業は「移植」に近くなります
スマホアプリ開発、正直もっと遠いものだと思っていました。
コードをClaude Codeに任せられる今、Webエンジニアにとっての参入障壁は「Swiftを学ぶこと」ではなく、「何を作るか決めること」と「ストア公開の事務手続き」です。
本業の土地勘を持って個人開発に踏み出したい方の、参考になれば嬉しいです。
「あと何回」はApp Storeで公開中です。
ローンや分割払いが2つ以上ある方は、ぜひ触ってみてください。






