コードモッド
Codemodは、プログラム的にコードベースに対して実行される変換ツールです。これにより、すべてのファイルを手動で確認することなく、大量の変更を自動的に適用できます。
Next.jsは、APIが更新または非推奨になった際に、コードベースのアップグレードを支援するCodemod変換を提供しています。
使用方法
ターミナルで、プロジェクトのフォルダに移動(cd
)し、以下を実行します:
<transform>
と<path>
に適切な値を置き換えてください。
transform
- 変換名path
- 変換するファイルまたはディレクトリ--dry
試行モード。コードは編集されません--print
比較用に変更された出力を表示します
Codemods
15.0
アプリルーターのルートセグメント設定 runtime
値を experimental-edge
から edge
に変換
app-dir-runtime-config-experimental-edge
注意: このコードmodはApp Router専用です。
このコードmodは、ルートセグメント設定 runtime
の値 experimental-edge
を edge
に変換します。
例:
変換後:
非同期ダイナミックAPIへの移行
動的レンダリングにオプトインし、以前は同期アクセスをサポートしていたAPIが、現在は非同期になっています。この重大な変更の詳細は、アップグレードガイドをお読みください。
next-async-request-api
このコードmodは、現在非同期になった動的API(next/headers
のcookies()
、headers()
、draftMode()
)を、適切にawait
するか、該当する場合はReact.use()
でラップするように変換します。
自動マイグレーションが不可能な場合、コードmodは型キャスト(TypeScriptファイルの場合)またはコメントを追加し、手動でレビューおよび更新が必要であることを通知します。
例:
変換後:
ページ/ルートエントリ(page.js
、layout.js
、route.js
、またはdefault.js
)またはgenerateMetadata
/ generateViewport
APIで、params
またはsearchParams
プロパティへのプロパティアクセスを検出した場合、
呼び出し元を同期から非同期関数に変換し、プロパティアクセスをawait
しようとします。クライアントコンポーネントなどで非同期にできない場合は、React.use
を使用してプロミスをアンラップします。
例:
変換後:
補足: このコードmodが手動介入の可能性がある箇所を特定したものの、正確な修正を判断できない場合、コードにコメントまたは型キャストを追加して、手動で更新する必要があることを通知します。これらのコメントは @next/codemod を接頭辞とし、型キャストは
UnsafeUnwrapped
を接頭辞とします。 これらのコメントを明示的に削除するまで、ビルドはエラーになります。詳細を読む。
NextRequest
のgeo
およびip
プロパティを@vercel/functions
に置き換え
next-request-geo-ip
このコードmodは@vercel/functions
をインストールし、NextRequest
のgeo
およびip
プロパティを対応する@vercel/functions
機能に変換します。
例:
変換後:
14.0
ImageResponse
インポートの移行
next-og-import
このコードmodは、動的OGイメージ生成の使用のために、next/server
からのインポートをnext/og
に変換します。
例:
変換後:
viewport
エクスポートの使用
metadata-to-viewport-export
このコードmodは、特定のビューポートメタデータをviewport
エクスポートに移行します。
例:
変換後:
13.2
組み込みフォントの使用
built-in-next-font
このコードmodは@next/font
パッケージをアンインストールし、@next/font
インポートを組み込みのnext/font
に変換します。
例:
変換後:
13.0
Next Image インポートの名前変更
next-image-to-legacy-image
Next.js 10、11、または12アプリケーションのnext/image
インポートを、Next.js 13でnext/legacy/image
に安全に名前変更します。また、next/future/image
をnext/image
に名前変更します。
例:
変換後:
新しいImage Componentへの移行
next-image-experimental
next/legacy/image
から新しいnext/image
へ、インラインスタイルを追加し、未使用のプロパティを削除して、危険に移行します。
layout
プロパティを削除し、style
を追加します。objectFit
プロパティを削除し、style
を追加します。objectPosition
プロパティを削除し、style
を追加します。lazyBoundary
プロパティを削除します。lazyRoot
プロパティを削除します。
Link コンポーネントから <a>
タグを削除
new-link
Link コンポーネント内の <a>
タグを削除するか、自動修正できないリンクに legacyBehavior
プロパティを追加します。
例:
自動修正が適用できない場合、legacyBehavior
プロパティが追加されます。これにより、そのリンクに対して古い動作を続けて使用できます。
11
CRAからの移行
cra-to-next
Create React AppプロジェクトをNext.jsに移行します。Pages ルーターと、動作に合わせて必要な設定を作成します。最初はクライアントサイドのみのレンダリングを利用し、SSR中の window
使用による互換性の破壊を防ぎ、Next.js固有の機能の段階的な採用を可能にします。
この変換に関するフィードバックはこのディスカッションでお聞かせください。
10
React インポートの追加
add-missing-react-import
新しい React JSX変換を動作させるために、React
をインポートしていないファイルを変換します。
例:
以下のように変換:
9
無名コンポーネントを名前付きコンポーネントに変換
name-default-component
バージョン9以降。
Fast Refreshを確実に動作させるために、無名コンポーネントを名前付きコンポーネントに変換します。
例:
以下のように変換:
コンポーネントは、ファイル名に基づいたキャメルケースの名前になり、アロー関数でも動作します。
8
AMP HOCをページ設定に変換
withamp-to-config
withAmp
HOCをNext.js 9のページ設定に変換します。
例:
6
withRouter
を使用
url-to-withrouter
非推奨となったトップレベルページに自動的に挿入される url
プロパティを、withRouter
と、それが挿入する router
プロパティを使用するように変換します。詳細はこちら:https://nextjs.org/docs/messages/url-deprecated
例:
これは1つの事例です。変換され(テストされた)すべてのケースは、__testfixtures__
ディレクトリにあります。