53
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

React環境構築(初心者向け)

(2017年1月7日)

読んで欲しい人

なんとなくReactやってみたい人。

必要技術

・javaScript
・Webpack(Babelとかbrowserifyでも大丈夫です。この記事はWebpack)
・ターミナルがちょっと使える。

(僕もReact始めて3週間あまりなので、
間違えがあればご指摘ください。)

Reactがすごい勢いで流行っています。フロントエンドの流れとしてはWebサービスからSPAのサービスへ流れが来ているような気がしています。
僕もこれまではフロントエンドのフレームワークはAngularJSをもっぱら使っていたのですが
Angular2になったり、また2017年3月にAngular4がリリース宣言されることなどあって、
フロントエンドの流行り廃りはとても早くなって来ています。

React.jsとは

ReactはMVCフレームワークでいうところのV(View)のみに特化しているJavaScriptのライブラリです。
僕もまだReact初めて3週間ですが、僕が気がついているReactの優れているところは
・仮想DOM(Virtual DOM)でページ全体をロードしなくても必要なDOMだけ書き換えることができる。
・これまで複雑だったコンポーネントを一つ一つ管理することができる。
・(Fluxアーキテクチャの)Reduxを使えば、データの方向を一方通行にすることができる。
まずReactやってみて上記の上から2つは、reactの良さに気がつくと思います。

react.png

(SPA:シングルページアプリケーションとは)

SPAという言葉を聞いたことがあるかもしれませんが、
デスクトップでFacebookを開いてみた時を想像してください。
縦に3列のコンテンツがあって、それぞれがリアルタイムで更新されています。
例えば誰かが記事を書くと、それがリアルタイムで更新されて、
真ん中のコンテンツのウォールが更新されるという挙動をすると思います。
このようにページを更新しないで中身だけを更新するような(ざっとですが...)仕組みのことをSPAと呼びます。

実際に書いてみましょう

公式チュートリアルを見るのが一番いいのですが、
僕も英語は苦手だったので、そのような人のために公式を簡単に説明します。
まずは大前提として、Reactはjsにそのまま書いてもブラウザでは見れない!
ということを頭に入れておきましょう。
Reactだけを勉強してもダメですね。

まずはReactがどのようなものか書いてみます。

app.js
import React from 'react'
import ReactDOM from 'react-dom'

class App extends React.Component{
  render(){
    return(
      <div>Hello World</div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById("content"))
index.html
<!Document html>

...(略)

  <div id="content"></div>

...

Reactは基本このような形で書いていきます。
他の記事を見るとレンダリングは
render(<App />, document ... )
とかで書いてあることもありますが、
ReactDOM.render(<App />, document.getElementById("content"))
で問題ないと思います。
(ちなみにReactでは大文字小文字に気をつけないとエラーする印象でしたのでお気をつけください。(例:Component))

まずは環境構築

ターミナルを使ってディレクトリを作りましょう

$ mkdir reactSample
$ cd reactSample

次にpackage.jsonを作ります。
$ npm init -y

その後はindex.htmlとapp.jsを作ります。

$ touch index.html
$ touch app.js

そうすることで基本のフォルダができると思います。

reactSample/
|
|ーーindex.html
|
|ーーapp.js
|
|ーーpackage.json

ただ、これだけではReactは動かないので、続いてwebpackにてreactを通常のJavaScriptに変換する必要があります。

reactとreact-domのインストール

まずはreactとreact-domをインストールしましょう。
$ npm install --save react react-dom

先ほど書いたapp.jsの

app.js
import React from 'react'
import ReactDOM from 'react-dom'
...

で読み込んでいることになります。

Webpackのインストール

続いてwebpackのインストールです。
npm install webpack@beta -g
ローカルにもインストールしましょう
$ npm install --save-dev webpack

Babelのインストール

$ npm install --save-dev babel-loader babel-core babel-preset-es2015 babel-preset-react

その後、.babelrcファイルを設定します。

$ touch .babelrc
$ open .babelrc

.babelrcのファイルに以下のコードを追加してください。
{"presets: ["react", ""es2015]"}

続いてwebpackでReactで書いたコードをブラウザからも読み込めるようにwebpackの設定をします。

$ touch webpack.config.js
$ open webpack.config.js

次のコードを挿入しましょう。

webpack.config.js
module.exports = {
  entry: './app.js',
  output: {
    path: './dist',
    filename: 'bundle.js'
  },
  module: {
    loaders: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      }
    ]
  }
}

ブラウザリロードの実装

Reactコードをwebpackでブラウザに読み込めるようにするコードは
$ npm run build
ですが、コードを変更した時にいちいちコマンド入力するのは面倒だと思うので、
ターミナルでwebpackを実行するために、package.jsonに以下を書き込みます。

package.json
...
...
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack",
    "start": "webpack-dev-server --hot --inline"
  }
...

これでコードを新しく書くたびにブラウザがオートリロードします。

・webpackの実行
$ npm run build

・自動リロード
$ npm start

最後はindex.htmlに以下コードを追加します。

index.html
...
  <script src="./dist/bundle.js"></script>
...

これで http://localhost:8080 でReactが見れるようになると思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
53
Help us understand the problem. What are the problem?