Dev Study
← 解説「品質を道具で守る — lint・format・型・testの4点セット」に戻る

サンプルコードで身につける: 品質を道具で守る — lint・format・型・testの4点セット

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

14点セットを動かすコマンド一覧

lint・format・型・testは、それぞれ1つのコマンドで実行できます。まずは名前と役割の対応を覚えましょう。この4つがすべて通る状態を保つのが、品質管理の基本形です。

# lint(検査): 書き方の問題を見つける
ng lint

# format(整形): 見た目を機械的に揃える
npx prettier --write .

# 型(契約): コンパイルで型の矛盾を見つける
ng build

# test(検証): 動作が正しいかを確かめる
ng test

2機械に任せる指摘と、人が議論すること

同じコードでも、指摘には機械向きのものと人間向きのものがあります。整形や未使用変数は道具が一瞬で見つけます。人間は設計や命名など、正解が一つでない部分に集中します。

// レビューで挙がりがちな指摘の分類
//
// ── 機械に任せる(道具が自動で見つける)──
//   ・インデントがずれている           → Prettier
//   ・import した Router を使っていない → ESLint
//   ・null かもしれない値を参照している → TypeScript の型
//
// ── 人が議論する(機械には判断できない)──
//   ・この処理はサービスに置くべきでは?
//   ・この関数名は仕様の意図を伝えているか?
//   ・エラー時の挙動は要件どおりか?

3package.jsonに品質コマンドをまとめる

品質チェックのコマンドはnpm scriptsに登録しておくと、チーム全員が同じ手順で実行できます。新しいメンバーも「npm run lint を実行すればよい」とすぐ分かります。CIからも同じコマンドを呼び出せます。

// package.json(抜粋)— 品質チェックの入口を scripts に揃える
{
  "scripts": {
    "start": "ng serve",
    "build": "ng build",
    "lint": "ng lint",
    "format": "prettier --write .",
    "test": "ng test"
  }
}

4道具が見つける問題の実例

一見動きそうなコードにも、道具は複数の問題を見つけます。未使用importはESLint、nullの可能性は型チェックが指摘します。直した後のコードは、指摘がそのまま品質の改善になっています。

// ── Before: 道具に指摘されるコード ──
// import { Router } from '@angular/router';  // ESLint: 未使用の import
//
// function firstName(names: string[]) {
//   return names.at(0).toUpperCase();  // 型: at(0) は undefined かもしれない
// }

// ── After: 指摘に従って直したコード ──
function firstName(names: string[]): string {
  // undefined の場合の扱いを明示する(?? で既定値を与える)
  return (names.at(0) ?? '').toUpperCase();
}

5push前のセルフチェックを習慣にする

レビューを依頼する前に、手元で4点セットを一通り実行しておくのがマナーです。機械に見つかる問題を先に潰しておけば、レビュアーの時間を設計の議論に使ってもらえます。

# push 前のセルフチェック(この順で実行する)

# 1. 整形を済ませる(差分が見た目の変更で汚れるのを防ぐ)
npm run format

# 2. 検査を通す
npm run lint

# 3. テストを通す
npm test

# 4. ビルドが通ることを確認してから push する
npm run build