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などを使ってアプリケーションという「家具」を運び入れ、生活できる状態に整える。
この流れを理解することが重要です。家がなければ、引っ越し(デプロイ)はできませんからね。
インフラエンジニアは頑丈で快適な「家(ホスティング環境)」を建てる大工さんのような役割を、そして開発者はその家に機能的な「家具(アプリケーション)」を運び込み、いつでも使えるように整える引っ越し&セットアップのプロ、というわけです。
この記事で、二つの言葉の役割分担がクリアになっていれば幸いです!

