Skip to content

執筆計画アウトライン

概要

「テスト駆動開発から始めるXX入門」シリーズの執筆計画。Wiki 記事(エピソード 1〜4)の内容を再構成し、12 言語で統一的な章構成の記事として執筆する。

対象言語

ops/nix/environments/ に定義された 12 言語環境:

環境名 言語 エピソード数 備考
java Java 3 OOP 代表
node JavaScript / TypeScript 3 + 3 2 言語を 1 環境で
python Python 3 マルチパラダイム
ruby Ruby 4 エピソード 4 はパフォーマンス
php PHP 3 Web 特化
go Go 3 シンプル志向
rust Rust 3 所有権・メモリ安全性
dotnet C# / F# 3 + 4 2 言語を 1 環境で
clojure Clojure 4 LISP + 関数型
scala Scala 4 OOP + FP ハイブリッド
elixir Elixir 4 Erlang VM + 関数型
haskell Haskell 4 純粋関数型

章構成

Wiki 記事のエピソード 1〜4 を 12 章に再構成する。

第 1 部: TDD の基本サイクル(エピソード 1 相当)

Wiki エピソード 1 の内容を 3 章に分割。FizzBuzz 問題を題材にした TDD サイクルの体験。

テーマ Wiki 参照元 内容
1 TODO リストと最初のテスト エピソード 1 前半 仕様理解、TODO リスト作成、テスティングフレームワーク導入、テストファースト
2 仮実装と三角測量 エピソード 1 中盤 仮実装(ハードコーディング)、三角測量による一般化
3 明白な実装とリファクタリング エピソード 1 後半 明白な実装、学習用テスト、「動作するきれいなコード」

第 2 部: 開発環境と自動化(エピソード 2 相当)

Wiki エピソード 2 の内容を 3 章に分割。ソフトウェア開発の三種の神器。

テーマ Wiki 参照元 内容
4 バージョン管理と Conventional Commits エピソード 2 前半 Git フロー、Conventional Commits ルール
5 パッケージ管理と静的解析 エピソード 2 中盤 パッケージマネージャ、リンター、フォーマッター、カバレッジ
6 タスクランナーと CI/CD エピソード 2 後半 タスクランナー、自動化、CI/CD パイプライン構築

第 3 部: オブジェクト指向設計(エピソード 3 相当)

Wiki エピソード 3 の内容を 3 章に分割。手続き型からオブジェクト指向へのリファクタリング。

テーマ Wiki 参照元 内容
7 カプセル化とポリモーフィズム エピソード 3 前半 追加仕様、フィールドカプセル化、setter 削除、State/Strategy パターン
8 デザインパターンの適用 エピソード 3 中盤 Command、Factory Method、Null Object、値オブジェクト
9 SOLID 原則とモジュール設計 エピソード 3 後半 単一責任原則、モジュール分割、ドメインモデル、例外処理

第 4 部: 関数型プログラミングへの展開(エピソード 4 相当)

Wiki エピソード 4 の内容を 3 章に分割。OOP から FP への移行。

テーマ Wiki 参照元 内容
10 高階関数と関数合成 エピソード 4 前半 高階関数、カリー化、関数合成、パイプライン
11 不変データとパイプライン処理 エピソード 4 中盤 不変データ構造、副作用の分離、ストリーム処理
12 エラーハンドリングと型安全性 エピソード 4 後半 Result/Either 型、パターンマッチング、代数的データ型

: エピソード 4 がない言語(Java、JS/TS、Python、PHP、Go、Rust)は、各言語で利用可能な関数型機能の範囲で執筆する。

言語ごとのバリエーション

3 エピソード言語(第 1〜3 部が中心)

言語 第 4 部の扱い
Java Stream API、Optional、Lambda 式
JavaScript アロー関数、Array メソッド、Promise
TypeScript ジェネリクス、ユニオン型、型ガード
Python ジェネレータ、デコレータ、functools
PHP アロー関数、array_map/filter/reduce
Go ファーストクラス関数、クロージャ、ジェネリクス
Rust Iterator、Option/Result、所有権とクロージャ

4 エピソード言語(第 4 部がフル対応)

言語 第 4 部の特色
C# LINQ、パターンマッチング、非同期ストリーム
F# 判別共用体、Computation Expression、パイプライン
Clojure スレッディングマクロ、トランスデューサー、REPL 駆動
Scala sealed trait/case object、for 内包表記、Cats/ZIO
Elixir with 構文、GenServer、パイプラインオペレータ
Haskell モナド合成、型クラス、do 記法
Ruby Enumerable、ブロック/Proc/Lambda、ベンチマーク

ファイル構成

docs/article/
├── index.md              # 記事トップページ(目次)
├── outline.md            # 本ファイル(執筆計画)
├── workflow.md           # 執筆ワークフロー
├── java/                 # Java
│   ├── index.md
│   ├── 01-todo-list-and-first-test.md
│   ├── ...
│   └── 12-error-handling-and-type-safety.md
├── node/                 # JavaScript / TypeScript
│   ├── index.md
│   └── ...
├── python/               # Python
│   ├── index.md
│   └── ...
├── ruby/                 # Ruby
│   ├── index.md
│   └── ...
├── php/                  # PHP
│   ├── index.md
│   └── ...
├── go/                   # Go
│   ├── index.md
│   └── ...
├── rust/                 # Rust
│   ├── index.md
│   └── ...
├── dotnet/               # C# / F#
│   ├── index.md
│   └── ...
├── clojure/              # Clojure
│   ├── index.md
│   └── ...
├── scala/                # Scala
│   ├── index.md
│   └── ...
├── elixir/               # Elixir
│   ├── index.md
│   └── ...
├── haskell/              # Haskell
│   ├── index.md
│   └── ...
└── all/                  # 多言語統合解説
    ├── index.md
    └── ...

実装コードの配置

各言語の実装コードは apps/ ディレクトリに配置する。

apps/
├── java/                 # Java プロジェクト
├── node/                 # JavaScript / TypeScript プロジェクト
├── python/               # Python プロジェクト
├── ruby/                 # Ruby プロジェクト
├── php/                  # PHP プロジェクト
├── go/                   # Go プロジェクト
├── rust/                 # Rust プロジェクト
├── dotnet/               # C# / F# プロジェクト
├── clojure/              # Clojure プロジェクト
├── scala/                # Scala プロジェクト
├── elixir/               # Elixir プロジェクト
└── haskell/              # Haskell プロジェクト