1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Webpackのお話

Posted at

はじめに

Railsでフロントの構築をする際今まではベストプラクティスがわからずとりあえずSPAを採用していたが、今回はSPAを用いないフロント構成をしようと思った。現在フロントの主流といったらReact,Vueだと思うがこれらをRailsで採用するにあたりWebpackerが必要になってくる。では、なぜWebpackを使わずWebpackerが必要なのか?そういった理由を深掘りしていくためにまずはWebpackについて調べていきたいと思う。

自分の考えをまとめるために疑問形式で深掘りしていきたいと思う。

Webpackって何?

javascpritモジュールバンドラー

モジュールの歴史

元々、javascriptにはファイル分割をしてまとめるという機能がなかった。しかし、javascriptの人気に伴いモジュール機能を加えようと動きが出てきた。そこに様々なモジュール仕様を定めたものが出てきた。
※javascriptでいうモジュールとは単に仕様のことを指す。
実際にモジュールを機能として使うためにはそれ用のツールが必要になる。

  • CommonJS
  • AMD
  • ESModule(ECMAScript Module)

CommonJS

Node.jsで採用されていて最初の誕生したモジュール仕様。Node.js環境では実行可能であるが、ブラウザでは実行できないため、Browserifyを利用してバンドリングする必要があった。

// Import 
const sample = require('./sample.js'); 

// Export
module.exports = function example() {
    return "example"
}

AMD

ブラウザでも動作できるようにする仕様。AMDという仕様に準拠したツールがRequireJSである。

ESModule

ES6で策定された仕様。主要なブラウザで対応しているのでトランスパイルなどが不要。
現在で主流の仕様であり、Node.js v13.2.0でサポートが開始されている。

// Import
import sample from "./sample.js"

// Export
export function example1(){
    return "example1"
}

ちなみにECMAScriptとはjavascriptの標準規格のこと。javascriptが誕生した初期では、ブラウザごとで独自に拡張を行っていたため、標準化するために作られた。

モジュールバンドラーは何をするの?

上記の通りモジュール機能ツールが誕生したことによりファイル分割が可能になった。しかし、分割されたファイルをそのままブラウザに送るとファイル転送回数が多くなる。そこでモジュールバンドラーにより分割されたファイルを依存関係を解決しつつ1つのファイルにまとめることでファイル転送回数を増加を解決した。

※ファイル転送回数についてはHTTP/2の登場で解決され得る

モジュールバンドラーには主に3つある。

  • Browserify
  • rollup.js
  • Webpack

Browserify

CommonJSで書かれたjavascriptファイルをブラウザ用にバンドリングする。
CommonJSはブラウザでは機能しないのでjsファイルをまとめてから配信する。

rollup.js

ES6に一旦変換することで静的解析できるようにした。
commonjsは標準ではサポートされていない

Webpack

標準でCommonJSとES Moduleに対応している。
js以外にもcssなどの静的ファイルをバンドルする。

モジュールバンドラーはファイルをまとめるだけ?

モダンなブラウザではES6に対応しているものがあるので、モジュールバンドラーはもはや必要ないのではないか?と思われるが現在のモジュールバンドラーは様々な機能を取り揃えている

  • 複数に分割されたファイルを依存関係を解決してまとめる
  • トランスパイル(babel)
  • cssのプリプロセッサー(postcss, sass)
  • linterでの構文チェック
  • ファイルにprefixを付与
  • js,cssファイルの圧縮

Webpackではこれらの機能を兼ね備えているため今後も重要なツールになっていくと思う。

参考記事

ES6のexportについて https://qiita.com/senou/items/a2f7a0f717d8aadabbf7
https://note.com/billion_dollars/n/n596fecfdeb2e
https://zenn.dev/arei/scraps/47abc4f7052ff7

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?