🏠 ホーム
フロントエンド
PHP
Go言語
プログラミングの理解
プログラマーへの道
Google API

開発スピードと品質は両立の鍵はテストコード

  プログラミング >     プログラミングの理解 >  

ソフトウェア開発において、「スピード」と「品質」は長年トレードオフの関係にあると言われてきました。

テストコードを書くのは元々あまり好きじゃなく、なくてもいいのではとさえ思っていました。
しかし、AIエディタで自動でコーディングできるようになり、テストコードを書く工数が減り、仕様の確認もしやすくなるのでテストコードの必然性が増してきたように思います。

アジャイル、ウォーターフォール、DDD、クリーンアーキテクチャ…。

どれも理想は美しいのですが、現場では“重すぎる”というのが正直なところです。

では、「速く作れて、しかも壊れない」

そんな現実的な解は存在するのでしょうか?

その一つの答えが、直行型アーキテクチャのテストコードです。


1. 直行型アーキテクチャとは何か

基本思想はとてもシンプルです。

1リクエスト = 1コントローラ
コントローラからDBまで“直行”させる

多くのアーキテクチャでは、

Controller
  ↓
Service
  ↓
Domain
  ↓
Repository
  ↓
DB

のように層が分かれています。

これは理論上は美しいのですが、実際には:

という問題を引き起こします。

直行型では、こうします:

Controller → DB

必要な処理はそのコントローラに閉じ込めます。


2. 疎結合の作り方:あえて「共有しない」

一般的には「共通化は正義」とされがちです。

しかし、実務ではこうなります:

直行型では、コピペを許容します。

なぜなら:

「DRY」よりも「Safe Change」を優先します。


3. それでも共通化が必要なもの

もちろん、何でもかんでもコピペではありません。

最低限の共通処理だけは分離します。

これらは:

pkg/common
internal/shared

のような専用ディレクトリに隔離します。

重要なのは、

業務ロジックは共有しない

という点です。


4. テスト戦略:Mockを捨てる

多くのプロジェクトで、テストはこうなります:

直行型では、本物のDBを使います。

基本ルール

なぜMockを使わないのか

テストのために設計を歪めない。これが重要です。


5. CIが遅いと、開発は止まる

CIが10分かかると、

だから、CIは速くあるべきです。


6. 部分CIという発想

変更されたファイルだけをテストします。

例:

controllers/user_create.go

が変更されたら:

controllers/user_create_test.go

だけを実行。

common/db/ が変更されていなければ、全件テストは不要です。

メリット


7. 全体CIは「要所」だけ

もちろん、全件テストは必要です。

ただし、常にではありません

実行タイミング:

  1. common/db/ を変更したとき

  2. main ブランチにマージ

  3. 夜間の定期実行

これで十分です。


8. CIルールの整理

変更内容 テスト範囲
コントローラのみ 対応テストのみ
共通処理 全件
DB変更 全件
mainマージ 全件

シンプルで、説明可能で、運用しやすい。


9. この構成が生む「心理的安全性」

この構成の本当の価値は、技術よりも「心理面」にあります。

結果として:

開発スピードが上がり、品質も上がる

という理想的な状態になります。


10. 重厚設計が向いていない理由

DDDやクリーンアーキテクチャは、「大規模・長期・複雑」なシステム向けです。

しかし多くの現場は:

この環境では、軽さこそが正義です。


11. まとめ

直行型アーキテクチャは、

ことで、

「速く作って、壊れにくい」

という現場最適解を実現します。

 

登録日:

更新日:

by

コメント         tweetでコメント