Text
Page: 1
バニラJS開発 ライブラリー事情 結城洋志 aka Piro github.com/piroor x.com/piro_or 株式会社クリアコード バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3
Page: 2
活動1:シェルコマンド解説 漫画 バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3
Page: 3
活動2:Firefoxアドオン Tree Style Tabなど バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3
Page: 4
Firefox アドオンを バニラJSで
Page: 5
なんでバニラJS? 昔のFirefoxアドオンは 「動的なパッチ」だった ✓ Firefox本体のスクリプトの 名前空間に変数や関数を注入 ✓ 静的解析しにくい ✓ 下手にライブラリーを使うと 名前空間汚染でFirefoxが壊れる バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3
Page: 6
なぜライブラリー自作?(1) ✓ 値の型を自動判別して nsIPrefBranchの適切な メソッドを呼んで…… ✓ nsITimerのインスタンス作って nsIObserverとして自身を登録し 指定秒数でコールバックを…… ニッチすぎて既存の物が無い バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3
Page: 7
なぜ自作?(2-1) 例:メニューUI ✓ キーボードで操作できない (jQueryUI) ✓ キーボード操作の動作が怪しい (React MUI) バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3
Page: 8
なぜ自作?(2-2) ✓ 欲しいのはただ「OSのUIと同じ 振る舞いの階層メニューUI」 ✓ キーボード操作、階層表示、 アクセスキー…… ✓ XULでは<menu>と書くだけで できていたのに…… ✓ Mozillaの頑張りで目が肥えて 市井のライブラリーでは 満足できない体に バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3
Page: 9
それでライブラリー自作 ✓ わりと小規模 ✓ webextensions-lib-configs:619行 ✓ webextensions-lib-menu-ui:994行 ✓ 実装は1ファイル完結が多い ✓ 他のライブラリーに非依存 ✓ Firefox専用だからpolyfillも不要 ✓ パッケージマネージャーいる? バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3
Page: 10
ていうか…… 採用しても早死にされそうで不安 バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3
Page: 11
そんなライブラリーの使い方 ✓ Gitのサブモジュール git submodule add <URL> submodules/<name> バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3
Page: 12
ビルド・パッケージング時 ✓ Makefileのmake rule中で ファイルをコピーするだけ xpi: cp submodules/webextensions-lib-configs/Configs.js extlib/ zip -r -9 treestyletab.xpi manifest.json ... extlib ✓ コピー後のファイルは .gitignore、.eslintignoreで 除外 バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3
Page: 13
ライブラリーのロード ✓ <script src="..."> で 同じ名前空間にロード ✓ または、ES Modulesのimport ✓ コピー後に小加工して両対応 xpi: cp submodules/webextensions-lib-configs/Configs.js extlib/ echo 'export default Configs;' >> extlib/Configs.js ... バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3
Page: 14
どうする のが正解 なんです か?
Page: 15
ちなみに、今の Firefoxアドオン開発 ✓ Chromiumと同様のモデル (WebExtensions) ✓ 名前空間が完全に分離された ✓ ライブラリも安全に読み込める ✓ みんなTypeScriptで書いてる 今さらバニラJSの必要性は皆無 (オチ) バニラJS開発 ライブラリー事情 Powered by Rabbit 3.0.3