Linux(CentOS7)で React の開発環境を構築

yamadaCentOS,linux,React

こんにちは。開発グループの yamada です。

最近 React でフロントエンドの開発を行う機会があり、Linux で開発環境を構築しましたので、それについてまとめてみました。

書籍やネット記事等では、作業用PC(Mac/Windows)に開発環境を構築して、ブラウザからlocalhostにアクセスして動作確認するという内容が多いですが、今回は作業用PCとは別のLinuxマシン(CentOS7)に開発環境を構築して、作業用PCからブラウザアクセスして動作確認できるようにしています。

※Facebook公式のcreate-react-appを使えば簡単に構築できますが、不要なものも多くインストールされてしまってカスタマイズしたい時に面倒なので、今回は最低限なパッケージのみインストールして構築したいと思います。

説明の流れは下記となります。

  1. node.js と npm のインストール
  2. プロジェクトの作成
  3. React 等を npm でインストール
  4. 動作確認

node.js と npm のインストール

node.js と npm のインストール方法はいろいろありますが、下記を参考にしました。
https://github.com/nodesource/distributions/blob/master/README.md#enterprise-linux-based-distributions

今回はバージョン 8 系をインストールします。
node.js と共に npm もインストールされます。

# curl -sL https://rpm.nodesource.com/setup_8.x | bash -
# yum -y install nodejs

node.js と npm のバージョンを表示してインストールできているか確認します。

# node -v
# npm -v

プロジェクトの作成

次にプロジェクトを作成します。

まずプロジェクトのディレクトリを作成します。今回は sample_app というプロジェクトを作りたいと思いますので、ディレクトリ名も sample_app とします。

$ mkdir sample_app

sample_app ディレクトリに移動して、プロジェクトを初期化します。
(これ以降の操作はすべて sample_app ディレクトリ直下を基準に行います)

$ cd sample_app
$ npm init -y

初期化すると package.json が生成されます。
この package.json の中の “scripts" の部分を下記に変更します。

  1. "scripts": {  
  2.   "start""webpack-dev-server",  
  3.   "build""webpack -p"  
  4. },  

“start" 行は webpack-dev-server を起動する設定です。
“build" 行は公開用ファイルを生成する設定です。

次に React のソースを格納する src ディレクトリと、公開用ファイルを格納する public ディレクトリも作成しておきます。

$ mkdir src
$ mkdir public

React 等を npm でインストール

react 本体、webpack、babel などをインストールします。
(実際に開発を進めていくには react-redux、react-router、eslint、css-loader、style-loader など、他にもインストールするものはあるかと思いますが、今回は必要最小限ということで省きます)

$ npm install react react-dom
$ npm install webpack webpack-dev-server webpack-cli --save-dev
$ npm install babel-cli babel-loader@7 babel-preset-env babel-preset-react --save-dev

開発用で使うものは --save-dev オプションを指定してインストールします。
逆にアプリケーション自体の実行に必要なもの (react、react-dom) は --save-dev を付けません。

インストールが完了したら、babel と webpack の設定ファイルを作成します。(最低限必要そうな設定のみ入れています)

.babelrc

  1. {  
  2.   "presets": ["env""react"]  
  3. }  

webpack.config.js

  1. module.exports = {  
  2.   entry: { app: "./src/index.js" },  
  3.   output: {  
  4.     path: __dirname + '/public/js',  
  5.     filename: "[name].js"  
  6.   },  
  7.   devServer: {  
  8.     contentBase: __dirname + '/public',  
  9.     port: 8080,  
  10.     publicPath: '/js/',  
  11.     disableHostCheck: true,  
  12.     host: '0.0.0.0'  
  13.   },  
  14.   module: {  
  15.     rules: [  
  16.       {  
  17.         test: /\.js$/,  
  18.         exclude: /node_modules/,  
  19.         loader: 'babel-loader'  
  20.       }  
  21.     ]  
  22.   },  
  23.   mode: 'none'  
  24. };  

webpack-dev-serverのポートは8080にしていますが、ご利用の環境に合わせて、利用可能なポートに適宜読み替えてください。

webpack.config.jsのdevServer内の下記の部分が、localhost以外からアクセスできるようにするための設定です。

  1. devServer: {  
  2.   ...  
  3.   disableHostCheck: true,  
  4.   host: '0.0.0.0'  
  5. },  

これで開発環境の構築が完了しました。

動作確認

最後に環境構築が正しくできたか確認します。
まず Hello World を表示するだけの簡単なコードを用意します。

public/index.html

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.   <meta charset="utf-8">  
  5.   <title>Sample App</title>  
  6. </head>  
  7. <body>  
  8.   <div id="root"></div>  
  9.   <script type="text/javascript" src="js/app.js" charset="utf-8"></script>  
  10. </body>  
  11. </html>  

src/index.js

  1. import React, {Component} from 'react';  
  2. import ReactDOM from 'react-dom';  
  3.   
  4. class App extends Component {  
  5.   render() {  
  6.     return (<div>Hello World.</div>);  
  7.   }  
  8. }  
  9.   
  10. ReactDOM.render(<App />, document.getElementById('root'));  

コードが用意できたら、下記コマンドで webpack-dev-server を起動します。

$ npm start

この状態で作業用PCからブラウザで下記 URL にアクセスすると、 Hello World が表示されることが確認できます。

http://<ホスト>:8080

また、webpack-dev-server 起動中にソースを変更すると、変更内容が都度ブラウザに反映されるので、変更内容をすぐに確認することもできます。

Web公開する場合

Web公開する場合は、まず下記のコマンドでビルドします。

$ npm run build

ビルドすると public ディレクトリ内にjsディレクトリが作られ、その中に公開用の js ファイルが生成されますので、public ディレクトリの中身を Web サーバのドキュメントルート配下に設置すればOKです。

さいごに

今回はざっくりとした構築の流れのみ説明しました。まだまだ勉強不足なところもありますが、機会があればもっと踏み込んだ内容も書いていければと思います。

yamadaCentOS,linux,React

Posted by yamada