バージョン管理
簡単に言うと、バージョン管理は「Officeファイルの版管理」のようなものです。企画書やプレゼン資料を作成する時に「v1.0」「v2.0」「v2.1_最終版」といったファイル名で管理したり、Wordの「変更履歴の記録」機能を使ったりしますよね。これにより、どのバージョンがいつ作られたか、誰がどんな変更をしたかがわかり、問題があれば前のバージョンに戻すことができます。チームで同じ資料を編集する場合も、変更履歴があることで作業の重複を避け、互いの変更内容を把握できるのです。ソフトウェア開発でも全く同じで、コードの変更を体系的に管理することで、開発チーム全体の効率と品質を向上させることができます。
カテゴリ解説を読むバージョン管理システムの履歴情報(Code Churn)の分析をもとにバグ予測や品質上の問題を指摘するツールを導入し、継続的に改善しているか。
SYSTEM-1-2学習と改善明文化されたブランチ戦略が存在するか。そして、それは守られているか。
SYSTEM-1-3プラクティスすべてのアプリケーションコードをGit/GitHubなどのバージョン管理システムで自社管理しているか。(権利を有する全てのソースコードについて、自社がアカウントを管理する統一のバージョン管理システムで扱っているか)
SYSTEM-1-4プラクティスインフラ構成とシステム要素のプロビジョニングをソースコードとして実行可能な形式にした上で、バージョン管理システムで管理しているか。(Infrastructure as Code)
SYSTEM-1-5プラクティス統合テスト/デプロイメントの自動化に関わるソースコードをアプリケーションコードと同一のバージョン管理システムで管理しているか。
SYSTEM-1-6アンチパターンソースコード自体のセキュリティレベルを高く設定しており、開発支援系SaaSの利用を禁止している。
SYSTEM-1-7アンチパターンバージョン管理システムが複数存在していたり、1つのツールからすべての履歴を閲覧できないなど、中途半端な状態のままになっていないか。
SYSTEM-1-8アンチパターンシステムのソースコードの閲覧を関連するエンジニアのみに限定している。(別チームのエンジニアや他のステークホルダーが閲覧できない。)
ソースコードの明確さ
簡単に言うと、ソースコードの明確さは「オフィスの書類整理システム」のようなものです。契約書や稟議書が適切にファイリングされ、命名規則が統一されていれば、担当者が不在でも他の社員が必要な書類をすぐに見つけて業務を継続できます。しかし、書類が机の上に積み上げられたまま、ファイル名も担当者しか分からない略語ばかりでは、引き継ぎや監査のたびに大きな時間ロスが発生します。プログラムのコードも同じで、適切に整理され読みやすく書かれていれば、チームメンバーの誰もがすぐに理解でき、安全に修正や機能追加を進められるようになります。
カテゴリ解説を読むアプリケーションコードの循環的複雑度などのメトリクスを、ツール/サービスを用いて継続的に計測しているか。
SYSTEM-2-2学習と改善デッドコードを四半期以上のサイクルで定期的に棚卸しし、削除や分解をしているか。
SYSTEM-2-3プラクティスコードレビューをする習慣や規則があり、本番用ブランチ(master / mainなど)へのマージはコードレビューを必須としているか。
SYSTEM-2-4プラクティス静的解析だけでは発見できないレビュー観点を生成AIを用いたツールやサービスによってレビュー・修正提案を自動化しているか。
SYSTEM-2-5プラクティスリポジトリ共通のコードルールに準拠したコードにするため、指摘点を自動的に検出・補正するLinterやフォーマッタなどのツール群を整備しているか。
SYSTEM-2-6アンチパターンコードレビューをできる人物がチームの中におらず、レビュー待ちに1、2営業日がかかる。
SYSTEM-2-7アンチパターンコードレビューガイドラインが些細な記述上のルールにとどまり、品質特性(保守性や拡張性など)に資する項目が十分に書かれていない。
SYSTEM-2-8アンチパターンコードレビューガイドラインの多くの項目が、自動的なフォーマッタなどで統一・解決可能な些末な事柄である。
継続的インテグレーション
簡単に言うと、継続的インテグレーションは「工場の品質管理ベルトコンベア」のようなものです。自動車工場では、部品を組み立てる度に品質チェックを行い、問題があればすぐにベルトを止めて修正しますよね。もし品質チェックを最後だけにしてしまうと、不良品が大量に作られてしまい、どこで問題が起きたのか分からなくなって、結果的に大きな損失につながります。ソフトウェア開発も同じで、コードの変更を少しずつ統合して、その都度自動でテストを行うことで、問題を早期発見して手戻りを防ぐことができるのです。
カテゴリ解説を読むすべてのインテグレーションテストにかかる時間が計測されており、それは30分以内に完了するか。
SYSTEM-3-2学習と改善テストカバレッジ基準や自動テストガイドラインを用意し、これらを継続的に改善するための工数がチームで割かれているか。
SYSTEM-3-3プラクティスプロダクトの半分以上のモジュール/クラスファイルに対して、ユニットテストが存在しているか。
SYSTEM-3-4プラクティステスト用データやスタブ/モックなどを整備し、テストを書きやすくするための環境整備をしているか。
SYSTEM-3-5プラクティス継続的インテグレーション環境が存在し、開発者は開発ブランチの全テストをリソース調整することなく、自由に行うことができるか。
SYSTEM-3-6アンチパターン一部の人だけがテストを書き、一部の人はテストを書かないといったように自動テストを個々人の努力目標などになっている。
SYSTEM-3-7アンチパターンたまに失敗するような不安定な動作をする自動テスト(フレーキーテスト)が増え、自動テストの結果が信頼できなくなっている。
SYSTEM-3-8アンチパターンアイスクリームコーン型のテスト(手動テストやE2Eテストの比重が大きい)になっており、テストの実行時間、保守工数などが増大している。
継続的デプロイ
簡単に言うと、継続的デプロイは「物流センターの出荷システム」のようなものです。従来の物流では、週に一度まとめて大量の商品を出荷していたため、出荷作業が集中してミスが発生しやすく、問題があった商品の特定も困難でした。現代の物流センターでは、注文が入るたびに小ロットで自動的に検品・梱包・出荷する仕組みにより、顧客は素早く商品を受け取れ、万が一の不良品も該当ロットを即座に特定して対処できます。ソフトウェア開発も同じで、小さな機能改善やバグ修正を頻繁に自動で本番環境に届けることで、ユーザーに価値を素早く提供でき、問題が起きても影響範囲を限定して迅速に対応できます。
カテゴリ解説を読むデプロイ頻度とデプロイ成功率を継続的に測定しており、これらを改善することを目標管理しているか。
SYSTEM-4-2学習と改善デプロイ時に社内のユーザーや開発者のみを対象もしくは、一部のサーバのみにサービスをリリースしてエラーがないかを確かめるカナリアリリースができるか。
SYSTEM-4-3プラクティスデプロイ完了時、および構成変更時にインフラ構成に関する自動的なテスト(e2eのスモークテストおよびServerspecなどのインフラ環境テスト)を実行しているか。
SYSTEM-4-4プラクティスブルーグリーンデプロイメントができるか。(稼働中のサーバーを切り替えるのではなく、別環境にデプロイ作業をしてから本番の向き先を切り替えるデプロイ手法。)
SYSTEM-4-5プラクティスデプロイ作業を伴わず、一部の機能を安全にオフにしたり、オンにしたりできるか。( Feature Toggle /Soft Launch/ Dark launchなどの仕組みを導入・実装しているか。)
SYSTEM-4-6アンチパターンデプロイされたコードに問題が発生した際に、前のバージョンへの切り戻しを意思決定してから5分以内に切り戻すことができない。
SYSTEM-4-7アンチパターン開発者のメンバー自身が、権限を持つ人物の承認があっても、自分のコードを本番環境にデプロイできない。
SYSTEM-4-8アンチパターンデプロイ工程が自動化されておらず、本番反映に1時間以上かかっていたり、特定の時間帯しかできないなどの制約事項がかかっている。
API駆動開発
簡単に言うと、API駆動開発は「営業部門の顧客対応マニュアル」のようなものです。営業担当者が顧客からの問い合わせに対して標準化された手順書に沿って対応することで、担当者が変わっても一貫したサービス品質を維持でき、新人でもマニュアルに従えば適切に業務を遂行できます。さらに、電話・メール・チャット・対面など、問い合わせ経路が増えても、同じマニュアルを参照することで対応の統一性を保てます。システム間の連携を担うAPIも同じで、明確に定義されたインターフェース仕様により、各システムが独立して進化しながら、新しい連携先との接続も容易に実現できるのです。
カテゴリ解説を読む社内外のAPIの利用者にとってのユーザビリティについてヒアリング/アンケートを行い継続的な改善が行われているか。
SYSTEM-5-2学習と改善各APIについて、動作するインタラクティブなドキュメントや管理サービスを持っているか。
SYSTEM-5-3プラクティスプロダクトに対して外部あるいは内部の別のシステムと連携するためのAPIが提供されているか。
SYSTEM-5-4プラクティスAPIは何らかのSchema定義言語によって規定され、そこから自動的にクライアントの生成やバリデータの生成が行われているか。
SYSTEM-5-5プラクティスAPIに関わる要件は、SDD(スキーマ駆動開発)で開発され、直ちにモックアップサーバーが提供できるか。
SYSTEM-5-6アンチパターンViewやControllerの層に処理が集中しており、機能をAPIに切り出すことが困難な設計になっている。
SYSTEM-5-7アンチパターン各APIに対して、ネットワークを経由した死活監視が存在しておらず、サービスの稼働状況をリアルタイムで把握できていない。
SYSTEM-5-8アンチパターンAPIがバージョン管理されていないため、並行開発や段階的なリリースが困難な状態になっている。
疎結合アーキテクチャ
簡単に言うと、疎結合アーキテクチャは「建設現場の設計図・施工管理」のようなものです。従来の建設現場では、電気配線・配管・内装工事が密接に絡み合い、一箇所の変更が他の工程すべてに影響して大規模なやり直しが必要になることがありました。しかし、近代的な建設管理では、各工程が明確に分離され標準化されたインターフェース(配線接続口、配管ジョイントなど)で接続されるため、電気系統の変更が配管工事に影響せず、各専門業者が独立して作業を進められます。ソフトウェアの疎結合アーキテクチャも同じで、各機能を独立したコンポーネントとして設計し明確なインターフェースで接続することで、一つの機能変更が他に波及せず、チームが自律的に開発を進められる仕組みを実現できるのです。
カテゴリ解説を読む目指すべきアーキテクチャに対してそぐわない点を洗い出すための仕組みが存在しており、それらの情報をもとに改善を進めているか。(アーキテクチャ適応度関数)
SYSTEM-6-2学習と改善システムアーキテクチャの決定・変更・改善に関するドキュメントを管理し継続的な学習機会を設けているか。
SYSTEM-6-3プラクティスドメインイベントの発火に伴いPublish/Subscribeモデルを利用した仕組みで、関連サービスとの連携が可能か。またその履歴データが保存管理され、これらのイベントリプレイから再突合や監査の自動化が可能か。
SYSTEM-6-4プラクティス結果整合性を考慮したサービスレベルの合意が要件のガイドラインの中に組み込まれているか。
SYSTEM-6-5プラクティスバッチ、ジョブ、プロシージャに対する冪等な設計ガイドラインが存在しており、再送によって整合性が担保できるようなシステムになっているか。
SYSTEM-6-6アンチパターン1つのデータベースに対して複数のシステムからの直接的な参照または書き込みがなされていて、それらの依存性が簡単には追跡できない状況になっている。
SYSTEM-6-7アンチパターン疎結合なシステムであるが、分散トレーシングの仕組みがなく、問題発生時の原因特定に時間がかかる。
SYSTEM-6-8アンチパターン自動テストとスキーマ定義の存在しない外部システムとの依存関係が10ケース以上存在しており、機能開発の影響範囲を特定できない。
システムモニタリング
簡単に言うと、システムモニタリングは「サービス業の品質保証・顧客満足度管理」のようなものです。ホテルやコールセンターでは、顧客満足度・応答時間・クレーム発生率などの指標を常時監視し、基準値を下回ればすぐにアラートが発生して改善策を講じます。顧客からの苦情が殺到してから問題に気づくのでは遅すぎますし、軽微な不満の段階で発見できれば迅速な対応で顧客離れを防げます。システムも同じで、レスポンス時間・エラー発生率・リソース使用率などのSLI(サービスレベル指標)を継続的に測定し、SLO(サービスレベル目標)との乖離を監視することで、大規模障害になる前に問題を検知し、ユーザーに影響が出る前に予防的な対処を実現できるのです。
カテゴリ解説を読むSLI/SLO/エラーバジェットがビジネスオーナーとエンジニアが協議して合意の上設定され、計測されているか。
SYSTEM-7-2学習と改善開発と SRE が共有する障害報告リストがあり、それぞれに有効な再発防止の仕組みが整うようにリソースを割いているか。
SYSTEM-7-3プラクティスシステムに起こった障害や異変などを再現できるための情報がアプリケーションのログ、メトリクス、トレースを通じて出力され分析できるようになっている。(オブザーバビリティ)
SYSTEM-7-4プラクティスプロアクティブな本番系への負荷テストやフォルトインジェクションテスト、リカバリテストなどのシステムの不確定要因への耐障害性を上げていく試みをおこなっているか。
SYSTEM-7-5プラクティスオートスケールなどの仕組みにより、開発者やSREが介在しなくても、適切なキャパシティコントロールができているか。
SYSTEM-7-6アンチパターン障害の発生に対しての罰則や謝罪などの、開発者が萎縮したり障害を隠蔽する方向につながるような慣習が存在する。
SYSTEM-7-7アンチパターン定常的に発生しているサービス上の警告を問題ないものとして無視したり、ログを意図的に出力しないようにする慣習が存在する。
SYSTEM-7-8アンチパターンシステム構成要素の構築方法や運用方法が属人化しており、同じインスタンスを構築できない。
セキュリティシフトレフト
簡単に言うと、セキュリティシフトレフトは「金融機関のセキュリティ監査システム」のようなものです。銀行の新店舗を開設する際、建物が完成してから「金庫室の防犯性が弱い」「監視カメラの死角がある」と指摘されて大規模改修するのと、企画・設計段階から内部監査部門が参画してセキュリティ要件を盛り込み、施工中も段階的に検証していくのでは、セキュリティレベルもコストも大きく異なります。後付けの対策は莫大な費用がかかり、運用上の制約も大きくなります。ソフトウェア開発も同じで、企画・設計段階からセキュリティ専門家が関与し、開発プロセス全体で継続的にセキュリティを検証することで、強固で運用しやすく、コストも抑えた安全なシステムを構築できるのです。
カテゴリ解説を読む

