4.

ソフトウェア開発工程の「製造(実装・コーディング)」完全ガイド(TDD / コードレビュー / CI)

編集
この記事の要点
  • 製造工程 = 実装 / コーディング。設計書に基づいてソースコードを書き、テスト可能な状態まで仕上げる工程
  • 基本ワークフロー: ブランチ作成 → 実装 → ローカルテスト → コードレビュー → マージ → CI/CD → デプロイ
  • 品質向上の柱: ペアプロ / コードレビュー / TDD / 静的解析 / CI 自動化
  • コードスタイル: PSR (PHP) / PEP8 (Python) / Google Java Style / ESLint+Prettier (JS/TS)
  • Boy Scout Rule(来たときより綺麗にして帰る)が継続的なリファクタリングの指針

「製造」工程とは

ソフトウェア開発の「製造」とは、設計書(基本設計 / 詳細設計)に基づいて実際にソースコードを書く工程です。実装コーディングとほぼ同義。ウォーターフォール文脈では「要件定義 → 設計 → 製造 → テスト → リリース」の中盤を担います。アジャイル文脈では設計とテストが同時並行で進み、製造はそれらと不可分に結合します。

開発工程全体での位置づけ

工程主成果物担当(主)
要件定義要件定義書 / ユーザストーリーPM / BA / 顧客
基本設計(外部設計)画面遷移 / 機能仕様 / DB 論理設計SE
詳細設計(内部設計)クラス図 / シーケンス図 / DB 物理設計SE / プログラマ
製造(実装)ソースコード / 単体テストコードプログラマ
単体テストテスト仕様 / 結果プログラマ
結合テスト結合テスト結果テスター / プログラマ
総合テストシステム全体の動作検証テスター
受入テスト顧客承認顧客
リリース・運用稼働システム運用 / SRE

製造工程の典型ワークフロー(現代)

1. チケット取得 (Jira / GitHub Issues)
   ↓
2. ブランチ作成 (feature/xxx)
   ↓
3. ローカルで実装
   - 詳細設計を確認
   - テストコードを先に書く(TDD)
   - 実装コード
   - 静的解析・フォーマッタ実行(自動)
   ↓
4. ローカルでテスト実行
   - 単体テスト → 結合テストの一部
   ↓
5. Pull Request 作成
   - 自己レビュー → 説明文 → スクリーンショット
   ↓
6. CI 実行(GitHub Actions / Jenkins / GitLab CI)
   - lint / test / build
   ↓
7. コードレビュー(同僚 + 上位)
   - 指摘修正のループ
   ↓
8. main へマージ
   ↓
9. CD でステージング自動デプロイ → 動作確認 → 本番デプロイ

品質を担保する 5 つの柱

1. ペアプログラミング (Pair Programming)

2 人で 1 つの画面を見ながらコードを書く手法。Driver(タイプする人)と Navigator(横で考える人)が定期交代します。レビューがリアルタイムで入り、知識共有・バグ早期発見・属人化排除に効きます。新人教育・難しい設計判断に特に効果的。

2. コードレビュー(Pull Request レビュー)

変更内容を他のエンジニアが読み、指摘し、承認してからマージする運用。現代のソフトウェア開発の事実上の標準です。指針:

  • 1 PR は小さく(500 行以下を目安)
  • レビュー対象は「何を / なぜ」が分かる説明文
  • 指摘は「コード」を批判し、「人」を批判しない
  • 軽微な指摘(nit)と必須指摘(must / blocking)を区別
  • 承認後 24 時間以内に取り込む

3. テスト駆動開発(TDD)

TDD の Red - Green - Refactor サイクル

  ① Red   : 失敗するテストを書く
  ② Green : テストを通す最小限のコードを書く
  ③ Refactor : テスト維持したまま実装を整える
  → ①へ戻る

利点
- 仕様がテストコードで明文化される
- リファクタリングの安全網ができる
- 過剰実装を防ぐ
- バグの早期発見

代表ツール
- PHPUnit (PHP) / Pest (PHP)
- JUnit (Java) / TestNG / Spock
- pytest (Python) / unittest
- Jest / Vitest (JavaScript / TypeScript)
- Go test (Go)  / RSpec (Ruby)

4. 静的解析・フォーマッタ

言語静的解析フォーマッタ
PHPPHPStan / PsalmPHP-CS-Fixer / Pint (Laravel)
PythonRuff / Pylint / mypyBlack / Ruff format
JavaScript/TSESLint / TypeScriptPrettier / Biome
JavaSpotBugs / CheckstyleSpotless / google-java-format
Gogo vet / staticcheckgofmt / goimports
Rustclippyrustfmt

pre-commit フック・CI で必ず実行し、PR は静的解析グリーン状態でしかマージしない運用が標準。

5. CI / CD(継続的インテグレーション / デリバリ)

# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with: { php-version: '8.3' }
      - run: composer install --no-progress
      - name: Lint
        run: composer run lint
      - name: Static analysis
        run: composer run analyse
      - name: Test
        run: composer run test

コードスタイルガイド

言語 / FW標準スタイル
PHPPSR-12(PHP-FIG)
PythonPEP 8
JavaScriptAirbnb / Standard / Google JS Style
JavaGoogle Java Style / Oracle 公式
Go言語標準(gofmt がすべて)
RubyRuboCop / Ruby Style Guide
C#Microsoft C# Coding Conventions

リファクタリングと Boy Scout Rule

「来たときより綺麗にして帰る」というBoy Scout Ruleはロバート・C・マーチンが広めた言葉。製造工程で機能追加するついでに、近隣の汚いコードを少しだけ綺麗にして帰る習慣のことです。継続的なリファクタリングを文化として根付かせるための指針として定着しています。

主要なリファクタリング手法(Martin Fowler 著『リファクタリング』より):

  • Extract Method: 長いメソッドを小分けに
  • Rename: 意図が分かる名前に
  • Inline Variable: 不要な中間変数を消す
  • Move Method: 適切なクラスに移動
  • Replace Conditional with Polymorphism: switch を継承に置換
  • Introduce Parameter Object: 長い引数リストをオブジェクトに

現代的な開発手法との関係

手法製造への影響
アジャイル / スクラム2 週間スプリントで設計〜製造〜テストを同時並行
DevOps製造後の本番反映までを自動化(CI/CD)
SRE運用視点(可用性 / ログ / メトリクス)を実装に組込む
Trunk-Based Development長寿命ブランチを禁じ main に毎日マージ
Feature Flag未完成機能をマージしても本番では OFF にできる
AI ペアプログラミングGitHub Copilot / Cursor / Claude Code 等が補助

製造工程でよくある失敗

  • 設計を読まずに実装 → 仕様乖離で手戻り
  • テストコードを「あとで書く」 → 永遠に書かれない
  • マジックナンバー・コピペ多用 → 保守不能
  • 巨大な PR(3000 行超) → レビュー機能せず
  • main 直接コミット → CI を回さずバグ混入
  • 命名が雑(datatmpflag) → 読む人が苦しむ

FAQ

Q: 単体テストはどこまで書くべき?
A: ビジネスロジックは網羅。Getter/Setter や Framework 機能の薄いラッパーは省略可。カバレッジ 70-80% を目安に。

Q: コードレビューが形骸化している
A: PR を小さくする / レビュー観点を明文化 / 24 時間以内承認ルール / コード品質指標(Static analysis)を CI 必須化、の順で改善できます。

Q: AI が製造を代替する?
A: Copilot / Cursor / Claude Code 等は大幅な生産性向上をもたらしますが、設計判断・レビュー・テスト設計は人間の役割が残ります。「製造」自体はますますレバレッジが効く工程になっています。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 要件定義
  2. 基本設計
  3. 詳細設計
  4. 製造
  5. 単体テスト
  6. 結合テスト
  7. 総合テスト
  8. 受入テスト/運用テスト

最近更新/作成されたページ