『Webpack + React + TypeScript』の導入方法・初期設定
こんにちは、okutani(@okutani_t)です。本記事では、『Webpack + React + TypeScriptの導入方法・初期設定』について解説しています。
同じ構成でTypeScriptではなく「Babel」を用いて環境構築をおこなう場合は、以下の過去記事を参考にしてください。
また、本記事ではnpmではなくyarnを使って導入しています。MacではHomebrewを使って以下のコマンドでyarnが導入できます(参考MacにHomebrewを導入する方法&使い方まとめ | vdeep)。
$ brew install yarn
ちなみに、補足ですが「create-react-app」コマンドを使うと簡単に「React + TypeScript」の環境を構築できます。
$ npx create-react-app my-react-ts-app --typescript
「$ yarn run start
」で確認できます。お手軽に「React + TypeScript」を試したい場合は上記のコマンドを利用してみてください。ただし、本記事では「create-react-app」は利用せず、すべて手動で導入しています。
今回の記事で利用したサンプルコードは以下のリポジトリに公開しています。参考にしてください。
LINKokutani-t/webpack-react-typescript-sample
それでは、実際に『Webpack + React + TypeScript』の導入方法からみていきましょう。
参考最新版TypeScript+webpack 4の環境構築まとめ(React, Vue.js, Three.jsのサンプル付き) – ICS MEDIA
スポンサーリンク
もくじ
前準備
前準備として、てきとうにプロジェクトを作成。
$ mkdir myapp
$ cd myapp
以下のコマンドを実行してpackage.jsonを作成します。
$ yarn init -y
これで前準備が整いました。
Webpackの導入
以下のコマンドでWebpackを導入します。
$ yarn add webpack webpack-cli --dev
これでWebpackが導入されました。「--dev
」をつけることで、開発時にのみ利用するようにします。
TypeScriptの導入
以下のコマンドでTypeScriptを導入します。
$ yarn add typescript ts-loader --dev
「ts-loader」を導入することで、WebpackでTypeScriptを扱えるようになります。
Reactの追加
以下のコマンドでReactを導入。
$ yarn add react react-dom @types/react @types/react-dom
「@types/react」「@types/react-dom」はそれぞれTypeScriptでReactで利用するさいの型定義ファイルです。「TypeScriptでReactを利用するさいに必要」、ぐらいに捉えてください。
webpack-dev-serverの導入
開発用に「webpack-dev-server」を導入します。
$ yarn add webpack-dev-server --dev
これで開発用サーバーが利用できて便利です。のちほど利用します。
.gitignoreの追加
Gitでプロジェクトを管理している場合は、以下のコマンドで.gitignoreを設置しておきましょう。
$ echo node_modules > .gitignore
これで、Git管理下からnode_modulesが外れました。
package.jsonの編集
package.jsonの編集をおこない、ビルドや開発サーバーの起動を簡易的におこなえるように設定します。
まずは、作成されたpackage.jsonを確認してみます。
{
"name": "webpack-react-typescript-sample",
"version": "1.0.0",
"main": "index.js",
"repository": "git@github.com:okutani-t/webpack-react-typescript-sample.git",
"author": "okutani-t",
"license": "MIT",
"devDependencies": {
"ts-loader": "^6.2.1",
"typescript": "^3.7.2",
"webpack": "^4.41.2",
"webpack-cli": "^3.3.10"
},
"dependencies": {
"@types/react": "^16.9.11",
"@types/react-dom": "^16.9.4",
"react": "^16.11.0",
"react-dom": "^16.11.0"
}
}
上記に「scripts」を追加して、ビルドや実行を簡易的におこなえるようにします。
{
"name": "webpack-react-typescript-sample",
"version": "1.0.0",
"main": "index.js",
"repository": "git@github.com:okutani-t/webpack-react-typescript-sample.git",
"author": "okutani-t",
"license": "MIT",
"devDependencies": {
"ts-loader": "^6.2.1",
"typescript": "^3.7.2",
"webpack": "^4.41.2",
"webpack-cli": "^3.3.10"
},
"dependencies": {
"@types/react": "^16.9.11",
"@types/react-dom": "^16.9.4",
"react": "^16.11.0",
"react-dom": "^16.11.0"
},
"scripts": { // ここから以下追加
"start": "./node_modules/.bin/webpack-dev-server",
"build": "webpack --mode production"
}
}
“scripts”行の上にカンマ(,)を忘れずに付けてください。これで、以下のコマンドで開発用サーバー、ビルドがそれぞれおこなえます。
// 開発サーバー立ち上げ
$ yarn run start
// ビルド
$ yarn run build
上記コマンドはのちほど利用します。
次にtsconfig.jsonを設置します。
tsconfig.jsonの作成
TypeScriptの設定ファイルである「tsconfig.json」を以下の内容で作成します。
{
"compilerOptions": {
"sourceMap": true,
"target": "es5",
"module": "es2015",
"jsx": "react",
"moduleResolution": "node",
"allowSyntheticDefaultImports": true,
"lib": [
"es2019",
"dom"
]
}
}
かんたんに解説します。
sourceMap | trueにすることでsourceMap(*.js.map)を出力。Chrome等でデバッグできるようになる |
---|---|
target | 出力するJS(ECMAScript)のバーションを指定。今回はes5を指定 |
module | es2015(ES6)を指定することでES6のモジュール管理機能を利用 |
jsx | reactを指定してJSXの書式を利用 |
moduleResolution | モジュール解決方法を指定。今回はnodeを指定 |
allowSyntheticDefaultImports | trueで外部ライブラリをimport foo from 'foo' として読み込めるようにする |
lib | コンパイルに含めるライブラリ群を指定。今回はes2019, domを指定 |
次にwebpack.config.jsを作成していきます。
webpack.config.jsの作成
「webpack.config.js」を以下の内容で作成します。
module.exports = {
mode: "development",
entry: "./src/index.tsx",
output: {
path: `${__dirname}/dist`,
filename: "main.js"
},
module: {
rules: [
{
test: /\.tsx?$/,
use: "ts-loader"
}
]
},
resolve: {
extensions: [".ts", ".tsx", ".js", ".json"]
},
devServer: {
contentBase: "dist",
open: true
}
}
設定内容は以下のとおりです。
mode | 「development」指定でソースマップを出力、「production」指定でminify出力(※実行時に変更可) |
---|---|
entry | トランスパイルをおこなう対象ファイル |
output | トランスパイル後のファイルの名前、ディレクトリの指定 |
module/rules/test | ローダーが利用するファイルの拡張子を指定(正規表現) |
module/rules/use | ローダーの指定。今回はts-loaderを指定することでTypeScriptを利用できるようにする |
resolve/extensions | 外部ファイルをimportするさい、指定した拡張子を省略できるようになる |
devServer | 開発用Webサーバーの起点ディレクトリ、起動時に自動でブラウザを開く、など設定 |
これで一通りのツールを使う準備が整いました。サンプルコードを用意して実行してみましょう。
サンプルファイルの設置
以下のコマンドで確認用のjsファイルを設置してみます。
$ mkdir src
$ touch src/index.tsx
$ touch src/Hello.tsx
「src/index.tsx」を以下のとおり記述してみました。
import React from 'react'
import ReactDOM from 'react-dom'
import Hello from './Hello'
class App extends React.Component {
render() {
return (
<>
<h1>Hello <Hello name='React' /> + <Hello name='TypeScript' />!</h1>
</>
)
}
}
ReactDOM.render(<App/>, document.querySelector('#app'))
次に「src/Hello.tsx」を以下のとおり実装。
import React from 'react'
interface HelloProps {
name: string,
}
interface State {}
class Hello extends React.Component<HelloProps, State> {
render() {
return (
<span>
{this.props.name}
</span>
)
}
}
export default Hello
次に、テンプレートとなる「dist/index.html」を設置。
$ mkdir dist
$ touch dist/index.html
以下のとおり記述しました。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Webpack React TypeScript Sample</title>
</head>
<body>
<div id="app"></div>
<script src="main.js"></script>
</body>
</html>
これで確認用のサンプルファイルが設置できました。
確認
以下のコマンドを実行して「webpack-dev-server」を実行します。
$ yarn run start
「http://localhost:8080」にアクセスします(上記コマンドを実行すると自動でブラウザが開きます)。
特にエラーなく表示できました。
ビルドしたい場合は「$ yarn run build
」でdistにmain.jsが出力されます。確認してみてください。
まとめ
本記事では「Webpack + React + TypeScriptの導入」について解説しました。
TypeScriptを利用することでかんたんに型を定義することができ、エディターでも補完が利くようになって便利です。
これからReactとTypeScriptを活用していきたい方の参考になれば幸いです。
Web開発のお仕事を募集しています
フリーランスのエンジニアとして、Webシステム開発のお仕事依頼を随時募集しています(現在の業務量によってお受けできない場合もあります)。
「Ruby on Rails」「JavaScript(jQuery, Reactなど)」「HTML + CSS」を用いたシステム開発、「Heroku」等を用いたサーバー構築・運用、「Git」や「GitHub」を利用したソーシャルコーディングなどに対応しています。
ご依頼を検討している方は、下記リンク本ブログからのお問い合わせ、もしくはokutaniのポートフォリオからご連絡ください。
LINKお問い合わせ
スポンサーリンク