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?

ゴミの分別とポカヨケから学んだDDD・TDD 〜ブラジル人エンジニアが日本の生活で気づいたこと〜

0
Posted at

はじめに

ブラジル出身のエンジニアです。日本に3年以上住み、日本の開発チームでも働きました。

日本の生活で一番印象に残ったのは、整理されていること、毎日同じ品質が続くこと、そしてルールがみんなに守られていることでした。

最初は戸惑うことも多かったのですが、あるとき気づきました。
「これ、DDDやTDDで大切にしている考え方と同じだ」と。

この記事では、日本の生活で学んだ5つのことを、DDDとTDDの実践に結びつけて紹介します。

1. ゴミの分別 → レイヤーの分離

群馬県の前橋市に引っ越してすぐ、最初に渡されたものの一つがゴミ袋でした。

まだ日本語も生活のルールもよく分からない私に、「ゴミはこの袋に入れて出してください」と、最初から正しい道具が用意されていたのです。

IMG_20201216_171746494.jpg

そのあと、燃えるゴミ、プラスチック、資源ゴミ…と、種類ごとに出す場所も曜日も決まっていることを知り、最初は正直とても戸惑いました。

でも生活していくうちに、**「すべてのものに正しい置き場所があり、そのための仕組みが最初から用意されている」**からこそ、街全体がきれいに保たれているのだと気づきました。

コードも同じです。ビジネスルールとDBアクセスとUIが同じファイルに混ざっていると、どこを直せばいいのか分からなくなります。

src/
├── domain/          # ビジネスルール(一番大切なもの)
├── application/     # ユースケース(何をするか)
├── infrastructure/  # DB・外部API(どうやって保存・通信するか)
└── presentation/    # 画面・APIのエンドポイント

ルールはシンプルです。

  • domain は他のどのレイヤーにも依存しない
  • DBやフレームワークの都合を domain に持ち込まない

ゴミを間違った日に出すと回収されないように、間違った場所に置かれたコードは、いつか必ず問題になります。

2. ポカヨケ → Value Object

ポカヨケは、日本の製造現場で生まれた「そもそもミスが起きない仕組みを作る」という考え方です。
USBが逆向きに挿さらない形になっているのも、その一例です。

DDDの Value Object は、まさにコードのポカヨケです。
不正な値を持ったオブジェクトを、そもそも作れないようにします。

export class PostalCode {
  private constructor(private readonly value: string) {}

  static create(input: string): PostalCode {
    const normalized = input.replace(/-/g, '');

    if (!/^\d{7}$/.test(normalized)) {
      throw new Error('郵便番号は7桁の数字で入力してください');
    }

    return new PostalCode(normalized);
  }

  format(): string {
    return `${this.value.slice(0, 3)}-${this.value.slice(3)}`;
  }

  equals(other: PostalCode): boolean {
    return this.value === other.value;
  }
}

string のままだと、どこでどんな値が入るか分かりません。
PostalCode 型にすれば、この型の値がある時点で 「正しい郵便番号であること」が保証されます。
チェック処理をあちこちに書く必要もなくなります。

3. 電車の定時運行 → TDDのリズム

日本の電車は、毎日ほぼ時刻表どおりに来ます。
これは特別な才能ではなく、決まった手順を毎日くり返す仕組みがあるからだと思います。

TDDにも、決まったリズムがあります。

  1. Red:まず失敗するテストを書く
  2. Green:テストが通る最小限のコードを書く
  3. Refactor:動く状態を保ったまま、コードをきれいにする

先ほどの PostalCode も、実はテストから書きました。

import { PostalCode } from './PostalCode';

describe('PostalCode', () => {
  it('7桁の数字から作成できる', () => {
    const postalCode = PostalCode.create('1500001');
    expect(postalCode.format()).toBe('150-0001');
  });

  it('ハイフン付きの入力でも作成できる', () => {
    const postalCode = PostalCode.create('150-0001');
    expect(postalCode.format()).toBe('150-0001');
  });

  it('6桁の場合はエラーになる', () => {
    expect(() => PostalCode.create('150000')).toThrow();
  });

  it('数字以外が含まれる場合はエラーになる', () => {
    expect(() => PostalCode.create('150-000A')).toThrow();
  });
});

大切なのは、大きな変更を一気にやらないことです。
小さなサイクルを毎日くり返すことで、品質が安定します。電車の定時運行と同じです。

4. 改善(カイゼン) → Refactor

日本の職場では「改善」という言葉をよく聞きました。
一度に大きく変えるのではなく、毎日少しずつ良くしていくという考え方です。

TDDの Refactor ステップは、まさに改善です。
テストがあるから、安心して少しずつコードを良くできます。

// Before:意味の分からない数字
if (items.length > 5) { ... }

// After:ルールに名前をつける
const MAX_ITEMS_PER_ORDER = 5;
if (items.length > MAX_ITEMS_PER_ORDER) { ... }

小さな変更ですが、こうした改善を積み重ねると、半年後のコードの読みやすさが大きく変わります。

5. 統一された標識 → ユビキタス言語

日本の駅は、どこへ行っても標識の形・色・言葉が統一されていて、初めての駅でも迷いにくいです。

DDDの ユビキタス言語 も同じ考え方です。
ビジネスの会話・ドキュメント・コード・DBで、同じものには同じ名前を使います。

会話 コード 問題
「予約」 Booking / Reservation / Appointment が混在 どれが同じものか分からない
「予約」 すべて Reservation 誰が見ても迷わない

名前がぶれると、チームの理解もぶれます。
標識が統一されている駅のように、誰が読んでも迷わないコードを目指しましょう。

まとめ

日本の生活 開発での実践
ゴミの分別 レイヤーの分離
ポカヨケ Value Object
電車の定時運行 TDDのリズム
改善 Refactor
統一された標識 ユビキタス言語

DDDやTDDは、難しい理論のように見えるかもしれません。
でも根っこにあるのは、日本の生活の中にある 「整理する」「続ける」「ルールを守る」 という、とてもシンプルな考え方だと思います。

日本で学んだこの感覚は、ブラジルに戻った今も、毎日のコードの中で生きています。

読んでいただき、ありがとうございました!

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?