前々からこの手のことを書きたいとは思ってたけど id:k0kubun さんの下記エントリに触発されて書きました。
tl;dr;
- HerokuやFirebaseを駆使すれば割と無料でいける
- 若干お金を払えばもっと選択肢は増える
個人アプリ開発歴
- 2001~2002年あたりから個人HPでアプリを公開。後にVectorにも公開
- アカウントは残ってるのでいまだにVectorからのレポートメールが毎月届いてます
- 2009年くらいから色々ウェブアプリを開発
- Google App Engine黎明期でおそらくGCPがまだなかった頃
前提
Heroku
メリット
- レコード数が少なければPostgreSQLが無料で使える
- 執筆時点で1万レコードまで無料 *1
- アドオンが充実しててRedisやMemcachedも小規模なら無料で使える
- 無料で使えるがクレジットカードの登録は必要
- git pushだけでデプロイできるお手軽さ
- デプロイスクリプトを作り込まなくていいのは嬉しい
- Herokuのコンソールから機微情報を環境変数としてセットできる
- 個人アプリをOSSとして公開する時に地味に助かるやつ
- Deploy to Herokuボタン があるのでgemみたいに個人アプリを他の人に気軽に配布できる
- 今だとDockerイメージで固めてDocker Hubとかで配布ってのもできるけど実行環境含めて配布できるのは強い
デメリット
- コールドスタートがあるのでRailsみたいに起動に時間のかかるアプリは不向き
- 東京リージョンはEnterpriseでしか使えないので日本国内からアクセスするようなウェブアプリの場合レイテンシの関係で不利。(Enterpriseじゃない普通のHerokuだとusかeuのみ)
特にPostgreSQL, Redis, Memcachedが無料で使えるので、業務でサーバサイドアプリを作っていてその延長で個人アプリも作ってみたいという場合にはとっつきやすいんじゃないでしょうか。
色々思うところはあるんだけどHeroku便利なんすよね、、、
GCP
Google App Engine
- Herokuと同じくらいにできたPaaS老舗
- 国内外問わず他のPaaSも色々できたんだけどことごとくサービス終了したのでHerokuとAppEngineしか勝たんって思ってる
メリット
- オートスケールがあるのでアクセス数に応じてインスタンスが自動で増減する
- ただしインスタンスが増えるとその分費用も発生する
- 追記:一応HerokuにもDynoのオートスケーリングはあるんだけど、Performanceプラン以上(1 Dyno辺り最低月250ドル)じゃないと使えないので個人アプリだと厳しいのではと思います。(FreeプランかStandardプランだとコンソールから手動でのDyno数変更のみ)
- 静的ファイルはサーバサイドアプリとは別のフロントエンドサーバから配信する設定にできる
- Herokuだと静的ファイルもDynoから
配信されてた気がする。(超自信ない)配信されている - 追記:補足があったので追記 https://twitter.com/zundan/status/1522488550452719616
- Herokuだと静的ファイルもDynoから
デメリット
AWSでやろうとするとApp Runnerなんだけど完全無料でやるのは難しいんじゃないかなあ、、、
Cloud Run
- DockerイメージをCIでビルドする手間を惜しまなければ全然あり
- Cloud Runの無料枠も潤沢にあるので個人アプリ開発で使うには十分なんだけど、ビルドしたDockerイメージを置くContainer Registryの費用が発生するので若干の費用は発生すると思います
Firebase
- https://primap.web.app/ をFirebase Hostingで動かしてるんだけど爆速でいい
- 以前Fastlyが世界的な障害になった時にプリマップも落ちていたのでFirebase HostingのバックエンドはFastlyだと思います。どおりで速いわけだ
- その他Cloud FunctionsやFirestore辺りも使ってます
プリマップのアーキテクチャについては下記エントリに詳しく書いてます。
Cloud Functions
- 画面が不要だとFaaSでもいいですね
- 個人Slackで運用してる雑ボット類は数年前まではVPSで動かしてたんですが、サーバの管理するのが面倒になって今は全部Cloud Functionsで動かしてます
- 無料枠が潤沢なので個人アプリで使うには十分
- AWSだとLambdaに相当し、Lambdaも無料枠が潤沢にある
- Secret Managerにある機微情報をFunctionに設定することができるんだけど、Functionの呼び出し毎にSecret Managerの読み取り費用が発生するためそこだけ注意
- 無料枠を超えたら1万回アクセス毎に月0.03ドル *2
- 実はCloud FunctionsのデプロイでもバックエンドでContainer Registryが使われている関係でGCSの費用が発生します
- 規模にもよるけど自分が運用してるアプリだと月0.01~0.05ドルくらい
Cloud Functionsで思い出したけど先日Ruby 3.0サポートがGAになってますね
GitHub Pages
- 静的ファイルしか使わないんであればGitHub Pages最強
GitHubにコミットされたファイルしかGitHub Pagesで公開できないので、mainブランチが更新された時にGitHub Actionsでビルドしてgh-pagesブランチにcommitしてpushするひと手間があるhttps://github.com/marketplace/actions/github-pages-action を使えば楽はできるんだけど、gh-pagesブランチの存在がたまに気になる、、、
2022/8/14追記
GitLab Pages同様にブランチにコミットしなくてもGitHub Pagesにデプロイできるようになった!!!!(超便利)
GitLab Pages
- GitHub PagesのGitLab版なんだけど、こっちはGitLab CIのartifactをGitLab Pagesで公開するためGitHub Pagesのようなcommit & pushが不要なので嬉しい
2022/5/7 17:00追記:ブコメレス
とても参考になる。1つだけ、tldrがtrdrになってたのが気になった。
指摘ありがとうございます。typo修正しました