新規に作るReact.jsプロジェクトの、新しい始め方について書きます。スターターキットの代わりにどうぞ。
React.jsのひな形を簡単に作れるcreate-react-app
が公開されました (2016/07/22)
Launching create-react-app, a no config getting started experience, #nomorejsfatigue https://t.co/fqVWgn7w5t
— React (@reactjs) July 22, 2016
Facebook(React.js開発元)がきょう、React.jsアプリを素早く作成するコマンドラインツール、create-react-app
を公開しました。
- 公式ブログ記事: "Create Apps with No Configuration"
- GitHub:
facebookincubator/create-react-app
React.jsで「本格的な」アプリを作る際はWebpackやBabelなどの設定をいじる必要があり、導入障壁が高かったのですが、create-react-app
を使えばそれらのステップをすっ飛ばせます。さっそく使ってみましょう。
導入方法
create-react-app
コマンドをインストールする
注: Node.js (version 4以上)がインストールされている必要があります。
npm install -g create-react-app
create-react-app
コマンドでアプリを作成する
以下のコマンドを実行すると、新しくhello-world
ディレクトリが作られ、React.jsアプリに必要なファイルがコピーされます。このときにnpm install
が実行され依存パッケージが全てインストールされるため、少々時間がかかります。
create-react-app hello-world
サーバーを開始する
hello-world
ディレクトリに行き、
npm start
を実行するとサーバーが起動し、http://localhost:3000
を開けばアプリを見ることができます。
ファイルを触ってみる
試しにファイルを編集してみましょう。src
ディレクトリの中にあるApp.js
を開き、Welcome to React
という文字をReactへようこそ
に変えて保存します。
そしてブラウザを更新すると、変更が反映されていました。
構文チェックもしてくれます
かりに間違って、logo
ではなくlog
とタイポしてしまったとします。
すると、npm start
を実行したターミナル画面で警告が表示されます。
構文チェックのために、裏側でeslint-loader
が使われているようです。ただ、「Reactでバグが起こりやすい間違い」コードだけが構文チェックの対象になっており、「こういう書き方をしなければいけない」という所謂opinionatedなチェックはあまりないようです。
package.jsonの依存もシンプル
依存するパッケージがreact
とreact-dom
とreact-scripts
のみなので、多くのパッケージを管理する必要がありません。
{
"name": "hello-world",
"dependencies": {
"react": "^15.2.1",
"react-dom": "^15.2.1"
},
"devDependencies": {
"react-scripts": "0.1.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"eject": "react-scripts eject"
}
}
公開用のファイルを出力する
作ったアプリを公開するにはどうすれば良いのか?まず、
npm run build
を実行します。すると、build
ディレクトリにindex.html
とCSS、JS、ソースマップファイルが保存されます。これらを静的ファイルを返してくれるサーバーに配置すればOKです。GitHub Pagesにデプロイするのが一番簡単かもしれません。
ちなみに、build
ディレクトリの中のindex.html
ファイルを直接開いても何も表示されませんので、ローカルで静的ファイルサーバーを立ち上げる必要があります。build
ディレクトリで以下のコマンドを実行してみてください。
cd build # buildディレクトリに移動
npm install -g http-server
hs
open http://localhost:8080
裏では何が使われているの?WebpackやBabelのカスタマイズは?
READMEによると、裏側では以下のツールが使われているようです(公開当時)。
(公開時点で)入ってないもの
- サーバーサイドレンダリング
- テスト用のスクリプト
- ES7が使えるようになるBabelの設定
- LESS, Sass, CSS Modules
- ホットリロード
カスタマイズするには
裏側で使われているWebpackやBabelの設定をカスタマイズしたい場合、
# 注意: これをやると元に戻せません。
npm run eject
を実効すると、config
とscripts
ディレクトリにBabelやWebpackの設定ファイルが書き込まれます。(注意: 一度これをやると元に戻せませんので、どうしてもカスタマイズが必要なときだけに実行しましょう。)
├── config
│ ├── babel.dev.js
│ ├── babel.prod.js
│ ├── eslint.js
│ ├── flow
│ ├── webpack.config.dev.js
│ └── webpack.config.prod.js
├── ...
├── package.json
├── scripts
│ ├── build.js
│ ├── openChrome.applescript
│ └── start.js
また、package.json
も、いままではreact-scripts
だけに依存していましたが、それが裏側で使われているnpmパッケージに置き換えられます。
どうしてcreate-react-app
が作られたの? (公式ブログより意訳)
箇条書きで書くと、
- 今までのフロントエンドフレームワークは生のJSで書いても問題なかったが、ReactはJSXやES6(ES2015)を使うことが推奨される
- JSXやES6を使うにはBabelやWebpack、ESLintなどのツールが必要不可欠なので、学習コストが増加した。どのパッケージを入れればいいか悩んだり、依存管理が面倒になるなど、「Reactを使うことによるJS疲れ (JavaScript Fatigue)」が問題になる。参考記事: フロントエンドへの複雑化について、一つの視点。Reactのスターターキットも乱立し、「どうやってReactのプロジェクトを始めればいいか分からない」という開発者が続出。
- React.js開発元のFacebookは、いままで「Facebook内で使われているReact周りのツールやライブラリ」しかリリースしてこなかった。Facebook社内では既にReactの設定周りが構築されていたため、「Reactを使いはじめるコストが高い」という問題にFacebookは積極的に取り組んでこなかった。
- しかし、最近になってFacebookもそのスタンスを少し改めるようになったらしく(参考リンク)、Facebook内では必要とされてなくてもコミュニティーで必要とされているツールもリリースするようになったらしい。
create-react-app
はその一つだそう。
けっきょく、create-react-app
はリリース後数時間で1500スターを突破しました。ぼくが投げたPRも一瞬でマージされました。感謝です。
ありがとうございました
リツイートしてくださると嬉しいです。
今日リリースされたライブラリについて日本が朝になるまでに書きました。🔰 Qiita初投稿です。/ Facebook公式のcreate-react-appコマンドを使ってReact.jsアプリを爆速で作成する @Qiita https://t.co/sAeTYb9NL0
— Shu Uesugi (@chibicode) July 22, 2016
開発者のAbramov氏にもリツイートされました。