React とは
Web サイトを作成するときに React を採用すると、HTML をフラットな形でゴリゴリ記述していくのではなく、独自コンポーネント(例: <MyButton>
コンポーネント)を定義してまとまりのある単位でサイトを構築していくことができます。
Web Components という同様な技術の標準化が進んでいますが、しばらくは React のようなコンポーネントライブラリが使われるでしょう。
ここでは React を使った Web サイト開発用に、下記のようなツールを組み合わた環境を構築します。
- React … コンポーネントベースで Web サイト構築するためのライブラリ
- TypeScript … JavaScript を型付けできるようにした言語
- webpack … Web サイトのリソースをバンドルするためのツール
この環境構築方法を理解すれば、React を利用した Web サイトをどんどん作ることができます。 ちなみに、上記のすべてのツールは Node.js 上で動作するため、Node.js がインストールされていない場合は先にインストールしてください。
TypeScript、React、webpack のインストール
チュートリアルなどでは、create-react-app
を使って React アプリの雛形を生成する方法がよく載っていますが、よくわからないモジュールが勝手にインストールされるのは気持ち悪いので、ここでは自力で各モジュールをインストールしてきます。
create-react-app myapp --template typescript
のように実行します。
このコマンドによって作成された雛形をリファレンスにするのがよいかなと思ったのですが、少なくともバージョン 3.4.1 時点で生成される雛形はかなり怪しいです。
例えば、TypeScript の処理系や型定義ファイルが devDependencies
ではなく、dependencies
でインストールされるようになっていたりします。最終的に Web サーバーにデプロイするファイル群は webpack で生成(バンドル)することを想定しているので、npm
(or yarn
) でインストールするモジュールは、 すべて devDependencies
(開発用モジュール)としてインストール していきます(Web サーバー側で npm install
を実行することはないということです)。
プロジェクトの作成
プロジェクト用のディレクトリがなければ作成し、package.json
ファイルを作成しておきます。
各モジュールのインストール
TypeScript をインストールします。
React 関連のモジュール(react
、react-dom
)と、その型定義をインストールします。
本体の方は実行時にも使用するので、--save
オプションでインストールする必要があります。
webpack 関連のモジュールをインストールします。
コマンドラインツールの webpack-cli
、TypeScript コードを認識させるための ts-loader
、HTML ファイルを生成するための html-webpack-plugin
も一緒にインストールします。
確認
ここまでで、package.json
内の依存定義 (devDependencies
) は次のようになっています。
設定ファイル
ディレクトリ構成
下記のようなディレクトリ構成を想定して、各種ツールの設定を行っていきます。
ソースコードや各種リソースファイルは src
ディレクトリ以下に作成し、webpack によるバンドル結果を dist
ディレクトリに出力します。
最終的に dist
ディレクトリの中身を Web サーバーにデプロイすることになります。
ルートディレクトリには、設定ファイル以外のファイルをなるべく置かないようにするとスッキリします。
webpack の設定
Web サイト用のコンテンツは webpack
コマンドにより生成するため、webpack の設定は重要です。
webpack は、ここで指定されたエントリーポイント(.js
あるいは .ts
ファイル)を起点にファイルの依存関係を認識し、それらのファイルをバンドルします。
Web サイト用のクライアントスクリプトを TypeScript で作成する場合は、.ts
ファイルおよび、.tsx
ファイルを ts-loader
で処理するように指定しておく必要があります。
webpack はあくまでバンドルツールなので、HTML ファイルの出力などはオプショナルな振る舞いになります。
上記の例では、html-webpack-plugin
の機能を使って、src/index.html
から dist/index.html
を生成するように設定しています。
TypeScript の設定
webpack によりデプロイ用のファイル群を生成する場合、TypeScript のトランスパイルも webpack 経由で実行することになります(tsc
コマンドは直接実行しない)。
TypeScript の設定ファイルでは、基本的な変換ルールだけ定義しておきます。
ほとんど空っぽでも動くはずですが、.tsx
ファイル内の JSX コードを認識させるための設定は必須です。
Hello World の実装
基本的な設定が終わったので、React を使って独自の <Hello>
コンポーネントを作る実装を行います。
src/index.html
トップページとなる index.html
ファイルを作成します。
script
要素は webpack が勝手に挿入してくれるので、最小限の要素だけ記述しておけば OK です。
src/index.tsx
Web アプリのエントリポイントとして設定したスクリプトを作成します。
ここでは、React コンポーネントとして Hello
コンポーネントを作成し、HTML のルートに配置した div
要素の内容として表示します。
ビルド
次のように webpack
コマンドを実行すると、dist
ディレクトリ以下に Web サイト用コンテンツが出力されます。
Web ブラウザで dist/index.html
を開いて、Hello, React! と表示されれば成功です。
あとは必要に応じて、npm run build
でビルドを実行できるようにスクリプトを定義しておきます。
関連記事
- Electron で Hello World (2) TypeScript で開発できるようにする
- Node.js で GitHub REST API を使用する (@octokit/rest)
- TypeScriptの型: インタフェースのプロパティを読み取り専用にする (readonly)
- TypeScriptの型: インタフェースを定義する (interface)
- TypeScriptの型: 関数を定義する (function)
- Azure Table Stroage を使ってみる: TableService を Promise 化して使いやすくする
- TypeScript: 2つの変数の値をスワップする