🧠パフォーマンスだけを理由に意味論や可読性を捨てるべきではない理由2025/07/16に公開2025/09/053件JavaScriptReactTypeScriptperformance設計techGitHubで編集を提案DiscussionHoney324ヶ月前に更新 ui/ : 「パッケージ」的じゃないので、index.ts 不要 card/ : 「パッケージ」的なので、index.ts を使って良い index.ts card.ts // 🔴 DON'T import { Button, Card, Modal } from "#/ui"; // ✅️ DO import { Card } from "#/ui/card"; features/books/details : 書籍詳細ページ。「パッケージ的」index.ts が適している。 index.ts : バレル #/app/books/[bookId]/page.tsx import { BookDetailsPage } from "#/features/books/details" 個人的に、barrel export は、「カプセル化のためのパッケージ」としてのディレクトリに用意するのは問題ないですが、 そうでないようなディレクトリについては、用意する必要がない、むしろ、以下のような パフォーマンスではなく可読性の観点での デメリットがあるから避けたほうが良いと思います。 無駄にコードジャンプが増える ツリーシェイキングが失敗するかどうか気にするのが億劫 このように、ファイル間の依存関係を無用に複雑することは、バンドル時の依存解決のしくみに則っている RSC とは相性が悪く、保守性を著しく下げる原因になると思います。 実際に、それによってトラブルシューティングしあぐねている方に出会ったことがあります。 https://qiita.com/kay-adamof/items/8d7324810dd1b051d373 じょうげん4ヶ月前ご意見ありがとうございます。 本論の意図としては、パフォーマンス面を理由にやらないのは間違いというものであり、barrel exportを全面的に採用すべきかどうかは議論の余地があると考えていました。 パッケージ的か、そうでないかでやるべきか判断が分かれるというのはその通りで、その都度判断するのが難しいという理由でしないというのは意味のある判断だと私も思います。 RSCを採用しているプロジェクトにおいても、clientとserverが入り乱れるようなモジュールがあるとしたら、それはbarrel exportを避けた方が良さそうですね。 Honey324ヶ月前たしかに、本文を見返しましたが、そうですね! (関係ないですが、「パッケージ的じゃないならバレルを使わない」ことについても、どこかにまとめておかないと…) 返信を追加
Honey324ヶ月前に更新 ui/ : 「パッケージ」的じゃないので、index.ts 不要 card/ : 「パッケージ」的なので、index.ts を使って良い index.ts card.ts // 🔴 DON'T import { Button, Card, Modal } from "#/ui"; // ✅️ DO import { Card } from "#/ui/card"; features/books/details : 書籍詳細ページ。「パッケージ的」index.ts が適している。 index.ts : バレル #/app/books/[bookId]/page.tsx import { BookDetailsPage } from "#/features/books/details" 個人的に、barrel export は、「カプセル化のためのパッケージ」としてのディレクトリに用意するのは問題ないですが、 そうでないようなディレクトリについては、用意する必要がない、むしろ、以下のような パフォーマンスではなく可読性の観点での デメリットがあるから避けたほうが良いと思います。 無駄にコードジャンプが増える ツリーシェイキングが失敗するかどうか気にするのが億劫 このように、ファイル間の依存関係を無用に複雑することは、バンドル時の依存解決のしくみに則っている RSC とは相性が悪く、保守性を著しく下げる原因になると思います。 実際に、それによってトラブルシューティングしあぐねている方に出会ったことがあります。 https://qiita.com/kay-adamof/items/8d7324810dd1b051d373 じょうげん4ヶ月前ご意見ありがとうございます。 本論の意図としては、パフォーマンス面を理由にやらないのは間違いというものであり、barrel exportを全面的に採用すべきかどうかは議論の余地があると考えていました。 パッケージ的か、そうでないかでやるべきか判断が分かれるというのはその通りで、その都度判断するのが難しいという理由でしないというのは意味のある判断だと私も思います。 RSCを採用しているプロジェクトにおいても、clientとserverが入り乱れるようなモジュールがあるとしたら、それはbarrel exportを避けた方が良さそうですね。 Honey324ヶ月前たしかに、本文を見返しましたが、そうですね! (関係ないですが、「パッケージ的じゃないならバレルを使わない」ことについても、どこかにまとめておかないと…) 返信を追加
じょうげん4ヶ月前ご意見ありがとうございます。 本論の意図としては、パフォーマンス面を理由にやらないのは間違いというものであり、barrel exportを全面的に採用すべきかどうかは議論の余地があると考えていました。 パッケージ的か、そうでないかでやるべきか判断が分かれるというのはその通りで、その都度判断するのが難しいという理由でしないというのは意味のある判断だと私も思います。 RSCを採用しているプロジェクトにおいても、clientとserverが入り乱れるようなモジュールがあるとしたら、それはbarrel exportを避けた方が良さそうですね。
Discussion
ui/: 「パッケージ」的じゃないので、index.ts 不要card/: 「パッケージ」的なので、index.ts を使って良いindex.tscard.tsfeatures/books/details: 書籍詳細ページ。「パッケージ的」index.ts が適している。index.ts: バレル個人的に、barrel export は、「カプセル化のためのパッケージ」としてのディレクトリに用意するのは問題ないですが、
そうでないようなディレクトリについては、用意する必要がない、むしろ、以下のような パフォーマンスではなく可読性の観点での デメリットがあるから避けたほうが良いと思います。
このように、ファイル間の依存関係を無用に複雑することは、バンドル時の依存解決のしくみに則っている RSC とは相性が悪く、保守性を著しく下げる原因になると思います。
実際に、それによってトラブルシューティングしあぐねている方に出会ったことがあります。 https://qiita.com/kay-adamof/items/8d7324810dd1b051d373
ご意見ありがとうございます。
本論の意図としては、パフォーマンス面を理由にやらないのは間違いというものであり、barrel exportを全面的に採用すべきかどうかは議論の余地があると考えていました。
パッケージ的か、そうでないかでやるべきか判断が分かれるというのはその通りで、その都度判断するのが難しいという理由でしないというのは意味のある判断だと私も思います。
RSCを採用しているプロジェクトにおいても、clientとserverが入り乱れるようなモジュールがあるとしたら、それはbarrel exportを避けた方が良さそうですね。
たしかに、本文を見返しましたが、そうですね!
(関係ないですが、「パッケージ的じゃないならバレルを使わない」ことについても、どこかにまとめておかないと…)