クイックスタート(5分)
このガイドでは、Remix アプリケーションを実行するために必要な基本的なプロセスをできるだけ早く理解できるようにお手伝いします。様々なランタイム、デプロイメントターゲット、データベースを持つスターターテンプレートが多数ありますが、ここでは基本的なプロジェクトを最初から作成していきます。
Remix プロジェクトを本格的に始める準備ができたら、コミュニティテンプレートから始めることを検討してください。これらには、TypeScript のセットアップ、データベース、テストツール、認証などが含まれています。コミュニティテンプレートのリストはRemix リソースページで見つけることができます。
インストール
バッテリー内蔵の Remix プロジェクトを初期化したい場合は、create-remix
CLIを使用できます:
npx create-remix@latest
ただし、このガイドでは CLI がプロジェクトをセットアップするために行うすべての作業を説明し、CLI を使用する代わりに以下の手順に従うことができます。Remix を始めたばかりの場合は、Remix アプリケーションを構成するすべての異なる部分を理解するために、このガイドに従うことをお勧めします。
mkdir my-remix-appcd my-remix-appnpm init -y
# ランタイム依存関係をインストールnpm i @remix-run/node @remix-run/react @remix-run/serve isbot@4 react react-dom
# 開発依存関係をインストールnpm i -D @remix-run/dev vite
Vite 設定
touch vite.config.js
Remix は Vite を使用するため、Remix Vite プラグイン用のVite 設定を提供する必要があります。以下は必要な基本設定です:
import { vitePlugin as remix } from "@remix-run/dev";import { defineConfig } from "vite";
export default defineConfig({ plugins: [remix()],});
ルートルート
mkdir apptouch app/root.jsx
app/root.jsx
は私たちがルートルート
と呼ぶものです。これはアプリケーション全体のルートレイアウトです。以下は任意のプロジェクトに必要な基本的な要素のセットです:
import { Links, Meta, Outlet, Scripts,} from "@remix-run/react";
export default function App() { return ( <html> <head> <link rel="icon" href="data:image/x-icon;base64,AA" /> <Meta /> <Links /> </head> <body> <h1>Hello world!</h1> <Outlet />
<Scripts /> </body> </html> );}
ビルドと実行
まず、プロダクションアプリケーションをビルドします:
npx remix vite:build
これで build
フォルダが表示されるはずです。このフォルダには、server
フォルダ(アプリケーションのサーバーバージョン)と client
フォルダ(ブラウザバージョン)が含まれており、いくつかのビルドアーティファクトが含まれています。(これらはすべて設定可能です。)
👉 remix-serve
を使用してアプリケーションを実行する
まず、remix-serve
がアプリケーションを実行できるように、package.json
でタイプをモジュールとして指定する必要があります。
{ "type": "module" // ...}
これで、remix-serve
を使用してアプリケーションを実行できます:
# ダッシュに注意!npx remix-serve build/server/index.js
http://localhost:3000を開いて hello world
ページが表示されるはずです。
node_modules
内の大量のコードを除いて、私たちの Remix アプリケーションはたった 1 つのファイルです:
├── app/│ └── root.jsx└── package.json└── vite.config.js
独自のサーバー
remix vite:build
によって作成された build/server
ディレクトリは単なるモジュールで、Express、Cloudflare Workers、Netlify、Vercel、Fastly、AWS、Deno、Azure、Fastify、Firebase などのサーバーで実行できます。
独自のサーバーをセットアップしたくない場合は、remix-serve
を使用できます。これは Remix チームによって維持されている express ベースのシンプルなサーバーです。ただし、Remix は独自のスタックを持てるように、任意の JavaScript 環境で実行できるように特別に設計されています。多くの(ほとんどの)本番アプリケーションは独自のサーバーを持つことが予想されます。詳細についてはランタイム、アダプター、スタックをご覧ください。
試しに、remix-serve
の使用を停止して、express に切り替えてみましょう。
👉 Express、Remix Express アダプター、および本番モードで実行するためのcross-envをインストール
npm i express @remix-run/express cross-env
# これは不要になりますnpm uninstall @remix-run/serve
👉 Express サーバーを作成
touch server.js
import { createRequestHandler } from "@remix-run/express";import express from "express";
// `remix vite:build`の結果は「単なるモジュール」であることに注意import * as build from "./build/server/index.js";
const app = express();app.use(express.static("build/client"));
// そしてあなたのアプリは「単なるリクエストハンドラー」ですapp.all("*", createRequestHandler({ build }));
app.listen(3000, () => { console.log("App listening on http://localhost:3000");});
👉 express を使用してアプリケーションを実行
node server.js
これで独自のサーバーを持つことができ、サーバーが持つ任意のツールを使用してアプリケーションをデバッグできます。たとえば、chrome devtools のNode.js 検査フラグを使用してアプリケーションを検査できます:
node --inspect server.js
開発ワークフロー
サーバーを常に停止、再ビルド、再起動する必要はありません。代わりに、Vite ミドルウェアモードを使用して開発中に Remix を実行できます。これにより、React Refresh(ホットモジュール置換)と Remix ホットデータ再検証を使用して、アプリケーションの変更にすぐにフィードバックを得ることができます。
まず、便宜上、package.json
に dev
と start
コマンドを追加します。これらはそれぞれ開発モードと本番モードでサーバーを実行します:
👉 package.json
にscripts
を追加
{ "scripts": { "dev": "node ./server.js", "start": "cross-env NODE_ENV=production node ./server.js" } // ...}
👉 Vite 開発中間ウェアをサーバーに追加
process.env.NODE_ENV
が "production"
に設定されている場合、Vite 中間ウェアは適用されず、代わりに通常のビルド出力を実行します。
import { createRequestHandler } from "@remix-run/express";import express from "express";
const viteDevServer = process.env.NODE_ENV === "production" ? null : await import("vite").then((vite) => vite.createServer({ server: { middlewareMode: true }, }) );
const app = express();app.use( viteDevServer ? viteDevServer.middlewares : express.static("build/client"));
const build = viteDevServer ? () => viteDevServer.ssrLoadModule( "virtual:remix/server-build" ) : await import("./build/server/index.js");
app.all("*", createRequestHandler({ build }));
app.listen(3000, () => { console.log("App listening on http://localhost:3000");});
👉 開発サーバーを起動
npm run dev
これで、アプリケーションをすぐに使用し、変更にすぐにフィードバックを得ることができます。試してみて、root.jsx
内のテキストを変更してみてください!
サーバーとブラウザーのエントリーポイントを制御する
Remix はデフォルトのマジックファイルを使用しますが、大多数のアプリケーションはこれらのファイルを処理する必要はありません。ただし、Remix のサーバーとブラウザーのエントリーポイントをカスタマイズしたい場合は、remix reveal
を実行してこれらのファイルをプロジェクトにダンプできます。
npx remix reveal
エントリーファイル entry.client を app/entry.client.tsx に作成しました。エントリーファイル entry.server を app/entry.server.tsx に作成しました。
まとめ
おめでとう!Remix を自分の履歴に追加できます!まとめると、以下のことがわかりました:
- Remix はアプリケーションを 2 つの部分にコンパイルします:
- 自分の JavaScript サーバーに追加するリクエストハンドラー
- ブラウザーのパブリックディレクトリ内の静的アセットのバンドル
- 自分のサーバーとアダプターを持ち、どこでもデプロイできます
- 内蔵 HMR を持つ開発ワークフローを設定できます
一般に、Remix は「大胆」です。わずかな時間のボイラープレートコードですが、自分のスタックを持つことができます。
次のステップは何ですか?