App開発の技術選定を考える。あなたのクラウドは本当に必要?
ハッカソンや個人開発でアプリを作る際、「どの技術スタックを選ぶか?」は必ず議論されます。
私自身、過去にハッカソンでアプリやソフトを作ったことがありますが、そのたびに「どの技術を使うか?」という議論がありました。
今回は、私自身の知識や経験をもとに、アプリ開発における技術選定の考え方をまとめてみます。
まずアイデア
言わずもがな、前提となるアプリやソフトのアイデアがないと始まりません。
対象のOSを考える
重要です。
iOSなのか、Androidなのか、あるいは両方なのか。
PCかスマホか、web形式にして両方対応させるのかなど。
これによって、使える技術スタックが変わってきます。
どのフレームワークを使う?
言語より先に、フレームワークを選ぶことが重要です。
フレームワークとは、アプリやソフトを作る際の土台となるもので、フレームワークを選ぶことで、使える言語やライブラリが決まってきます。
参考として、
- Web: Next.js, React ⇒ TypeScript
- iOS / Android (クロスプラットフォーム): React Native, Flutter ⇒ TypeScript, Dart
- iOS (ネイティブ): SwiftUI ⇒ Swift
- Android (ネイティブ): Jetpack Compose ⇒ Kotlin
- PC: Tauri ⇒ Rust, TypeScript
があげられます 。
どこまでローカルか?クラウドか?
実は、かなり重要なポイントです。
それは、
「本当にクラウドが必要なのか?」
ということです。
実はローカルで完結するなら、クラウドを使う必要は基本的にありません。
ローカルとクラウドの大雑把な違いを比較します。
| ローカル | クラウド | |
|---|---|---|
| 料金 | 0円 | クラウドサービスによる |
| 管理 | 簡単 | 複雑 |
| 拡張性 | データの共有や複数端末での同期ができないので低い | クラウドサービスによって制限があるが、高い |
| セキュリティ | ネットワーク経由で漏れるリスクは大幅に減る | サービス側のセキュリティは高いが、設定を間違えると漏洩リスクがある |
| 難易度 | 超簡単 | 難しい(データベースやバックエンドの知識が必須) |
すなわち、クラウドを使う場合は、データベースやバックエンドの知識が必要になり、開発の難易度が上がります.
セキュリティや例外処理などもローカルより複雑になることが多いです。
また、AWSなどのクラウドサービスを使う場合、無料枠を超えると課金されることもあります。
これは仕様を理解していないと、思わぬ課金が発生することもあるということです。
例えば「AndroidのKotlinを使ったTodoアプリを作るためにfirebaseを使おう」と考えたとします。
しかしそもそも、
「TodoアプリのデータはSQLiteなどのローカルデータベースで完結するので、firebaseを使う必要はない」
ということもあります。
さらにさらに、
「もしTodoアプリの利用者が増えて、アクセスが増加したことで無料枠を超えたら?」
「Todoアプリの個人情報を、攻撃者から守り切れるのか?」
など、クラウドを使う場合は考慮すべきことが多くあります。
このように考えると、「MVPを作る段階ならクラウドは返って悪手だ」とも言えます。
もちろん、複数端末の同期がどうしても必要な場合は導入を考えてもいいでしょう。
ですが、
「とりあえずクラウドにつなげよう!!」
という考えは止めたほうがいいということです。
私がクラウドかローカルかを決める際には、具体的に以下のことを考えています。
1.その機能はクラウドである必要があるのか?
SQLiteなどのローカルデータベースで完結するなら、わざわざ複雑なクラウドを使う必要はありません。
2.その機能は個人情報などの重要な情報を扱うのか?
自分の技術と要相談です。技術に自信がないのなら、個人情報を扱う機能は避けたほうが無難です。
3.その機能はアクセスが増えたときに、無料枠を超える可能性があるのか?
無料枠を超えると課金されます。その機能が課金枠を超える可能性があるのかを考えましょう。
もし超えるのならば、
「どのようにすれば抑えられるのか?」
「抑えられても、実装のコストや保守のコストが割に合わないのでは?」
を考えて判断しましょう。
それを考えてもクラウドを使う。何を選ぶ?
以上を踏まえてクラウドの使用に踏み来るのなら、どのクラウドサービスを使うかを考えましょう。
| DB | firebase | Supabase | AWS | Cloudflare |
|---|---|---|---|---|
| DBのタイプ | NoSQL | SQL | 何でもあり | D1/KVなど |
| 料金 | 無料枠あり | 無料枠あり | 無料枠あり(クレジットカード必須)) | 無料枠あり |
| 管理 | 簡単 | 超簡単(UIがわかりやすい) | 複雑(インフラ知識が必須) | 普通(少し癖があるが、慣れると快適) |
| 用途 | Android studioとの連携。リアルタイム同期を楽に実装 | 認証を含んだDBを楽に実装 | 個人開発の規模では基本的に選ばない。 | 商用向けの開発でも無料で完結させるなら穴場 |
一般向けに公開する際によく使うクラウドサービスです。
ハッカソンレベルであれば、firebaseやSupabaseを使うことが多いです。
下記の他にもいろいろあります。
| サービス/ストア | Vercel | App Store | Google Play | Cloudflare | AWS |
|---|---|---|---|---|---|
| 料金 | 無料枠あり | 年間費用あり | 初回登録料あり | 無料枠 | 無料枠 |
| 用途 | Webアプリの公開 | iOSアプリの公開 | Androidアプリの公開 | Webアプリの公開 | Webアプリの公開 |
| 難易度 | 超簡単(Git pushするだけで自動公開) | 普通 | 普通 | 普通 | 難しい |
| 注意点 | next.js推奨。無料枠は商用利用に制限あり | Apple Developer Programに加入する必要がある。Macが必要。 | Google Play Developerに加入する必要がある。審査が地獄らしい… | Cloudflare Pages/Workersの二つに分かれ、情報の更新が激しい。 | クレカ必須。必要知識のコストのほうが勝りやすい。 |
筆者のおすすめはCloudflareです。現状でほぼ唯一、無料で制限が少なく商用利用まで完結させられるクラウドサービスです。
D1やKVなどのデータストアも同じプラットフォームで利用できるため、別サービスを契約せずに完結しやすいです。
課金の決済もStripeを使うことで、無料で完結させることができます。(手数料はかかる)
ただし、かなり頻繁にUIや仕様が変わったりするので、情報の更新が追いつかないことがあります…
AWSほどではありませんが、サービスもかなり多くて混乱しやすいです。
ネット記事やaiの情報を鵜吞みにせず、公式ドキュメントを確認することをおすすめします。
AWSはLambda,S3,CloudFrontだけで済むからいいじゃないか?
等という意見もありますが、筆者はAWSには詳しくないので避けさせてもらいます。
まとめ
開発について改めてまとめてみると、初心者の地雷が多いことに気づきました。
特にVercelはかなりの初心者の人が「完全に無料で公開できる!」と勘違いしていることが多いです。
筆者も最初は無料で公開できる勘違いしていて、もし知らずにやっていたら…とヒヤッとさせられました。
ほかのGoogle PlayやApp Storeも、開発者登録料がかかるので、完全に無料で公開することはできません。
審査もしっかりあります。
開発は、
「商用になった途端、技術選定の難易度が跳ね上がる」
ということを念頭に置いて、慎重に調べて選んでいきましょう。