Skip to content

Commit b4e4cdf

Browse files
authored
Merge pull request #326 from mziyut/create-pull-request/patch-pull-articles
Pull articles
2 parents b34798f + 85f877f commit b4e4cdf

File tree

2 files changed

+121
-2
lines changed

2 files changed

+121
-2
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
---
2+
title: Remix v2 から React Router v7 に アップグレードする
3+
tags:
4+
- JavaScript
5+
- Node.js
6+
- Remix
7+
- ReactRouter
8+
private: false
9+
updated_at: '2025-06-30T22:07:05+09:00'
10+
id: e02ffd701834f8ce4964
11+
organization_url_name: foundingbase
12+
slide: false
13+
ignorePublish: false
14+
---
15+
16+
## はじめに
17+
18+
- 2024年11月22日 に React Router v7 がリリースされた
19+
- Remix の開発チームが React Router の開発と合流したことによって Remix v2 の移行先は React Router v7 になった
20+
- 最近 Remix v2 から React Router v7 への移行を行ったのでそのまとめです
21+
22+
https://remix.run/blog/incremental-path-to-react-19
23+
24+
## アップグレードの前に
25+
26+
- Remix v2 の最新バージョンまで上げておきましょう
27+
- feature_flag は有効にしておきましょう
28+
29+
https://remix.run/docs/en/main/start/future-flags
30+
31+
基本的に日頃から Remix のバージョンを上げて、 追加される feature_flag を有効にしていれば(一部を除き)スムーズに更新することができます。
32+
33+
## アップグレード手順
34+
35+
基本的に React Router の Upgrading from Remix のページに記載の手順で実施していけば問題ありません。
36+
加えて、 `codemod` を実行することで基本的な書き換えも実施してくれます。
37+
38+
https://reactrouter.com/upgrading/remix
39+
40+
ほぼドキュメント通りなので 個別対応が必要だったファイルアップロード周りについて記載します。
41+
42+
### unstable_createMemoryUploadHandler 及び unstable_parseMultipartFormData の置き換え
43+
44+
Remix v2 のときは下記のように `unstable_createMemoryUploadHandler``unstable_parseMultipartFormData` を使ってファイルを扱っていました。
45+
46+
```tsx
47+
import {
48+
type ActionFunctionArgs,
49+
unstable_createMemoryUploadHandler,
50+
unstable_parseMultipartFormData,
51+
} from '@remix-run/cloudflare';
52+
53+
export async function action({ context, request }: ActionFunctionArgs) {
54+
55+
const uploadHandler = unstable_createMemoryUploadHandler();
56+
const formData = await unstable_parseMultipartFormData(request, uploadHandler);
57+
const file = formData.get('file') as File;
58+
```
59+
60+
それを 新たにライブラリを追加し、処理を置き換えていきます。
61+
62+
```zsh
63+
npm i @mjackson/form-data-parser
64+
```
65+
66+
https://www.npmjs.com/package/@mjackson/form-data-parser
67+
68+
```diff_tsx
69+
import {
70+
type ActionFunctionArgs,
71+
unstable_createMemoryUploadHandler,
72+
unstable_parseMultipartFormData,
73+
- } from '@remix-run/cloudflare';
74+
+ } from 'react-router';
75+
+ import { parseFormData } from '@mjackson/form-data-parser';
76+
77+
export async function action({ context, request }: ActionFunctionArgs) {
78+
79+
- const uploadHandler = unstable_createMemoryUploadHandler();
80+
- const formData = await unstable_parseMultipartFormData(request, uploadHandler);
81+
+ const formData = await parseFormData(request);
82+
const file = formData.get('file') as File;
83+
```
84+
85+
上記で置き換えは完了です。
86+
87+
### `load-context.ts` の置き換え (`@remix-run/cloudflare` に限る)
88+
89+
React Router v7 の template を確認すると `load-context.ts` 及び `server.ts`に記述されていた内容が `workers/app.ts` に変更されていました。
90+
91+
https://github.com/remix-run/react-router-templates
92+
93+
https://github.com/remix-run/remix/blob/6e570942ee655342d13370abb8945677be170c12/templates/cloudflare-workers/server.ts#L1-L37
94+
95+
https://github.com/remix-run/remix/blob/6e570942ee655342d13370abb8945677be170c12/templates/cloudflare-workers/load-context.ts#L1-L22
96+
97+
特別な理由も無いのでこちらも `workers/app.ts` に変更します。
98+
99+
https://github.com/remix-run/react-router-templates/blob/744998414e03240be6eb90195638c428aa8df4fc/cloudflare/workers/app.ts#L1-L23
100+
101+
^ ファイルをベースに `load-context.ts` 及び `server.ts` で記載していた内容を移行します。
102+
移行が終わったら、`wrangler.toml` の main の定義を変更してあげれば終わりです。
103+
また、 `wrangler.toml``wrangler.jsonc` に変更されていたので変更したい場合は変更してあげてください。
104+
105+
```diff_toml
106+
- main = "./server.ts"
107+
+ main = "./workers/app.ts"
108+
```
109+
110+
## 最後に
111+
112+
日頃からバージョンアップしていたことで Remix に関する書き換えはほぼ発生しませんでした。(大事)
113+
ただ、依存するライブラリの変更、自動修正されない細かな変更は対応が必要なのでプロジェクトで何を使っているかどのように影響するか等頭に入れて取り掛かるとスムーズに進むのではないでしょうか?
114+
115+
## References
116+
117+
https://reactrouter.com/upgrading/remix
118+
119+
https://reactrouter.com/how-to/file-uploads

qiita/public/f85cdfac702e4dea5aee.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ tags:
77
- Node.js
88
- ESLint
99
private: false
10-
updated_at: '2024-12-03T07:03:53+09:00'
10+
updated_at: '2025-06-30T21:22:08+09:00'
1111
id: f85cdfac702e4dea5aee
1212
organization_url_name: foundingbase
1313
slide: false
@@ -21,7 +21,7 @@ ESLint v9 から Flat Config がデフォルトとして扱われるようにな
2121

2222
ESLint v9 で従来の legacy ESLint configuration file format を使いたい場合は、 `ESLINT_USE_FLAT_CONFIG``false` に設定すれば利用可能ですが、 `@eslint/migrate-config` を利用すれば、簡単に移行することができます。
2323

24-
## 注意
24+
## 注意
2525

2626
`@eslint/migrate-config` は 2024/11 時点以下のファイルフォーマットのみ対応しています。
2727

0 commit comments

Comments
 (0)