今さら聞けないデプロイの基本。押さえておきたい用語や定番サービス

システム開発において、プログラムを組み立てただけでは意味がありません。『デプロイ』によって実際に動かすことが重要です。しかし、そもそもデプロイとは何を指す言葉なのでしょうか?デプロイの意味や特徴について解説します。

デプロイとは

システム開発において『デプロイ』は欠かせない工程の一つで、エンジニアなら必ず知っておかなければならない程、重要な言葉です。そもそも『デプロイ』とは何を指す言葉なのでしょうか?その意味を解説します。

デプロイするやデプロイメントの意味

デプロイ(deploy)あるいはデプロイメント(deployment)には、日本語では「配置する」「展開する」といった意味があります。

例えば、社員の勤怠をスマホのタッチから報告できるシステムを作成したとしましょう。しかし、作成するだけではシステムとして機能することはありません。

社員のスマホにインストールさせ、実際に実行してもらってはじめて、システムとして機能したと言えます。

この「開発後から利用可能な状態への移行」のことをデプロイと呼びます。デプロイは開発が終わった後に実際にソフトウェアをリリースすること、ユーザーにインストールしてもらうことなど、一言で表せば『システムを利用可能な状態にすること』です。

ホットデプロイとは

デプロイの形態の一つに『ホットデプロイ』というものがあります。これは「システムを停止せずにデプロイすること」です。

システムには、新たな機能を追加したり、更新をかけたりする際に、システム自体を1度ダウンさせるものがありますが、ホットデプロイではダウンさせることがありません。常にシステムは動作させたままです。

これにより、ユーザーが使えない時間が発生しません。24時間利用のSNSサーバーなどではよく見られる形態です。

知っておきたい用語

プログラミングやシステムの設計や制作においては、さまざまな専門用語が登場します。ここでは、最低限知っておきたい用語の意味を紹介しますので、覚えておいてください。

ビルド

プログラムを作る過程を大まかに分けると、三つに分割できます。

  1. ソースコードを書く
  2. ソースコードを、コンパイル(機械が理解できる言語に翻訳)する
  3. 実際にプログラムを実行する

この2の工程と、2から3にかけて行う、さらに細かな作業のことを『ビルド』といいます。ビルドとコンパイルは、似ていますがイコールではありません。

コンパイルからプログラムの実行までには、バグ取りや動作の確認なども発生します。こういった実行までの細かな作業も、ビルドには含まれるからです。コンパイルはビルドの一部であると覚えておけばよいでしょう。

リリース

リリースには、分野によって色々な意味がありますが、プログラムにおけるリリースは「制作したプログラムやアプリケーションを公開すること」です。また販売やクライアントへの提出もリリースに含まれます。

リリースするための作業手順やスケジュールの管理をリリース管理と呼び、システム開発においては大切なプロセスの一つです。

ロールバック

ロールバックは、システム開発における障害や不都合が起きた時に、処理を一つ前に戻すことをいいます。

システム開発においては、新たな機能やデータを更新した結果、システムと不具合を起こして動かなくなってしまうというケースもよくあるのです。

その際に、原因を特定して修正するのではなく「正常に動いていた一つ手前のバージョンに戻してしまおう」というのがロールバックです。

また、システムを更新する作業中で不具合が生じた際に、進めていた作業を破棄することもロールバックと呼ぶことがあるので覚えておきましょう。

デプロイの主な手法

デプロイにはいくつかの手法があります。よく利用されるデプロイの手法を解説しますので、参考にしてください。

カナリアリリース

サービスやアプリケーションの機能の一部だけをユーザーが利用できるようにリリースし、やがて全体が利用できるよう段階的に進めていくデプロイの手法を『カナリアリリース』といいます。

いきなり全てを公開してしまうと、不具合が発生したときに原因の特定がしにくい、また複数の不具合が起こったときに両方の対処を迫られるといった問題が発生します。

その点、一部ずつ公開していくカナリアリリースでは、原因の特定も早く、不具合に対する対処もコンスタンスに行うことが可能です。

かつて、鉱山採掘の現場で有毒ガスを探知するために、カナリアを用いていたことからこの名前がつけられました。

ブルーグリーン

『ブルーグリーン』は、クラウドサービスにおいてよく利用される手法です。

『ブルー』と『グリーン』の2系統の環境を用意して、切り替えることで円滑なシステム運営を行う手法を指します。例えば、本番環境としての『ブルー』と、ブルーに新たな要素を加えた『グリーン』を用意し、試験的にグリーンに切り替え、問題があればまたブルーに戻すといった具合です。

複数の環境をスイッチのように切り替えることで、ユーザーから見れば支障なくシステムを利用することができます。

イミュータブル

『ブルーグリーン』と比較されることがよくありますが、『イミュータブル』はスイッチのように切り替えるのではなく、新しい環境をデプロイした際に古い環境を削除してしまうのが特徴です。

クラウドサービスの普及によって、新しい環境の構築が容易になったことから生まれた手法となります。『ブルーグリーン』よりも運用も楽で、コストもかからないのがメリットです。

デプロイの実行手段について

デプロイする上で、考えなければならないのが実行手段です。主に『手動』と『自動』の2通りがあります。それぞれの特徴について解説しますので、適切な方法の選択に役立ててください。

手動で実行

手動で実行することの最大のメリットは『任意のタイミングでデプロイできる」ということでしょう。

デプロイのタイミングは『テスト通過時』『リリースブランチの作成時』『クライアントの許可が下りた時』など、いくつかの条件が必要になってくるケースがありますが、手動実行であれば、難なく対応可能です。

方法としては、Webブラウザ上で行う、ローカルPCで行うなどいくつかありますので、最適な方法を選択しましょう。

ただし、手動で行うにあたっては、ヒューマンエラーの発生や、特定の人ばかりが行う体制になりやすい、また担当者を変える場合に引き継ぎが必要といった手間が発生するため、マニュアルの作成や二重チェックできる体制を作っておく必要があります。

自動化

日付や間隔、特定のプログラムの更新など何らかの条件を組み込んでおくことで、自動的にデプロイメントが発生するようにするという方法もあります。

手動の際に見られるようなヒューマンエラーの発生や属人化、引き継ぎなどの問題が起こらないことがメリットと言えるでしょう。

問題点としては、承認が不要でデプロイされてしまうため、意図しないデプロイメントが起こる可能性があるということです。あらかじめ発生条件を確認しておかなければなりません。

デプロイ仕組みの共通化によるメリットデメリット

デプロイの方法には、上記で触れたように『ローカルサーバーを使い手動で行う方法』や『条件を付けて自動で行う方法』があります。プロジェクトごとに使い回せる、デプロイの共通の仕組みを作っておく企業も多いのではないでしょうか。

その場合のメリットとデメリットをそれぞれ紹介します。

共通基盤による複数プロジェクトでの利用

デプロイを行うための専用のツールや共通の基盤を作り、異なるプロジェクトにおいても、同一の方法でデプロイを行うという方法があります。

この方法のメリットは、プロジェクトのたびに新しいデプロイの方法を考えなくても良いということです。加えて、デプロイを行う担当者が変わっても、同じ方法でデプロイが行えるというのも良い点でしょう。

一方、デプロイのために作成したツールやソフトを保守しなければならない、イレギュラーに対応しにくくなるといった問題点も発生します。また長期間にわたって同じ方法を行っていると慣習化してしまい、改修がしにくくなるというのも欠点として挙げられるでしょう。

プロジェクトごとのカスタマイズ

元々のベースとなる部分は決めておき、細かい条件や手法などをプロジェクトごとにカスタマイズするという方法もあるでしょう。

すべてを共通化させておくよりは柔軟な対応ができ、かつ一から構築するよりははるかに楽です。クライアントの細かな要求にも応えやすい仕組みといえるでしょう。

問題となるのは、トラブルが起こった時に責任の所在が曖昧になりやすいという点です。ベースとなる仕組みを作った人間が責任を負うのか、カスタマイズした人間に非があるのかの判断が難しくなります。

加えて、共通部分の変更が難しくなるのも欠点と言えるでしょう。すでに複数のチームが運用している場合、変更をかけてしまうと混乱が生じてしまう可能性があるからです。

共通化しないパターン

共通化しないという方法についても検証してみましょう。

この場合のもっとも大きな恩恵は、プロジェクトごとに最適なデプロイができるように設計できるということです。さらに、問題が見つかった場合は修正をほどこし、常に最適なデプロイの方法を追求することができます。

ネックとなるのはやはり「すべてのプロジェクトにおいて最初からデプロイの仕組みを作らねばならない」という点です。コストと時間、さらにデプロイの仕組みを作る技術を持った人間を常駐させなければなりません。

作成者によって仕様が異なるため、社内でノウハウを展開しにくくなるという点も、欠点だと言えそうです。

担当組織ごとのメリットデメリット

システムに関わる組織はさまざまです。どの組織がデプロイを行うのかは、悩みどころでしょう。デプロイを行う担当組織をどこに任せるべきか、組織ごとの特徴について解説します。

インフラ組織

サーバーやデータベースの管理など、システム運営において基盤となる環境を管理する組織のことを『インフラ組織』と呼びます。

プロジェクトが変わってもインフラ組織は同一としている企業も多く、インフラエンジニアにインフラの整備とデプロイを同時に任せてしまうパターンもあるでしょう。

この場合のメリットは、異なるプロジェクトにおいて一括管理できることから、コストが安く済むという点と、ノウハウを確立しやすいという点が挙げられます。

一方、インフラエンジニア以外にデプロイの方法が不透明になりがちで、ブラックボックス化しやすいことや、そもそも社内にインフラ整備ができるほどの技術者を常駐させておかなければならないことが欠点と言えそうです。

開発組織

プロジェクトの開発組織がデプロイを行います。小さな会社の場合は、インフラと兼任することもあるでしょう。

開発組織がデプロイを行うメリットは、プロジェクトごとに最適なデプロイが行えるという点です。その一方で、プロジェクトごとにデプロイの方法が大幅に違ってしまう点や、デプロイを含めてチームのタスクに含めなければならない点が、デメリットとして挙げられます。

デプロイの使い回しがしにくく、余剰コストがかかるのも問題点と言えるでしょう。

第3の組織

会社が大きくなった場合に、開発やインフラに携わるチーム以外にも、開発したプログラムを管理・運用する別の組織が作られることがあります。そういった組織がデプロイを行うケースを考えてみましょう。

メリットとして大きいのは、デプロイの仕組みを作成することにタスクを大きく割けるために、高品質なデプロイが生まれやすいという点です。デプロイに関する責任が明確化し、不備が起こった場合の連携が取りやすいということも挙げられます。

デメリットとしては、やはり一定の組織規模がなければコストがかかってしまうことです。小さな組織では第3の組織に行わせる意味が薄くなります。また、デプロイに関してブラックボックスになりがちな点や、デプロイの変更を行うのが難しくなるのも問題です。

デプロイツールやサービスを紹介

実際にデプロイに使えるツールやサービスを紹介します。自身の環境に最適なものをピックアップしてみてください。

Capistrano

Ruby on Rails (通称Rails)のデプロイを自動化するためのツールです。Railsは、オープンソースのWebアプリケーションフレームワークのことで、Webサイトの制作やショッピングサイトを作るのに向いています。

『Capistrano』は、配信先のサーバーにインストールの必要がない点や、デプロイがバージョン管理できるという点からロールバックが容易なことが特徴です。Railsにおいては定番のツールと言えるでしょう。

『Capistrano』公式サイト

Deployer

『Deployer』はPHP製のデプロイツールで、デプロイの管理をPHPを使うことで楽に行うことができます。ローカルから簡単にデプロイを実行できるのも優れた点です。

サーバーにGitのインストールやssh keyの配置が必要なため、PHPとあわせて少々難易度は高めですが、慣れれば複数のプロジェクトのデプロイ管理も行えるようになります。

『Deployer』公式サイト

ヘッドウォータース

株式会社ヘッドウォータースが提供しているデプロイ自動化を支援するサービスがあります。株式会社ヘッドウォータースは、Robotを使ったサポートサービスやAIの導入などを行っている会社です。

先述したブルーグリーンデプロイをはじめ、ローリングデプロイなどさまざまなデプロイの自動化について支援していて、そのためのソリューションとしては『AWS CodeDeploy』やオープンソースの『Ansible』を用意しています。

社内の自動化リソースを軽減するために利用してみてはいかがでしょうか。

『デプロイ自動化サービス』株式会社ヘッドウォータース

デプロイゲート

『デプロイゲート』(DeployGate)は、iOSやAndroidなどのモバイルで用いるシステム開発を支援するためのもので、ユーザーテストを含め、デプロイなどの開発に必要なタスクを一つのツールで行うことができます。

デプロイゲートの特徴

このツールの優れている点は、デザイナーなどをはじめ、プログラミング知識のない方でもデプロイが行えるという点です。「ぐるなび」や「KDDI」などの著名な企業も利用しています。

社内にデプロイを行うノウハウがない場合、利用してみると良いでしょう。

『DeployGate』公式サイト

まとめ

アプリケーションやツールの開発において『デプロイ』という作業は必ず実行しなければなりません。デプロイを行うことによって、開発したサービスはユーザーの手に届きます。

デプロイをどのような方法で行うのか、またどういったツールを用いるのかは、会社や開発環境によるところも大きいので、現状の環境に応じたデプロイの方法を検討することが重要です。

この記事をシェア

関連記事


副業・フリーランス

プログラミング

インタビュー

デザイン

お金

採用・組織

転職

イベントレポート