ソフトウェア開発、設計原則、品質管理に使えるフレームワーク。良いコードと良いシステムを作るための手法を集めました。
ADRを時系列管理し設計判断を組織知に
API仕様を最初に定義してから実装する開発アプローチ
意図的/無意図×慎重/無謀の2軸で技術的負債を分類・管理する思考ツール
手作業の上限を設定し自動化投資の判断基準に
定型運用手順をドキュメント化し属人化排除
クライアントとマイクロサービス群の間に玄関口を1つ置き、ルーティング・認証・レート制限などの横断的関心事を集約するアーキテクチャパターン。導入判断から設計手順までを解説。
障害影響範囲を最小化する設計パターン集
フィットネス関数で品質を守りつつ進化
データの読み取りと書き込みのモデルを分離し、それぞれに最適化されたアーキテクチャを実現するパターン
分散システムにおける長時間トランザクションを、補償アクションで一貫性を保ちながら実現する設計パターン
クラウドネイティブなSaaSアプリを構築するための12の方法論。移植性とスケーラビリティを高める
障害の連鎖を防ぐために、呼び出し先の異常を検知して一時的に通信を遮断する耐障害パターン
状態ではなくイベントの履歴を保存することで、システムの完全な変更履歴を保持するアーキテクチャパターン
システム間の通信をイベント(出来事)の発行と購読で行い、疎結合で拡張性の高いシステムを構築するパターン
レガシーシステムを段階的に新システムへ移行する、リスクを最小化したモダナイゼーション手法
システムのリソースを区画化し、障害の影響範囲を限定する耐障害パターン
システムを小さな独立したサービスに分割し、それぞれを独立してデプロイ・スケールできるアーキテクチャ
一時的な障害に対して自動的に再試行を行い、システムの回復力を高める耐障害パターン
障害時の社内外への情報発信とステークホルダー管理の体系的手法
計画的障害注入でシステム耐障害性を検証するイベント型演習
サービス成長予測とインフラリソースの事前確保で安定稼働を実現する手法
インフラ構成をコードとして管理し、再現性・自動化・バージョン管理を実現するプラクティス
サーバー管理を不要にし、イベント駆動で関数単位の実行とスケーリングを実現するアーキテクチャ
マイクロサービス間の通信をインフラ層で統一的に管理する通信制御アーキテクチャ
頻繁にアクセスされるデータを高速な記憶領域に保存し、レスポンスタイムとスケーラビリティを改善する手法
コンテナ化されたアプリケーションのデプロイ、スケーリング、運用を自動化する管理手法
開発者が自律的に開発・デプロイできるセルフサービス基盤を構築し、開発者体験を向上させる手法
メトリクス・ログ・トレースの3本柱でシステムの状態を可視化し、障害の予防と迅速な対応を実現する
APIやサービスへのリクエスト数を制限し、過負荷やサービス乱用を防ぐ保護メカニズム
開発の最初からセキュリティを組み込み、後付けではなく設計段階で脆弱性を防ぐアプローチ
ネットワークの内外を問わず、すべてのアクセスを検証・認可するセキュリティモデル
新バージョンを一部のユーザーにだけ先行公開し、段階的に展開範囲を広げるリリース戦略
コードのデプロイとリリースを分離し、設定変更だけで機能のON/OFFを制御する開発手法
本番環境を2面用意し、切り替えるだけでリリースとロールバックを瞬時に行うデプロイ戦略
単一リポジトリで複数プロジェクトを管理する利点・課題と導入判断
Googleが支援するDORAチームが定義した4つのソフトウェアデリバリー指標。デプロイ頻度・リードタイム・変更失敗率・復旧時間でチームの能力を測る
コードの統合・テスト・デプロイを自動化し、高品質なソフトウェアを高頻度でリリースするプラクティス
Gitリポジトリを唯一の信頼源として、インフラやアプリケーションの宣言的な管理とデプロイを自動化する運用手法
main/develop/feature/release/hotfixの5種類のブランチで、リリースサイクルを管理するブランチ戦略
他の開発者のコードを体系的にレビューし、品質向上・知識共有・バグ防止を実現するプラクティス
テストを先に書き、テストが通るコードを後から書く開発手法。Red→Green→Refactorのサイクルで品質を担保する
全員が1つのメインブランチに頻繁にコミットし、長期ブランチを作らないブランチ戦略
機能ごとに独立したブランチを作成し、レビュー後にメインブランチにマージするGit運用戦略
2人1組でリアルタイムにコードを書く開発手法。コード品質と知識共有を同時に実現する
チーム全員で1台のパソコンに向かい、同じ問題を同時に解決する開発手法
短期的な速度を優先して蓄積した設計・実装上の妥協を可視化し、計画的に返済していくマネジメント手法
ソフトウェアエンジニアリングの手法で運用問題を解決し、信頼性をシステマティックに管理するGoogleの運用哲学
ログ・メトリクス・トレースの3つの信号で、システムの内部状態を外部から把握する手法
本番環境に意図的に障害を注入し、システムの弱点を事前に発見・改善する実践手法
時系列イベントでシステム全体の振る舞いを設計
アーキテクチャ上の重要な意思決定を構造化して記録し、将来のチームに「なぜその決定をしたか」を伝える手法
使いやすく、一貫性があり、拡張可能なAPIを設計するための原則とベストプラクティス
Don't Repeat Yourself — 同じ知識やロジックを2箇所以上に書かず、一元管理するための原則
クライアントが必要なデータだけを効率的に取得できるAPI設計のための原則とベストプラクティス
Keep It Simple, Stupid — 不必要な複雑さを排除し、できるだけシンプルな設計を目指す原則
オブジェクト指向設計の5つの基本原則で、変更に強く拡張しやすいコードを書くためのガイドライン
データの整合性、パフォーマンス、拡張性を兼ね備えたデータベースを設計するための原則と手法
データの所有権をドメインチームに分散し、データをプロダクトとして扱う分散型データアーキテクチャ
依存関係を内側に向けることで、変更に強く保守しやすいシステムを設計するアーキテクチャパターン
ビジネスドメインの知識を中心にソフトウェアを設計し、ビジネスとコードの距離を縮める手法
ポートとアダプターで外部依存を切り離し、ビジネスロジックを中心に据えるアーキテクチャ
サービス間のAPI契約を自動テストで検証し、互換性の破壊を早期に検出する手法
テスト活動を開発プロセスの早期段階に前倒しし、品質を作り込むテスト戦略
本番想定のトラフィックをシミュレーションし、システムの性能限界と改善点を発見するテスト手法