1
1

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 1 year has passed since last update.

フロントエンド開発環境用に諸々の設定したレポジトリを作っておく

Last updated at Posted at 2023-01-30

自動のフォーマッターなどの設定をGithubで管理しておこうと思います。その過程です。(個人開発レベル想定です)

これをしておけば……
コード書く → 保存するとVSCodeでフォーマットされる → コミットする → 自動でコミットメッセージがフォーマットに沿っているかチェックしたり、テストが走ったりする、だめなら弾かれる → いつもキレイやったー

記事日付
2023年1月31日
完成レポジトリ : https://github.com/opvelll/vite-react-project
使いたいときにレポジトリをクローンして設定をコピーしたり、テンプレートとして使ったりします。

今回は
・nodeとnpmで構築します。
・viteとReactが入っている
・自動のフォーマッター(Prettier,ESLint)
・コミットメッセージのチェック(Commitlint)
・VSCodeの設定を管理。
・Docker使わずnodeバージョン管理ソフト使います。
・GitHub Actionsは今回設定しない。ローカル周りの設定

想定環境
・Windows11とWindows Subsystem for Linux(以下WSL)
・理由はHuskyというツールでシェルスクリプトが走るので、ターミナルでシェルスクリプトが動かないと厳しい。

出てくるツール
・Volta
・Vite
・React
・TypeScript
・Vitest
・React Testing Library
・Prettier
・ESLint
・Husky
・ローカルcommitlint(あと VSCode で Commitizen

以下は作成作業工程のログです。

WSL

VSCodeとWSLをインストール
VSCodeにはWSL用プラグインをインストール

Volta

Node.jsのバージョン管理ソフトをインストール

curl https://get.volta.sh | bash

nodeをインストール

~$ volta install node
success: installed and set node@18.13.0 (with npm@8.19.3) as default
~$ cd fronttest/

viteでプロジェクトを作ります。

$ npm create vite@latest
Need to install the following packages:
  create-vite@4.0.0
Ok to proceed? (y) y
✔ Project name: … kp-test
✔ Select a framework: › React
✔ Select a variant: › TypeScript

プロジェクトに移動して、voltaでnodeとnpmのバージョン情報を記録してからnpm install

$ volta pin node npm
success: pinned node@18.13.0 (with npm@8.19.3) in package.json
success: pinned npm@9.4.0 in package.json
$ npm install

git init

VSCodeからinitialize RepositoryとPublish to GitHubを行う

commitlint

commitlintでコミットメッセージのチェック

npm install --save-dev @commitlint/{cli,config-conventional}
echo "module.exports = { extends: ['@commitlint/config-conventional'] };" > commitlint.config.cjs

チュートリアルと違い '.js' を '.cjs' に変更しています。

Husky

git hooksを設定できるHuskyをインストール install

npx husky-init && npm install
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'

以降Huskyの設定がところどころ入ります。

commitizen

commitメッセージの入力スタイルを強制できるcommitizenをインストールしますが、こちらはnpmのパッケージではなく、vscodeの拡張機能で使います。設定ファイルをつくり.cz-config.cjsとして保存。
下の設定で呼び出します。
設定ファイルはこちらのを編集して使用しました。

  "config": {
    "cz-customizable": {
      "config": ".cz-config.cjs"
    }
  }

Vitest

テストツールのインストール

$ npm install -D vitest

package.jsonのコマンドを変更

    "test": "vitest",
    "testrun": "vitest run",
    "coverage": "vitest run --coverage",

huskyで実行するコマンドも変更

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npm run testrun

React Testing Library

npm install --save-dev @testing-library/react

prettierとESLint

コードの自動整形ツールとコーディング規約ツールをインストールします。
これらは後でVSCodeの拡張機能もインストールします。

$ npm install --save-dev --save-exact prettier
$ echo {}> .prettierrc.json

以下は.prettierrcのデフォルト設定

{
    "trailingComma": "es5",
    "tabWidth": 4,
    "semi": false,
    "singleQuote": true
}

次に.prettierignoreファイルを作って.gitignoreの内容をコピペ。
node_modulesをとりあえず弾きます。

試す

$ npx prettier --write .

VSCodeの拡張機能からPrettierをインストール

VSCodeのPrettierをインストールします。
さらに.vscode/extension.jsonファイルを作りGitで管理して、プロジェクトに必要な拡張機能を指定します。

拡張機能を検索して、欄の歯車からAdd workspace recommendationsを押すと自動でファイルが作られ記載されます。

{
    "recommendations": [
        "esbenp.prettier-vscode",
        "knisterpeter.vscode-commitizen",
        "dbaeumer.vscode-eslint"
    ]
}

VSCodeの設定

設定ファイルも同じように管理します。
共有する設定は、save時に自動でフォーマットや、デフォルトのフォーマッターなどです。

ルートフォルダの上で右クリック>Open Folder Settingを開いて、defaultのformatterを上記のものに、save時に自動でフォーマットするように変更。設定すると.vscode/settings.jsonに自動で記載されます。

{
    "editor.formatOnSave": true,
    "editor.defaultFormatter": "esbenp.prettier-vscode"
}

.gitignoreを変更して上記のVSCode設定が共有されるよう変更します。

ESLintをインストール

$ npm init @eslint/config
Need to install the following packages:
  @eslint/create-config@0.4.2
Ok to proceed? (y) y
✔ How would you like to use ESLint? · problems
✔ What type of modules does your project use? · esm
✔ Which framework does your project use? · react
✔ Does your project use TypeScript? · No / Yes
✔ Where does your code run? · browser
✔ What format do you want your config file to be in? · JavaScript
Local ESLint installation not found.
The config that you've selected requires the following dependencies:

eslint-plugin-react@latest @typescript-eslint/eslint-plugin@latest @typescript-eslint/parser@latest eslint@latest
✔ Would you like to install them now? · No / Yes
✔ Which package manager do you want to use? · npm

生成された.eslintrcを変更します
nodeをtrue
react17以上に対応するためextendsに'plugin:react/jsx-runtime'を追加
参考: https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md#when-not-to-use-it

module.exports = {
    env: {
        browser: true,
        es2021: true,
        node: true,
    },
    extends: [
        'eslint:recommended',
        'plugin:react/recommended',
        'plugin:react/jsx-runtime',
        'plugin:@typescript-eslint/recommended',
    ],
    overrides: [],
    parser: '@typescript-eslint/parser',
    parserOptions: {
        ecmaVersion: 'latest',
        sourceType: 'module',
    },
    plugins: ['react', '@typescript-eslint'],
    rules: {},
}

prettierと干渉しないようにするプラグインもインストール

npm install --save-dev eslint-config-prettier

.eslintrcに追加

{
  "extends": [
    "some-other-config-you-use",
    "prettier"
  ]
}

試す

 npx eslint ./src

huskyを設定して、PrettierとESlintがpre-commit hookで実行されるようにします
参考:https://prettier.io/docs/en/precommit.html

npx mrm lint-staged

package.jsonを書き換える

    "lint-staged": {
        "*.{js,jsx,cjs,mjs,json,ts,tsx,html,css}": [
            "eslint --cache",
            "prettier --write"
        ],
        "*.md": "prettier --write"
    }

(eslintのcacheファイルを.gitignoreで除外するよう設定しておく。)

これでcommit時にローカルでeslintとprettierが走るようになりました。

VSCode上でmasterブランチにコミットしないように保護する

F1 > Open Setting > Git: Branch Protection > Add Item

ブランチ名を入力
設定ファイルに反映される。

{
    "editor.formatOnSave": true,
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "git.branchProtection": ["master"]
}

まとめ

基本的な設定を完了したので、これをベースに制作しながら調整したいと思います。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?