2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

React + DockerでHello World

Posted at

はじめまして、SE8年生の北山一郎です(誰?)
学習記録でもつけていこうかなと思いまして記念すべき一発目の記事です

はじめに

  • macOSです
  • React触ったことないからHello Worldしてみよう
  • 業務でDocker使ってるし勉強がてらDocker環境を作ろう
  • フロントエンドはReact、バックエンドは考えてない
  • ホストマシンにnodeとかあまり入れたくない
    • ホストマシンにNode.jsが不要
    • プロジェクト作成とコンテナ起動が1コマンドで完結
    • 既にプロジェクトが存在する場合はスキップ
    • Dockerfile/docker-composeがシンプルに
    • デメリットは初回のプロジェクト作成時に少し時間がかかる

Docker環境作成

ディレクトリ構成

.
└── hello-world-react/
    ├── docker/
    │   └── react/
    │       └── Dockerfile
    └── docker-compose.yaml

Dockerfile作成

# ./docker/react/Dockerfile
FROM node:18

WORKDIR /app

ENV WATCHPACK_POLLING=true

CMD ["npm", "start"]

docker-compose.yaml作成

docker-compose.yaml
name: hello-world-react

services:
  front:
    build: ./docker/react
    volumes:
      - ./app:/app
    ports:
      - "3000:3000"

コンテナ作成&起動

$ docker compose up -d --build

セットアップスクリプト作成

setup.sh
#!/bin/bash

# appディレクトリが存在しない場合のみ実行
if [ ! -d "app" ] || [ ! -f "app/package.json" ]; then
    # 一時的なコンテナでReactプロジェクトを作成
    docker run --rm -v $(pwd)/app:/app node:18 bash -c "cd /app && npx create-react-app . --template typescript"
fi

# Reactアプリケーションを起動
docker compose up -d --build

スクリプト実行

# スクリプトに実行権限を付与
$ chmod +x setup.sh

# セットアップと起動を実行
$ ./setup.sh

http://localhost:3000で動作確認
↓のページが表示されていればOK👍

「Hello World!!」を表示

./app/src配下にHelloWorld.tsxを作成

#app配下は大分略しています
.
└── hello-world-react/
    ├── app/
    │   └── src/
    │       ├── App.tsx
+   │       └── HelloWorld.tsx
    ├── docker/
    │   └── react/
    │       └── Dockerfile
    ├── docker-compose.yaml
    └── setup.sh

内容はシンプル

HelloWorld.tsx
export const HelloWorld = () => {
  return (
    <div>
      <h1>Hello World!!</h1>
    </div>
  );
}

作成したHelloWorld.tsxApp.tsxに読み込ませる

App.tsx
import React from 'react';
import logo from './logo.svg';
import './App.css';
import { HelloWorld } from './HelloWorld'; // ここを追加

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <HelloWorld /> {/* ここを追加 */}
        <p>
          Edit <code>src/App.tsx</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;

http://localhost:3000で動作確認
→のページが表示されていればOK👍

まとめ

  • Vue.jsの書き方に似てると思った
  • こういう小さいプログラムだとViteなどのビルドツールは無しでも問題ない
  • setup.shの# 一時的なコンテナでReactプロジェクトを作成でホストマシンを汚さずにプロジェクト作成ができた
  • .mdの書き方に少し慣れてきた

今後のReact学習

ToDoアプリとか何か作る中でReactの特徴に触れていけたらなと

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?