はじめに
mofmofではDevOpsを推進しており、たくさんのプロジェクトへの導入が進んでいます。
ここでは、そのうち2つの異なるプロジェクトの振り返りを通じて、私たちが直面した課題、取り組んだ改善策、そして得られた教訓を共有します。
2つのプロジェクトの特徴
今回DevOpsの取り組みを実践する対象となった2つのプロジェクトの特徴は以下のとおりです。
プロジェクト1
プロジェクトメンバーの数: 4~6人程度
新規機能開発はなく、保守がメイン。バージョンアップ対応やセキュリティ関連対応などが主
プロジェクト2
プロジェクトメンバーの数: 7~8人程度
既存システムを複数持っており、既存システムの保守と新規機能開発、新規プロダクト開発を並行で行なっている。
共通の目標:リードタイムの短縮
両プロジェクトの主要な目標は、リードタイムを1週間以内に短縮することでした。
しかし、この目標はいずれのプロジェクトでも完全には達成されませんでした。
プロジェクト1は開始から3ヶ月でリードタイムを2.17週間に、6ヶ月で1.82週間に短縮。
一方、プロジェクト2では開始3ヶ月で4週間となり、6ヶ月後も変化はありませんでした。
要因としてどちらのチームもその時に大規模なアップデート作業を行なっていたというものがあります。
今回のDevOpsの取り組みの大きな壁となりましたが、大きなアップデートを小さく分けてリリースすることの大事さを考える良いきっかけになりました。
今回は半年間の振り返りなので数値には現れませんでしたが、7ヶ月目以降プロジェクト2は改善が数値に表れており、7ヶ月後の時点ではリードタイムが1.4週間まで短縮できています。
計測環境
https://github.com/dora-team/fourkeys
DORAチームが提供しているこちらのツールをforkして使っています。
分析や運用をする中でフィードバックを得て結構カスタマイズしており、以下のようなことが追加でできるようになっています。
d/d/dの計測と表示
デプロイ履歴の一覧表示
複数プロジェクトで使える
PivotalTrackerを使った障害関連指標の計測
指標の見方や説明ドキュメントをダッシュボードに表示
課題と対策
リードタイムの短縮を共通の目標としましたが、DevOpsの活動自体が初めてであり、いろいろと手探りした結果、まずはリードタイムを縮めるという方向に途中で切り替えました。
半年間で遭遇した課題と対策を紹介します。
初期段階の手探り
DevOpsを導入するにあたり、最初はどの指標を見るべきか、どのような活動が効果的かなど、手探りの状態でした。色々な事例をみたり、外部の意見を聞く、実際に指標を改善しようとしてみるなどし、リードタイム1週間を目標とする方向性を決定しました。
書籍としてはLeanとDevOpsの化学と、The DevOps ハンドブック 理論・原則・実践のすべて を参考にしました。
CI環境の改善
どちらのプロジェクトもアップデート作業が大きなタスクでした。
アップデート作業をする中で、自動化しておきたい箇所は積極的に自動化を進めました。
手動での確認作業を減らし、リリース時の安心感を高めるため、CI環境の改善を行いました。これには、チェック対象の追加やテスト項目の拡充が含まれます。
プロジェクト2はアップデートと機能開発を今後も並行して進めやすいよう、フィーチャーフラグの導入を開始し、徐々に効果が出始めています。
デプロイプロセスのドキュメント改善
デプロイに関わる手動の対応を減らすため、ドキュメントの不明瞭な部分を改善しました。
最終的には全員がデプロイできる状態。また、全て自動化できていることが理想ですが、まずは現状の手動対応部分をできるだけ多くのメンバーでできるようにすることに手をつけました。
定期的な分析
定期的に分析する会を実施しています。
分析会は時間がかかるので、まずは内部の開発者のみで分析を行なっています。
ボトルネックが開発者側にあればそれを改善し、運用側にあれば課題としてあげるという進め方をしています。
プロジェクトにおける変化
ストーリーを細かく分け、効率化を目指す意識がチーム内で芽生えました。
また、行う改善が数値にどのように影響するか、パフォーマンスが向上するかを実施前に考慮するようになりました。
今後の展望
これらの取り組みはまだ始まったばかりです。数値としての結果はまだあまり出ていませんが、改善の意識づけやボトルネック探しのツールとしての指標など良い影響が出ていると感じます。
引き続き、リードタイムの短縮を目指して、地道な改善を続けていく予定です。
まとめ
DevOpsの取り組みは一朝一夕に成果が現れるものではありません。
この半年間の経験から、目標としての指標設定の重要性、チームの取り組み方の変化、そして小さな改善の継続して積み重ねることの重要性を学ぶことができました。