2023年 技術スタックを考える

published: 2023-08-12

ちょっと作りたいアプリがあって、デプロイ先や利用するフレームワークを考えていたら煮詰まってきたのでまとめる。

インフラについて

まず、配信のしかたがたくさんある。まずランタイムの有無とその種類を考えたい。

  • 静的サイト(S3, Amplify, Cloudflare Pages)
  • V8ランタイム(Vercel, Cloudflare Workers)
  • コンテナベースランタイム(fly.io, Vercel, Lambda)
  • 全部入り(firebase, supabase)

静的サイト

これで完結するなら一番良い。 フレームワークには Astro や Next.js がある。

V8ランタイム

エッジで動いているもの。Cloudflare Workersが出した、ブラウザ機能をクラウドインフラに流用したもの。高速な起動が特徴。

起動デプロイともに速いが、実行時間やメモリ・バンドルサイズの拘束がきびしい。 CloudflareはWorkersに足りないところを補うようにKVやD1、R1等でCloudflareだけですべてが完結する世界観を目指しているよう?

デプロイがはやいので開発体験は良いが、Node.js ではないため動かないライブラリもある。 特にprismaの不在が悲しい。

コンテナベースランタイム

だいたいなんでも動かせる。デプロイは簡単だがビルドが遅かったりする。 fly.ioはDBも面倒を見てくれるので大変ありがたい。

また、コールドスタートが遅いためパフォーマンスに若干の問題がある。 フロントエンドを静的に配信、バックエンドをコンテナで動かし、APIの応答速度をUIインタラクションでごまかすのが簡単か。

全部入り

Webアプリをホスティングするために作られたサービス群。 Cloudflareが目指すところはこれのエッジ版っぽい。 ブラウザから直接DBを叩くような感覚。

これで困ることってあんまりないな。RDBが使えないこと、料金が高いらしいことくらい。

フレームワーク・ライブラリ

インフラが決まらなくちゃこっちも決まらん、こっちが決まらなくちゃインフラがも決まらないというのがつらい。

Next.js

React使うならNext.js使えという圧がある。 Vercelのスタンスが気に入らないが、細かいことに気を配らなくてもパフォーマンスが出るのも事実。ホスティングはVercelを選ぶのが丸い。が、どこへでもデプロイできる。

next/fontnext/images で細かな最適化まで面倒を見てくれるところが嬉しい。

設計周りで、Reactが先かNext.jsが先か的なところが好きになれない。 uhyoさんのスライドがわかりやすい。

Remix

Web仕様過激派。Railsの世界観。 ポストRailsを目指しているのかな。Next.jsのような lighthouse 特化感はない。

Prisma

バックエンドとフロントをまとめて作るうえで課題となるのがDBとのつなぎ込み。これを解決してくれる。 一番良いが、エッジで動かない。そのせいで世の中に苦しみが存在する。

まとめ

Remix on Cloudflare Workers + D1 が良さそう。ORMが課題。 もしくはフロントをAstroで作ってfly.ioでホスティングする。 どっちのリポジトリにもprismaを入れてしまい、フロントでは型情報だけ利用する。データフェッチで as を使うので型安全ではないが実用上さほど問題にならないのでは。