MENU

 

COLUMN

BizTechコラム

DevOps

[DevOps連載]第3回 価値を繰り返し提供するために

島 慎哉

2017.07.04

システム開発を進める中で、「デリバリー」という言葉を初めて聞く、という方は少ないと思います。プロジェクト達成指標であるQCDの一つとして有名ですね。プロジェクト管理の観点では「納期」と訳されることが多いですが、DevOpsにおいては価値を提供するプロセスを指します。

第3回目の今回は、DevOpsの「デリバリー」フェーズに着目したコンテンツをご提供します。 コラムではデリバリーフェーズとひとまとめにしていますが、実際はソース管理~ビルド~テスト~プロビジョニング~デプロイという一連の流れが対象です。

Webサービスを利用した継続的インテグレーションのすすめ

前回コラムの通り、DevOpsの文脈では、ユーザーストーリーの実現がまさにユーザーへの価値提供に繋がるのだと言えます。しかし、新しい価値の実現・検証を行うと同時に、これまでできたことが変わらずできることも保証しなければなりません。1つや2つの機能であれば、実際に動かして試してみることもできますが、うまくツールを利用する方が賢明です。

DevOpsでは、まずデリバリーフェーズを自動化する流れ、すなわちデリバリーパイプラインの構築を検討します。

ご存知の方も多いと思いますが、「継続的インテグレーション(※)」(以降、CIとします)が最初のステップとなります。デリバリーパイプラインを構成する要素の一つであり、ウォーターフォール手法でも段階的リリースや保守開発のシーンで、デグレード防止目的などに利用可能です。CIを実現するために最低限必要な要素は下記の3つです。
1.あらゆる成果物をバージョン管理する
2.ビルド・テストを自動化する
3.上記要素を組み合わせて流れを制御する

バージョン管理と流れの制御については、GitBucketやJenkinsなどのOSSで自社環境に構築するのが主流かと思います。一方で、昨今ではGitHub、AWS CodeBuild/CodePipelineなどのWebサービスを利用するという選択肢もあり、特にCI環境未構築や管理者不在という現場では、後者をおすすめします。CI環境自体は顧客に価値を提供するわけではないので、環境を維持するために多くのリソースを充てるのは非効率的ということもありますが、フルマネージドのため、スケール問題から解放されることが大きな理由です。上記のWebサービスは従量課金制かつ安価で、シンプルな構成であればすぐに構築できるので、まずは試してみるのもよいと思います。

テスト自動化は"End to End"で

CIを利用して夜間や変更の度にビルドするだけでも一定の効果はありますが、テスト自動化を実践することでその効果を一層高めることができます。ただし、どのテストを自動化するのかについてはさまざまな議論があるでしょう。テスト駆動開発を採用しユニットテストからしっかりコードを書いている現場であれば特に言うことはありませんが、そうでない場合はEnd to Endのテストケースを自動化するのが効果的です。前回コラムで紹介したユーザーストーリーの3Cの一つ、「Confirmation」の実現手段になり得ます。

一般的にユーザーストーリーが満たされているかどうかは、ユーザーが見える形で検証する必要があります。例えば、「登録画面を操作して処理結果が登録完了画面に表示される」という流れがあるとすれば、これをテストします。ユーザーストーリーには複数の完了条件(受入基準)が設定されることが多いので、それぞれのテストケースを自動化してCIに組み込めば、安定して開発を続けることができるでしょう。

クラウドネイティブのデプロイ

合意したユーザーストーリーを満たし、リリースタイミングを迎えたらサーバーにアプリケーションをデプロイします。しかし、リリースする内容に実験的なものが含まれる場合、すぐに戻したくなるかもしれません。アプリケーションだけ切り戻して事が済めばよいのですが、サーバーの設定も併せて変更している場合は、ロールバック作業はより複雑になります。 DevOpsでは「Infrastructure as Code」「Blue-Greenデプロイ」というプラクティスを利用して、これらの問題を解決します。大きな流れとして、下記の通りです。
1.サーバー群の設定をコード化してバージョン管理する
2.リリースの度に環境を再構築する
3.アプリケーションをデプロイして最終確認を行う
4.結果が合格であれば、ロードバランサーを切り替えてユーザーに公開する

これらの流れは、従来のサーバー調達プロセスでは時間的にも金銭的にも難しいですが、クラウドサービスが広く普及したからこそ実現できるようになりました。DevOpsにおける『価値を継続して提供し続ける』ことは、まさにインフラのコード化クラウドサービスの進化、テストの自動化技術に支えられているのです。今回は触れていませんが、Dockerに代表される仮想コンテナの活用事例も増えてきており、周辺技術の進化は留まることがありません。日頃から新しいツールの情報をウォッチして、快適な開発を目指しましょう。

次回は「フィードバック」についてです。

 

  • ※ 継続的インテグレーション:開発者が自分のコード変更を定期的にセントラルリポジトリにマージし、その後に自動化されたビルドとテストを実行するソフトウェア開発の手法

  • 記載されている製品名は各社の商標または登録商標です

著者プロフィール

島 慎哉

技術開発部 グループ長

お客さまのITサービス、業務アプリケーションを最前線で支えるITアーキテクトとして要求開発からアプリケーション開発、保守運用に至る各工程で、当社ソリューションを提供してきました。現在は、当社クラウドサービスを加速させるべく、サービス開発と技術開発を企画・推進しています。DevOpsの実現・アジャイルな組織・テクノロジーの融合によるイノベーション創出など、モード2組織実現を目指すべく日々新しいことにチャレンジしています。

この記事をシェアする