TypeScript

webpackでTypeScript × Sassの開発環境を構築しよう

ちょっとしたPHPでの個人開発において、webpackでTypeScript × Sassの開発環境を作ったので共有とおさらいを兼ねて解説させていただきます。

以前webpackでTypeScriptの開発環境構築を行った記事があり、そちらで公開したソースコードをベースにハンズオン形式で進めていきます。

webpackでTypeScript開発環境を構築しよう今やフロントエンドエンジニアの必須スキルであるTypeScript。この記事ではwebpackによるTypeScript開発環境構築をハンズオン形式で行なっていきます。...

動作環境と前提条件

動作環境

  • macOS Monterey v12.3.1
  • VSCode(テキストエディタ)
  • Node.js v16.14.2
  • yarn v1.22.18
  • npm v8.5.0
  • Google Chrome(ブラウザ)

前提条件

Node.jsがインストールされていること

ソース

GitHubリポジトリ

完成形
https://github.com/posipan/webpack-ts-sass/tree/main

今回のベースファイル
https://github.com/posipan/webpack-ts-sass/tree/init

ディレクトリ構成(完成形、node_modulesを除く)

コンパイル実行前

.
├── README.md
├── package.json
├── public
│   └── dist
│       ├── index.html
├── src
│   ├── sass
│   │   └── style.scss
│   └── ts
│       ├── addNum.ts
│       └── index.ts
├── tsconfig.json
├── webpack.config.js
└── yarn.lock

コンパイル実行後(ビルド済み)

.
├── README.md
├── package.json
├── public
│   └── dist
│       ├── index.html
│       ├── main.js
│       ├── main.js.map
│       ├── style.css
│       └── style.css.map
├── src
│   ├── sass
│   │   └── style.scss
│   └── ts
│       ├── addNum.ts
│       └── index.ts
├── tsconfig.json
├── webpack.config.js
└── yarn.lock

必要なパッケージのインストール

Node.jsのパッケージマネージャーにはnpmとyarnがありますので、お好きな方をお選びください。今回はyarnで記述していきます。

yarn add -D sass sass-loader css-loader mini-css-extract-plugin

上記コマンド実行により、package.jsonの中身は以下のようになります。

{
  "name": "ts-sass",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "scripts": {
    "start": "npx webpack serve --mode=development",
    "build": "npx webpack --mode=production"
  },
  "devDependencies": {
    "css-loader": "^6.7.1",
    "mini-css-extract-plugin": "^2.6.0",
    "sass": "^1.52.3",
    "sass-loader": "^13.0.0",
    "ts-loader": "^9.3.0",
    "typescript": "^4.7.2",
    "webpack": "^5.72.1",
    "webpack-cli": "^4.9.2",
    "webpack-dev-server": "^4.9.0"
  }
}

インストールしたパッケージの詳細は以下の通りです。

パッケージ名説明
sassDart製のSassコンパイラー
最終的にJavaScriptに変換される
sass-loaderwebpackでSassコンパイラーを動かすためのSassローダー
mini-css-extract-pluginJavaScript化したCSSを抽出してCSSファイルを作成する
css-loader CSSをJavaScriptにimportできるようにする

各種設定ファイルの作成・編集

先程インストールしたパッケージに関するコードの追記を行なっていきます。

追記コードの詳細はソースコード中に記述しています。

webpack.config.jsの編集

public/dist配下にアウトプットファイルstyle.cssとソースマップファイルが出力されるようにしています。

const path = require('path');

// 追加
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  entry: {
    main: './src/ts/index.ts',
  },

  output: {
    path: path.join(__dirname, 'public/dist'),
  },

  resolve: {
    extensions: ['.ts', '.js'],
  },

  module: {
    rules: [
      {
        test: /\.ts$/,
        loader: 'ts-loader',
      },
      // 追加
      {
        test: /\.(scss|sass|css)$/i,
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
      },
    ],
  },

  // 追加
  // webpackの機能拡張
  plugins: [
    new MiniCssExtractPlugin({
      filename: 'style.css', // アウトプットCSSファイル
    }),
  ],

  // 追加
  // ソースマップの作成
  devtool: 'source-map',

  devServer: {
    static: {
      directory: path.join(__dirname, 'public/dist'),
    },
    port: 9000,
  },

  watchOptions: {
    ignored: /node_modules/,
  },
};

Sassファイルの作成とimport

ルートディレクトリからsrc配下にsassフォルダを作成します。

mkdir src/sass

続いて、sassフォルダの中にstyle.scssを作成します。

touch src/sass/style.scss

エントリーポイントのTSファイルにSassを読み込む

今回の場合、エントリーポイントとなるTSファイルはsrc/ts/index.tsです。

こちらに先程作成したstyle.scssをimport文で読み込みます。

// 追加
import '../sass/style.scss';

// addNum関数の読み込みと実行結果のConsole出力
import { addNum } from './addNum';

console.log(addNum(1, 5));

index.htmlにstyle.cssを読み込む

アウトプットファイルであるstyle.cssを読み込みます。

titleやh1も今回の記事用に内容を変えています。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>webpackでTypeScript × Sass開発環境を構築しよう</title>
  <!-- 追加 -->
  <link rel="stylesheet" href="./style.css">
</head>
<body>
  <h1>webpackでTypeScript × Sass開発環境を構築しよう</h1>
  <script src="./main.js"></script>
</body>
</html>

TypeScriptとSass実行する

ルートディレクトリから以下のコマンドを実行します。

yarn start

TypeScriptとSassのコンパイル監視が行われます。

以下のURLでブラウザを開きます。
http://localhost:9000/

style.scssの編集

style.scssにはまだ何も記述されていないので、以下のコードを追記してください。

h1のテキストカラーを赤くしています。

h1 {
  color: #f00;
}

自動コンパイルが実行され、テキストカラーが赤くなりました。

index.tsの編集

こちらは前回TypeScript開発環境構築の記事で作成したファイルです。

addNumは引数の足し算をおこなっている関数で、console.logでその結果をブラウザのコンソールエリアに出力しています。

元のコードはconsole.log(addNum(1, 5));となっており、和である6がコンソールエリアに出力されているかと思います。

以下のように引数を変えて、TypeScriptのコンパイルと結果の出力が行われていることを確認してみましょう。

(省略)
console.log(addNum(5, 5));

自動コンパイルが実行され、和の10が出力されました。

ビルドしてアウトプットファイルを出力する

以下のコマンドでビルドを実行し、アウトプットJSファイルとアウトプットCSSファイル、並びにそれぞれのソースマップファイルを出力します。

yarn build

以下のようにファイルが出力されます。

おわりに

webpackでTypeScriptとSassの開発環境構築が一緒にできるのは便利ですね!