デプロイは、開発したアプリケーションやWebサイトをサーバ上で稼働させることを意味します。
この記事では、デプロイの基本から、その方法、自動化ツールの利用まで、開発者やITプロフェッショナルが押さえておくべき重要なポイントを詳しく解説していきます。
クラウドサービスを活用したデプロイメント方法も紹介するため、システムやアプリの開発に関わる方はぜひ最後までお読みください。
本業でシステムエンジニアをしています。 分かりやすい記事を心がけています。
デプロイとは

デプロイとは、開発者が作成したアプリケーションやウェブサイトを運用環境に配置することを指します。
プログラムを作っただけでは一般ユーザーに提供できないため、成果物をサーバーに配備する作業が必要となります。デプロイは、開発段階で作成したソフトウェアを実際の運用環境に導入するプロセスを指しています。
例えば、エンジニアが新機能を実装し更新版をビルドした場合、この新バージョンをサービス提供サーバーに配置することがデプロイです。
デプロイ対象には、Webアプリ、モバイルアプリ、API、DBなどがあり、ビルド済みのソースコードやバイナリを実行環境に配備します。配備先は物理サーバー、仮想マシン、コンテナなど様々で、クラウド上へのデプロイも増えています。
デプロイ作業自体は単純ですが、サービス中断を最小限に抑え、前バージョンへの復元など適切なリスク対策が求められます。
デプロイの代表的なツール

デプロイを簡単かつ安定して行うために、様々なツールが存在します。ここでは代表的な5つのツールを見ていきましょう。
| 概要 | メリット | デメリット | 無料版の有無 | |
| Jenkins
|
オープンソースの継続的インテグレーションツール | ・様々なプラグイン
・柔軟なカスタマイズ |
設定が複雑 | 無料プランあり |
| CircleCI
|
クラウド型の継続的インテグレーションツールメリット | 初期設定が簡単 | 有料プランが必要な場合がある | 無料プランあり |
| TravisCI
|
GitHubとの連携が強力な継続的インテグレーションツール | GitHubとの親和性が高い | 無料プランだと制限がある | 無料プランあり |
| GitHub Actions
|
GitHub内に統合されている自動化ツール | GitHubユーザーは使いやすい | 機能面で制限がある | 無料枠あり |
| Bitrise
|
GitHub内に統合されている自動化ツール | ビルド/テスト/デプロイを一括で自動化できる | モバイルアプリ以外への対応は弱い | 無料枠あり |
Jenkins

| Jenkins | |
| 概要 | オープンソースの継続的インテグレーションツール |
| メリット | 様々なプラグインがあり柔軟なカスタマイズができる |
| デメリット | 設定が複雑になりがちで、使いこなすのが難しい |
JenkinsはJavaで開発されたオープンソースの継続的インテグレーションツールです。ソースコードが更新されたと同時に、自動的にビルドやテスト、デプロイが実行されるよう設定できます。
Jenkinsの大きなメリットは、プラグインの存在です。1300を超えるプラグインが公開されており、様々なツールと連携した自動化が実現できます。複雑な一連のデプロイ手順も柔軟に設定できるのが魅力です。
一方で多様なプラグイン設定の組み合わせで、とても複雑なシステムを構築できてしまうのがかえって難点です。設定ファイルもXML形式で分かりにくく、ハードルが高いツールといえます。
Jenkinsはカスタマイズ性が高い反面、使いこなすのが難しいデプロイツールです。
CircleCI

| CircleCI | |
| 概要 | クラウド型の継続的インテグレーションツール |
| メリット | 初期設定が簡単で使い始めやすい |
| デメリット | 有料プランが必要な場合がある |
CircleCIはクラウドをベースとした継続的インテグレーションツールです。サーバー構築は不要で、WebUIベースの簡単な設定で利用開始できます。
様々な言語やフレームワークに対応していて、GitHub等との連携もスムーズです。設定内容をコードで管理するInfrastructure as Codeにも対応しています。
フリープランが用意されていますが、並列実行数や保存期間に制限があります。大規模なチームで利用する場合、有料プランが必要になるでしょう。
CircleCIはクラウド型CI/CDを手軽に試すことができる、使いやすいツールです。
TravisCI

| TravisCI | |
| 概要 | GitHubとの連携が強力な継続的インテグレーションツール |
| メリット | GitHubとの親和性が高く、設定も簡単 |
| デメリット | 無料プランでできることに制限がある |
TravisCIはGitHubリポジトリと連携させやすい継続的インテグレーションツールです。
GitHub上でコミットやプルリクエストが作成されると、TravisCIがそれを検知して自動的にビルドやテストを実行してくれます。設定ファイルはGitHubリポジトリ内に置くことができます。
無料プランでは公開リポジトリでの利用に限られ、並列実行数も制限されます。大規模な開発チームの場合、有料プランが必要となることがデメリットです。
TravisCIはGitHubユーザーにとって導入も使い方も簡単なツールです。
GitHub Actions

| GitHub Actions | |
| 概要 | GitHub内に統合されている自動化ツール |
| メリット | GitHubユーザーにとって利用しやすい |
| デメリット | 他のツールに比べると機能面で制限がある |
GitHub ActionsはGitHubに統合された自動化機能です。YAMLファイルで自動化する手順を定義することで、GitHub上で特定の出来事が起きた際に、指定した処理を自動的に実行できます。
リポジトリ内にワークフローの定義ファイルを置くだけで、簡単に自動ビルドやテスト、デプロイが設定できるのがメリットです。
一方で、他のCI/CDツールほど高度な設定ができず、ある程度の制限があるのが難点です。複雑な一連の自動化処理を構築するには向いていません。
GitHubユーザーの中では手軽に自動化を始めるのに向いたツールと言えます。
Bitrise

| Bitrise | |
| 概要 | モバイルアプリの継続的インテグレーションツール |
| メリット | iOS、Androidアプリのビルド/テスト/デプロイを一括で自動化できる |
| デメリット | モバイルアプリ以外への対応は弱い |
Bitriseはモバイルアプリ開発に特化したCI/CDプラットフォームです。
XcodeやAndroid Studioで開発したiOS、Androidアプリのビルド、テスト、各種ストアへのデプロイをまとめて一括で自動化できます。
複数のテストデバイスに対するUIテストも並列実行可能です。簡単な設定で継続的インテグレーションを実現できるのがメリットです。
一方、Webアプリケーション等のモバイルアプリ以外への対応は弱いのがデメリットです。モバイルアプリ開発者にとって強力な自動化ツールと言えます。
デプロイの手法・やり方

デプロイには自動で行う方法と手動で行う方法があります。それぞれの特徴を見ていきましょう。
自動デプロイ
自動デプロイは、アプリケーションの更新時にデプロイ作業を自動的に行う方法です。
例えば、ソースコードの変更をGitにプッシュしたタイミングで、テスト・ビルド・デプロイが順次自動実行されるようにできます。
設定が必要ですが、一度作業を定義しておくことで手間が大幅に減らせます。
自動デプロイを実現するには、継続的インテグレーション(CI)と継続的デリバリー(CD)のツールを利用します。
代表的なCI/CDツールとして、Jenkins、CircleCI、TravisCI、GitHub Actions等があります。これらのツールを使うことで、ソースコードの更新をトリガーに、ビルド、テスト、デプロイといった一連の工程を自動的に実行できます。設定時には実行タスクの定義やデプロイ先の指定などが必要になりますが、根幹の自動化はツールが担ってくれます。
自動デプロイを活用すれば、開発のサイクルを大幅に早めることが可能です。
手動デプロイ
手動デプロイは、人が直接必要な作業を行うデプロイ方法です。
具体的には、開発者がローカルでアプリケーションのビルドを行います。その後FTPツールを使って、ビルドしたファイルを運用サーバーにアップロードします。その後、運用サーバーにログインしてアップロードしたファイルを展開してインストールします。データベースの移行も必要に応じて実施します。
上記が完了した後、設定ファイルの修正やアプリケーションサーバーの再起動を行いデプロイを完了させます。
こうした手順を人手で行うため、ミスが発生しやすく手間もかかります。しかしながら、状況に応じ細かく対処できるのがメリットです。
可能な限り自動化の導入を進め、手動作業は最小限にするのが望ましいです。手動デプロイは小規模なシステムであれば現実的な選択肢ですが、規模が大きくなるにつれ管理が難しくなります。リスクも高まるため、成長に合わせて自動化を検討する必要があります。
コンテナデプロイ
コンテナデプロイは、アプリケーションをコンテナと呼ばれる軽量な仮想環境にパッケージ化し、デプロイする手法です。
従来の仮想マシンは、ゲストOSごと仮想化するため、オーバーヘッドが大きくなりますが、コンテナの場合はホストOSのカーネルを共有するため非常に軽量です。
また、仮想マシンよりもはるかに高速に起動できるといった特徴もあります。
コンテナデプロイは、現代のソフトウェア開発において非常に重要な技術です。
環境の一貫性、スケーラビリティ、分離性といったメリットを活かすことで、より効率的で柔軟なアプリケーション開発が可能になります。
クラウドデプロイ
クラウドデプロイとは、ソフトウェアやアプリケーションを、自社のデータセンターではなく、クラウドサービスプロバイダーが提供するクラウド環境上に配置することを指します。
需要に応じて、簡単にリソースの増減を行うことができたり、利用した分だけ料金を支払う従量課金制のためコスト削減を図ることができるなどのメリットがあります。
クラウドデプロイのメリットを最大限に活かすためには、自社のニーズに合ったクラウドサービスを選択することが重要です。
また、セキュリティについてはクラウドサービスプロバイダーの対策に依存する部分があるため、十分なセキュリティ対策の検討が重要になります。
【AWS編】デプロイのやり方

AWSにはElastic BeanstalkやCloudFormation、CodeDeployなどのサービスを使ってデプロイできます。簡単にセットアップできるのがメリットです。
Elastic Beanstalkを使ったデプロイ
Elastic Beanstalkは、アプリケーションのデプロイを簡単に行えるAWSのマネージドサービスです。ユーザーはアプリケーションのソースコードをzipファイルにして、Elastic Beanstalkのコンソールからアップロードするだけで良いので便利なツールです。
Elastic Beanstalkが自動的に、アプリケーションを実行するためのEC2インスタンスやロードバランサー、RDSデータベースなど、必要なAWSリソースを適切に設定してくれます。その上で、アプリケーションはS3に配備され、準備したEC2インスタンス上にデプロイが行われ、サービスが開始されます。
Elastic Beanstalkではアプリケーションのアップロードだけで、AWSリソースの設定からデプロイまでが自動化されるため、手軽にデプロイ作業を実施することができます。
CloudFormationを使ったデプロイ
CloudFormationではインフラ環境全体をコードで定義し、自動的に構築やデプロイなどの運用が行えます。インフラ構成をYAMLやJSONフォーマットのテンプレートファイルに記述することで、Auto ScalingGroupやLoadBalancer、EC2インスタンスといったAWSリソースを自動生成できます。
例えば、アプリケーションコードをS3に配置し、CloudFormationのテンプレートからCodeDeployを呼び出してデプロイを行うことも可能です。インフラ全体をコード化して管理できるため、変更不可能なインフラを実現できます。
また、CloudFormationテンプレートはバージョン管理が可能で、インフラの変更履歴の追跡や過去の状態への復元なども柔軽に行えるメリットがあります。
CodeDeployによるデプロイの自動化
CodeDeployを利用すれば、ソースコード変更の度にビルド・テスト・デプロイを自動化する仕組みが構築できます。
CodeCommitやGitHubでコード変更が検知されると、CodeBuildによりビルドとテストが実行されます。テスト成功次第、CodeDeployがEC2インスタンスやECSコンテナへのデプロイを自動的に行います。
CodeDeployではデプロイグループを作成し、ロードバランサーなどのAWSリソースと連携させることで、ブルーグリーンデプロイのような高度なデプロイも可能になります。さらにCodePipelineと組み合わせれば、コード変更からデプロイ完了までの一連の流れを自動化できます。
CI/CDの実践においてCodeDeployは強力なツールとなり、安全で効率的なデプロイを実現してくれます。
【Azure編】デプロイのやり方

Azure App Serviceを使うと、WebアプリのデプロイをGUI上から簡単に行えます。自動的な一連のデプロイ処理の流れや、テスト用の環境構築も可能です。以下、詳しく解説していきます。
1.事前準備を行う
Azure App Serviceへのデプロイを始める前に、以下の準備を行いましょう。
- Azureアカウントの作成
まだAzureアカウントをお持ちでない場合は、Azureポータルで無料アカウントを作成します。 - リソースグループの作成
デプロイするリソースをまとめるためのリソースグループを作成します。 - App Serviceプランの作成
Webアプリを実行するための環境であるApp Serviceプランを作成します。 - コードの準備
デプロイするWebアプリケーションのコードを準備します。Gitリポジトリに格納しておくと、自動デプロイが容易になります。
2.デプロイする
ここでは、Azureポータルからデプロイする場合と、Azure CLIからデプロイする場合の流れを紹介します。
Azureポータルからデプロイする
- App Serviceの作成
Azureポータルで新しいApp Serviceを作成します。 - デプロイセンター
作成したApp Serviceの「デプロイセンター」に移動します。 - ソースの選択
GitHub、Azure DevOps、ローカルGitなど、コードのソースを選択します。 - デプロイの詳細の設定
ブランチ、ビルド設定などを指定します。 - デプロイの実行
「デプロイ」ボタンをクリックしてデプロイを開始します。
Azure CLIからデプロイする
Azure CLIは、コマンドラインからAzureのリソースを管理するためのツールです。
以下はサンプルコードです。
# Azureにログイン
az login
# リソースグループを作成
az group create –name myResourceGroup –location “Japan East”
# App Serviceを作成
az appservice create –resource-group myResourceGroup –name myapp –sku B1 –plan myAppServicePlan
# コードをデプロイ
az webapp deploy –name myapp –resource-group myResourceGroup –source-local-dir “.\myApp”
デプロイ後の確認をする
Webアプリケーションの場合、デプロイされたアプリケーションにブラウザからアクセスし、正常に動作することを確認します。
また、Azureポータルでアプリケーションログを確認し、エラーが発生していないかを確認します。
合わせて、CPU使用率、メモリ使用量などのメトリクスを確認し、アプリケーションのパフォーマンスを評価します。
Azure App Seriviceでは、GitHubなどのリポジトリにプッシュするたびに自動でデプロイを設定することができます。
これにより、開発とデプロイのサイクルを高速化することができます。
デプロイ・リリース・ビルドの違い

デプロイ、リリース、ビルドはよく似た概念ですが、意味合いが異なります。簡単に違いを見ていきましょう。
| 用語 | 意味 |
| デプロイ | 開発環境で作ったものを運用環境に配置すること |
| リリース | サービスを公開し利用可能にすること |
| ビルド | ソースコードから実行ファイルを生成すること |
デプロイとリリースの違い
デプロイは開発した成果物であるシステムやアプリケーションを実際に本番環境に配置し、運用を開始する作業を指します。一方リリースは、製品やサービス全体を対外的に初めて一般公開し、提供を開始することを意味します。
例えば新しいSNSアプリの開発が完了し、すべての機能が正しく動作することを確認したら、一般向けにSNSサービスを開始するためにリリースします。
リリース時には、利用規約やプライバシーポリシー、ヘルプページなどのサービス全体が整っていることが必要です。
デプロイとビルドの違い
ビルドとは、プログラミング言語で書かれたソースコードをコンピュータが実行可能な形式のファイルに変換するプロセスのことです。
例えばJavaで書かれたプログラムのソースコードを、JDKのjavacコマンドでバイトコードにコンパイルする作業がビルドに該当します。
ビルドプロセスには、コンパイルに加えてパッケージング、リソースのバンドル、最適化等のタスクが含まれます。大規模なアプリケーションでは、複数のソースコードを適切にビルドしてまとめ上げる作業が必要になります。
デプロイの目的

では、なぜデプロイが必要なのでしょうか。その主な目的は以下の2つです。
- 最新バージョンを常に提供する
- ソフトウェアの品質を向上
開発と運用の間をつなぐプロセスがデプロイです。このプロセスが生み出す価値こそが、デプロイが重要視される理由です。品質向上、コスト最適化、インフラ調整など、サービスに必要な変更をデプロイで実現できるのです。
最新バージョンを常に提供する
開発したソフトウェアや機能を実際に利用できる状態にするには、本番環境へ配置する必要があります。
デプロイはこの作業を指し、ソフトウェアを運用可能な状態に移行することが目的です。
デプロイを適切に行うことで、常に最新のバージョンをユーザーに提供できます。バグ修正や新機能の追加など、開発の成果を反映させることが可能になります。ユーザーには常に最新の状態のソフトウェアが提供されます。
つまりデプロイすることによって、開発した成果がサービスに取り入れられ、ユーザーが新しい体験を得られるのです。
ソフトウェアの品質を向上させる
開発中に発見できなかった不具合を、デプロイ後のユーザーフィードバックで発見し改善できます。この繰り返しによってソフトウェアの品質が継続的に向上していきます。
実運用を通じた改善がソフトウェアの品質を高めてくれるのです。
また、セキュリティの観点からもデプロイは重要です。セキュリティ対策を常にアップデートすることで、ソフトウェアの品質も向上します。
デプロイの種類

デプロイにはさまざまなアプローチがあります。代表的なデプロイの種類を見ていきましょう。
ブルーグリーンデプロイメント
ブルーグリーンデプロイメントは、現行の「ブルー環境」と新しい「グリーン環境」の2つの運用環境を準備する手法です。
新バージョンのアプリをグリーン環境に展開し、問題がないことを確認した上で、スムーズにブルーからグリーンへ切り替えます。
具体的には、まず現行のアプリが稼働するブルー環境を用意します。次に、ブルーと全く同じ設定のグリーン環境を新たに構築します。
新バージョンをグリーン環境にデプロイし、十分な検証を経て問題がなければ、本番をグリーンに切り替えるのです。
ブルー環境は変更せずにそのまま利用できるため、トラブル発生時には素早くブルーへ戻すことが可能となります。
切り替え作業は、アクセス振り分けの設定変更のみで、ダウンタイムなく実現できます。AWSなどのクラウド上で簡単に導入でき、新機能の素早い提供に適した手法といえるでしょう。
イミュータブルデプロイメント
イミュータブルデプロイメントは、デプロイ対象を変更せずに新しいリソースを作成し置き換える手法です。頻繁なデプロイを実現するため、システムをあらかじめ工夫しておく必要があります。
この手法では、運用中のリソースには一切手を加えず、新しいリソースを用意して切り替えます。
例えば、新バージョンのアプリを搭載したコンテナイメージを作り、既存のコンテナと入れ替えるといった具合です。
このようにインフラ自体は不変のままで、アプリのみを更新することで頻繁なデプロイを実現できます。
コンテナやサーバーレスを活用することで、リソース作成と廃棄のコストを抑えられます。DevOpsの理念に適合したイミュータブルデプロイメントは、新機能の公開スピードを大幅に向上させることができます。
シンボリックデプロイメント
シンボリックデプロイメントとは、本番環境への実際のデプロイを行わずに事前にシミュレーションする手法です。本番環境を稼働したままでもデプロイの検証作業が可能になります。
具体的には、開発環境に本番と同じインフラ設定を構築し、そこに更新版アプリをデプロイします。
しかし、外部からのトラフィックは引き続き本番の既存アプリが処理します。開発環境での動作確認が終わり次第、ようやく本番デプロイを実施するのです。このように、本番サービスに影響を与えずに、デプロイ作業の検証が行えるのが大きなメリットです。
ただし、開発環境と本番環境にギャップがある場合は、本番デプロイ時の動作を完全に保証できないデメリットもあります。大規模システム変更時のリスク低減に有効ですが、両環境の違いを最小化する工夫も重要です。
ローリングデプロイメント
ローリングデプロイメントは、サーバー群を一斉に更新するのではなく順次少しずつ更新していく手法です。
例えば10台のサーバーがある場合、初めに2台を新バージョンに更新し、問題がなければ次の2台を更新していきます。このように徐々にサーバーを入れ替えながら、最終的に全てを新バージョンへと移行させていきます。
一度に全サーバーを更新するのではなく、ひとつひとつ順番に更新を実施することでサービスを完全に停止させずに済みます。
もし問題が発生した場合でも、そこで更新作業を中止し、以前のバージョンに戻すことができます。
このようにサービス停止時間を最小限に抑えられることが、ローリングデプロイメントの大きな利点となっています。
まとめ:デプロイとはソフトウェアを稼働環境に配置すること

この記事では、デプロイの基本的な概念から、種類、ツール、クラウドへのデプロイまでをわかりやすく解説しました。デプロイは開発現場では必要不可欠なプロセスですが、正しく活用するためにはある程度の知識が求められます。
デプロイの方法は多岐に渡り、自動化の設定にも技術が求められます。しかしデプロイを上手く利用できれば、サービスの品質向上やリリースサイクルの短縮化に大きく貢献できます。
デプロイにはさまざまなアプローチがありますが、プロダクトの開発・運用フェーズや規模に合わせて、最適な手法を選択することが重要です。制約条件や目的に応じて、デプロイの自動化やテストと本番環境の切り替えなどの対策を検討する必要があります。
デプロイに関する課題やお悩みがある場合は、プロフェッショナルなサービスを提供する弊社にお問い合わせください。弊社では、お客様の開発プロセスやビジネスニーズに合わせて、最適なデプロイソリューションをご提案いたします。
デプロイでお困りのことがありましたら、株式会社Jiteraにお問い合わせください。



