Next.js for Drupalのv2.0.0が2025/2/11にリリースされました。
https://next-drupal.org/
https://next-drupal.org/blog/next-drupal-2-0
早速試してみたところ、BASE_PATHの取り扱いについて対応が必要だったので、備忘録です。
環境変数#
環境変数のサンプルは以下のようになっています。
この時、NEXT_PUBLIC_DRUPAL_BASE_URLにhttps://site.example.com/xxxのようなベースパスを含めた形で指定すると、APIのリクエストはhttps://site.example.com/jsonapi/などに送られ、リソースを正しく取得できませんでした。
エラーが発生しているgetResourceCollectionを確認したところ、問い合わせ先のURLを作成するbuildUrl関数において、new URL(path, this.baseUrl);が使用されていました。
ChatGPTに質問したところ、以下の回答が得られました。
new URL(path, this.baseUrl) を使用すると、path が絶対パス(/jsonapi など)だった場合、baseUrl のホスト部分のみが適用され、/xxx などのパスプレフィックスが無視されてしまいます。そのため、APIリクエストが /jsonapi/ に送信され、本来の https://site.example.com/xxx/jsonapi/ には届かなくなります。
ChatGPTにより、patch-package を使う方法が提案されました。以下、その回答です。
patch-package を使うと、node_modules 内のファイルにパッチを適用し、変更を維持できます。
package.json の scripts に以下を追加
node_modules/next-drupal/dist/index.js を直接編集(すでに変更済みの場合、このままでOK)
patches/next-drupal+<version>.patch というファイルが作成される。
- これで、
npm install をしても postinstall スクリプトが自動的にパッチを適用してくれる。
まとめ#
上記の対策により、Next.js 15のApp RouterとDrupal 11で、やりとりを行うことができました。
他にも良い方法があるかと思いますが、参考になりましたら幸いです。