Closed16
Turborepo で Remix + Hono を試す

このスクラップについて
忘れそうなのでスクラップを作っておいて後から取り組もう。

はじめの一歩
コマンド
cd ~/workspace
npx create-turbo@latest turbo-remix-hono -m pnpm
cd turbo-remix-hono

アプリケーションパッケージの削除
コマンド
rm -rf apps/docs apps/web
pnpm i

Remix プロジェクトの作成
コマンド
cd apps
pnpm create cloudflare@latest frontend --framework=remix --experimental
- Initialize a new git repository? → No
- Install dependencies with pnpm? → Yes
- Do you want to deploy your application? → No

Hono プロジェクトの作成
コマンド
pnpm create hono@latest backend -p pnpm -t cloudflare-workers

package.json の編集
apps/backend/package.json(追記変更)
{
"name": "@repo/backend",
"exports": {
".": "./src/index.ts"
},
}
apps/frontend/package.json(追記変更)
{
"name": "@repo/frontend",
"dependencies": {
"@repo/backend": "*"
}
}
コマンド
pnpm i

Hono のインストール
コマンド
cd apps/frontend
pnpm install hono

コーディング
apps/backend/src/index.ts
import { Hono } from "hono";
import { cors } from "hono/cors";
const app = new Hono().use(cors()).get("/", (c) => {
return c.text("Hello Hono!");
});
export default app;
export type AppType = typeof app;

なんか上手くいかない時
VS Code を再起動すると直ることもある。

コーディング
apps/frontend/app/routes/_index.ts
import type { MetaFunction } from "@remix-run/cloudflare";
import type { AppType } from "@repo/backend";
import { hc } from "hono/client";
export const meta: MetaFunction = () => {
return [
{ title: "New Remix App" },
{ name: "description", content: "Welcome to Remix!" },
];
};
export default function Index() {
const onClick = async () => {
const client = hc<AppType>("http://localhost:8787");
const response = await client.index.$get();
const text = await response.text();
console.log(text);
};
return (
<div>
<h1>Turbo Remix Hono</h1>
<button onClick={onClick}>Test</button>
</div>
);
}

動作確認
Test ボタンをクリックしてコンソールに Hello Hono!
と表示されることを確認する

pnpm か npm か
npm だと Remix が起動できないケースがあったので、pnpm を使っておく方が安牌かも知れない。

deploy タスクの追加
turbo.json(追加分)
{
"tasks": {
"deploy": {
"dependsOn": ["^deploy"]
}
}
}

関係ないけど環境変数
Remix on Cloudflare Workers ではどうやって環境変数を取得すれば良いのかな?
とりあえず今わかっている方法は下記の通り↓
- wrangler.toml に [vars] セクションを追加
-
pnpm --filter frontend typegen
を実行 - loader 関数で context.cloudflare.env からアクセス可能

開発環境と本番環境で分ける
本番環境の値は wrangler.toml の vars セクションに書いておき、開発環境の値は .dev.vars ファイルに書いておけば良さそう。
機密性の高い情報については wrangler secret put
key` を使えば良さそうだ。
もっと細かく制御したい場合は environments の仕組みを使えば良さそうだ。

おわりに
まだほんの触りだけど TurboRepo を使って Remix Frontend と Hono Backend の 2 つのアプリからなるモノレポプロジェクトの作り方がわかったのでこれで終わりとしよう。
こちらを使いたかったが自分がやった時は動かなかったのと、まだ unstable なこともあるので、Remix 上で Hono が安定的に動かせるようになるまではこの構成で開発しよう。
このスクラップは2025/01/28にクローズされました