TypeScriptの開発環境の構築メモ
業務で普段触らないTypeScriptとExpressを触ることになったので、0から開発環境の構築をしていく。目標としては、Expressでバックエンドの開発を快適にできるくらいになること。
Node.jsバージョン管理ツール
選定
とりあえずnvmにした。
TypeScriptをあまり触ったことがないこともあって、以下の理由で選定した。
流行っているツールはVoltaとかがあったが、まずは取っつきやすそうなものにしてみた。
- 信頼性(Githubのスター数や参考資料から)
- 人気(Githubのスター数)
参考:
- https://cam-inc.co.jp/p/techblog/600182771498877993
- https://qiita.com/heppokofrontend/items/5c4cc738c5239f4afe02
- https://link-and-motivation.hatenablog.com/entry/2022/05/20/160000
インストール
初回のnvmの適用手順は以下の通り。
git clone https://github.com/nvm-sh/nvm.git .nvm
cd ~/.nvm & git checkout v0.39.3
. ./nvm.sh
これ以降はシェルを起動した際に自動的にソースされるようにするために、.zshrc
に以下を追加。
# nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
あとはプロジェクトのルートに.nvmrcを置いてそこにnode.jsのバージョンを書いておく。(nvimとnvmってめっちゃ誤爆するからバージョン管理ツール変えたくなってきたw)
パッケージ管理システム
選定
npmにした。
Node.jsのパッケージ管理システムはnpmとyarnの二強らしいが、yarnはnpmにインストール速度とセキュリティを追加したようなもののようでそれらを気にしないのであればnpmでもよさそう(特にインストール速度に関しては最近のアップデートでnpmも並列化によってあまり変わらないらしい)
参考:
インストール
npmはNode.jsのインストール時に自動で入ってくるのでインストールは不要。
TypeScript
インストール
npm init
npm install typescript
.
├── node_modules
│ └── typescript
├── package-lock.json
└── package.json
{
"name": "ts_sample",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"typescript": "^5.1.6"
}
}
tsconfig.json
設定
以下のコマンドでtsconfig.jsonのひな型を作る。
(npxはパッケージの一時的なインストールをするコマンドらしく、こういった初期化用のスクリプトとかにつかうっぽい)
npx tsc --init
これを実行すると大量の設定がコメントアウトされたファイルが生成される。それぞれの設定に説明が書いてあるのでこれを見てアクティブにするか決める感じかな。(設定長くて全部見るのしんどそうw)
この設定はプロジェクトごとに異なるので今回はスキップ。
設定するときはここが参考になりそう。
Linter
選定
ESLintでTypeScriptのプラグインが入ったものを選択。
ESLintはJavaScriptのLinterで200以上の種類のルールが存在する。これをTypeScriptで使うためにはそれに加えてTypeScript特有のルールを追加するプラグイン(typescript-eslint/pluginなど)を入れる必要がある。それによって100程度のルールが更に追加される。
インストール
以下のコマンドでESLintおよびTypeScript用のパッケージをインストールする。
npm install eslint
npm install @typescript-eslint/parser
npm install @typescript-eslint/eslint-plugin
設定
TypeScript ESLintには二つの設定ファイルが存在する。
- tsconfig.eslint.json
- .eslintrc.js
上のtsconfig.eslint.jsonは型情報を利用するためにTypeScriptのコンパイルを行うようで、そのコンパイルの設定を各ファイルとなっている。これはtsconfig.jsonを参照するように設定もできるし、そのうえで一部設定を上書きすることもできる。
{
"extends": "./tsconfig.json",
"compilerOptions": {
"allowJs": true
},
"include": ["src", ".*.js"]
}
下の.eslintrc.jsはESLint自体の設定ファイルで、どのパーサやプラグインを使うか、どのコンパイルの設定を参照するかなどを指定する。
module.exports = {
root: true,
parser: "@typescript-eslint/parser",
plugins: ["@typescript-eslint"],
env: {
browser: true,
es2021: true,
},
parserOptions: {
ecmaVersion: "latest",
sourceType: "module",
project: "./tsconfig.eslint.json",
tsconfigRootDir: __dirname,
},
ignorePatterns: ["dist"],
extends: [
"airbnb-base",
"airbnb-typescript/base",
"plugin:@typescript-eslint/recommended-requiring-type-checking",
],
rules: {
"import/prefer-default-export": "off",
"@typescript-eslint/quotes": ["error", "double"],
},
};
参考:
Formatter
選定
Prettierにした。
Rust製の高速なFormatterのRomeというものもあるらしいが、Prettierの方が広く使われていそうなのと、そのPrettierと完全互換性はないようなので念のためPrettierにした。
参考:
インストール
npm install prettier eslint-config-prettier
eslint-config-prettier
はPretteirとコンフリクトするようなESLintのルールを無向化するパッケージらしい(具体的にどのルールかは見てないが、おそらく自動整形した後の形はルールに違反しないようにしていると思われる。)
設定
.prettierrc
に設定を書ける。これもプロジェクトごとに違いそうなため、例だけ見てみる。
{
"tabWidth": 2,
"semi": true,
"singleQuote": true
}
あと、Linter、Formatterはエディタの拡張機能として使えるようにしておく必要がある。主に使っているエディタはneovimなので、masonやtrouble、nvim-lspなどのプラグインでそれらを使えるように設定しておく。
Discussion