プロジェクトテンプレート¶
プラグインには本番環境を想定した 16 個のプロジェクトテンプレートが同梱されており、単なる "Hello World" ではなくプロダクション形状の ReScript アプリをスキャフォールドします。各テンプレートはモダンなツーリング (pnpm/npm/yarn 対応、ESM、該当箇所で Vite+、GitHub Actions CI) を備えた動作するビルド可能なプロジェクトで、2 日目によくある質問「次はどう追加するのか?」に答えるドキュメントが付属します。
ウィザードを開く¶
IntelliJ IDEA で File → New → Project…
左側のリストから ReScript を選択
テンプレートとパッケージマネージャを選択
Create をクリック
ターミナルから npm create rescript@latest を実行しても、IDE なしで同じテンプレートセットを利用できます。
カテゴリ: Basic¶
Args (argv パース) と Files (node:fs/promises) モジュールを備えた最小限の ReScript + Node.js スターター。ブラウザ以外で動作する ReScript プロジェクトの最小限のリファレンスとして便利です。
Node.js
モジュール単位の Vitest スイートと fetchWithTimeout (AbortController) を備えた分割モジュール構成ライブラリ (Index、ListUtils、Fetcher)。pnpm publish で npm に公開できる状態です。
Node.js テスト
独自の Args パーサーと Commands/ ディレクトリを持つサブコマンドディスパッチャ (greet、init)。重いフレームワークなしで CLI を成長させる方法を示します。
Node.js
カテゴリ: Frontend¶
Vite+ を使用したシングルページ React アプリ。フォーム、useState、fetch('/api/greet') の往復 (オフラインフォールバック付き) を備えます。再利用可能な fetch ラッパーとして src/Api.res を同梱しています。
Vite+ pre-1.0
Server Component (app/page.tsx)、Client Component (app/client/GreetForm.tsx)、Route Handler (app/api/greet/route.ts) を備えた App Router。ReScript コンポーネントは genType 経由で公開されます。
genType
preload.cjs + contextBridge + ipcMain.handle を使用したデスクトップアプリ。src/Electron.res が公開された electronAPI をバインドし、レンダラープロセスの ReScript コードからシステム情報を取得できます。
デスクトップ
インタラクティブな Todo リスト (useState + TextInput + Button + FlatList) を備えた Expo マネージドアプリ。src/ReactNative.res が RN のコアコンポーネントセットをラップしており、バインディングを拡張すれば機能を追加できます。
モバイル
Android Studio / Xcode を直接利用するユーザー向けの bare-workflow React Native テンプレート。JS/TS + ReScript の表層と、.res.mjs を解決する metro.config.js のみを同梱しており、ネイティブプロジェクトは生成後に @react-native-community/cli で作成します。
モバイル Bare workflow
カテゴリ: Backend¶
Hono + Drizzle (SQLite) + Zod + @hono/zod-openapi に /docs の Scalar UI を組み合わせた構成。完全な users CRUD (src/Routes/Users.res)、drizzle-kit によるマイグレーション、/openapi.json 仕様を同梱しています。
REST OpenAPI SQLite
graphql-yoga を /graphql でホストし、GraphiQL を内蔵した Hono。SDL は src/schema.graphql、リゾルバは src/Resolvers/Users.res、永続化は Drizzle に配置されています。人間向けドキュメントは pnpm docs:graphql で生成します。
GraphQL SQLite
カテゴリ: Serverless¶
wrangler.jsonc と、GREETINGS バインディングを用いた KV 裏付けの greetings エンドポイント (POST/GET)。src/Kv.res が KV API をバインドしており、Durable Objects や R2 に拡張できます。
Edge
POST /orders (JSON body) と GET /orders/:id (パスパラメータ) を備えた API Gateway 向けハンドラ。README には @aws-sdk/lib-dynamodb を使った DynamoDB レシピを含みます。
サーバーレス
PORT 環境変数の読み込み、POST /echo ルート、Dockerfile を備えたコンテナ化された Hono サービス。README には @google-cloud/cloud-sql-connector を使用した Cloud SQL レシピを含みます。
コンテナ
カテゴリ: Full-Stack¶
packages/shared、packages/server (Hono + Drizzle)、packages/client (Vite+/React) を持つ pnpm/npm/yarn ワークスペース。型は workspace プロトコル経由で @<project>/shared から両側へ流れます。
ワークスペース 共有型
Monorepo の単一パッケージ版: 1 つの package.json、src/{shared,server,client}、Hono + Drizzle バックエンド、Vite+/React クライアント、開発時は concurrently、/api/* は Vite+ プロキシ。
単一パッケージ 共有型
rescript-x (JSX をサーバ側でレンダリング) と HTMX によるクライアントインタラクションで構築するサーバ駆動型 Web アプリ。hx-post で増減する Counter と、zod または sury で入力を検証する Todo フォームを同梱。Bun + Vite 上で動作します。
Bun 必須 HTMX サーバ駆動
どのテンプレートを選ぶべきか?¶
シチュエーション |
テンプレート |
|---|---|
ReScript を初めて試したい |
Basic |
再利用可能な npm パッケージを書きたい |
npm Library |
CLI ツールを構築したい |
CLI Tool |
React SPA が必要 |
Vite+ + React |
SSR / Server Components / SEO が必要 |
Next.js |
デスクトップアプリを構築したい |
Electron |
モバイルアプリを構築したい |
React Native |
型付きドキュメントを備えた REST API が必要 |
Hono (REST) |
GraphQL API が必要 |
Hono + GraphQL |
Cloudflare のエッジにデプロイしたい |
Cloudflare Workers |
AWS Lambda にデプロイしたい |
AWS Lambda |
GCP にコンテナをデプロイしたい |
Google Cloud Run |
複数のパッケージで型を共有したい (スケールしやすい) |
Monorepo |
バックエンド + フロントエンドを 1 パッケージにしたい (シンプル) |
Full-Stack |
Bun 上で HTMX を使ったサーバレンダリング HTML を書きたい |
res-x (Bun 上の HTMX) |
Tip
上の表の各行は、生成されるレイアウト、依存関係、主要ファイル、npm スクリプト、2 日目以降の拡張ポインタを解説したテンプレートごとの詳細ページにリンクしています。ページ下部の toctree (または左サイドバーの "Project Templates" セクション) から目的のページに直接ジャンプできます。
2 日目のレシピ¶
生成したプロジェクトを拡張する必要があるとき、以下のレシピがテンプレート README の先を補完します:
Hono エンドポイントの追加 — ルート、バリデーション、共有型の追加
GraphQL リゾルバの追加 — スキーマの拡張とドキュメントの再生成
Drizzle のセットアップ — スキーマ変更、マイグレーション、Turso
OpenAPI ドキュメントの追加 — Scalar UI と Zod スキーマの配線
Vite+ に関する注意¶
Vite+ ベースのテンプレート (Vite+ + React、Monorepo クライアント、Full-Stack) は vite-plus と @voidzero-dev/vite-plus-core を pre-1.0 バージョンに固定しています。アップグレード後にコマンドが壊れた場合は、vite.config.mjs の vite-plus を vite に置き換え、vp スクリプトを vite に変更して従来の Vite にフォールバックしてください。