IT業界、特にインフラの世界に足を踏み入れると、カタカナや横文字の専門用語が飛び交いますよね。「ホスティング」に「デプロイ」…。なんとなく意味はわかるけど、いざ説明するとなると自信がない、という方も多いのではないでしょうか?
ホスティングってなんだ? 🏠
まず「ホスティング (Hosting)」から説明します。これは、あなたが作成したウェブサイトやアプリケーションが、インターネットの世界で公開され、誰でもアクセスできるようにするための「インフラ(基盤)を準備・提供する」サービスのことです。
あなたが最高のレストラン(アプリ)のレシピを考えたとしましょう。でも、そのレストランを開く場所がなければ、お客さんは誰も料理を味わえません。ホスティングは、まさにその「場所(サーバー)」や「土地(インフラ)」を提供するサービスです!
具体的なホスティングサービス
ホスティングにはいくつかの種類があり、それぞれ特徴が異なります。
-
レンタルサーバー:
- 例: エックスサーバー, さくらインターネット
- 特徴: 1台のサーバーを複数のユーザーで共有する形式。設定が簡単で安価なため、個人ブログや小規模なサイトに向いています。まさに「シェアハウス」のようなイメージです。
-
VPS (Virtual Private Server):
- 例: ConoHa VPS, さくらのVPS
- 特徴: 共有サーバーながら、ユーザーごとに仮想的な専用領域が確保されています。OSの選択やソフトウェアのインストールなど、レンタルサーバーより自由度が高いのが魅力です。「分譲マンション」の各部屋といったところでしょうか。
-
クラウドサービス (IaaS / PaaS):
-
例:
- IaaS: Amazon Web Services (AWS), Google Cloud (GCP), Microsoft Azure
- PaaS: Heroku, Google App Engine
- 特徴: 必要な時に必要な分だけサーバーリソース(CPU, メモリなど)を借りられる、最も柔軟でスケーラブルなサービスです。IaaSは土地や建材(仮想サーバー、ストレージなど)を自由に組み合わせて家を建てるイメージ。PaaSは、骨組みやインフラは全て用意されていて、内装(コード)に集中できるイメージです。
-
例:
コードでインフラを準備する (IaC)
最近では、Infrastructure as Code (IaC) という考え方が主流です。これは、サーバーの構築や設定といったインフラの準備作業を、手作業ではなくコードで自動的に行う手法です。
例えば、Terraform というツールを使うと、AWS上にウェブサーバー(EC2インスタンス)を立てる作業を以下のようなコードで定義できます。
# AWSプロバイダーを指定
provider "aws" {
region = "ap-northeast-1" # 東京リージョン
}
# 構築するEC2インスタンス(Webサーバー)を定義
resource "aws_instance" "web_server" {
ami = "ami-0c55b159cbfafe1f0" # Amazon Linux 2のイメージ
instance_type = "t2.micro" # インスタンスのスペック
tags = {
Name = "MyWebAppServer"
}
}
このコードを実行するだけで、AWS上にサーバーという「おうち」が自動的に建ちます。これが現代のホスティング環境の準備です。
じゃあデプロイってなんだ? 🚀
次に「デプロイ (Deploy)」。これは、開発したアプリケーションやウェブサイトのファイル一式を、ホスティングで用意したサーバー(おうち)に配置し、実際にユーザーがアクセスして利用できる状態にする一連の作業を指します。引っ越しと模様替えをイメージすると分かりやすいでしょう。
せっかく立派な家(ホスティング環境)があっても、中身が空っぽでは意味がありません。デプロイは、その家を「住める状態」にするためのアクションです!
具体的なデプロイ作業
デプロイには、単純なファイル転送から高度な自動化まで、様々な方法があります。
-
ソースコードの配置: 開発したプログラムのコードをサーバーにコピーします。(
git pull
やFTP/SFTPでのアップロード) -
依存関係のインストール: アプリケーションが動作するために必要なライブラリやパッケージをインストールします。(
npm install
,composer install
,pip install
など) -
ビルド: 必要に応じて、コードを実行可能な形式に変換(コンパイル)したり、ファイルを圧縮・結合したりします。(
npm run build
,tsc
など) - 設定ファイルの配置: データベースの接続情報など、環境固有の設定を反映させます。
-
アプリケーションの再起動: 古いプロセスを停止し、新しいコードでアプリケーションを起動し直します。(
pm2 restart
,systemctl restart nginx
など)
CI/CDツールでデプロイを自動化する 🔧
これらの作業を手動で毎回行うのは大変ですし、ミスも起こりやすくなります。そこで登場するのが CI/CD (継続的インテグレーション/継続的デリバリー) ツールです。
GitHub Actions を使うと、「特定のブランチ(例: main
)に新しいコードがプッシュされたら、自動的にテストを実行し、サーバーにデプロイする」といった一連の流れを自動化できます。
以下は、GitHub Actionsを使ってサーバーにSSH接続し、デプロイ作業を自動で行う設定ファイルの簡単な例です。
name: Deploy to Server
# mainブランチにプッシュされたら実行
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# 1. ソースコードをチェックアウト
- name: Checkout Source Code
uses: actions/checkout@v3
# 2. SSHでサーバーに接続し、デプロイコマンドを実行
- name: Deploy to Server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }} # サーバーのIPアドレス
username: ${{ secrets.SSH_USERNAME }} # サーバーのユーザー名
key: ${{ secrets.SSH_PRIVATE_KEY }} # SSH接続用の秘密鍵
script: |
cd /var/www/my-app
git pull origin main
npm install --production
npm run build
pm2 reload app
この設定をしておけば、開発者はコードを書いてGitHubにプッシュするだけで、あとは自動的にアプリケーションが更新されます。これが現代的なデプロイの姿です。
ホスティングが「アプリケーションが動くための場所や基盤を確保すること」であるのに対し、デプロイは「その場所にアプリケーションを設置し、利用可能な状態にすること」です。
この2つは切っても切れない関係にあります。
- ホスティング: まず、AWSやVPSなどでサーバーという「家」を建てる。
- デプロイ: 次に、その「家」にGitHub Actionsなどを使ってアプリケーションという「家具」を運び入れ、生活できる状態に整える。
この流れを理解することが重要です。家がなければ、引っ越し(デプロイ)はできませんからね。
インフラエンジニアは頑丈で快適な「家(ホスティング環境)」を建てる大工さんのような役割を、そして開発者はその家に機能的な「家具(アプリケーション)」を運び込み、いつでも使えるように整える引っ越し&セットアップのプロ、というわけです。
この記事で、二つの言葉の役割分担がクリアになっていれば幸いです!