Slide 1

Slide 1 text

バレルファイル 使っていいときわるいとき @berlysia / meguro.es #29

Slide 2

Slide 2 text

結論 絶対一緒に使うやつはバレルファイルで公開していい ちょっとしか使わないならバレルは避けろ(裏技はある) 循環参照はLintとかで潰しておけ

Slide 3

Slide 3 text

バレルファイル / Barrel files 他のファイルのexportを まとめて再exportする ファイルのこと。

Slide 4

Slide 4 text

よく見るパターン utilityを束ねてるやつ componentを まとめてるやつ・隠蔽してるやつ

Slide 5

Slide 5 text

最近いろいろ言われがち ● Barrel files and why you should STOP using them now - DEV Community ● Speeding up the JavaScript ecosystem - The barrel file debacle ○ 中身はほとんど「バレルファイルをやめろ」 ● A practical guide against barrel files for library authors - DEV Community ● Please Stop Using Barrel Files | TkDodo's blog ○ ライブラリのエントリファイルならいいんじゃないといってる ● eslint-plugin-no-barrel-filesを導入してBarrel filesをやめた話 | PR TIMES 開発 者ブログ

Slide 6

Slide 6 text

何がそんなにダメなのか ● 循環参照を起こしやすい ● 必要ないファイルを読み込んでしまう

Slide 7

Slide 7 text

循環参照ってどういうことよ

Slide 8

Slide 8 text

必要ないファイルを読み込んでしまう ざっくりふたつにわかれる ● バンドルしない場合 ○ ブラウザ、Node.js、Deno、Bun、…… ○ Viteの開発モードみたいなやつ ■ ● バンドルする場合 ○ webpack、Rollup、esbuild、Rolldown、……

Slide 9

Slide 9 text

バンドルしない場合 barは読み込まれますか?

Slide 10

Slide 10 text

バンドルしない場合 barは読み込まれますか?

Slide 11

Slide 11 text

だから これがやばい

Slide 12

Slide 12 text

ディープインポートが好まれる

Slide 13

Slide 13 text

Deferring Module Evaluation / Stage 2.7 中身触るまで評価されない提案

Slide 14

Slide 14 text

バンドルする場合 ✨Tree Shaking✨ だけで終わるならこんなに嫌われてない

Slide 15

Slide 15 text

どうなる? どうなってほしい? barに副作用

Slide 16

Slide 16 text

どうなる? どうなってほしい? barrelに副作用

Slide 17

Slide 17 text

Tree Shakingでよく書くやつ ● package.json の sideEffects: false ○ 「副作用がないからTree shakingしていいよ!」とバンドラは解釈する ○ ライブラリでよく使うやつ ■ 副作用があるライブラリでこれをやると信用して副作用ごと消える

Slide 18

Slide 18 text

Next.jsが頑張っている

Slide 19

Slide 19 text

(記事を読む限り)こう

Slide 20

Slide 20 text

たどりつきたい結論 絶対一緒に使うやつはバレルファイルで公開していい ちょっとしか使わないならバレルは避けろ(裏技はある) 循環参照はLintとかで潰しておけ

Slide 21

Slide 21 text

一緒に使うならバレルでいい!

Slide 22

Slide 22 text

ちょっとしか使わないならやめとけ!

Slide 23

Slide 23 text

バンドラー向けの裏技 package.jsonをおく

Slide 24

Slide 24 text

結論 絶対一緒に使うやつはバレルファイルで公開していい ちょっとしか使わないならバレルは避けろ(裏技はある) 循環参照はLintとかで潰しておけ むやみやたらにやめなくていい

Slide 25

Slide 25 text

おまけ)ESMのときにフォルダを参照するやつ

Slide 26

Slide 26 text

で、誰 ● berlysia ○ Web engineer (mainly frontend) ○ 妄想を現実にすることをしている ● 株式会社ドワンゴ 教育事業 ○ Webフロントをやる人 ○ Webフロントのためにいろいろやる人 ● TSKaigiの中の人 ○ TypeScriptのカンファレンス TSKaigi 2025 ○ 5月に開催するのでよろしくね ■ CfP募集中! まってま〜す ■ 締切は明日まで!