ホスティングとデプロイどっちがどっちだ？

IT業界、特にインフラの世界に足を踏み入れると、カタカナや横文字の専門用語が飛び交いますよね。「**ホスティング**」に「**デプロイ**」…。なんとなく意味はわかるけど、いざ説明するとなると自信がない、という方も多いのではないでしょうか？

---

## ホスティングってなんだ？ 🏠

まず「**ホスティング (Hosting)**」から説明します。これは、あなたが作成したウェブサイトやアプリケーションが、インターネットの世界で公開され、誰でもアクセスできるようにするための「**インフラ（基盤）を準備・提供する**」サービスのことです。

あなたが最高のレストラン（アプリ）のレシピを考えたとしましょう。でも、そのレストランを開く場所がなければ、お客さんは誰も料理を味わえません。ホスティングは、まさにその「**場所（サーバー）**」や「**土地（インフラ）**」を提供するサービスです！

### 具体的なホスティングサービス

ホスティングにはいくつかの種類があり、それぞれ特徴が異なります。

* **レンタルサーバー**:
    * **例**: [エックスサーバー](https://www.xserver.ne.jp/), [さくらインターネット](https://www.sakura.ne.jp/)
    * **特徴**: 1台のサーバーを複数のユーザーで共有する形式。設定が簡単で安価なため、個人ブログや小規模なサイトに向いています。まさに「シェアハウス」のようなイメージです。

* **VPS (Virtual Private Server)**:
    * **例**: [ConoHa VPS](https://www.conoha.jp/vps/), [さくらのVPS](https://vps.sakura.ad.jp/)
    * **特徴**: 共有サーバーながら、ユーザーごとに仮想的な専用領域が確保されています。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インスタンス）を立てる作業を以下のようなコードで定義できます。

```hcl:terraform.tf
# 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)**」。これは、開発したアプリケーションやウェブサイトのファイル一式を、ホスティングで用意したサーバー（おうち）に配置し、実際に**ユーザーがアクセスして利用できる状態にする一連の作業**を指します。引っ越しと模様替えをイメージすると分かりやすいでしょう。

せっかく立派な家（ホスティング環境）があっても、中身が空っぽでは意味がありません。デプロイは、その家を「住める状態」にするためのアクションです！

### 具体的なデプロイ作業

デプロイには、単純なファイル転送から高度な自動化まで、様々な方法があります。

1.  **ソースコードの配置**: 開発したプログラムのコードをサーバーにコピーします。（`git pull`やFTP/SFTPでのアップロード）
2.  **依存関係のインストール**: アプリケーションが動作するために必要なライブラリやパッケージをインストールします。（`npm install`, `composer install`, `pip install`など）
3.  **ビルド**: 必要に応じて、コードを実行可能な形式に変換（コンパイル）したり、ファイルを圧縮・結合したりします。（`npm run build`, `tsc`など）
4.  **設定ファイルの配置**: データベースの接続情報など、環境固有の設定を反映させます。
5.  **アプリケーションの再起動**: 古いプロセスを停止し、新しいコードでアプリケーションを起動し直します。（`pm2 restart`, `systemctl restart nginx`など）

### CI/CDツールでデプロイを自動化する 🔧

これらの作業を手動で毎回行うのは大変ですし、ミスも起こりやすくなります。そこで登場するのが **CI/CD (継続的インテグレーション/継続的デリバリー)** ツールです。

**GitHub Actions** を使うと、「特定のブランチ（例: `main`）に新しいコードがプッシュされたら、自動的にテストを実行し、サーバーにデプロイする」といった一連の流れを自動化できます。

以下は、GitHub Actionsを使ってサーバーにSSH接続し、デプロイ作業を自動で行う設定ファイルの簡単な例です。

```yaml:.github/workflows/deploy.yml
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つは切っても切れない関係にあります。

1.  **ホスティング**: まず、AWSやVPSなどでサーバーという「家」を建てる。
2.  **デプロイ**: 次に、その「家」にGitHub Actionsなどを使ってアプリケーションという「家具」を運び入れ、生活できる状態に整える。

この流れを理解することが重要です。家がなければ、引っ越し（デプロイ）はできませんからね。

インフラエンジニアは頑丈で快適な「家（ホスティング環境）」を建てる大工さんのような役割を、そして開発者はその家に機能的な「家具（アプリケーション）」を運び込み、いつでも使えるように整える引っ越し＆セットアップのプロ、というわけです。

この記事で、二つの言葉の役割分担がクリアになっていれば幸いです！