LINE で動くミニアプリを個人開発した記録 — 構想・収益モデル・技術スタック選定の裏側
LINE ミニアプリ開発記 第 1 回
個人開発をしていると、ある日「これは LINE に乗せたほうが速いんじゃないか」と気付く瞬間があります。私の場合、Android ネイティブアプリの実装が 8 割ほど終わっていたところで、ストア審査と配信負荷を改めて見積もり直して、結局すべて捨てて LINE LIFF に作り直す判断をしました。
本記事はその「ピボット」の裏側を、構想・収益モデル・技術スタック選定の 3 軸でまとめます。同じく個人で何かを公開したい人にとって、判断のたたき台になれば嬉しいです。
状況・前提
- 開発者: 個人 1 人
- 使える時間: 平日夜+休日数時間
- 既存資産: Android アプリの仕様書とコアロジック(スケジュール計算など)
- 目的: 半年以内に動くものを公開して、できれば広告収入で回す
- 元のスタック: Kotlin / Jetpack Compose / Room / WorkManager / Google Play Billing
ピボットの判断
Android で完走するコスト
Android のままでもアプリ自体は動かせる状態でした。それでも捨てた理由は 3 つです。
[1] ストア審査の重さ
└─ 個人開発者の Play デベロッパーアカウント要件が年々厳しくなっている
└─ アプリ公開までに本人確認・テスター 12 名以上の運用が必要
↓
[2] 配信・更新の摩擦
└─ アプリの存在を知ってもらってもインストール導線が長い
└─ 「LINE で友だち追加してすぐ使える」と勝てない
↓
[3] 収益設計の難しさ
└─ Play Billing の手数料 30% を払いつつ、AdMob で広告を出す構成は重い
└─ 個人で運用する規模だと固定費に対してリターンが弱い
★ LINE 上で動かして AdSense 一本のほうが、固定コストも審査も軽い
3 つ目の収益設計が一番効きました。Android の有料機能で月数千円が見込める世界より、ブラウザ上で AdSense を貼った数千 PV の世界のほうが、私の想定する規模では現実的でした。
LINE LIFF を選んだ理由
選択肢は 3 つありました。
| 候補 | メリット | デメリット | 私の評価 |
|---|---|---|---|
| PWA + 自前ドメイン配信 | 自由度が高い、規約を気にしなくてよい | 集客導線がゼロ、リマインダーが Web Push 頼み | △ 集客が重い |
| Web ブラウザ + Twitter / メルマガ集客 | 立ち上がりが軽い | リマインダーが弱い | △ Push できない |
| LINE LIFF + 公式アカウント | 友だち追加で完結、Push が確実、ブラウザ機能はそのまま使える | LINE プラットフォームに依存、Push の月間上限あり | ◎ 採用 |
決定打は 「Push 通知が確実に届く」 の 1 点でした。リマインダーが本機能のアプリだと、Web Push ではなく LINE Messaging API のほうが体感の信頼度が桁違いに高いです。LINE 公式アカウントのフリープラン(コミュニケーションプラン)は 月 200 通まで無料 で、超過分は配信不可。これも、ターゲット規模を考えれば最初は十分という判断でした。
収益モデル: AdSense 一本に絞る
長く悩んだのが収益モデルです。最終的には AdSense 主軸、買い切り課金は将来検討 に絞りました。理由はこれです。
- LINE のミニアプリ昇格を狙わないなら、課金導線を組むメリットが薄い
- 個人運営で課金を入れると、返金・サポート・税務がいきなり重くなる
- AdSense ならドメイン審査さえ通れば、運用は記事を書くだけで回る
ただし AdSense は コンテンツの厚みがあるドメインのほうが審査を通りやすい という肌感覚があります。LIFF アプリ単体では情報量が薄いので、トップドメインに技術ブログ(この連載がそれです)を貯める運用のほうが現実的、という判断です。
もうひとつ大事な点として、Vercel Hobby は 広告を含むデプロイを商用利用と定義 しており、AdSense は明示的に商用例として挙げられています。これを避けるため、構成は LIFF 本体(広告なし)= Vercel Hobby、ブログ + AdSense = Cloudflare Pages の二段ホスティングにしました。サブドメイン (app.既存ドメイン.xxx) と トップドメイン (既存ドメイン.xxx) でホスト先が違う、という形です。両方ともドメイン代以外の追加コストはかかりません。
技術スタック選定
最後にスタック。1 人で書ききれる前提で、よく知っている道具と、無料枠が太い道具を組み合わせました。
| 層 | 採用 | 理由 |
|---|---|---|
| LIFF フロントエンド | Next.js 15.5(App Router) | 慣れている、SSR/SSG/CSR の混在が楽、Vercel との相性 |
| LIFF ホスティング | Vercel Hobby | プレビュー環境が無料、独自ドメイン接続が楽。広告は貼らない前提 |
| ブログ用 SSG | Astro | コンテンツ重視、ビルドが速い |
| ブログ ホスティング | Cloudflare Pages | 帯域無制限、商用利用 OK、AdSense と相性問題なし |
| 認証 | Firebase Auth + LINE Custom Token | LIFF の ID トークンを 1 回検証して以降は Firebase Auth セッション |
| データ | Firestore | スキーマレスで個人開発に向く、無料枠が広い |
| サーバーロジック | Cloud Run functions(旧 第 2 世代 Functions) | Webhook と cron だけならこれで十分 |
| 通知 | LINE Messaging API | Push の信頼性が高い |
| 通知のトリガ | Cloud Scheduler → Cloud Run functions | Firebase の cron として標準 |
| 収益 | Google AdSense | トップドメインのブログに貼る(LIFF 本体には貼らない) |
| ドメイン | お名前.com で取得済みのドメイン | 追加コストなし |
選定基準を 1 行でまとめると、「個人で運用するために、無料枠の合計と運用工数の少なさで選ぶ」 に尽きます。技術的に尖ったものを選ぶより、各層で最も「飽きない・忘れない」道具を組むほうが、半年後の自分が困りません。
学び・余談
ピボットを決めるとき、Android で書いたコードが惜しいという気持ちは正直ありました。それでも捨てたのは、AI と壁打ちを繰り返して、理想と現実のギャップを徹底的に詰めた からです。「公開までに何ヶ月かかるか」「個人で払い続けられる固定費はいくらか」「半年後に自分が触り続けたいスタックはどれか」を質問形式で投げ、返ってきた答えにさらに「それは私の状況だと本当か」と突っ込み返す、というやり取りを 1 時間ほど続けました。終わってみると、残す理由よりも進む理由のほうが圧倒的に多くて、悩みが目に見えて消えました。判断に迷ったら自分の頭の中だけで回さずに、対話の場に出して引き伸ばす、というのが個人開発で得た数少ない教訓のひとつです。
連載の次回は、ここで選んだスタックを実際に 月額 0 円 で運用するためのアーキテクチャ全体図を書きます。
関連記事
- #2 LINE LIFF + Firebase + Vercel で月額 0 円運用するためのアーキテクチャ全体図
- #13 お名前.com で取得したドメインを Vercel に CNAME 接続する完全手順
- #15 個人開発で医療系アプリのプライバシーポリシー・利用規約を書くときの最低ライン