ソフトウェアデプロイメントとは?開発完了からユーザーに届くまでの工程

システム開発・テクノロジー
ソフトウェアデプロイメントとは?ざっくりと3行で
  • 英語のdeploy(展開・配置する)が語源で、開発したアプリケーションをサーバーに配置してユーザーが利用できる状態にする工程全体のこと。略して「デプロイ」とも呼ばれる
  • 開発環境→テスト環境→本番環境という3段階を経て行われ、テストで問題がないことを確認してから本番環境へ配置するのが基本的な流れだ
  • 手動デプロイは人的ミスが発生しやすいため、現代の開発現場ではCI/CDパイプラインを使った自動化が標準になりつつある

【深掘り】これだけ知ってればOK!

デプロイの方法には複数の戦略がある。中でもブルーグリーンデプロイメントは、現行サービス(ブルー)と新バージョン(グリーン)の2系統を並行稼働させてトラフィックを一瞬で切り替える手法で、ダウンタイムをほぼゼロに抑えられる。問題が起きたらブルーへ即戻せる点も安心感が高い。

デプロイメントとよく混同される概念にビルドリリースがある。ビルドはソースコードをコンパイルして実行可能なファイルを生成する工程だ。デプロイメントはそのファイルをサーバーに配置する工程で、リリースはデプロイを含む一連の公開作業全体を指す。「デプロイ=リリース」と捉えられることもあるが、厳密にはデプロイはリリース作業の前段階に位置する。

デプロイメント戦略の主な手法を整理すると次のとおりだ。インプレースデプロイは稼働中のサーバーを直接更新する最もシンプルな手法で、再起動が必要なためダウンタイムが生じる。ブルーグリーンデプロイは2系統を用意して瞬時に切り替える手法でダウンタイムを回避できる。カナリアリリースは新バージョンを一部のユーザーのみに先行提供し、問題がなければ段階的に展開する手法だ。リスクを最小化したいサービスに向いている。

CI/CD(継続的インテグレーション・継続的デリバリー)との組み合わせがデプロイメントの現代的なスタンダードだ。コードをGitにプッシュするたびにテストが自動実行され、全テストが通れば自動的にデプロイが走る仕組みを整備すると、手動作業のミスリリース間隔の長期化という2大問題を同時に解消できる。

デプロイメント中の最大のリスクは本番環境のダウンタイムだ。インプレースデプロイでは更新中にサービスが停止し、ユーザーがアクセスできない状態になる。機会損失に直結するため、ECサイトや金融サービスなど常時稼働が求められるサービスではブルーグリーンやカナリアリリースなどダウンタイムを最小化する戦略が採用される。深夜のリリースウィンドウを設けるのも現場の知恵だ。

よくある誤解

デプロイとリリースは同じという誤解

実務上「デプロイした」と「リリースした」を同義で使う場面は多いが、正確には異なる。デプロイはファイルをサーバーに配置する技術的な工程で、リリースはユーザーに公開するための一連の作業全体を指す。デプロイが完了しても、差分確認・動作確認・告知対応などリリース作業が残っているケースが多い。

デプロイは開発者だけがやる作業という思い込み

DevOpsの普及により、デプロイは開発者と運用チームが共同で設計・実行する作業になっている。さらにCI/CDの自動化が進んだ環境では、デプロイのトリガーはコードのプッシュが起点となり、特定の担当者が手動で行う作業ではなくなりつつある。「誰がデプロイするか」という問いは「どのパイプラインがデプロイするか」に変わっているのが最新の現場像だ。

会話での使われ方

ITKAGYO運営者デプロイ太郎のアイコン画像

今夜23時にデプロイメントの予定なんですが、ブルーグリーンで切り替えるのでユーザー側のダウンタイムはほぼないはずです。

エンジニアがリリース前日に上司へ作業計画を報告している場面。ダウンタイムを抑えるデプロイ戦略を事前に説明している。

ITKAGYO運営者デプロイ太郎のアイコン画像

CI/CDを整備したら、デプロイメントの手間が劇的に減りました。今は全テスト通ったら自動で本番に上がる流れになってます。

開発チームのランチ雑談で自動化による業務改善を話している場面。手動デプロイからCI/CD自動化への移行で作業負担が変わった実感を共有している。

ITKAGYO運営者デプロイ太郎のアイコン画像

カナリアリリースで新機能を5%のユーザーに先行公開してからフルデプロイに移行したい。エラーレートを見てから判断できるので安全性が高いです。

プロダクトマネージャーがエンジニアリングチームとの定例でリリース戦略を提案している場面。リスクを段階的に管理するカナリアリリースの採用を議論している。

ソフトウェアデプロイメントの歴史

デプロイメントの概念は開発手法の変化とともに大きく進化してきた。手作業から自動化へという流れを知ると、現代のCI/CDがなぜ重要なのかがよく見えてくる。

年代出来事
1990年代ウォーターフォール開発が主流で、デプロイは半年〜年単位の大規模リリースが一般的。手動作業でCDを使ってサーバーへコピーするスタイルが多かった
2001アジャイルマニフェスト発表。短いサイクルでのリリースを繰り返す開発文化が広がり、デプロイ頻度が上がることでデプロイの自動化ニーズが生まれた
2009DevOpsという概念が提唱される。開発チームと運用チームの協働が推奨され、デプロイをシームレスに繰り返す文化が形成されていった
2010年代JenkinsやCircleCI等のCI/CDツールが普及。コードプッシュから自動テスト・自動デプロイまでのパイプラインが一般的な開発インフラになった
現在Kubernetes・GitOps・GitHub Actionsなどが主流となり、コンテナ化されたアプリのゼロダウンタイムデプロイが当たり前の環境が整っている

【まとめ】3つのポイント

  • 開発→テスト→本番という3環境の移動がデプロイの本質:ソフトウェアデプロイメントは完成したファイルを本番サーバーへ配置するだけでなく、品質を保証する環境の移動プロセス全体を指す
  • 戦略の選択がダウンタイムとリスクを決める:インプレース・ブルーグリーン・カナリアという3つの手法を知り、サービスの特性に合わせて選択することがインフラ設計の基本だ
  • CI/CDの自動化がデプロイの現代標準:手動デプロイは人的ミスの温床になるため、コードプッシュをトリガーに自動でテスト・デプロイまで走るパイプラインの整備が質とスピードの両立につながる

よくある質問

Q
デプロイに失敗したらどうすればいいですか?
A

まず前のバージョンへのロールバック(切り戻し)を実行することが最優先です。ブルーグリーンデプロイなら旧バージョン(ブルー)へのトラフィックを即座に戻せます。ロールバック後に障害の原因をログで特定し、修正を加えてから再デプロイします。デプロイ手順書に「失敗時のロールバック手順」を必ず事前に書いておくことが重要で、障害中に手順を考えるのは最悪のタイミングです。

Q
デプロイは夜中に行うべきですか?
A

アクセスが少ない深夜に行う「メンテナンスウィンドウ」は今でも一般的ですが、CI/CDとブルーグリーンデプロイが整備されている環境では昼間でもゼロダウンタイムでデプロイができます。深夜デプロイはエンジニアの疲労が増し、問題発生時の対応が遅れるリスクもあります。自動化と適切なデプロイ戦略があれば、営業時間内のデプロイを選択できる環境に移行することが理想です。

Q
AWSやGCPでのデプロイはどう変わりますか?
A

クラウド環境ではデプロイに必要なインフラの準備と廃棄をコードで管理するIaC(Infrastructure as Code)が一般的です。AWSではCodeDeployやECSへのコンテナデプロイ、GCPではCloud Runへのデプロイが代表例です。サーバーの物理的な管理が不要になり、スケールアップ・スケールダウンも自動化できるため、オンプレミスに比べてデプロイの柔軟性が大幅に向上します。

Q
ソフトウェアデプロイメントとリリース管理の違いは何ですか?
A

デプロイメントは技術的な配置作業で、リリース管理はデプロイを含む告知・承認・スケジュール調整・品質確認などを組み合わせたプロジェクト管理活動です。デプロイメントはエンジニアが主導しますが、リリース管理にはプロダクトマネージャー・CS・マーケティングなど複数部門が関わります。どちらも「ユーザーに価値を届ける」という目標のために機能する異なるレイヤーの活動です。

この用語と一緒に知っておきたい用語

用語この記事との関連
ダウンタイム次のステップとしてダウンタイムを学ぶと知識が広がります。サーバーやシステムが停止してサービスを利用できなくなる時間のこと。計画的なメンテナンス停止と突発的な障害による停止の2種類がある
deploy次のステップとしてdeployを学ぶと知識が広がります。deployっていうのは、開発したアプリやサービスを本番・ステージングなどの動作環境に配置して実際に使える状態にする一連の作業のことだよ。
CI/CDCI/CDとの関係を知ると全体像がつかみやすくなります。Continuous Integration(継続的インテグレーション)と Continuous Delivery/Deployment(継続的デリバリー/デプロイメント)の略。コードのコミットをトリガーに自動でビルド・テスト・デプロイを実行するパイプラインだ
サーバーサーバーを押さえると本記事の理解がさらに深まります。ネットワークを通じて情報やサービスを提供する側のコンピューターのこと。レストランで料理を運んでくれる給仕係(server)をイメージするとわかりやすいよ
テストテストとの関係を知ると全体像がつかみやすくなります。テストというのは、作ったソフトウェアが意図した通りに正しく動くかどうかを確かめる検証作業のことなんだ。

【出典】参考URL

https://techmania.jp/blog/deploy/ :デプロイとビルド・リリースの違いの解説
https://www.bold.ne.jp/engineer-club/deploy :デプロイの概要と手法の図解
https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%83%A1%E3%83%B3%E3%83%88 :Wikipedia「ソフトウェアデプロイメント」

コメント

「IT用語、難しすぎて心が折れそう……」という方のための、ハードル低めな用語辞典です。

情報レベルは「基礎中の基礎」。会話を止めないためのエッセンスだけを抽出しています。分かりやすさを追求するあまり、時々例え話が暴走しているかもしれませんが、そこは「ほどよく」聞き流していただけると幸いです。
ほどよくIT用語辞典システム開発・テクノロジー
デプロイ太郎のSNSを見てみる!!