browserify+babelifyでReactアプリをトランスコンパイルできるシンプルなビルド環境を用意する

Reactアプリの開発環境は [create-react-app で簡単に構築できる](https://qiita.com/yamachan360/items/efcff4bd14fe623807ab) のですが、文法チェックから自動ビルドまで含めた万全の環境のため、ちょっと試すには少し重い気がします。なのでシンプルなトランスコンパイル環境を模索してみました。

最初は babel-cli だけで ok かと気軽に始めたのですが、Webブラウザ環境での import 問題が解決できず、結局は [browserify](http://browserify.org/) と [babelify](https://github.com/babel/babelify) の組み合わせに落ち着きました。

特に [babelify](https://github.com/babel/babelify) のページには設定サンプルが豊富で、とても参考になりました。

## 準備

node と npm は利用できるよう準備しておいてください。私は [node.jsの導入](http://qiita.com/HamaTech/items/adc3b07565eb29b0ed9f) あたりを参考に導入しました。

まずは作業用のディレクトリ(フォルダ)を作成します。今回は "rtk-react" としました。そして src, build のサブディレクトリを作成しておきます。

## シンプルなReactサンプル

まずは非常にシンプルなReactのサンプルを用意しましょう。

src ディレクトリに App.js ファイルを用意します。内容は以下をコピペしてください。

```js:src/App.js
import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(
  <p>Hello, world!</p>,
  document.getElementById('react-root')
);
```

また build ディレクトリに index.html ファイルを用意します。内容は以下をコピペしてください。

```html:build/index.html
<!doctype html>
<html>
<head>
  <meta charset="UTF-8">
  <title>rtk-react</title>
</head>
<body>
  <div id="react-root"></div>
  <script type="text/javascript" src="./App.js"></script>
</body>
</html>
```
サンプルはこれで準備できましたので、いよいよ環境の構築を始めましょう。

## トランスコンパイル環境の構築

まずは作業ディレクトリに package.json ファイルを用意します。内容は以下をコピペしてください。

```json:package.json
{
  "name": "rtk-react",
  "version": "1.0.0",
  "description": "Simple react transcode environment",
  "scripts": {
    "build": "browserify -t [ babelify --presets [ es2015 react ] ] src/App.js -o build/App.js"
  }
}
```

※ scripts 要素以外は自由に変更してok

この時点で作業フォルダの内容は以下のようになっているはずです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/9eebb44e-cd8d-47d1-5252-6709e10ada0e.png)

そして作業ディレクトリで以下のコマンドを順に入力して、必要なモジュールを導入します。

```
npm install --save react react-dom
npm install --save browserify
npm install --save babelify
npm install --save babel-preset-react babel-preset-es2015
```

実行後、package.json ファイルは、dependencies要素が追加されて以下のようになっていました。

```json:package.json
{
  "name": "rtk-react",
  "version": "1.0.0",
  "description": "Simple react transcode environment",
  "scripts": {
    "build": "browserify -t [ babelify --presets [ es2015 react ] ] src/App.js -o build/App.js"
  },
  "dependencies": {
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "babelify": "^7.3.0",
    "browserify": "^14.4.0",
    "react": "^16.0.0",
    "react-dom": "^16.0.0"
  }
}
```

node_modulesフォルダが自動作成されましたが、中はなかなかたいへんなことに…

![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/f0e689c9-5e1a-a5a2-ff78-874a1906c008.png)

これで開発環境の構築は完了です。

## トランスコンパイル作業の実施

作業ディレクトリで以下のコマンドを入力してトランスコンパイルを実行します。

```
npm run build
```

特にエラーが表示されなければトランスコンパイルは無事に実行されています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/25fff6d8-48d6-5e26-412e-89a6a6419875.png)

build ディレクトリに App.js ファイルが生成されていれば完了です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/d22496f9-4414-0f19-1279-f21b34f41130.png)

build ディレクトリにある index.html をWebブラウザで開き、サンプルアプリの動作を確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/7f146379-5aba-538d-5d57-39881e942bed.png)

## 生成されたjsファイル

元の src/App.js ファイルは146バイトしかないシンプルなものでした。しかしトランスコンパイルで生成された build/App.js ファイルは 813Kバイトもある巨大なファイルです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/193519/ba9bd8e4-42f6-e9fa-b9b0-1a726f8105fe.png)

import で呼び出されている React 関連のファイルが、全てこの build/App.js ファイルに追加されているので、これだけのサイズになっています。

## 関連ファイルのダウンロード

[rtk-react](https://github.com/yamachan/rtk-react) というリポジトリに今回のファイルを置いておきましたので、面倒な方はそちらからダウンロード/clone してお使いください。

## ライセンス

この投稿に含まれる私の作成したコード・画像・文章などは全て [Creative Commons Zero](https://creativecommons.org/publicdomain/zero/1.0/deed.ja) ライセンスとします。自由にお使いください。

## Enjoy!

Reactベースで開発したWebアプリをビルドするための、できるだけシンプルな環境を構築してみました。Material-UIなどのモジュールを追加して、自分なりのビルド環境に拡張する際の出発点になれば嬉しいです。

ではまた！