
デプロイとは?

ITに関わると、デプロイという言葉を頻繁に目にします。IT業界におけるデプロイは、システムの稼働に必要な実行ファイルやアーティファクト(実行に必要な情報など)を新環境に移すという意味で用いられています。
通常、デプロイでは稼働中のアプリなどを一旦停止させ、サーバーの再起動を伴うことからダウンタイム(停止時間)が発生しますが、ホットデプロイという方法ではダウンタイムを発生させません。ここではホットデプロイのいくつかの手法を中心に解説していきます。
デプロイの名の由来
デプロイは英語の(deploy)のことで、「展開する、配置する」といった意味です。そこから、プログラムやプロジェクトなどを配置するという意味で、IT用語として使われるようになりました。
デプロイの用法
デプロイという響きは、いかにもエンジニアらしいのですが、デプロイの意味をしっかり押さえ、正しく使うことが求められます。
「テスト稼働が無事に終わったので、ローカル環境から本番環境にデプロイしよう」
「Javaで開発したアプリをユーザーが利用できるようにデプロイしてください」
といった使い方をします。
デプロイの重要なポイント
システムやアプリケーションがある限り、デプロイは必ず行う必要があります。またデプロイには次のような重要なポイントがあります。
1.サービス停止となるダウンタイムは短ければ短いほどよい。
2.デプロイに失敗した時に簡単に元に戻せること。
3.ユーザーから見た時に安定しており、サービスレベルの低下がないこと。
一言で言えば、デプロイによってユーザーに不都合を与えないことがデプロイを行う上で最も重要な方針と考えるべきです。
デプロイにリスクや失敗はつきもの、などという言い訳は厳に慎むべきです。
デプロイの類義語

デプロイについて理解できたでしょうか?デプロイを理解すると、似たような用語が気になると思います。間違った使い方をすると恥ずかしい思いをすることがあるので、デプロイの類義語について確認しておきましょう。
リリース
リリースはサービスインとも言います。Webページの公開や、Webサービス開始の際に使われます。「〇〇サービスは4月1日にリリースされます」というように使います。一般ユーザーに対してはリリースやサービスインという言い方の方が分かりやすいでしょう。
また厳密に言えば、デプロイはリリース作業の1つのステップで、一般的なリリースは次のような手順で行われます。
1.稼働中のアプリケーションを停止する。
2.サーバーを停止する。
3.デプロイを行う。
4.デプロイ前とデプロイ後の状態について、問題がないか確認する。
5.サーバーを再起動する。
6.動作確認をする。
これはダウンタイムを伴う一般的なリリースの手順ですが、デプロイがリリース作業の1つのステップであることが分かると思います。
ローンチ
リリースやサービスインとも似ていますが、ローンチは製品やサービスなど提供開始の際に用いられることが多いです。また、機能やユーザーを限定して、先行提供する際にもローンチは使われます。ローンチの後、一般公開する場合には「ロールアウト」と言います。
カットオーバー
IT業界ではかなり古くから用いられている和製英語です。今はほとんど死語になりつつありますが、ホームページの公開、Webサービスの開始の際に用います。主にクライアントと開発サイドとの間で使うのが一般的で、顧客や利用者に対して用いる事はありません。
本番公開
主にテスト環境にあったWebページなどを、本番環境で公開する際に用いられます。これもどちらかと言えば、システム関係者間の用語です。「修正を確認しました。本番公開してください。」といった使い方をします。
ホットデプロイの手法

一口でデプロイと言っても、環境や要件によって方法はいくつかあります。ダウンタイムが生じるデプロイと、ダウンタイムを発生させないデプロイとがあり、ここではダウンタイムを生じさせない「ホットデプロイ」の手法について紹介していきます。プロジェクトにおいて、どの手法を採用すれば要件を満たせるかを考えながら選択することが大切です。
ブルー/グリーンデプロイ(Blue/Green Deployment)
ブルー(本番環境)とグリーン(新環境)の2つを用意し、ロードバランサーなどで切り替えができるようにしておきます。ブルーで本番を動かしたまま、グリーンに新環境をデプロイし、新環境の正常稼働を確認したら、ロードバランサーの向きを切替、グリーンを本番環境として利用します。
万一グリーンで問題が生じた際には、ブルーに切り戻す(ロールバック)ことで障害の影響を最小限にとどめられます。この方法ではダウンタイムをほとんど発生させませんが、新旧両環境を常に維持する必要があるため、余分な運用コストが発生します。
イミュータブルデプロイ(Immutable Deployment)
ブルー/グリーンデプロイとほぼ同じ方法ですが、大きく異なるのは、ブルー/グリーンデプロイでは旧環境を残さない点です。そのため、旧環境を残しておくブルー/グリーンデプロイ手法と比べて余分な運用コストが発生しないというメリットがあります。
シンボリックリンクデプロイ(Symbolic Deployment)
Linuxのコマンドを利用する方法です。稼働中のサーバー上の別環境にデプロイを実施して、サービスが利用しているシンボリックリンク(起動リンク)を新環境に切り替える手法です。サーバー増設の必要もなく、低コストで運用できますが、場合によっては再起動が求められることもあり、ダウンタイムが必ずしもゼロになるわけではありません。
ローリングデプロイ(Rolling Deployment)
ロードバランサーによって負荷分散しているサーバーに対し、ロードバランサーから順次切り離してデプロイを行う方法です。ダウンタイムは基本的に発生しませんが、一時的に新旧サーバーが混在するため、処理結果に違いが生じないよう気を付ける必要があります。
その他のデプロイの手法
紹介した以上4つのデプロイがメジャーですが、他にも次のようなデプロイがありますので、覚えておくとデプロイに詳しい人だと思われるかもしれません。
■カナリアデプロイ(Canary Deployment)
新しいプロダクトの新しい機能を稼働中のサーバーの一部にデプロイ、リリースする方法です。特定のユーザーにだけ新機能を利用してもらい、新サービスの検証を行います。カナリアリリースは炭鉱のガス漏れ事故を未然に防ぐために、カナリアをセンサー代わりに利用したことが由来と言われています。
■インプレースデプロイ(In-Place Deployment)
稼働中のサーバに対して、新しいアーティファクト(ソフトウェア開発で生まれた新たな制作物)をリリースします。このリリース方法では再起動が避けられず、ダウンタイムが発生します。
【参考】:AWS でデプロイの自動化を実現するベストプラクティスを図解
デプロイの簡略化ツール-DeployBotを使うメリット

デプロイは最新のシステムやサービスのリリースに欠かせない作業ですが、エンジニアにとっては大きな負荷を伴う作業です。このデプロイを簡略化、自動化できるツールとしてDeployBotがあります。
DeployBotはデプロイ作業に手間をかけず、簡単に行うことができるGUIツールのことです。従来のデプロイ作業は、エンジニアがコマンドなどを使って手動で作業を行うため、特殊なスキルが必要となり、Linuxなどの運用経験がないシステムエンジニアにはハードルの高い作業でした。しかし、DeployBotを利用することでGUI画面から簡単にデプロイ作業が可能となりました。
ここでは、デプロイツールとしてDeployBotを紹介しましたが、「Git」でデプロイ環境を構築する方法や、お馴染みのGAS(Google Apps Script)を用いたWebアプリのデプロイ方法などもありますので、デプロイに興味を持った方はさまざまなツールを研究してみてください。
【参考】:DeployBot | Code Deployment Tools | Deploy Code Anywhere

サーバーの再起動が不要
ホットデプロイ以外の従来型デプロイ作業では、デプロイ終了後にサーバーの再起動が不可欠でしたが、サーバー再起動が不要となり、システムダウンタイムの大幅な短縮、回避が可能となります。
直感的操作でデプロイが可能
DeployBotでは難しいコマンドを使わず、GUIツールを利用して、ボタン操作でデプロイが行えます。
他に特別なツールなどの必要がない
これまでのデプロイでは、サーバーを操作するためのクライアントソフトなどを使い分ける必要があり、作業が大変煩雑でしたが、DeployBotでは1つのツールだけで作業が完結し、余計な手間を省くことができます。
ロールバックが容易に行える
デプロイでは作業に失敗した時に、元に戻す「ロールバック」という作業が必要になります。これは完全に元の状態に戻す必要があるため、大変神経を使いますが、DeployBotでは「Rollback to 」ボタンを押すだけでいとも簡単に前のバージョンに戻すことが可能です。
DevOpsエンジニアとは

DevOps(デブオプス)という言葉を聞いたことはありませんか?DevOpsは、開発を意味するDevelopmentと運用を意味するOperationsを掛け合わせた新たな概念です。このDevOpsを推進する役割を担うのがDevOpsエンジニアで、今注目を浴びているエンジニア職です。
DevOpsエンジニアの仕事では、開発サイドと運用サイドの連携を強め、システム開発効率やサービス品質の向上、安定運用実現など、インフラの構築や運用改善など多岐に及びます。そのためDevOpsエンジニアには幅広いIT知識やスキルが求められます。


DevOpsエンジニアの将来性
従来型のシステム開発と運用の縦割り組織では、さまざまな弊害が存在していました。しかし、ITの進展に伴い、システムに対する要求は年々厳しくなっており、「サービスを止めずにシステムを改善する」ことが当然のことになっています。
またクラウド化の進展によって、開発と運用の一体化は必然のこととして受け止められています。こうした背景から、開発と運用の一体化を図るDebOpsエンジニアに対する需要が高まっており、将来性の高い職種の1つです。
DevOpsエンジニアの求人と年収
DevOpsエンジニアの求人状況や年収について確認してみましょう。マイナビAGENTの求人検索でキーワード[DevOps]で検索したところ、年収400万円から1,500万円までの求人を確認できたことから、DevOpsエンジニアが高年収であることが推察できます。
その件数はまだ残念ながら300件前後ですが、今後需要が拡大していくと考えられます。特にクラウド事業を展開するGoogleやAmazonAWSではDevOpsエンジニアの強化に積極的であり、クラウドのフルスタック人材と言われるDevOpsエンジニアは更に重用されると考えられます。
【参考】:マイナビAGENT SE・システムエンジニア DevOps
クラウド時代をリードするエンジニアに

この記事ではシステムやサービスのリリースに欠かせない「デプロイ」をテーマにして、DevOpsエンジニアなど新たなITエンジニアについても紹介をしました。今やシステム環境はオンプレミスからクラウドに大きく舵をきっており、クラウドエンジニアが脚光を浴びています。
そしてクラウド環境で大きな力を発揮するのがDevOpsエンジニアです。エンジニアを目指す皆さんは、システム開発や運用という壁を越えて、顧客目線で最適なシステムの提供ができるDevOpsエンジニアを目指してみませんか?

編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから