0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Create React Appのカスタムテンプレートで最小構成のプロジェクトをつくってみた

Posted at

記事のポイント

  • Create React App のカスタムテンプレートの説明
  • 最小構成のプロジェクトの紹介

Create React App とは

以下のようなワンライナーで、Reactのプロジェクトを作成できるツールです。
通常、Reactで作成したプログラムをブラウザで動かすには、WebpackやBabelなど
のビルドツールを自分で設定する必要がありますが、その作業をスキップし、
すぐにコードを書き始めることができます。

yarn create react-app my-app

カスタムテンプレートに関して

Create React App には いくつかのテンプレートが用意されています。
例えば、TypeScriptによるプロジェクトを作成したい場合、以下のように実行します。

yarn create react-app my-app --template typescript

テンプレートの実体は、src, public のなどのディレクトリや package.json であり、プロジェクトの作成時に、それらが適切なパスにコピーされているようです。テンプレートの具体的な内容はここを参照ください。GitHubにあるTypeScriptのテンプレート例です。

このテンプレートは、自作することができます。カスタムテンプレートと呼ばれ、有志によって様々なテンプレートが作成されています。こちらがnpmでの検索結果です。

この記事は、カスタムテンプレートを使ってテンプレート部分を可能な限り小さくし、Create React Appの構成を理解する記事にです。

最小構成のプロジェクトを作成する

テンプレートのディレクトリ構成は以下です。

.
├── README.md
├── package.json
├── template
│   ├── README.md
│   ├── gitignore
│   ├── public
│   │   └── index.html
│   └── src
│       └── index.js
└── template.json

トップの package.json はこのテンプレートを公開するためのファイルで、以下の記述が必要になりました。また、version はセマンティックバージョンの形式を守る必要がありました。
さらに、template.json は作成したプロジェクトの package.json に追加する項目を定義するファイルで空の JSON を記述しました。それ以外のファイルは空のファイルです。

{
  "name": "cra-template-minimum",
  "version": "1.0.0"
}

以下のコマンドでプロジェクトを作成できます。file:プレフィックスを使用することで、作成した
テンプレートをパッケージとして公開せずに、ローカル環境にプロジェクトを作成することができます。

yarn create react-app hoge --template file:cra-template-ykonomi

作成されたプロジェクトのディレクトリ構成は以下です。
.git, node_modulesはリスト化する意味がないため、省略しています。
テンプレートにあったファイルが配置されるのが確認できると思います。

% tree -aI 'node_modules|.git'                                                                                                                                                                                                              master
.
├── .gitignore
├── README.md
├── package.json
├── public
│   └── index.html
├── src
│   └── index.js
└── yarn.lock

また、package.json は以下のようになります。スクリプトにあるコマンドは期待通り実行できます。(index.jsが空のため、yarn start しても真っ白ですが...)
ここからは推測ですが、自作のテンプレートとの差分はこのファイルのみです。そのため, Create React App は、テンプレート + react-scriptsで構成されるプロジェクトを提供するツールなのではと思います。ちなみに、eject コマンドによって react-scripts によるラップを外し、Webpack, Babel等のビルドツールを直接扱うことができます。

{
  "name": "hoge",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^17.0.2", "react-dom": "^17.0.2", "react-scripts": "4.0.3"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

まとめや所感

カスタムテンプレートを使って、最小構成のプロジェクトを作成しました。
このプロジェクトを眺めることで, Create React App がやっていることを
なんとなく理解することができました。
ビルドの構成をツールに任せてしまうため、ビルド周りの設定をいじる際は
(当然)辛くなるツールですが、さくっとアプリを作りたい, なにかを検証したい際
には役立つツールだと思います。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?