🐣

React レクチャー1 (概要とHelloWorld)

2021/09/27に公開

https://zenn.dev/nyarufoy/articles/3744f13447e959

このレクチャーの目的

  • 新しい言語(React)に触れる
  • 簡単なアプリケーションを作成
  • GithubPagesを使ってサイトを公開する

Reactの公式リファレンスを参考にして、簡単なアプリケーションを作成します。実際に資料を作るにあたって参考にした文献、また、おすすめのサイトを最後に記載しておくので、興味があれば是非読んでみてください。

Reactとは

  • Facebookが開発したUI[1]を構築するためのJavaScriptライブラリ[2]
  • Facebook, Instagramはもちろん、Yahoo!やSlackなどにも使用されている
  • コンポーネント[3]ベースで宣言的なView[4]が特徴的
  • 仮想DOM[5]が使用されているので、処理が高速である

環境構築

・Windowsの場合

Node.js公式ページより、推奨版をダウンロード。

Node.jsとは

JavaScriptの実行環境である。
Node.jsを用いることによって、サーバープログラムをJavaScriptで開発できるようになる。

npmとは

Node Package Managerの略。
Node.jsのパッケージを管理するツールである。

コマンドプロンプトで以下のコマンドを入力してインストールが成功しているかを確認。

$ node --version
v14.17.4
$ npm --version
6.14.14

上記のようにversion(Node.js:10.16以上, npm:5.6以上)が出力されていれば大丈夫です。
また、yarnもインストールしておくと便利です。以下のコマンドでインストール可能。

$ npm install -g yarn
$ yarn --version
1.22.11

・Macの場合

多分Windows同様でいけるはず

create-react-app

お好きなところに、Lecture(正直名前はなんでもいい)というディレクトリを作成してください。
その次に、create-react-appでtictactoe-app(上記同様)という雛形を作成。

$ cd Lecture
$ npx create-react-app tictactoe-app

何も問題がなければ、以下のコマンドでReactアプリを起動できます。

$ cd tictactoe-app
$ npm start

localhost:3000で以下のような画面が表示されていれば成功です。

ファイル構成と準備

ファイル構成

tictactoe-app
  ├── node_modules  (npmで管理されるモジュール類がまとめてある)
  ├── public (公開フォルダ。 HTMLやCSS、画像など静的ファイルを格納)
- │   ├── favicon.ico
  │   ├── index.html (重要: アクセス時に表示される部分)
- │   ├── logo192.png
- │   ├── logo512.png
- │   ├── manifest.json
- │   └── robots.txt
  ├── src (基本的に触るのはここ。開発ファイル、JSXファイルはここに格納)
  │   ├── App.css (App.jsのスタイルシート)
  │   ├── App.js (重要: index.htmlに組み込み実際に画面を表示しているコンポーネント)
- │   ├── App.test.js
  │   ├── index.css (index.jsのスタイルシート)
  │   ├── index.js (重要: アプリのベースとなるスクリプト)
- │   ├── logo.svg
  │   ├── reportWebBitals.js
- │   └── serviceWorker.js
  ├── .gitignore (githubにコードをあげる際に使用。不必要なファイルを指定)
  ├── package-lock.json (npm又はyarnに関する設定情報)
  ├── package.json (npmでパッケージ管理をするための設定情報)
  └── README.md (プロジェクトの説明情報、取扱説明書)

描画を行う中で特に重要なファイルが、以下の3つになります。

  • public/index.html
  • src/App.js
  • src/index.js

public/index.html

public/index.html
 <!DOCTYPE html>
 <html lang="en">
   <head>
    <meta charset="utf-8" />
-    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
-    <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <meta name="theme-color" content="#000000" />
-    <meta
-      name="description"
-      content="Web site created using create-react-app"
-    />
-    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
-    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
    <title>React App</title>
   </head>
   <body>
-   <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
   </body>
 </html>

<title></title>で、ページのタブ部分に表示されるタイトル名を指定。
<body></body>で、ページの全体部分を指定。
また、bodyタグの中にある<div id="root></div> で、src/App.js部分を描画しています。
重要なところは、上記の部分のみなので、それ以外の\textcolor{red}-部分は削除してOKです。

また、<meta charset="utf-8" />となっているので、エンコーディングを「UTF-8」に設定して保存するようにしてください。ここを合わせないと、文字化けの原因となります。

src/App.js と Hello World

src/App.js
- import logo from './logo.svg';
 import './App.css';

 function App() {
   return (
+     <h1> Hello, World! </h1>
-     <div className="App">
-       <header className="App-header">
-         <img src={logo} className="App-logo" alt="logo" />
-         <p>
-           Edit <code>src/App.js</code> and save to reload.
-         </p>
-         <a
-           className="App-link"
-           href="https://reactjs.org"
-           target="_blank"
-           rel="noopener noreferrer"
-         >
-           Learn React
-         </a>
-       </header>
-     </div>
   );
 }

 export default App;

App.jsが先ほどpublic/index.htmlで指摘した通り、サイトのbody部分になります。
とりあえず、お馴染みのHello,World!を表示してみましょう。

上記の画像のように表示されていれば成功です。

src/index.js

src/index.js
 import React from 'react';
 import ReactDOM from 'react-dom';
 import './index.css';
 import App from './App';
-import reportWebVitals from './reportWebVitals';

 ReactDOM.render(
-  <React.StrictMode>
+    <App />,
-    <App />
-  </React.StrictMode>,
   document.getElementById('root')
 );

-reportWebVitals();	

src/index.jsでは、<App/>,document.getElementById('root')で、App.jsの内容をpublic/index.htmlの<div id="root"></div>に表示しろと命令しているものになります。
<React.StrictMode>というのは、構文などを細かくチェックするモードを指定するもので、表示や動作とは直接関係しないため、今回は削除しています。あってもなくてもどちらでも良いです。

実際に、不要なファイル、重要なファイルの書き換えを行なった上でHello Worldがきちんと表示されているか動作確認を行ってみましょう。

https://zenn.dev/nyarufoy/articles/3744f13447e959

脚注
  1. UI:ユーザーインターフェイス。ウェブ上の操作性や見た目に関わる部分。 ↩︎

  2. ライブラリ:様々な便利な機能を詰め込んだもの。開発を効率化できる。 ↩︎

  3. コンポーネント:UIを部品単位にしたもの。ボタンなど。 ↩︎

  4. 宣言的なView:どういうデータを描画したいかを記述。わかりやすい。HTMLライクな書き方。(多分) ↩︎

  5. 仮想DOM:HTMLを構築する木構造データのこと。更新部分だけをレンダリングする。 ↩︎

GitHubで編集を提案

Discussion