IT業界に身を置く人やITの勉強をしている人であれば必ず「デプロイ」という言葉を耳にする機会があると思います。
しかし、デプロイは具体的にどういった作業なのかよくわからないという人も多いのではないでしょうか?
そこで、本記事ではデプロイがよくわからないという人に向けて、デプロイのについて、関連作業との違いやデプロイを行うタイミング、デプロイを行ううえで大事なポイント、などについて解説します。また、手法についても併せて紹介するので今後のシステム開発の参考にしてみてください。
デプロイとは?
「デプロイ(Deploy)」には「配備する、展開する」という意味があり、IT業界で「デプロイ」というと、「実行ファイルをサーバ上に配置し、システムをユーザが利用できる状態にすること」を指します。
システム開発では、下記3種類の環境を用意し、そこにファイルを設置して開発作業を進めます。
-
開発環境:テキストエディタやエラーチェック機能などが備わるツールを用いた環境
-
テスト環境:実行ファイルの挙動を検証する本番環境を再現した環境
-
本番環境:実際にユーザが利用するシステムが稼働する環境
上記のうち、デプロイは、システムが実際に稼働する「本番環境」と、本番環境を再現してシステムが意図した通りに作動するか検証する「テスト環境」で行われます。
デプロイは、密接に関連したいくつかの工程を踏むことで実行できます。それぞれの作業の内容や、その目的を理解しておくことは、デプロイを行う上で重要です。
デプロイに関連する工程・デプロイとの関係
デプロイは、「実行ファイルをサーバ上に配置すること」であり、その関連作業として「ビルド」や「リリース」を行う必要があります。
ビルド
ビルドとは、ソースコードが記述されたファイルをデプロイに必要となる「実行ファイル」に変換・作成する作業を指します。人間にとって理解し易い言葉(プログラミング言語)で記述されたソースコードをコンパイル(コンピュータが理解・処理しやすい形に変換すること)し、バイナリーファイル(データを0と1の2進数で置換・表現したもの)に変換したのち、各ファイル同士をリンク(適切な形に組み合わせる)して、一つの実行ファイルにまとめます。デプロイではその実行ファイルを対象の環境で実行・展開します。
リリース
リリースとは開発したシステムを公開することです。本番環境にリリースすることでユーザが利用できる状態にすることです。プロジェクトによってその内容は異なりますが、一般的にリリースというとデプロイを含んだ手段や段取りをまとめたものを指し、デプロイはリリース作業の前段階の「テスト環境あるいは本番環境に実行ファイルを配置する工程」です。デプロイ完了後に調整し、問題がなければリリースして、ユーザが利用できる状態にします。なお、あくまで、デプロイはユーザに対して使用可能な状態にすることであって、ユーザ自身がシステムを使用できる状態にする「インストール」はデプロイに含まれません。
システム変更の流れとしては以下のようになります。
- プログラミングを行う
- ビルドする
- システムを停止する
- デプロイを行う
- デプロイ前後の差分比較をする
- サーバを再起動する
- 動作確認を行う
- リリースする
作業工程単位で述べましたが、実際のところ、デプロイの範囲は曖昧であり、「実行ファイルをサーバ上に配置し、ユーザがシステムを利用できるようにすること」と捉えると、「ビルド」や「リリース」もデプロイに含まれることになります。
デプロイを行うタイミング
デプロイを行うタイミングはそれぞれですが、一般的には以下のタイミングで行われます。
- リリースの直前
- 個々の検証が終わってシステム全体で検証できるようになったタイミング
いずれにしろ、開発工程における大詰めであるため、入念にシステムの検証を行う必要があります。
また、時間帯としては深夜帯がおすすめです。理由としてはユーザのアクセスが集中しにくく、トラブルに対処しやすいためです。
デプロイにおける重要な考え方
・「早い」:稼働停止は時間は極力短いこと
・「確実」:デプロイに失敗しない・しても簡単に元に戻せる
・「安定」:ユーザが利用する時間や環境によってシステムの質が左右しない
以上のことから、デプロイをすることでユーザに不都合を与えないことがデプロイをするうえで重要な方針であるといえます。
そしてこの方針を実現するための具体的な手法を次項でご紹介します。
デプロイの手法
通常のデプロイではシステムの稼働を一時的に停止させ、サーバの再起動などを伴うため、ダウンタイム(停止時間)が発生しますが、このデプロイによるダウンタイムをなくす、または最小限に抑える「ホットデプロイ」という考え方があり、実施環境によって適した手法を選びます。その主な4つの手法を紹介します。
ブルーグリーンデプロイメント【Blue/Green Deployment】
「ブルー」と呼ばれる既存の本番環境とは別に「グリーン」と呼ばれる新しい本番環境を構築することで、ロードバランサー(外部からの通信負荷を分散させる装置)の接続先を切り替えて本番環境をリリースする運用方法です。2つのサーバを同時に起動できるので、グリーン環境の構築中でもブルー環境を引き続き起動でき、システム全体の稼働を止めずに済みます。また、もしグリーンで問題が発生したとしても、ブルーに戻すこと(ロールバック)も簡単にできて安心です。ただ、その反面、2つのサーバを常に起動しなくてはならないので、運用コストがかさみます。
メリット | ・システムの継続利用ができる ・ロールバックが容易にできる |
デメリット | ・運用コストがかさむ |
利用する場面 | 本番環境を止めずにシステム変更をする場合 |
イミュータブルデプロイメント【Immutable Deployment】
ブルーグリーンデプロイと似ていますが、イミュータブルデプロイメントでは旧サーバを残しません。グリーン環境への移行が問題なく完了すると、ブルー環境は抹消されます。そのため、旧サーバを残すブルーグリーンデプロイメントと比較して、運用コストを節約できます。
メリット | ・ブルーグリーンデプロイメントよりも運用コストが節約できる |
デメリット | ・一度システム変更が完了すると変更前のデータが消える |
利用する場面 | 運用コストを抑えつつ、稼働を止めずにシステム変更をする場合 |
シンボリックリンクデプロイメント【Symbolic Deployment】
1つのサーバ上に仮想環境を2つ用意し、1つを既存の環境、もう一方を新しい環境としてデプロイする手法です。デプロイが一通り終わったら「Symbolic link」(起動リンク)で環境を移行します。サーバを増やさなくていい分低コストで運用できるといった点やデプロイ作業の自動化を容易に行える点がメリットとして挙げられます。ただ、サーバが1つであることで、再起動が必要だったり、サーバにエラーが発生した際には複数のシステムに影響が出てしまいます。
メリット | ・低コストで運用できる ・デプロイの自動化が簡単 |
デメリット | ・システム変更時の再起動が必要 ・エラー時に複数のシステムに影響する |
利用する場面 | 運用コスト・サーバ代数を抑えて、且つデプロイの自動化をしたい場合 |
ローリングデプロイメントメント【Rolling Deployment】
一時的にシステムの実行環境を完全に切り離して旧バージョンを新しいバージョンに置き換えていくデプロイ方法です。ブルーグリーンデプロイと比較して実行速度が速いのが特徴です。ただ、一時的に複数の運用環境が動作するので、新旧サーバが混在するという点で注意が必要です。デプロイがうまくいかなかった場合に元に戻すのが大変になる可能性があります。
メリット | ・システムの継続利用ができる(一部機能は一時的に利用不可) |
デメリット | ・複数のサーバを接続している場合は、サーバの混在に注意が必要 |
利用する場面 | ダウンタイムなしで高速で実行したい場合 |
デプロイの自動化
デプロイを迅速かつ確実に行うには自動化という手段もあります。デプロイを自動化することで、手作業も減らせるので、開発スピードも速くなるうえに人為的ミスも起こらなくなります。ただし万が一の際に備えて、自動化エラーを人がチェックできるようにしておきましょう。
デプロイ自動化するツールは、さまざまな企業で提供されており、なかでもGoogleやAWSでは多くの便利なツールが提供されています。
デプロイの自動化における注意点
デプロイの自動化はも多いですが、いくつかの注意点もあります。
既存システムが複雑だと自動化後も複雑になる
新規で開発するシステムであれば最初からシンプルな手順を組めば問題ありませんが、既存のシステムの場合、複雑になっていることが多く、その場合は再構築が必要になります。
自動化できない設定になっている場合がある
自動化向けに設定されていないものは、構成ファイルやデータベースを特定して直接または別のツールから変更する必要があります。
チーム間の協力が不可欠
デプロイの自動化は開発者と運用担当者で協力することが求められます。うまく協力できていないと両者が異なる方法でデプロイしてしまったり、手動で行う必要が出てきたりと、エラーのリスクが上がります。
また、自動化だけでなく、デプロイ自体が開発者と運用担当者で協力することが求められています。そのような背景から、「DevOps」という開発方針への期待が高まっています。
デプロイの習得方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、デプロイに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。