SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
なぜ初心者は
webpackが解らないのか?
- Why can’t you understand the webpack? -
2018/06/20 Fukuoka.js #4 LT
● 井関 健人(@take2webservice)
● フリーランスのWEB系エンジニア
● PHPとかJavascriptとかRubyとか触ってます
● 新しい技術を1dayで教える講師とかやってます
● LaravelとかGitとかwebpackとかVueとかDockerとか…
● 今回は宣伝も兼ねて、webpack講座の前半部分を切り取ってきました
自己紹介
昨今のモダンなJavascript開発で必須となりつつある仕組み
・モダンなWEBページ(HTML,CSS,Javascript)の開発
・静的型付けがあるTypeScriptの開発
・Angular、React、Vue.jsなどの開発
webpackとは何か?
webpackの具体的な用途
● pug(Jade)やHAML、EJSといったテンプレートエンジンのコンパイル
● SASSなどのCSSプリプロセッサのプリコンパイル
● TypeScriptなどのAltJSのトランスパイル
● Linterを用いた、Javascriptの構文チェック
● AngularやReact、Vue(Vue-cli)といったJSフレームワークの実行
...etc
初心者「できること多すぎて解らん…」
       /\ テンプレートエンジンって何だよ!!
      / /| CSSプリプロセッサって何だよ!!
     ∴\/ /  BabelとかAltJSって何だよ!!
     ゜∵|/    Linterって何だよ!!
  (ノ・ω・)ノ       そもそもフレームワークって何だよ!!
  /  /
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
● Javascriptの静的モジュールバンドラー
● 依存関係のあるJavascriptのモジュールを取得し、それらのモジュールを元
に静的ファイルを生成する。
● webpack.config.jsに設定を記述しコマンドラインから実行する。
● 利用にはNode.jsの実行環境が必要。
● ローダやプラグインという機能で、ファイルをバンドルする時にカスタムタス
クを実行できる。
(参考:https://en.wikipedia.org/wiki/Webpack)
改めて、webpackとはなにか?(from wikipedia)
(゚Д゚)ハァ?
(゚Д゚)ハァ?
さっきの具体的な用途にほぼ触れられていない…だと?
● pug(Jade)やHAML、EJSといったテンプレートエンジンのコンパイル
● SASSなどのCSSプリプロセッサのプリコンパイル
● TypeScriptなどのAltJSやBabelを用いたJavascriptへのトランスパイル
● Linterを用いた、Javascriptの構文チェック
● AngularやVue.js(Vue-cli)といったフレームワークの実行
...etc
さっきの具体的な用途はほぼ全て「ローダーとプラグインでできる内容」
● Javascriptの静的モジュールバンドラー
● 依存関係のあるJavascriptのモジュールを取得し、それらのモジュールを元
に静的ファイルを生成する。
● webpack.config.jsに設定を記述しコマンドラインから実行する。
● 利用にはNode.jsの実行環境が必要。
● ローダやプラグインという機能で、ファイルをバンドルする時にカスタムタス
クを実行できる。
(参考:https://en.wikipedia.org/wiki/Webpack)
● pug(Jade)やHAML、EJSといったテンプレートエンジンのコンパイル
● SASSなどのCSSプリプロセッサのプリコンパイル
● TypeScriptなどのAltJSやBabelを用いたJavascriptへのトランスパイル
● AngularやReact、Vue(Vue-cli)といったJSフレームワークの実行
● Linterを用いた、Javascriptの構文チェック
webpack混乱ポイント
カスタムタスクが優秀すぎて本質が解りづらい
(Д)゜゜ ホンシツ ドコー ?
● Javascriptの静的モジュールバンドラー
● 依存関係のあるJavascriptのモジュールを取得し、それらのモジュールを元
に静的ファイルを生成する。
● webpack.config.jsに設定を記述しコマンドラインから実行する。
● 利用にはNode.jsの実行環境が必要。
● ローダやプラグインという機能で、ファイルをバンドルする時にカスタムタス
クを実行できる。
(参考:https://en.wikipedia.org/wiki/Webpack)
webpackとはなにか?(from wikipedia)
bundle : 束、塊、包み
モジュールに分割され、別々になったJavascriptファイルの
依存関係を解決して、1つのファイルにまとめるツールの総称。
モジュールバンドラーとは何か??
//shout.js
hoge.shout();
fuga.shout();
//hoge.js
var hoge = {}
hoge.shout = function(){
console.log("hoge");
}
読み込み順を気にする必要があったり…
分割しないと、ファイルのどこで何をしてるか解りづらかったり…
でも、分割すると変数名上書きしそうで怖かったり…
昔のJavascript開発
//index.html
<script src="hoge.js">
<script src="fuga.js">
<script src="shout.js">
//fuga.js
var fuga = {}
fuga.shout = function(){
console.log("fuga");
}
元々、WEBブラウザでだけの動作しか考えられていなかったJavascriptを
サーバーサイドでも使えるようにしようという動きが起きる。
結果、Node.jsが誕生し、ES2015ではそれまで無かった「言語仕様レベルでのモ
ジュール管理の仕組み」が定義されました。
ES2015の登場で変化したJavascript開発
index.js
いい感じに1ファイルにまとめられる。
//shout.js
const hoge = require("hoge");
const fuga = require("fuga");
hoge.shout();
fuga.shout();
モジュールバンドラー登場により変化したJavascript開発
//hoge.js
const hoge = {}
hoge.shout = function(){
console.log("hoge");
}
module.exports = hgoe;
//fuga.js
const fuga = {}
fuga.shout = function(){
console.log("fuga");
}
module.exports = fuga;
webpackなどのモジュールバンドラーで、
複数のjsファイルをまとめる。
htmlには、このファイルを
読み込むだけ。
webpackの本質はモジュールバンドラーであるということです。
ここを押さえないとカスタムタスクの部分が上手く理解できず、
十分に活用しづらくなります。
webpackの本質
GRUNT
Gulp
npm script
PARCEL
[閑話休題] webpackと似たことができる仕組み
Gulpとは
gulp is a toolkit for automating painful or time-consuming tasks in your
development workflow, so you can stop messing around and build something.
<訳>
gulpは開発ワークフローで苦労したり時間のかかるタスクを自動化するための
ツールキットです。
Gulpとは
- gulpはタスクランナーと呼ばれるツールです
- JSの圧縮、Sassのコンパイル、画像の圧縮など
- Web制作において時間のかかるタスクを自動化するためのもの
- Gruntと違って非同期処理なので早い
- webpackはjavascriptのモジュールバンドラー
(複数のjavascriptを1つにまとめるのが目的)
- gulpはタスクランナー
(web制作で自動化したい処理を定義し、自動的に実行するのが目的)
webpackとGulpの違い
● Entry(エントリー)
● Output(アウトプット)
● Loader(ローダー)
● Plugins(プラグイン)
webpackの4つの基本要素
読み方:エントリー(エントリーポイント)
Javascriptをバンドルする上で、どのファイルを基準として、依存関係を解決する
かを指定します。
エントリーには複数のファイルを指定することができます。
エントリーポイントを指定すると、webpackはエントリーポイントで指定したファイ
ルが依存する他のモジュールとライブラリを読み込んでくれます。
Entryとは?
読み方:アウトプット
webpackがまとめたファイルを、「どこ」に「どのような名前」で出力するかを指定し
ます。
Outputとは?
読み方:ローダー
webpack自体はJavaScriptしか理解できませんが、ローダーを使用することで、
JavaScript以外のcssやhtmlといったファイルをモジュールに変換して処理を行え
ます。
設定ファイルには、「ファイル名」と「適用する処理内容」を記述します。
Loadersとは?
読み方:プラグイン
ファイルをまとめる以外のタスク(カスタムタスク)の実行
ができます。
プラグインは「バンドルしたJavascriptファイルの最小化」から先に挙げた
webpackの利用例で挙げた様々な処理まで幅広く使用されます。
Pluginsとは?
webpackを図にすると
cssやテンプレートエ
ンジンを読み込みた
い?
js以外の読み込む方
法(Loader)を教えて
くれたら読み込む
よ!
javascriptのファイル
をまとめたい?
最初に読み込むjs
ファイルを教えくれれ
ば、中で呼んでる
javascriptを読み込
むよ!
jsとは一緒にせず、
cssやhtmlの出力を
したり、ファイルを圧
縮したい?
まとめる以外の処理
方法(Plugin)も教え
てくれたらやっとく
よ!
読み込んだ
javascriptをまとめて
出力するときの出力
先と、出力方法を教
えて!
まとめて置いとくよ!
webpack
.config.js
ユーザー
この設定でjsファイ
ルをまとめて下さ
い!
js js
sass
pug
js
css html bundle.js
OutputEntry Loaders Plugins
webpack理解の次のステップへ
静的バンドラーであることを理解したら、
次はメジャーなローダーやプラグインを単体で触ってみよう
to be continued ... ?
おわり
おわり

Contenu connexe

Tendances

Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 

Tendances (20)

WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
Ruby でつくる型付き Ruby
Ruby でつくる型付き RubyRuby でつくる型付き Ruby
Ruby でつくる型付き Ruby
 
PHPのテスト名を日本語にした話
PHPのテスト名を日本語にした話PHPのテスト名を日本語にした話
PHPのテスト名を日本語にした話
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 

Similaire à なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -

JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)
VOYAGE GROUP
 
JavaScript on GitHub (#kyotojs)
JavaScript on GitHub  (#kyotojs)JavaScript on GitHub  (#kyotojs)
JavaScript on GitHub (#kyotojs)
y_uuki
 

Similaire à なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - (20)

Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
 
モダンJavaScript入門.pdf
モダンJavaScript入門.pdfモダンJavaScript入門.pdf
モダンJavaScript入門.pdf
 
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
 
JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?
 
JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)
 
ServerSideJavaScript
ServerSideJavaScriptServerSideJavaScript
ServerSideJavaScript
 
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
 
How to collect frontend technology
How to collect frontend technologyHow to collect frontend technology
How to collect frontend technology
 
PHP&NewSQLで考える次世代アプリケーション
PHP&NewSQLで考える次世代アプリケーションPHP&NewSQLで考える次世代アプリケーション
PHP&NewSQLで考える次世代アプリケーション
 
モダンJavaScriptフレームワークで技術的負債を作らないために
モダンJavaScriptフレームワークで技術的負債を作らないためにモダンJavaScriptフレームワークで技術的負債を作らないために
モダンJavaScriptフレームワークで技術的負債を作らないために
 
Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
 
Webの勉強会#11
Webの勉強会#11Webの勉強会#11
Webの勉強会#11
 
GraphQLについての5分間
GraphQLについての5分間GraphQLについての5分間
GraphQLについての5分間
 
JavaScript on GitHub (#kyotojs)
JavaScript on GitHub  (#kyotojs)JavaScript on GitHub  (#kyotojs)
JavaScript on GitHub (#kyotojs)
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
 
ウェブディレクターのための Web A11Y 勉強会 #03
ウェブディレクターのための Web A11Y 勉強会 #03ウェブディレクターのための Web A11Y 勉強会 #03
ウェブディレクターのための Web A11Y 勉強会 #03
 
RakSulのInternal API開発で gRPCを導入した話
RakSulのInternal API開発で gRPCを導入した話RakSulのInternal API開発で gRPCを導入した話
RakSulのInternal API開発で gRPCを導入した話
 
RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話
 
【Web TECH FORUM 2017 in大阪】JavaScript UIコンポーネント の選定と活用ポイント
【Web TECH FORUM 2017 in大阪】JavaScript UIコンポーネント の選定と活用ポイント【Web TECH FORUM 2017 in大阪】JavaScript UIコンポーネント の選定と活用ポイント
【Web TECH FORUM 2017 in大阪】JavaScript UIコンポーネント の選定と活用ポイント
 

Plus de 健人 井関 (6)

勉強できてますか?
勉強できてますか?勉強できてますか?
勉強できてますか?
 
初めてのvue.js(2.x系)
初めてのvue.js(2.x系)初めてのvue.js(2.x系)
初めてのvue.js(2.x系)
 
ThinkDESIGN ユニバーサルデザイン#1
ThinkDESIGN ユニバーサルデザイン#1ThinkDESIGN ユニバーサルデザイン#1
ThinkDESIGN ユニバーサルデザイン#1
 
ゆるっと IT勉強会
ゆるっと IT勉強会ゆるっと IT勉強会
ゆるっと IT勉強会
 
Atomic desing workshop
Atomic desing workshopAtomic desing workshop
Atomic desing workshop
 
福岡のIT系勉強会情報
福岡のIT系勉強会情報福岡のIT系勉強会情報
福岡のIT系勉強会情報
 

なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -