Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
そろそろWebpackと真剣に向き合ってみる
Search
nao-bt
May 04, 2017
Programming
5.2k
9
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
そろそろWebpackと真剣に向き合ってみる
We Are JavaScripters! @6th【初心者登壇歓迎!LT大会】で使用した資料です。
https://wajs.connpass.com/event/54667/
nao-bt
May 04, 2017
More Decks by nao-bt
See All by nao-bt
僕のフロントエンド奮闘記コンポーネントで、すったもんだ
naotobt
1
1.1k
Other Decks in Programming
See All in Programming
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
240
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
220
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
140
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
240
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
4k
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
440
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
280
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
790
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
150
Intent as Code
shoppingjaws
6
960
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
150
Featured
See All Featured
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Faster Mobile Websites
deanohume
310
32k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
ラッコキーワード サービス紹介資料
rakko
1
4.8M
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
480
Game over? The fight for quality and originality in the time of robots
wayneb77
1
270
Side Projects
sachag
456
43k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
KATA
mclloyd
PRO
35
15k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
730
The Cost Of JavaScript in 2023
addyosmani
55
10k
Transcript
そろそろWebpackと 真剣に向き合ってみる。 NAO-BT
自己紹介 文系出身・プログラミング歴は約4年目 サーバーもフロントもやる人になってきてる。 ※できるとは言っていない。日々勉強中
JSに関しては 4年前 前の会社の研修でちょこっといじる。 約1年前 Angularの1.4系を前の会社の業務で利用。 徐々にJSの面白みを感じ、個人的にフレームワークを中心に 勉強をはじめる(Angular2,React) 現在 サーバーサイドはPHP(フレームワークはLaravel)、 フロントはVue.jsで業務システムのSPAを作っている。
JSのフレームワークで 毎回躓くところ。
ビルドまわりがよくわからん。
なんで必要なのかわかってないから フレームワークのチュートリアルをやるとき、 大体躓く。 グッタリ _(:3 」∠)_
でも最近、 おぜん立てしてもらえるので なんとかなる。 Vue-cli create-react-app Laravel-mix
なんとかなってしまった結果・・・ なんとなくわかった気になる。
いやいや!! 便利ツールによりかかってるだけで、 理解してないよね!? サポートおわったらどうすんの!?
ということで、 JSの知識が少しは身についた今、 もう一度 ビルドまわりと向き合ってみる。
とりあえず、 Webpackと向き合ってみる
Webpackは各CLIで使われている create-react-appのreact-script Vue-cli
そもそもなんで、WebPackを使うの?
★★★ Webアプリを効率よく開発するために 分割したモジュールの 名前解決・依存関係を整理してくれる。 ★ TypeScriptやJSXをトランスパイルする。
JSの役割がWebサイトの 簡単な装飾程度なら、 そんな必要はなかった。 1ファイルにまとめられる程度の量に収まる。
しかし、 非同期通信やDOM操作など 様々な機能をページに盛り込む SPAなサイトを作ろうとすると 大量のJSを書くことになる。 これを一つのファイルに 書き続けることは、かなりしんどい。
大量のJSのコードを モジュールごとにわける サブルーチンやデータ構造を役割ごとに分割したものをモジュールと言います。 モジュール同士の依存性を可能な限り減らし、 保守性を高めて再利用可能にすれば、開発もはかどる!
フレームワーク利用の利点には DOM操作や非同期通信を簡単に書ける! というのもありますが・・・、 それぞれの思想に沿って使えば 最適なモジュール構成になります。 ・MVVM ・コンポーネント指向
そもそも、Javascriptは 「Webのページにちょっと動きを与える言語」 という想定だったので、 言語仕様としてモジュールをサポートしていません。 ビルドツールを使わなければ モジュールパターンというコーディングのテクニックを 使っているにすぎない。 ただし・・・
そのまま、開発しようとすると <head>タグがこんなことに・・・。
JSの悩ましいモジュールの実情 グローバルオブジェクト内の競合や 読み込む順番を間違えると、エラーが起きるので どんなモジュールがあるか開発者は把握していないといけない。 システムが大きくなればなるほど、 <head>タグ内の<script>リストが長くなる。
それを ビルドを通して解決する JS JS JS JS JS JS JS
ビルドとは 複数のソースコードを基に 組み合わせて 実行ファイルを生成する作業。 この中でモジュール間の 名前解決、依存関係の解決を行っている。
Webpackは まずはこれさえ、 分かれば怖くない。 Entry Output Loaders Plugins
Entry コンテキストルートとなるファイルの指定。 そのファイルから依存関係を追跡するようにwebpackに指示します。 Webpack.config.js entry.js module1.js
Output ビルド結果の出力に関する指定。 filenameはビルド後に出力されるファイル名、pathはそのファイルの出力先 Webpack.config.js Index.html
Loaders ビルドの際にモジュールのソースコードに適用される変換を指定します。 これの利用でJS以外の拡張子(jsx/vue/ts/css/img) のものもビルドできるようになります。 package.json 拡張子がcssのファイルをjsに 変換するためLoderを npm install する
拡張子がcssのファイルにインストールした Loaderを使うよう指定 Webpack.config.js
Loaders entry.js modulecss.css Index.html
Loadersではまったところ testってしないとビルドが通らない! Webpack.config.js package.jsonのscriptsみたいに自由に書き換えられるのかと思いきや・・・
Plugins ビルド時の設定を行います。 ビルドする際にファイルの圧縮をおこなったり(UglifyJsPlugin)、 コンパイルエラーが起きてもスキップする設定ができる(NoErrorsPlugin)。
Webpack 2になって変わったこと① Webpackはver2からES2015でjavascriptの新しい言語仕様に採用された import・exportが使えます。 このほかのES2015の仕様を利用したい場合は、LodersでBabelを使用する必要があります。 entry.js module1.js
Webpack 2になって変わったこと② TreeShakingという機能が加わり、 exportしているけどimportされていない モジュールはプロダクションビルドの際に 含まれなくなった。
まだまだ勉強が必要・・・ 「インストールしたフレームワークなどのライブラリーと 開発で作ったアプリケーションのコードはビルドの際には分けておいたほうがいい。」 と言われて、laravel-mix上ではできたんですが、素のwebpackではできなかった・・・。 他にも効率の良いビルドの設定の追求を目指し、お助けツールに頼ってばかりにならないよう チュートリアルを読み込みながら頑張りたい・・・
つたない発表ですみません。 ご清聴ありがとうございました。