システム
ソフトウェアをシンプルに保ち、ビジネス上の様々な要求に応えやすくするためには、開発者の活動を支援する様々な自動化やアーキテクチャ設計への投資が必要不可欠です。
ですが、目に見える機能と異なり、ソフトウェアの中身に宿る品質への投資は経営者やエンジニアでないものには理解されにくいものです。
目に見えない投資について、「見える化」をしながら改善がなされていることが重要な視点です。
1.バージョン管理
なぜ重要か
ソースコードのバージョン管理は、最も基礎的な開発者の習慣です。
このような習慣がない場合、共同でソフトウェアを開発すること自体が困難になり、属人化したノウハウや暗黙的なルールの温床になりえます。また、GitHubなどのサービスはさまざまな開発者向けツールの起点となる重要な基盤でもあります。
2.ソースコードの明確さ
なぜ重要か
複雑なソースコードは、それだけで自動的なテストを難しくしバグや障害を生み出しやすいだけでなく、開発者のモチベーションや生産性に悪影響を与えます。
ソフトウェアの内部的な品質は経営から不可視であるため軽視される傾向があります。だからこそ、十分な注意をはらい続けなければなりません。
3.継続的インテグレーション
なぜ重要か
継続的インテグレーションとは、自動的で定期的に実施される結合テスト環境のことです。
この環境が簡単でかつ信頼できるほど、開発者は誰かの手作業によるテストを待つ必要がなくなり、自分の手元でソースコードの改善を繰り返しやすくなります。これは生産性と品質向上に寄与します。
4.継続的デプロイ
なぜ、重要か。
継続的デプロイとは、完成したソースコードを自動的かつ簡単・安全にサービスインするための仕組みです。
この環境への投資が整っていない場合、開発者は本番環境のリリースのたびに様々な作業負荷がかかり、仮説検証や継続的な品質改善に対しての足止めになってしまいます。
5.API駆動開発
なぜ、重要か。
ネットワーク経由のAPIを基準にシステムを開発することで、他のシステムと連携しやすくなります。
またシステムがレガシー化した際に交換したり、改善したりといった手が打ちやすいものになります。
人が使う見た目の作りだけでなく、エンジニアにとっての作りが質を生み出します。
6.疎結合アーキテクチャ
なぜ、重要か。
システムの役割は単純であればあるほど、高速に改善しやすくなります。
複雑な問題を解くときに単純な問題の組み合わせにするというのは重要な設計技術です
疎結合なアーキテクチャとは、このように改善する単位を単純に保つための技術です。
7.システムモニタリング
なぜ、重要か。
システムの品質は、エラーや障害などから学び改善していくことで生まれます。
そのためには、エラーや障害について検知し、復旧するためのモニタリングとその改善を支援するための文化と技術が必要になります。
ミスを許さない懲罰的な文化のもとでは、重大事故が起きやすくなります。
8.セキュリティシフトレフト
なぜ、重要か。
ソフトウェアが完成したあとにセキュリティの課題が見つかると、そのための対応に追われたり、リリースが遅れたりと良いことがありません。
できる限り早い工程でセキュリティの課題を見つけ出す技術と文化を、DevSecOpsあるいはセキュリティのシフトレフトと言います。