📑

結局デプロイとリリースってどう違うの

2021/09/19に公開

わからなくなった発端(同僚の一言)

現在DevOpsの学習をするために何冊か本を読んでおります。

その中で私は「デプロイ」と「リリース」の違いを以下のように捉えていました。

  • デプロイ
    • 開発環境・ステージング環境・本番環境などに最新のアプリケーション(システム)を利用可能な状態にすること
  • リリース
    • デプロイした各システムを顧客や一部の人に使える状態にすること

DevOpsサイクル
DevOpsによるサイクル

↑こちらの図は Udemyメディアさんから利用させていただいていいます。

そんな中同僚のエンジニアから、このように言われました。

「でもIT用語辞典にはソフトウェアのリリースを含んだ意味の広い言葉って書いてありますよ。デプロイという言葉の中にリリースが含まれているのではないんですか?」

デプロイ(deploy)という言葉は元々、配置する、展開するといった意味の英語である。デプロイはソフトウェアのリリースやインストールも含んだ意味の広い言葉であり、開発環境からステージング環境へシステムを反映させることも、ステージング環境から本番環境へ反映させることも、「デプロイする」と表現できる。

一瞬あれ?
本当だ・・・矛盾してない?・・・

と思ってしまい言葉に窮してしまったのですが、よく見れば全然矛盾していませんでした。

ソフトウェアとアプリケーションの違い

恥ずかしながらアプリケーションとソフトウェアの意味を混同しておりました。

こちらのサイトの説明がしっくり来ました。

ソフトウェアはコンピュータを動作させる手順・命令をコンピュータが理解できる形式で記述したもののことです。コンピュータを構成する電子回路や周辺機器などの物理的実体をハードウェアと呼ぶのに対して、形を持たない手順や命令などをソフトウェアと呼びます。

つまり、ソフトウェアとはOSやアプリケーション全てを包括した用語です。
OSの中枢であるカーネルもソフトウェアに該当します。
それに対して、アプリケーションはワードやエクセルなど、OS上で動作するソフトウェアのことを指します。

http://linux-dvr.biz/archives/9

こちらには 「デプロイはソフトウェアのリリースやインストールも含んだ意味の広い言葉」と書かれており、ここでいうソフトウェアとはリリースしたいアプリケーションのことではなく、サーバーOS等も含んだ 環境という意味でとらえると良さそうです。

まとめ

ソフトウェアとアプリケーションの違いを踏まえた上で考えると、やはり以下のような理解で良さそうだと整理できました。

デプロイ リリース
意味 目的のアプリケーションを特定の環境で「利用できる状態」にすること 目的のアプリケーションを一部もしくは全部の人から使えるようにすること
順番 自動テストが終わって、各環境のブランチにコードが統合された後。ビルトされて自動でデプロイされるようにCI/CDパイプラインが組まれることが多いのでは デプロイの後。必要ならビジネス側による確認などが入った後にリリースとなりそう
備考 デプロイと同時にリリースすることも多そう

余談ですが、DevOpsの名著には以下のように記載されておりました。

The DevOps ハンドブック 理論・原則・実践のすべて

デプロイは、指定された環境に指定されたバージョンのソフトウェアをインストールすることだ(たとえば、インデグレーションテスト環境へのコードのデプロイ、本番環境へのコードのデプロイなど)。デプロイは、同時に顧客に機能をリリースする場合もそうでない場合もある。

リリースは、すべての顧客、または一部の顧客(たとえば、顧客ベースの5%だけが新機能を使えるようにする)に対して機能(または一連の機能)を利用可能な状態にすることである。コードと環境は、機能のリリースがアプリケーションコードの変更を必要としないように作る必要がある。

Effective DevOps ―4本柱による持続可能な組織文化の育て方

アプリケーションのデプロイとは、ソフトウェアリリースの計画づくり、リリース実行、保守を含むプロセスを指す。

Discussion