トランスパイラとモジュールバンドラ
複雑化するWeb開発
JavaScriptは、当初はWebサイトに簡易的な動きを追加させるための言語として設計されました。しかしながら、高度なWebアプリケーションの台頭や、Node.jsをはじめとしたブラウザにおけるJavaScriptのユースケースの広がりにより、標準的なJavaScriptのみでの開発に は限界があることがわかってきました。
このため、現代では、JavaScriptは事前に何らかの変換を行っておくことが一般的になっています。
トランスパイラ
トランスパイラは、ソースコードを別のソースコードに変換するためのプログラムです。 JavaScriptにおいてトランスパイラが必要になるのは、主に2つの理由によります。
ひとつは、最新の機能を使用するためです。JavaScriptの言語仕様は、Ecma InternationalのTC39によって作成されていますが、新しく策定された仕様は、まだブラウザなどによって実装されていない場合があります。Babelは、そういった最新の言語仕様に沿って書かれたプログラムを変換し、古い仕様の範囲内で解釈できるプログラムに変換するための、最も有名なトランスパイラです。
もうひとつは、別の言語で書かれたプログラムをJavaScriptに変換するためです。次の章で扱うTypeScriptは、トランスパイラを用いてJavaScriptに変換されます。
モジュールバンドラ
通常、規模の大きなプログラムは、見通しが良くなるよう複数のファイルに分割されます。HTMLから複数のJavaScriptを読み込むためにはscript
タグを並べれば良いですが、HTTPサーバーの節で学んだように、script
タグの数だけHTTPリクエストが発行されてしまうため非効率的です。
webpackのようなモジュールバンドラを用いることで、複数のJavaScriptファイルを統合できます。
なお、Node.jsの場合は、モジュールの読み込みはファイルの読み込みに過ぎず、ネットワークを経由することはないため、このプロセスは通常必要ありません。
Viteを用いたフロントエンド開発
Web開発の領域では、ブラウザ (クライアント) で動くJavaScriptプログラムをフロントエンド、サーバーで動くプログラムをバックエンドと呼ぶことがあります。
Viteは、主にフロントエンドの領域における、トランスパイラやモジュールバンドラなどの機能を持つソフトウェアです。
Viteを用いて新しくプロジェクトを作成してみましょう。
詳細な手順は次のとおりです。
まずは、ターミナルでカレントディレクトリをプロジェクトフォルダを格納するディレクトリに移動し、
npm create vite@latest
を実行します。Select a framework
と尋ねられるので、Vanilla
を選択してください。その後、Select a variant
と尋ねられるので、JavaScript
を選択してください。
すると、package.json
を含む新しいディレクトリがカレントディレクトリに作 成されます。このディレクトリをVS Codeで開きましょう。
続いて、作成されたpackage.json
をもとにnpmから必要なパッケージをダウンロードするため、
npm install
を実行します。完了したら、
npm run dev
を実行してください。
Vite内蔵のウェブサーバーが起動し、http://localhost:5173/
でウェブサイトが表示されます。
Viteの仕組み
Viteの挙動を理解するため、control + C (macOS) / Ctrl + C (Windows) で先ほど起動させたウェブサーバーを停止させ、npm run build
コマンドを実行してみましょう。
$ npm run build
> vite@0.0.0 build
> vite build
vite v4.3.5 building for production...
✓ 7 modules transformed.
dist/index.html 0.45 kB │ gzip: 0.30 kB
dist/assets/javascript-8dac5379.svg 1.00 kB │ gzip: 0.60 kB
dist/assets/index-48a8825f.css 1.24 kB │ gzip: 0.65 kB
dist/assets/index-44b5bae5.js 1.45 kB │ gzip: 0.75 kB
✓ built in 64ms
これにより、カレントディレクトリにdist
ディレクトリが作成され、トランスパイルとバンドルの結果が格納されます。
出力されたファイルを元のファイルと比較してみましょう。元のindex.html
やmain.js
が、変換された状態で出力されていることがわかります。ディレクトリごとNetlify Drop