2026年6月9日 Cucumberのシナリオの半分がスキップされている。そのステータスがあなたに嘘をついている理由。 Cucumberの「skipped」ステータスには、全く異なる3つの問題が隠れている。テストスイートを蝕んでいるのがどれか診断し、それを止める方法を解説する。 deep-divescucumberbddtest-maintenance
2026年6月8日 Gherkin仕様があなたに嘘をついている Gherkin仕様は、人間に手動更新を任せた瞬間から乖離し始める。featureファイルを正直に保つための自動検証の方法を紹介する。 deep-divesgherkinbddliving-documentation
2026年6月7日 コンパイラは構文をチェックする。テストはアーキテクチャをチェックすべきだ。 多くのチームはアーキテクチャルールをWikiに記載している。依存グラフが逸脱した時にCIを失敗させる実行可能なテストとして書く方法を紹介する。 deep-divesarchitecture-testingclean-architectureci-cd
2026年6月6日 ドメイン層がPostgresをimportする。CIは何も言わない。 クリーンアーキテクチャの図はホワイトボード上では美しい。ここでは、ビルドパイプラインが依存方向を強制し、ドメインコードがインフラストラクチャに到達できないようにする方法を紹介する。 deep-divesclean-architectureci-cddependency-rules
2026年6月5日 あなたのアーキテクチャ図は、すでに嘘になっている アーキテクチャ資料は、保存した瞬間から陳腐化する。コード生成ダイアグラム、ADR、自動化されたアーキテクチャテストを使って、資料を正直な状態に保つ方法を解説する。 deep-divesarchitecturedocumentationliving-docs
2026年6月4日 あなたのリトライループは最初のリクエストが失敗したと仮定している。実際にはそうではない可能性が高い。 タイムアウトやクラッシュは、APIリクエストが消失したことを意味しない。idempotency keyがどうやってリトライを安全にするか、そして実際に重複を防ぐストレージパターンについて解説する。 deep-divesidempotencyapi-designresilience
2026年6月3日 プロセスより長生きするロック:分散リースが実際にどう機能するのか インメモリのミューテックスはサーバー再起動時に消滅する。フェンシングトークンとTTLを持つ分散リースが、クラッシュを跨いだ重複作業をどう防ぐか、そしてどこで破綻するかを解説する。 deep-divesdistributed-locksleasingresilience
2026年6月2日 ゴルーチンもタイマーもバックグラウンドオーバーヘッドもないサーキットブレーカー ほとんどのサーキットブレーカーライブラリは、復旧を検知するためにバックグラウンドスレッドを起動する。それは不要だ。ここでは、正確性を損なうことなくすべてのバックグラウンドオーバーヘッドを排除する、リクエスト駆動型の設計を紹介する。 deep-divescircuit-breakerperformanceresilience
2026年6月1日 Webサービスにグレースフルシャットダウンがある。それがバグだ。 クラッシュオンリーソフトウェアは、あらゆる障害をクラッシュとして扱い、あらゆる起動をリカバリーとして扱う。Webサービスにとってこれは、シャットダウンロジックを削除し、kill -9でも生き残る状態を設計することを意味する。 deep-divescrash-only-softwareresiliencedistributed-systems
2026年5月31日 変化内容がわからない生存ミュータントを倒す方法 ミューテーションテストで生存者が見つかったが、そのミューテーションが何をしているのかまったくわからない。ミュータントを理解せずに正しいテストを書くためのステップバイステップの方法を紹介する。 deep-divesmutation-testingtest-writingdebugging
2026年5月30日 認証コードには90%のmutation coverageが必要だ。文字列ユーティリティには不要。 コードベース全体に単一のmutation scoreを課すのが間違いである理由と、実際のリスクに応じたモジュールごとのthresholdの設定方法。 deep-divesmutation-testingauthtest-quality
2026年5月29日 テストは通る。ミューテーションスコアは40%。生存ミュータントが実際に語っていること コードカバレッジは安全だと言う。ミューテーションテストは、テストのほとんどが飾りだと言う。生存ミュータントがその差をどう晒し、どう埋めるか。 deep-divesmutation-testingsurviving-mutantstest-quality
2026年5月28日 RustでMutation Testingは機能する——ただしコンパイル時間が悲鳴を上げる cargo-mutantsは、コードを検証したふりをしているテストを見つけ出す。Rustでのmutation testingの仕組み、何が捉えられるのか、そしてコンパイル時間のコストに見合う価値があるかを解説する。 deep-divesmutation-testingrustcargo-mutantstest-quality
2026年5月27日 ミューテーションテストに4時間かかる。ではチームは実際にCIでどう使っているのか? ほとんどのチームはすべてのコミットでフルのミューテーションテストスイートを実行していない。ここでは、ビルドパイプラインを破壊することなく、エンジニアリングチームが実際にミューテーションテストをCIに統合する方法を紹介する。 deep-divesmutation-testingci-cdtest-quality
2026年5月26日 ユニットテストは通るのに、データは消えている モック化されたデータベースのテストはSQLの構文を検証するだけで、クラッシュや並列書き込み、スキーマの不整合を経ても行が存続するかどうかは検証しない。永続性を本気でテストする方法を紹介する。 deep-divesdatabasetestingpersistence
2026年5月25日 モックアクションだらけにならずにReduxをテストする すべてのReduxアクションをモックすると、テストは変更履歴の検証ツールになってしまう。実際の状態遷移を使ってストアをテストする方法を紹介する。 deep-divesreduxtestingstate-management
2026年5月24日 100 Test Runs Is a Lie: Property-Based Testを実際にどうサイジングすべきか Property-based testingのデフォルト100例は統計的戦略ではなく社会的妥協だ。自分の信頼性の要件とCI予算にマッチする実行回数の選び方を解説する。 deep-divesproperty-based-testingtest-coverageshrinking
2026年5月23日 Rustのプロパティベーステストが単体テストでは見逃すバグを見つける 例ベースのテストは思いついた入力だけをカバーする。プロパティベースのテストはランダムデータを生成し、不変条件を検証し、失敗を最小の反例まで縮小する。 deep-divesrustproperty-based-testingquickcheckproptest
2026年5月22日 ユニットテストはパスする。本番コードは壊れたまま。 コードカバレッジのメトリックは偽の安心感を生む。ここでは、ユニットテストがなぜ実際に寝不足を引き起こすバグを見逃し、代わりに何をテストすべきかを解説する。 deep-divesunit-testingtest-qualitybug-prevention
2026年5月21日 Rustのランタイムcontractsはリリースビルドで無料にできるが、コンパイラは勝手にやってくれない Rustはdebug assertionsを自動で除去するが、本物のdesign-by-contractにはdebug_assert!以上のものが必要だ。リリースバイナリーから完全に消えるゼロコストのランタイムcontractsを作る方法を紹介する。 deep-divesrustruntime-contractsperformance
2026年5月20日 ゼロ、一、それとも十二:本番環境の関数に実際に必要なアサーションの数 開発者はアサーションを紙吹雪のように撒き散らすか、あるいは完全に避けるかのどちらかだ。有用な不変条件と本番クラッシュのトリガーを分ける判断フレームワークを紹介する。 deep-divesassertionsproduction-codedefensive-programming
2026年5月19日 バリデーション層がビジネスロジックより肥大化している 手作りのバリデーションは codebase を膨張させ、それでもエッジケースを見逃す。宣言的なスキーマで runtime contracts を enforce し、実装に干渉しない方法を解説する。 deep-divesruntime-contractsvalidationdesign-by-contract
2026年5月18日 TypeScriptのstrictNullChecksはコンパイル時のガードであり、実行時の盾ではない strict modeはあなたが書いたnullを捉えるが、APIやDOMクエリ、JSON.parseから実行時に到達するnullは捉えない。型システムが終わり、あなたの防御が始まる境界はここだ。 deep-divestypescriptnull-safetystrict-mode