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?

lint/typecheck/test/... ?

0
Last updated at Posted at 2026-09-28

はじめに

コードを作るときには(基本的には)複数のチェック(?)を通す必要がある。
なんか色々あってよくわからん!ってなってきたので理解しようと思った。

Node.jsでよく設定するスクリプト

まずはnpmのスクリプト設定について知っておこうと思い、package.jsonの例についてGPT-5.6 Lunaに聞いてみた。

Node.js の小規模なプロジェクトなら、まずは次の構成が扱いやすいです。

"scripts": {
    "start": "node src/index.js",
    "dev": "node --watch src/index.js",
    "test": "node --test",
    "lint": "eslint .",
    "format": "prettier --write .",
    "typecheck": "tsc --noEmit",
    "build": "tsc"
}

追加するなら、プロジェクトの種類に応じて次のようなスクリプトがあります。

"scripts": {
    "start": "node src/index.js",
    "dev": "node --watch src/index.js",
    "test": "node --test",
    "test:watch": "node --test --watch",
    "test:coverage": "c8 npm test",
    "lint": "eslint .",
    "lint:fix": "eslint . --fix",
    "format": "prettier --write .",
    "format:check": "prettier --check .",
    "typecheck": "tsc --noEmit",
    "build": "tsc",
    "clean": "rm -rf dist",
    "prepare": "husky"
}

とりあえずtest、lint、format、typecheck、buildあたりは設定しておくべきということらしい(場合によるとは思うが)。
それぞれ見ていきたい。

test

testは、テストコードを実行して期待どおりに動作するかどうかを確かめる。

JavaScriptやTypeScriptでは、Node.js組み込みのテストランナー(上記の例)、Jest、Vitestなどがある。
PythonだとPytestとか、JavaだとJUnitとかがよく使われる。

仕様どおりに動作するかを確かめるために、開発者がテストコードを書いて実行するのがtestの役割である。

JS、TSにおけるテストパッケージ間の違いについては、こちらを参照のこと。

lint

コードの静的解析を行い、構文エラーやコーディング規約違反、潜在的なバグにつながる問題を検出する。
コードの品質改善を目的としたツール。

lintの原義は「糸くず」で、C言語のlintが始まり(現在もコマンドとしてlintは残っている)。

TypeScriptならESLint、Pythonならflake8、JavaならPMD、Checkstyle、SpotBugsなどがよく使われる。

format

インデントや行の最大文字数などを、決められた形式に整える。
lintはコーディング規約違反を指摘するが、formatterはコーディング規約に従ってコードを修正する。

TypeScriptならprettier(linterと一緒になったBiomeを使うこともある)、PythonならBlack、isortとかがよく使われる。

typecheck

特にTypeScriptの場合、JavaScriptにトランスパイルすると型の情報が消えるといった制約があるため、型が正しく使われているかを確認したほうがよい。
それを行うのがtypecheckである。

ビルドをすればわかるとはいえ、ビルドに時間がかかる、ビルド前に確認したい(CIとか)など、ビルドをせずとも型チェックだけ行ったほうが良い場合も多い。

tsc --noEmitがよく使われる。

build

実際に本番環境で動かせる形にコードを変換・生成できるかを確かめる。
必ずしも実行ファイルを作ることを意味しない(インタプリタ型の言語の場合には実行ファイルは作られない)。
少なくとも実行可能な成果物を生成できることは確認できるが、その動作自体の整合性やバグの有無などは保証されない。

それぞれの違い

コマンド 主に確認すること コードを実行するか
lint 書き方やバグになりやすいパターン 基本的に実行しない
format コードの見た目 実行しない
typecheck 型の整合性 基本的に実行しない
test 期待した動作をするか テストコードを実行する
build 配布・実行できる形に変換できるか プロジェクトによる

(TypeScriptの場合の)基本的な実行順

npm run format
npm run lint
npm run typecheck
npm test
npm run build

終わりに

基本的にはTypeScriptの場合の話になったが、それぞれの差に関しては理解することができた。

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?