変更のリードタイム:
コードから本番環境までの時間
DevOpsとは迅速なソフトウェアリリースを実現するために開発者と運用担当者が協力して実践していくことであり、業界で主流となりつつあります。開発者は運用担当者と協力して自分のコードがインフラに与える影響を理解し、監視やトラブルシューティングの際には本番システムにアクセスします。同様に運用担当者は開発者と協力して自動化されたセルフサービスで信頼性の高いインフラとツールを構築しています。バイナリのビルディングブロックが完全に自動化されたCI/CDパイプラインを流れている間は安全が保証されることになります。
Dev(開発)とOps(運用)チームのコラボレーションによる成果:
初期のソフトウェア業界では開発者がソフトウェアを開発し、IT部門がツールを提供し、運用部門が本番システムを管理していましたが、これらのグループはそれぞれ独立した環境で作業していました。
そのため適切なツールが開発者に提供されない、開発環境ではソフトウェアが正しく動作するが本番環境の制約が考慮されていない、セキュリティに対する懸念に十分に対応していないといった問題がありました。
DevOpsは「開発」と「運用」の縮小版です。これは従来のサイロ化されたアプローチから開発、IT、運用が1つのユニットとして動き、それぞれが他のニーズや要件を考慮しながらビジネスの価値をより迅速かつ確実に提供する統合されたユニバーサルなチームになっていくことを意味します。
DevOpsは文化、ベストプラクティス、ツールという3つの柱に基づいています。企業がDevOpsを真に採用したと考えるには、程度の差があってもこれらDevOpsの3つの柱を全て採用している必要があります。
DevOpsのカルチャーとは自動化、コミュニケーション、説明責任、責任の共有、コラボレーションの強化に関する全てのことを指し、開発、IT、運用が1つのチームとして連携します。このカルチャーでは初期のフィードバックと継続的な学習に重点を置き、試行錯誤できる安全な環境を取り入れる必要があります。また各チームに全面的な説明責任で情報を共有し、完璧なアプローチを提供する必要があります。
DevOpsの基準とベストプラクティスは企業によって異なります。同じ会社のチームであっても全てのチームが同じベストプラクティスを採用しているわけではありません。採用しているベストプラクティスが企業にとってより良いソフトウェアをより早くデリバリーできるのであれば、DevOpsの目標を達成していると言えるでしょう。ここではDevOpsへの移行において考慮すべきポイントを紹介します。
開発者がユニバーサルで統合したチームの一員として運用に関わる場合、開発者は自分たちの閉鎖された開発環境から抜け出し、実際にコードが実行されている本番環境の世界に足を踏み入れます。そうすることでコードの変更が本番環境のインフラにどう影響するかを素早く理解でき、バージョンが更新される際にコードの変更によってシステムに悪影響を及ぼさないように確認できます。また本番環境にアクセスすることで開発者は監視やトラブルシューティングに対しても責任を持つため本番環境で起こる問題に対する参加意識も高まります。
運用担当者は開発者が計画しているコードの変更を認識している場合、その変更が本番環境のインフラに与える影響を予測し、開発者が本番環境に必要なハードウェアの制約、監視、デプロイ、トラブルシューティング、セキュリティ、ツールなどを検討できるようにします。
ソースコードの管理にバージョン管理システムを使うことは一般的な方法として幅広く受け入れられています。DevOps環境では「コード」の概念は本番環境に関係するすべてのものとして定義されます。そのためソースコードだけでなく実行時に関わるソフトウェアやハードウェア構成ファイル、設定、パラメータなどもバージョン管理する必要があります。
ソフトウェア開発にアジャイルの手法を取り入れることは一般的ですがインフラに対してもその手法を取り入れるべきです。インフラをコードとして扱い管理すべきです。つまり変更は小さく、個別のステップで、バージョン管理して適用され、各ステップでシステムをテストして問題が起きていないことを確認する必要があります。
手動によるタスクやプロセスはエラーが発生しやすくスケーラブルではありません。DevOps環境ではすべての変更をCI/CDパイプラインの一部として自動化させます。自動化できるものはすべて自動化させるべきです。これにはデプロイのプロセスやテストの自動化なども含みます。
開発から本番環境まで、ソフトウェアのデリバリーパイプラインにおけるどのステージの変更であってもCI/CDシステムを経由する必要があります。これにより問題が発生した場合でも迅速なフィードバックループで速やかに解決することができます。
DevOpsでは開発、ステージング、本番環境で可能な限り同じツール、構成、ハードウェアリソースを使用する必要があります。これにより開発環境で機能しているすべてのものがステージングや本番環境へ正常に移行することができます。
市場には様々なDevOpsツールがあり、そのほとんどは主要なカテゴリで分類されます。DevOpsの採用方法は多種多様であるため、企業は明確な要件に沿ったカテゴリに対応するツールを選ぶ必要があります。
すべてのものをバージョン管理することはDevOpsのベストプラクティスですので、まずはソース管理ツールから始めましょう。ソースコードのバージョン管理は当然として、選択したツールを使用した構成ファイル、設定、テキストファイルで定義できるその他すべてのファイルのバージョンも管理します。また、開発者と運用者は同じツールを使用する必要があります。
継続的インテグレーションと継続的デプロイツールは自動化して短期間で迅速なリリースサイクルを提供する上で極めて重要です。プロセス全体を調整し、アプリケーションの完全なフローを管理します。
JFrog CLIを使用することで、JFrog Artifactoryは依存関係のソースとビルドのアウトプットのターゲットとしてCI/CDサーバーのCI/CDサイクルを高速化できます。
テストはDevOpsライフサイクルの基本的なフェーズの1つであり、テストツールと継続的インテグレーションを組み合わせることでDevOpsの迅速なフィードバックサイクルに必要なテストの自動化を実現します。
Docker、Chef、Puppet、AnsibleおよびTerraformのようなツールはシステムを実行してテストする環境と設定を作成します。
リポジトリマネージャーは企業で開発したバイナリもクラウドからダウンロードした公開されているオープンソースのコンポーネントもどちらも管理できるため、非常に複雑な作業による負担を大幅に軽減します。またビルドを高速化してリリースサイクルを短縮できます。組織のすべてのDevOpsエコシステムにシームレスに統合するためには十分な汎用性と柔軟性を備えたリポジトリマネージャーを使用することが重要です。
JFrog Artifactoryは、あらゆるDevOpsエコシステムに適用できる唯一のエンタープライズ・ユニバーサル・リポジトリマネージャーです。
DevOpsサイクルのすべてのステージで継続的な監視をすることは障害の早期検知と迅速なリカバリに不可欠です。
セキュリティはDevSecOpsの中心であり、DevOpsサイクルの各ステージで様々なツールが利用可能です。
コラボレーションとコミュニケーションはDevOpsカルチャーの基本です。メッセンジャー、障害対応チケット管理、リリースの計画などに役立つ様々なツールがあります。
JFrog Xrayはセキュリティの脆弱性、オープンソース・ライセンスのコンプライアンス、DevOpsサイクルの様々な段階で品質保証に向けたコンテナとアーティファクトのマルチレイヤー分析を提供します。
DevOpsを実践していくことは多くの点でメリットがありますが、組織におけるグループやメンバーの役割はそれぞれ異なるため、DevOpsに対して求めるメリットも異なります。たとえば、企業のCEOはDevOpsによってもたらされる収益の増加とコストの削減に注目している一方で、ITマネージャーはバグの減少とリリースサイクルの高速化に関心があるかもしれません。ここではDevOpsのベストプラクティスを採用することで得られるメリットのごく一部を紹介します。
変更箇所が大きく広範囲に及ぶよりも、変更点が小さく明確な場合の方が安全です。変更箇所を小さくすることで障害が起こる可能性を低くし、リカバリにかける時間を短縮します。
最小限のバグで製品をデプロイでき、しかもデプロイ回数が頻繁でサイクルが短いため、製品をより早く継続的に改善できます。
修正箇所が少なく、サイクルタイムが短く、パイプラインが完全に自動化されているためリリースをデプロイするコストを削減できます。
問題が減るため、チームメンバー全員が想定外の作業にかける時間も減少します。
想定外の作業にかける時間が減るため、チームメンバー全員がイノベーションや新たな作業に費やす時間が増えます。
問題が減りサイクルタイムが短縮されるということは、製品をより迅速にリリースできることを意味します。
迅速なリリースサイクルとは、バグを素早く修正したり、顧客が要求する新機能を追加できることを意味します。
顧客が製品に満足していれば、彼らはより多くの製品を購入し、他のユーザーにも製品を推薦する可能性が高くなります。
変更時の手順が少なく、すべての段階でテストが実行され、構成と設定のバージョン管理を維持しているインフラにはより高い安定性と信頼感があります。
新しい作業とイノベーションにより多くの時間を費やしているチームは、常にやり直しとバグ修正で行き詰まっているチームよりも満足しています。
作業を減らすために小さなことから始めましょう。ソフトウェアにおいて最も無駄なこととは使用されないコードを開発することであるというのが通説です。DevOpsの世界は小さな単位で作業するため、この無駄を減らして短いサイクルで早期のフィードバックを提供します。
すべてが自動化されている場合、コードは開発から本番環境へより迅速に移行できます。
DevOpsの達成度を計測する4つの方法:
変更のリードタイム:
コードから本番環境までの時間
サービスをリカバリする時間:本番環境の障害からリカバリするまでに平均してかかる時間
デプロイの頻度:本番環境へデプロイする回数
失敗率:変更を適用しようとして失敗した回数