☁️

新しくサイトを作ったときのSaaS選びの記録

に公開

作ったサイト:

https://isekai.umigame.app/

動機

以下のような新しいサイトを作りたいと考えた。

  • 性格診断サイト
  • 簡単なログイン機能がある
  • ログインすれば診断結果を保存できる
  • 診断結果を使った簡単な遊び要素

作るのは良いが、なるべくなら使ったことのない技術を使ったり、可能な限り低価格で運用したい。VPSを借りたりするのは嫌だった。

AIで短期間にWebアプリを作れる時代になったので、複数のWebアプリをどんどんデプロイしたい。その意味でプロジェクト数やキャパシティの無料枠の制限が厳しいサービスも使いたくなかった。

無料でフルスタックのWebアプリをデプロイできるサービスがないか探した。

サービス選び

浅い調査しかしてないので間違っているかもしれないが、以下のようなものを比較検討してみた。
今回メインで欲しかった機能としては

  • 静的サイトホスティング
  • DB
  • Auth

がマストだったので、その観点で見てみた。

サービス 静的サイトホスティング DB Auth 一言
Supabase Storageがあるので静的サイトもいけそうだが、主な用途ではなさそう
PocketBase クラウド版が無さそう
Turso - - 安い
AppWrite 無料枠の制限が厳しい
Firebase サ終の怖さ、ベンダーロックイン
Amplify 事実上無料枠なし、ベンダーロックイン
Vercel - - 静的サイト特化の割に高い
Netlify - - 静的サイト特化の割に高い
Auth0 - - 無料枠の制限が厳しい
Cloudflare - 無料枠大きいし安いがAuthが無い

Supabase

https://supabase.com/

元々別のサイトはSupabaseで作っていた。
しかし無料枠が2プロジェクトまでである。しかも無料枠のプロジェクトはアクセスが無いとhibernateされる。低スペックでもいいので10プロジェクトくらいまで無料枠があるならもっと流行ると思う。
ベースがPostgreSQLなので、無料枠を広げるのが難しいのだろうと思われる。

有料プランは$25/monthもするのに、1プロジェクト追加すると$10/monthの追加料金が発生する。2プロジェクト無料プランで運用していた人が、もう1プロジェクト追加したいので有料プランに切り替えて3プロジェクト動かした場合、一気に$45/monthの費用が発生する。
10プロジェクト同時並行でデプロイしようとするとなんと$115/monthになる。ここまで来ると個人開発者にとってはやや非現実的な選択肢となってくる。

1個のDBを名前空間で分けて複数サイトで使い回すという方法もあるらしい(AIから提案された)が、ちょっと嫌な使い方なのでそれはしなかった。

PocketBase

https://pocketbase.io/

Go製のツール。バイナリを一個サーバーに置くだけで良いらしい。
公式サイトを見る限り、今回やりたいことは全てできそうである。

しかし問題はセルフホストが必須なこと。VPSやVMインスタンスを調達する必要がある。
必然的にお金がかかるし、サーバーのお守りという手間も発生する。セキュリティ的な意味では昔ながらのphpMyAdminと同様の問題が発生しうるのではないか。そこまでメジャーではないので現実的な危険性はそんなに無いのかもだが、不安であることは間違いない。個人開発のOSSである上バージョンも1.0.0になってない。

クラウド版ができて無料枠がそれなりに用意されたら一気に人気出そうではある。

Turso

https://turso.tech/

Rust製のSQLiteDB。OSSだがクラウド版もある。安い。無料枠がデータベース100個までOKという太っ腹ぶりだ。SQLiteがベースだから可能なのだろう。

今回はCloudflare D1と比較して結構悩んだが、結果的にCloudflare Workersを使うことにしたのでintegrityの面でD1を採用することにした。

将来的にD1が微妙だと感じたらTurso使ってみるかもしれない。

AppWrite

https://appwrite.io/

何でもできるMBaaS。OSS。クラウド版もある。バックエンドはPHP製らしい。
ドキュメントを見ると独自のDBが何かあるらしい。SQL互換ではなさそう。外部のデータベースを組み込むこともできるらしい。

DBの無料枠が厳しい。

1 Database, 1 Bucket, 5 Functions per project

である。このへんは使っているテクノロジーによるのだと思われる。PHPやDockerを使ったバックエンドを使う以上無料枠を拡大させることが難しいのだろう。

Firebase

https://firebase.google.com/?hl=ja

MBaaSと言えばこれだが、なぜこれほどFirebase alternativeなMBaaSが世の中に沢山あるかに思いを馳せたい。

個人的には、Firebaseを構成している個別のサービスが突如サ終するおそれがある点と、コードが強くFirebase SDKに依存する点が良くないなと感じた。

他のプラットフォームについてもそうだが、SDKをimportしまくる必要があるものは心理的な抵抗が強くなる。

逆に言えば、あまりSDKを使う必要がなく、GitHubにプッシュしたらあとはプラットフォーム側でいい感じにデプロイしてくれるサービスはかなり好印象である。DBがOSSのDBとの互換性を保っているプラットフォームはSDKへの依存が減らせるから良い。

Amplify

https://aws.amazon.com/jp/amplify/

これも説明するまでもない。

個人的に問題と考えているのは、デプロイしたときのS3とDynamoDBの料金は発生してしまうため、実質的に無料枠が無いこと(AWS新規登録時の無料期間内はある程度無料枠がある)。

つまりアプリを複数デプロイしたら、その数に応じて従量課金で請求が来る。
VMやVPSが必要なプラットフォームに比べたら全然マシではあるが、10個くらいデプロイしたら数千円の請求が来てもおかしくない。

Vercel

https://vercel.com/

Vercelも有名なサービスだと思う。

高機能なんだとは思うが、基本的には静的サイトホスティングに特化したサービスで、見た感じDBは無さそう。今回やりたいことに関して言えばAuthも無いので物足りない。

Netlify

https://www.netlify.com/

これも有名なサービス。静的サイトホスティングに特化したサービスで、DBもAuthもない。

以前はNetlifyとSupabaseを組み合わせて使っていた。

しかし個人開発とか検証フェーズにおいてはいくら高機能とはいえ静的サイトホスティングに特化したあれこれは不要なことが多い。HTMLが置けてルーティングできてHTTPSで公開さえできればとりあえずOKである。

Auth0

https://auth0.com/

説明するまでもなく有名なサービス。

Authに特化しているため、静的サイトホスティングやDBは基本無い。ログイン周りの実装は近年非常に複雑化しているため、Auth0を使ってサクッと組み込みたいという人も多いと思う。

実は最初はAuth0を使っていた。
しかしAuth0を組み込むの自体がちょっと前と違って案外めんどくさくなっていた。前はもっと簡単だったような気がするのだが(気のせいかも知れない)、コンソールを色々探索して必要な設定を完了させなければならなかった。

無料枠ではカスタムドメインが1個だけだったりと、制限も厳しい。

Cloudflare

https://www.cloudflare.com/ja-jp/

日本では漫画村の件以降なんとなく法的にグレーな印象を持たれているCloudflareだが、技術的には色々と画期的なことを行っていて面白い。WordPress製サイトへのアクセスを安価に捌くために導入したことがある人も多いのではと思う。

Cloudflareには静的サイトホスティングのサービスとしてPagesとWorkersというものがあるが、公式としては今後はWorkersに投資を集中していく方針らしい。

公式ブログでの記載

Now that Workers supports both serving static assets and server-side rendering, you should start with Workers. Cloudflare Pages will continue to be supported, but, going forward, all of our investment, optimizations, and feature work will be dedicated to improving Workers.
(日本語版)Workersが静的アセットの配信とサーバーサイドレンダリングの両方をサポートするようになったので、Workersから始めるのがよいでしょう。Cloudflare Pagesは引き続きサポートしますが、今後の投資、最適化、機能開発の作業はすべてWorkersの改善に向けられます。

DBにはD1というSQLiteのDBが使える。こちらは無料枠で10プロジェクトまで作成できる。

Workersはサーバーサイドのコードも実行できる(無料プランでは1実行あたり10ms以内)ため、D1との接続はサーバーサイドで行える。つまりクライアント側にSDK的なものを入れる必要が無い。APIエンドポイントを作ってそこを叩く構成にすれば良い。シンプルだ。

DBを11個以上、或いはサーバーサイドを10ms以上動かしたくなった場合は有料プランを契約する必要がある。Workers Paidというものだが、$5/month〜で利用できる。はっきり言って他のサービスに比べたら格安である。

今回D1との比較で迷ったTursoは有料プランが$4.99/month〜で、D1と同じSQLiteなので、D1を完全に競合として意識していると思う。個人開発者としてもTursoは無料枠が100個までなのでイイし、企業が使う場合であってもセルフホストできるという点で強みがある。

正直言えばスケーラビリティとか安全性とかをそこまで気にする必要のない1個人開発者の目線では、Tursoと比べた場合、D1はWorkersと同じCloudflareインフラで動かせるから10ms以内に収まりそう、という以上のメリットが感じられない。

CloudflareにはAuthが無い。かといってAuth0みたいに無料枠制限が厳しいサービスを組み合わせるのは嫌である。最終的に、Authに関してはAIとライブラリを活用して自作することにした。沢山のアプリを作りたい個人開発者の人は同様の結論に至る人も多いのではないかと思う。

感想

  • SQLiteの優位性
    • PostgreSQLを使っているSupabaseは1インスタンスあたりで料金を取らざるを得ず、かなり割高になる
      • SQLiteは基本はファイルを置くだけなので無料枠を広げやすいのだと思われる
    • ローカル環境にMySQLやPostgreSQLみたいなSQLサービスを立てたりしなくて良いので簡単に開発環境が構築できる
      • クラウドIDEとかAIに開発環境セットアップさせる場合に非常に有利である
    • 自分がプログラミングを始めた10年くらい前は、SQLiteはクライアント側に組み込むDBであり、スマホアプリとかデスクトップアプリ側にだけ持たせるDBというイメージだった。もしくはRailsとかLaravelのローカル環境だけで使うDBだった
      • 時代は変わったというのを感じた
  • 使用言語による無料枠の差
    • PHPやTypeScriptで実装されているサービスはランタイムが必要であり、そのため無料枠を広げづらい
      • 純粋に性能でコンパイル型の言語に負けるという面もあるのだろう
    • 一方RustやGoで書かれてWasmとかバイナリでデプロイしているサービスは性能が良いし個別のランタイムが必要ない
      • そのため低コストでエッジで動かしやすい
      • 無料枠が広げやすい=個人開発者フレンドリー
  • LL系言語かコンパイル型言語か
    • 昨今はサブスク全盛であり、サブスク前提のサービスでは少数の課金ユーザーがサービスを支えるため、ちょっと前のWeb広告の時代のように大量のリクエストを頑張って捌く必要性が薄く、むしろ課金ユーザーのために生産性の高いLL系言語でどんどん機能を追加すべき、という時代だと認識している
    • ある意味流行が回帰している
    • しかし、少なくとも開発者向けのツールやサービスでは、RustやGoで書かれたプログラムが、ランタイム不要かつ圧倒的に速いという優位性を活かして台頭してきた
    • 今回の比較でもSaaSの無料枠や有料プランの安さにおいてこの優位性の強さを感じた
    • 性能が高いということはコストが安いということであり、コストの安さは開発者に優しい。速いという意味ではAIにも優しい
    • 今後はSaaSを作るうえでも、いかに安く済ませるか、という視点が重要になりそうな予感を感じた。サーバーレスかつ性能が出せる言語で書けば、無料枠を広く、有料プランを安く提供できる。コストの安さでユーザーをロックインできれば勝ちである
      • 実際、自分にとってはいくら多機能でもSupabaseが真っ先に選択肢から外れたように、機能豊富でも10倍以上も値段の高いSaaSは選択肢から外れる可能性が高い

Rustは難しくてもやっぱり勉強しておくべきかも。。

Discussion