THE CRITERIA · v202506

組織を知る、328の問い。

気になるテーマやカテゴリから、基準とその背景を読み進めてください。

328項目をCSVで保存
問いの読み方
テーマ(5個)×カテゴリー(各8個)×チェックリスト(各8項目)。例としてチームの8カテゴリと、チーム構成と権限委譲の8つの問い(メトリクスの計測・学習と改善・プラクティスと習慣・アンチパターン)。

各カテゴリは8つの問いで構成されます。アンチパターンは手放したい慣習を確かめる問いで、「いいえ」が望ましい状態です。採点は逆転します。

System

システム

変化を受け入れ、進化できるシステムへ。

8カテゴリ / 64項目テーマ解説を読む
SYSTEM-1 / システム

バージョン管理

このカテゴリから診断する
バージョン管理はなぜ重要か?

簡単に言うと、バージョン管理は「Officeファイルの版管理」のようなものです。企画書やプレゼン資料を作成する時に「v1.0」「v2.0」「v2.1_最終版」といったファイル名で管理したり、Wordの「変更履歴の記録」機能を使ったりしますよね。これにより、どのバージョンがいつ作られたか、誰がどんな変更をしたかがわかり、問題があれば前のバージョンに戻すことができます。チームで同じ資料を編集する場合も、変更履歴があることで作業の重複を避け、互いの変更内容を把握できるのです。ソフトウェア開発でも全く同じで、コードの変更を体系的に管理することで、開発チーム全体の効率と品質を向上させることができます。

カテゴリ解説を読む
SYSTEM-1-1メトリクスの計測

バージョン管理システムの履歴情報(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 / システム

ソースコードの明確さ

このカテゴリから診断する
ソースコードの明確さはなぜ重要か?

簡単に言うと、ソースコードの明確さは「オフィスの書類整理システム」のようなものです。契約書や稟議書が適切にファイリングされ、命名規則が統一されていれば、担当者が不在でも他の社員が必要な書類をすぐに見つけて業務を継続できます。しかし、書類が机の上に積み上げられたまま、ファイル名も担当者しか分からない略語ばかりでは、引き継ぎや監査のたびに大きな時間ロスが発生します。プログラムのコードも同じで、適切に整理され読みやすく書かれていれば、チームメンバーの誰もがすぐに理解でき、安全に修正や機能追加を進められるようになります。

カテゴリ解説を読む
SYSTEM-2-1メトリクスの計測

アプリケーションコードの循環的複雑度などのメトリクスを、ツール/サービスを用いて継続的に計測しているか。

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アンチパターン

コードレビューガイドラインの多くの項目が、自動的なフォーマッタなどで統一・解決可能な些末な事柄である。

SYSTEM-3 / システム

継続的インテグレーション

このカテゴリから診断する
継続的インテグレーションはなぜ重要か?

簡単に言うと、継続的インテグレーションは「工場の品質管理ベルトコンベア」のようなものです。自動車工場では、部品を組み立てる度に品質チェックを行い、問題があればすぐにベルトを止めて修正しますよね。もし品質チェックを最後だけにしてしまうと、不良品が大量に作られてしまい、どこで問題が起きたのか分からなくなって、結果的に大きな損失につながります。ソフトウェア開発も同じで、コードの変更を少しずつ統合して、その都度自動でテストを行うことで、問題を早期発見して手戻りを防ぐことができるのです。

カテゴリ解説を読む
SYSTEM-3-1メトリクスの計測

すべてのインテグレーションテストにかかる時間が計測されており、それは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 / システム

継続的デプロイ

このカテゴリから診断する
継続的デプロイはなぜ重要か?

簡単に言うと、継続的デプロイは「物流センターの出荷システム」のようなものです。従来の物流では、週に一度まとめて大量の商品を出荷していたため、出荷作業が集中してミスが発生しやすく、問題があった商品の特定も困難でした。現代の物流センターでは、注文が入るたびに小ロットで自動的に検品・梱包・出荷する仕組みにより、顧客は素早く商品を受け取れ、万が一の不良品も該当ロットを即座に特定して対処できます。ソフトウェア開発も同じで、小さな機能改善やバグ修正を頻繁に自動で本番環境に届けることで、ユーザーに価値を素早く提供でき、問題が起きても影響範囲を限定して迅速に対応できます。

カテゴリ解説を読む
SYSTEM-4-1メトリクスの計測

デプロイ頻度とデプロイ成功率を継続的に測定しており、これらを改善することを目標管理しているか。

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時間以上かかっていたり、特定の時間帯しかできないなどの制約事項がかかっている。

SYSTEM-5 / システム

API駆動開発

このカテゴリから診断する
API駆動開発はなぜ重要か?

簡単に言うと、API駆動開発は「営業部門の顧客対応マニュアル」のようなものです。営業担当者が顧客からの問い合わせに対して標準化された手順書に沿って対応することで、担当者が変わっても一貫したサービス品質を維持でき、新人でもマニュアルに従えば適切に業務を遂行できます。さらに、電話・メール・チャット・対面など、問い合わせ経路が増えても、同じマニュアルを参照することで対応の統一性を保てます。システム間の連携を担うAPIも同じで、明確に定義されたインターフェース仕様により、各システムが独立して進化しながら、新しい連携先との接続も容易に実現できるのです。

カテゴリ解説を読む
SYSTEM-6 / システム

疎結合アーキテクチャ

このカテゴリから診断する
疎結合アーキテクチャはなぜ重要か?

簡単に言うと、疎結合アーキテクチャは「建設現場の設計図・施工管理」のようなものです。従来の建設現場では、電気配線・配管・内装工事が密接に絡み合い、一箇所の変更が他の工程すべてに影響して大規模なやり直しが必要になることがありました。しかし、近代的な建設管理では、各工程が明確に分離され標準化されたインターフェース(配線接続口、配管ジョイントなど)で接続されるため、電気系統の変更が配管工事に影響せず、各専門業者が独立して作業を進められます。ソフトウェアの疎結合アーキテクチャも同じで、各機能を独立したコンポーネントとして設計し明確なインターフェースで接続することで、一つの機能変更が他に波及せず、チームが自律的に開発を進められる仕組みを実現できるのです。

カテゴリ解説を読む
SYSTEM-6-1メトリクスの計測

目指すべきアーキテクチャに対してそぐわない点を洗い出すための仕組みが存在しており、それらの情報をもとに改善を進めているか。(アーキテクチャ適応度関数)

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ケース以上存在しており、機能開発の影響範囲を特定できない。

SYSTEM-7 / システム

システムモニタリング

このカテゴリから診断する
システムモニタリングはなぜ重要か?

簡単に言うと、システムモニタリングは「サービス業の品質保証・顧客満足度管理」のようなものです。ホテルやコールセンターでは、顧客満足度・応答時間・クレーム発生率などの指標を常時監視し、基準値を下回ればすぐにアラートが発生して改善策を講じます。顧客からの苦情が殺到してから問題に気づくのでは遅すぎますし、軽微な不満の段階で発見できれば迅速な対応で顧客離れを防げます。システムも同じで、レスポンス時間・エラー発生率・リソース使用率などのSLI(サービスレベル指標)を継続的に測定し、SLO(サービスレベル目標)との乖離を監視することで、大規模障害になる前に問題を検知し、ユーザーに影響が出る前に予防的な対処を実現できるのです。

カテゴリ解説を読む
SYSTEM-7-1メトリクスの計測

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アンチパターン

システム構成要素の構築方法や運用方法が属人化しており、同じインスタンスを構築できない。

SYSTEM-8 / システム

セキュリティシフトレフト

このカテゴリから診断する
セキュリティシフトレフトはなぜ重要か?

簡単に言うと、セキュリティシフトレフトは「金融機関のセキュリティ監査システム」のようなものです。銀行の新店舗を開設する際、建物が完成してから「金庫室の防犯性が弱い」「監視カメラの死角がある」と指摘されて大規模改修するのと、企画・設計段階から内部監査部門が参画してセキュリティ要件を盛り込み、施工中も段階的に検証していくのでは、セキュリティレベルもコストも大きく異なります。後付けの対策は莫大な費用がかかり、運用上の制約も大きくなります。ソフトウェア開発も同じで、企画・設計段階からセキュリティ専門家が関与し、開発プロセス全体で継続的にセキュリティを検証することで、強固で運用しやすく、コストも抑えた安全なシステムを構築できるのです。

カテゴリ解説を読む
SYSTEM-8-1メトリクスの計測

CI/CDのパイプラインにソースコードの自動的なセキュリティチェック(静的解析または動的解析)が組み込まれていて、一定の基準を達さないとリリースされない仕組みになっているか。

SYSTEM-8-2学習と改善

セキュアコーディングについて、開発者を対象とした教育カリキュラムや研修を実施しているか。

SYSTEM-8-3プラクティス

専門的なアプリケーションセキュリティの知識を持つメンバーが、専任でセキュリティチームにおり、動向や最新情報をもとに自社サービスをレビュー・改善できているか。

SYSTEM-8-4プラクティス

OSSのライブラリやミドルウェアを使用する際、それらの脆弱性情報を自動的モニタリング・警告・パッチ適用するための仕組みまたはサービス等を利用しているか。

SYSTEM-8-5プラクティス

4半期から1年の間で定期的に、全体的なアプリケーションとインフラの脆弱性診断を受けているか。

SYSTEM-8-6アンチパターン

開発速度(デプロイ頻度)を低下させるようなセキュリティルールが、施行されていて現況に合わせたアップデートが行われていない。

SYSTEM-8-7アンチパターン

ソースコード中に、漏洩してはならない情報がハードコーディングされている。(それらを分離かつ暗号化して管理するようなツールまたは仕組みを導入していない)

SYSTEM-8-8アンチパターン

開発企画要件の段階で、設計レベルのセキュリティレビューが実施されていない。(Security by Designの未実施)