[Sy] npmを使わずにReactの開発環境を構築する方法(オフィシャルサイトからダウンロード)
通常 React の開発環境を作る場合、npm や bower といったパッケージマネージャを使う事になるかと思いますが、まだまだ npm って何?という人だっていると思うので、npm を使わないで環境を作る方法をまとめてみました。その他、ささっと React の挙動を見てみたい、という場合などにも良いかと。ただし、非推奨な部分もあるので、本格的な開発にはちゃんと npm 使いましょう。
2016/07/04追記
この記事よりもキレイで楽な方法があったので、別記事を書きました。(この記事を軽く読んでから続けて読んでもらうと経緯がわかりやすいかと)
⇒ [Sy] npmを使わずにReactの開発環境を構築する方法(CDNで配信されているReactとbabel-coreを利用)準備
Webサーバ(Nginx, Apacheなど)が動いている環境を用意してください。
(以下、http://localhost/index.html
というURLでの作業を想定して書いてます)
react.jsとreact-dom.jsをダウンロードしてくる
オフィシャルサイトへ行き、ダウンロードします。
⇒ Downloads | ReactIndividual Downloads の development のところにあるreact.js
とreact-dom.js
のリンクをクリックするとダウンロードできます。
この記事を書いている時点(2016年7月5日)ではバージョンは15.2.0
で、react.js
のサイズは691KB
、react-dom.js
のサイズは1KB
くらいでした。
Reactのバージョン
react.jsのバージョンは、0.13、0.14とマイナーバージョンとして扱われてましたが、0.15となるタイミングでメジャーバージョンに切り替えて、15.0としてリリースされています。
react-dom.jsについて
v0.14から、react.jsからDOMを扱う部分がreact-dom.jsとして分離されています。なのでv0.13以前の記事にはreact-dom.jsを読み込むという記載はないですが、0.14以降は必要となります。
HTMLから react.js と react-dom.js を読み込む
今回、ページを作成するためのドキュメントルートをRootディレクトリとします。まずは、
- Rootディレクトリに
index.html
を作成(とりあえず中身は空でもOK) - JavaScriptファイル用のディレクトリ
js/
を作成 js/
に先ほどダウンロードしてきたreact.js
とreact-dom.js
を置く
ここまでやります。すると以下の様な階層になります。
Root/
+ - index.html
+ - js/
+ - react.js
+ - react-dom.js
続いて、index.html
を編集して、react.js
とreact-dom.js
を読み込みます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Reactサンプル</title>
</head>
<body>
<h1>Reactサンプル</h1>
<div id="container"></div>
<script src="js/react.js"></script>
<script src="js/react-dom.js"></script>
</body>
</html>
ここまでできたら、index.html
をブラウザで表示してみます。http://localhost/index.html
といった感じでURLを入力して表示してください。
以下のようにHTMLの内容が表示されて、Developer toolsのコンソールにエラーが出ていなければ読み込み成功です。
もし、
GET http://localhost/js/react.js
net::ERR_FILE_NOT_FOUND
のような赤文字のエラーメッセージが出ていたら、react.js
を置いた場所が間違っているか、HTMLのscriptタグで指定しているreact.js
のパスが間違っている可能性があるので、上のディレクトリの構成とHTMLファイルの内容と違うところがないか確認してください。
また、これとは別のエラーで、
Uncaught TypeError: Cannot read property
'__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED' of undefined
というものがreact-dom.js
で出ていたら、react.js
がきちんと読み込めていないか、index.html
にてreact.js
より先にreact-dom.js
を読み込むタグを書いてる可能性があります。どちらにしてもindex.html
のscriptタグを見なおしてみてください。
react-devtoolsについて
先ほどのindex.html表示時にコンソールに出力されている「Download the React DevTools and use an HTTP server (instead of a file: URL) for a better development experience: https://fb.me/react-devtools」というメッセージですが、これはReactでの開発に便利なChrome拡張をインストールすることを勧めているものです。とりあえず今回はインストールせずに進めます。
JSXを使ったReactのコードを書く
簡単な例として、Hello, world!
という文章をReactを使って先ほどのindex.html
に表示してみます。
新しくRootディレクトリの下に、jsx/
ディレクトリを作り、その中にapp.js
を以下の内容で保存します。
ReactDOM.render(
<p>Hello, world!</p>, document.getElementById('container')
);
このコードは、「containerの子要素としてHello, world!
というpタグを作ってね」という意味になります。
app.js
を追加して、できあがる階層はこうなります。
Root/
+ - index.html
+ - js/
| + - react.js
| + - react-dom.js
+ - jsx/ <- jsxディレクトリ作成
+ - app.js <- app.jsを配置
ファイルを配置できたら、index.html
からjsx/app.js
を読み込みます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Reactサンプル</title>
</head>
<body>
<h1>Reactサンプル</h1>
<div id="container"></div>
<script src="js/react.js"></script>
<script src="js/react-dom.js"></script>
<script src="jsx/app.js"></script> <- app.jsを読み込む
</body>
</html>
JSXをJavaScriptに変換する(JSXTransformerの利用)
ここまでで必要なコードはすべて準備できました。
が、試しにindex.html
を再読み込みしてみても、「bodyタグの子要素としてHello, world!
というpタグを作ってね」という、やりたかったことができていないのが分かるかと思います。
なぜかというと、 JSXで書かれたコードをきちんと実行するためには、JavaScriptに変換してあげる必要がある からです。
ということで、いくつかJSXをJavaScriptに変換(トランスパイルと言います)する方法があるのですが、今回は一番簡単なJSXTransformer.js
というライブラリを使って行います。
JSXTransformer.jsを使った変換は非推奨になりました。
React v0.13 までは、ここで紹介する JSXTransformer.js を使ったり、 react-tools という npm でインストールできるパッケージを使って事前にトランスパイルする方法でも良かったみたいですが、v0.14からはこの両方ともに非推奨となっており、代わりに Babel を使う方法が推奨されています。今回は npm に触れずに説明したかったので、Babel を使わずに JSXTransformer.js を使っていますが、あくまでも簡易的に React を試すという用途だけに留めてください。普通に使っていたらうまく動かない可能性があります。
JSTransformer.js
はもう公式にはダウンロードページがなさそうなので、以下URLから落としてください。
ダウンロードしたら、js/JSXTransformer.js
として配置し、index.html
で読み込みます。app.js
よりも先にJSXTransformer.js
を読み込むようにしてください。
また、app.js
をJSXからJavaScriptに変換するために、type="text/jsx"
と属性を追加してあげます。これでJSXTransformer.js
がapp.js
をトランスパイルしてくれます。
Root/
+ - index.html
+ - js/
| + - react.js
| + - react-dom.js
| + - JSXTransformer.js <- 追加
+ - jsx/
+ - app.js
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Reactサンプル</title>
</head>
<body>
<h1>Reactサンプル</h1>
<script src="js/react.js"></script>
<script src="js/react-dom.js"></script>
<script src="js/JSXTransformer.js"></script> <- app.jsの前に追記
<script src="jsx/app.js" type="text/jsx"></script> <- type属性を追加
</body>
</html>
index.htmlを再読み込み
index.html
を再読み込みすると、以下のようにHello, world!
と表示されるはずです。
Developer Tools で要素を見てみると、ちゃんとcontainerにpタグが生成されているのがわかります。
こうなってますね。
・
・
<body>
<h1>Reactサンプル</h1>
<div id="container">
<p data-reactroot>Hello, world!</p> <- Reactによって追加された要素
</div>
・
・
以上、npmを使わない方法での React の環境構築の手順でした。
ひとこと
なんとか npm を使わずに React のサンプルが動きましたが、上にも書いたとおりJSXTransformer.js
は非推奨になったので、なるべく早く npm や bower の環境を整えて、Babel を使う方法に切り替えないとつらくなってくるかもしれません。