Slide 1

Slide 1 text

Copyright © NIFTY Corporation All Rights Reserved.
 フロントエンドを始める前に どうしていっぱいツールがあるの? 山田良介 会員システムグループ

Slide 2

Slide 2 text

Copyright © NIFTY Corporation All Rights Reserved.
 自己紹介 2
 名前
 山田 良介 所属
 会員システムグループ 第1開発チーム 担当
 2018~2020 メールストレージ運用 2020-2024 Web検索サービス運用 2021 マイ ニフティ開発 分野


Slide 3

Slide 3 text

Copyright © NIFTY Corporation All Rights Reserved.
 はじめに 00 3


Slide 4

Slide 4 text

Copyright © NIFTY Corporation All Rights Reserved.
 フロントエンドを始めようとした私 4
 そろそろフロント覚えなあかんな まずは開発環境作らな さてやり方はっと...

Slide 5

Slide 5 text

Copyright © NIFTY Corporation All Rights Reserved.
 他言語経験者のイメージ 5
 コンパイラ(?) ↑ こいつがわかればいいんだろう? ソースコード JavaScript

Slide 6

Slide 6 text

Copyright © NIFTY Corporation All Rights Reserved.
 調べる 6
 webpack npm terser react-scripts pnpm yarn esbuild rollup tsc core-js babel browserslist vite swc

Slide 7

Slide 7 text

Copyright © NIFTY Corporation All Rights Reserved.
 7


Slide 8

Slide 8 text

Copyright © NIFTY Corporation All Rights Reserved.
 そして私は考えるのをやめた 8


Slide 9

Slide 9 text

Copyright © NIFTY Corporation All Rights Reserved.
 9


Slide 10

Slide 10 text

Copyright © NIFTY Corporation All Rights Reserved.
 とならないように 10


Slide 11

Slide 11 text

Copyright © NIFTY Corporation All Rights Reserved.
 今日のお話 11
 いっぱい ↑ これを理解したい ソースコード (TypeScript) JavaScript

Slide 12

Slide 12 text

Copyright © NIFTY Corporation All Rights Reserved.
 大きな流れ 01 12


Slide 13

Slide 13 text

Copyright © NIFTY Corporation All Rights Reserved.
 これをもうちょっと正確に 13
 いっぱい JavaScript ソースコード (TypeScript)

Slide 14

Slide 14 text

Copyright © NIFTY Corporation All Rights Reserved.
 ちょっと細かく 14
 パッケージ マネージャ ビルド ソースコード 開発用JS 本番用JS

Slide 15

Slide 15 text

Copyright © NIFTY Corporation All Rights Reserved.
 ちょっと細かく 15
 パッケージ マネージャ ビルド ソースコード 開発用JS 本番用JS ライブラリ(パッケージ)を ダウンロードしてくる

Slide 16

Slide 16 text

Copyright © NIFTY Corporation All Rights Reserved.
 ちょっと細かく 16
 パッケージ マネージャ ビルド ソースコード 開発用JS 本番用JS 何かする

Slide 17

Slide 17 text

Copyright © NIFTY Corporation All Rights Reserved.
 ちょっと細かく 17
 パッケージ
 マネージャ
 ビルド ソースコード 開発用JS 本番用JS 開発時は デバッグしやすいもの 本番用はサイズを削ったもの

Slide 18

Slide 18 text

Copyright © NIFTY Corporation All Rights Reserved.
 ちょっと細かく 18
 パッケージ マネージャ ビルド ソースコード 開発用JS 本番用JS これ何よ

Slide 19

Slide 19 text

Copyright © NIFTY Corporation All Rights Reserved.
 さらに細かく 19
 パッケージ マネージャ ソースコード 開発用JS 本番用JS transpile minify bundle polyfill 主に4種の処理+ それをまとめるもの タスクランナー

Slide 20

Slide 20 text

Copyright © NIFTY Corporation All Rights Reserved.
 具体的な処理 02 20


Slide 21

Slide 21 text

Copyright © NIFTY Corporation All Rights Reserved.
 ビルドの内容 21
 パッケージ
 マネージャ
 ソースコード
 開発用JS
 本番用JS
 minify
 bundle
 polyfill
 transpile

Slide 22

Slide 22 text

Copyright © NIFTY Corporation All Rights Reserved.
 トランスパイル(transpile) 22
 ● あるプログラミング言語から別言語へ、変換を行うこと ○ プログラミング言語 → 機械語はコンパイル(compile) ○ 言語変換なので、trans(変換) + compile = transpile ● 主に2種類のトランスパイルがある

Slide 23

Slide 23 text

Copyright © NIFTY Corporation All Rights Reserved.
 トランスパイル(transpile) 23
 TypeScript → JavaScript ● TypeScriptはブラウザ・Node.jsで実行できないので、JavaScriptへ変換する ○ 型アノテーションを除去して、ピュアなJavaScriptにする ツール例: tsc, swc, esbuild


Slide 24

Slide 24 text

Copyright © NIFTY Corporation All Rights Reserved.
 トランスパイル(transpile) 24
 JavaScript → JavaScript ● 互換性のための処理 ● JavaScriptのコードを、より古い文法での表現に変換する ○ JavaScriptの文法は年々更新されている (ECMAScript2015, 2020, …etc) ○ 新しい文法は古いブラウザでは動作しないので、変換する必要がある ● TypeScript用トランスパイルで同時にやってしまうこともある ツール例: babel, tsc, swc, esbuild

Slide 25

Slide 25 text

Copyright © NIFTY Corporation All Rights Reserved.
 ビルドの内容
 25
 パッケージ
 マネージャ
 ソースコード
 開発用JS
 本番用JS
 transpile
 minify
 bundle
 polyfill


Slide 26

Slide 26 text

Copyright © NIFTY Corporation All Rights Reserved.
 ポリフィル(polyfill) 26
 ● これも互換性のための処理 ● JavaScriptコードを追加し、古いブラウザに対応させる ○ トランスパイルは変換、ポリフィルは追加 ● トランスパイルまたはバンドル(後述)と一緒に提供されることが多い ツール例: babel plugin, esbuild plugin

Slide 27

Slide 27 text

Copyright © NIFTY Corporation All Rights Reserved.
 ビルドの内容 27
 パッケージ
 マネージャ
 ソースコード
 開発用JS
 本番用JS
 transpile
 minify
 polyfill
 bundle

Slide 28

Slide 28 text

Copyright © NIFTY Corporation All Rights Reserved.
 バンドル(bundle) 28
 ● 複数ファイルを結合する処理 ● パッケージ読み込みの機能は元々ブラウザになかった ○ require()やimport ○ 一応モダンブラウザではimportが使えるが、効率が悪いのであまり使わない ● importなどを解釈し、1つ(または複数)のファイルにまとめる ツール例: webpack, esbuild, rollup

Slide 29

Slide 29 text

Copyright © NIFTY Corporation All Rights Reserved.
 ビルドの内容 29
 パッケージ
 マネージャ
 ソースコード
 開発用JS
 本番用JS
 transpile
 bundle
 polyfill
 minify

Slide 30

Slide 30 text

Copyright © NIFTY Corporation All Rights Reserved.
 ミニファイ(minify) 30
 ● 容量削減のための圧縮処理 ● 同じ動作を維持したまま、ファイル容量を削減する ○ 改行やスペースの削除、変数名の短縮 ○ 使われていないコードの削除(Tree Shaking) ツール例: terser, swc

Slide 31

Slide 31 text

Copyright © NIFTY Corporation All Rights Reserved.
 その他 31
 ● CSSの処理をしたりもする ○ SCSS, CSS Modules, …etc ● 今回は省略

Slide 32

Slide 32 text

Copyright © NIFTY Corporation All Rights Reserved.
 ビルドの内容 32
 パッケージ
 マネージャ
 ソースコード
 開発用JS
 本番用JS
 transpile minify bundle polyfill タスクランナー

Slide 33

Slide 33 text

Copyright © NIFTY Corporation All Rights Reserved.
 タスクランナー 33
 ● トランスパイル等の処理順を管理するもの ● バンドルの処理が比較的重いので、同じツールが兼任することが最近は多い ○ 昔はgulpとかあった ツール例: webpack, esbuild, rollup tsc transpile polyfill bundle minify

Slide 34

Slide 34 text

Copyright © NIFTY Corporation All Rights Reserved.
 まとめ 03 34


Slide 35

Slide 35 text

Copyright © NIFTY Corporation All Rights Reserved.
 まとめ 35
 ● ビルドの工程で互換性確保と結合・容量削減を行っている ○ transpile: コードの変換 ○ polyfill: コードの追加 ○ bundle: コードの結合 ○ minify: コードの圧縮 ■ bundleをメインにまとめて実行されることが多い ● それぞれにバラバラのツールがあるので、数が多くなる

Slide 36

Slide 36 text

Copyright © NIFTY Corporation All Rights Reserved.
 まとめ 36
 ● Q: 全部覚えなきゃいけないの? ● A: 始めは覚えなくて問題ない ○ 大体のフレームワークは自動セットアップツールに従えば良い ■ React: ■ Next: ○ 細かい設定をしようとして初めて、各種ツールに触ることになる ○ どの役割を持つツールなのか?を意識できると理解しやすい npm create vite@latest {プロジェクト名} -- --template react-ts npx create-next-app@latest

Slide 37

Slide 37 text

Copyright © NIFTY Corporation All Rights Reserved.


Slide 38

Slide 38 text

Copyright © NIFTY Corporation All Rights Reserved.
 おまけ1: パッケージマネージャ 04 38


Slide 39

Slide 39 text

Copyright © NIFTY Corporation All Rights Reserved.
 全体の流れ
 39
 パッケージ
 マネージャ
 ソースコード
 開発用JS
 本番用JS
 transpile
 minify
 bundle
 polyfill


Slide 40

Slide 40 text

Copyright © NIFTY Corporation All Rights Reserved.
 パッケージマネージャ 40
 ● 指定したパッケージをダウンロードしてくる ○ package.jsonに欲しいパッケージを書く ○ node_modulesディレクトリにダウンロードされる ● 指定したパッケージが要求するパッケージもダウンロードする(依存性解決) 代表例: npm, yarn, pnpm

Slide 41

Slide 41 text

Copyright © NIFTY Corporation All Rights Reserved.
 パッケージマネージャ 41
 ● Q: 何が違うの? ● A: パッケージ管理が効率化されていたりする プロジェクトA node_modules npm プロジェクトごとに ダウンロード必要 プロジェクトB node_modules pnpm プロジェクトA node_modules プロジェクトB node_modules pnpm-store 1箇所で管理することで 重複パッケージが まとまる = 容量削減 symlink

Slide 42

Slide 42 text

Copyright © NIFTY Corporation All Rights Reserved.
 おまけ2: 何故複数選択肢があるのか 04 42


Slide 43

Slide 43 text

Copyright © NIFTY Corporation All Rights Reserved.
 43
 変化が早いから

Slide 44

Slide 44 text

Copyright © NIFTY Corporation All Rights Reserved.
 44
 の一言で済ませるのも何なので

Slide 45

Slide 45 text

Copyright © NIFTY Corporation All Rights Reserved.
 最近の傾向 45
 Go・Rust製ツールへの移行 ● JavaScriptで書かれたツールでは、どうしても速度に限界がある ● より高速に動作するGo・Rust製ツールへ移行しつつある ● ex) esbuild, swc ECMAScript Modulesの活用 ● モダンブラウザではバンドルしなくても動く (ECMAScript Modules) ● 開発時にはバンドルをスキップすることで、ビルド工程を速くできる ● ex) vite

Slide 46

Slide 46 text

Copyright © NIFTY Corporation All Rights Reserved.
 さらに細かく 46
 パッケージ マネージャ ソースコード 開発用JS 本番用JS transpile minify bundle polyfill バンドルする バンドルしない

Slide 47

Slide 47 text

Copyright © NIFTY Corporation All Rights Reserved.
 おまけ3: メジャーな構成 04 47


Slide 48

Slide 48 text

Copyright © NIFTY Corporation All Rights Reserved.
 React構成1 48
 ● create-react-appで作られる構成 ○ 昔の主流、現在はメンテされておらず、推奨されない tsc transpile polyfill bundle minify react-scripts

Slide 49

Slide 49 text

Copyright © NIFTY Corporation All Rights Reserved.
 React構成2 49
 ● create viteで作られる構成 ○ 開発ビルドと本番ビルドで異なるバンドラーを使う ○ esbuildが速いが本番用には機能不足、ということらしい tsc transpile vite esbuild rollup polyfill bundle minify transpile polyfill bundle minify esbuild 開発
 本番


Slide 50

Slide 50 text

Copyright © NIFTY Corporation All Rights Reserved.
 Next.js構成 50
 ● Next.jsが内部で動かしている構成 ○ Polyfillコードを独自で持っていたり、独特 ○ webpackはRust製のturbopackで置き換わる予定 transpile polyfill bundle minify Next.js