Web Application Frameworks#
Webアプリ開発に使われるフレームワークについて
Ruby on Rails#
RubyのWebフレームワーク。2000年代は特に人気だった。 MVCアーキテクチャで、PHPのLaravelやPythonのDjangoなど他言語のフレームワークへ強い影響を与えた
コンセプト
Convention over Configuration(設定より規約):設定ファイルのデフォルト値が重視され、規約(設定のデフォルト値)に従って作るとコード量を大きく節約できる設計
RESTful:URIはRESTに従って設定される
Next.js#
2024年現在圧倒的シェアを持つJavascriptのフレームワーク(State of JavaScript 2024: Meta-Frameworks)。
Next.jsのhosting#
Vercel: https://vercel.com/
AWSやCloudflareもFaaSにNextjsを動かすadapterを提供している
シンプルな使い方なら問題なさそうだがそれなりの規模のアプリだと妙なところでエラーになったりして難しい部分もある
Remix (React Router)#
RemixはJavascriptのWebフレームワークで、PESPA(Progressively Enhanced SPA) と呼ばれるタイプのバックエンドとフロントエンドの両方を扱うアーキテクチャになっている。
Remixは2024年にReact Routerへ統合された
React Router v7 brings everything you love about Remix back into React Router proper. We encourage all Remix v2 users to upgrade to React Router v7. https://remix.run/blog/react-router-v7
公式の短いTutorial: Quick Start (5m) | Remix
公式のTutorial: Tutorial (30m) | Remix
Remixの考え方
レンダリング時にデータを取得する(GETする)ための関数。
サーバ側で実行される ので、SPAでありがちな「クライアント側からデータ取得のためAPIを叩くときにAPI-keyをどう秘匿するか」みたいな問題が解決される。
ページごとに定義して使う。例えば、一覧ページ(例えばposts.tsx)では配列Post[]を返すloader()を定義し、詳細ページ(posts.$postId.tsx)では1つの要素(Post)を返すloader()を定義し、自分のcomponentの中で使う
// loaderの例
import { json } from "@remix-run/node";
export const loader = async () => {
const response = await fetch("https://jsonplaceholder.typicode.com/posts?_limit=5");
const posts = await response.json();
return json({ posts });
};
export default function App() {
const { posts } = useLoaderData<typeof loader>()
データを更新する(POST, DELETE, PUT, PATCH)ときに使う関数
親ルート内において、子ルートがレンダリングされる場所を示すために使われるコンポーネント
import { Outlet } from "@remix-run/react"
export default function App() {
return <Outlet />
}
Remixの評判
https://x.com/kenn/status/1816500405150609717
Railsから移行しての感想
Hosting
SPA モード / React Router
SPAの歴史とRemix SPAモードという到達点 / the SPA’s chronicle reaches to remix - Speaker Deck
いろいろなフレームワークがざっくりまとめられている