0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【IT基礎】IaaS vs PaaS 比較してみた。

0
Last updated at Posted at 2026-01-09

はじめに

IT業界に入って、「IaaS・PaaS・SaaSの違いが、なんとなくしかわからないなあ。手動かして理解したい」となんとなく思って、Bobに呟いてみました。すると、BobがIaaS・PaaSの違いを体験する手順書を作成してくれました!!

早速体験していこうと思います:)

目標

同じNode.jsアプリケーションを以下の2つの方法でデプロイし、違いを体験します:

  1. IaaSのみ:AWS EC2でサーバーを構築し、手動で環境をセットアップ
  2. PaaS:Herokuを使用して自動的にデプロイ

前提条件

  • AWSアカウント
  • Herokuアカウント(無料)
  • Gitがインストールされていること
  • Node.jsがインストールされていること(ローカル開発用)

準備:共通のアプリケーションを作成

まず、両方の方法で使用するシンプルなNode.jsアプリケーションを作成します。

プロジェクトの作成

mkdir web-app-comparison
cd web-app-comparison

ボブが作ってくれました!

  • package.jsonの作成
  • server.jsの作成
  • Gitリポジトリの初期化
    スクリーンショット 2026-01-08 16.44.39.png
    ローカルでのテスト方法も教えてくれたので、手順に従ってアプリの正常運転を確認しました。

スクリーンショット 2026-01-08 16.53.53.png

方法①:IaaSのみを用いてデプロイ

ステップ1: AWS EC2インスタンスの作成

  1. AWSマネジメントコンソールにログイン

  2. EC2ダッシュボードを開く

    • サービス検索で「EC2」を検索
  3. インスタンスを起動

    • 「インスタンスを起動」ボタンをクリック
  4. 設定

    • 名前: iaas-web-app
    • AMI: Amazon Linux 2023 または Ubuntu Server 22.04 LTS
    • インスタンスタイプ: t2.micro(無料利用枠)
    • キーペア: 新規作成(例:iaas-key
      • キーファイル(.pem)をダウンロードして保存
    • ネットワーク設定:
      • パブリックIPの自動割り当て:有効化
      • セキュリティグループ:新規作成
        • SSH(22)を許可
        • HTTP(80)を許可
        • カスタムTCP(3000)を許可(アプリ用)

スクリーンショット 2026-01-08 17.01.19.png
諸々設定しました。

  1. インスタンスを起動
    • 「インスタンスを起動」をクリック
    • インスタンスが「実行中」になるまで待つ(1-2分)

スクリーンショット 2026-01-08 17.02.48.png
インスタンスが起動されました。

ステップ2: SSH接続

# キーファイルの権限を設定(初回のみ)
chmod 400 ~/Downloads/iaas-key.pem

# パブリックIPアドレスを確認(EC2コンソールから)
# SSH接続(Amazon Linuxの場合)
ssh -i ~/Downloads/iaas-key.pem ec2-user@<パブリックIPアドレス>

# Ubuntuの場合
ssh -i ~/Downloads/iaas-key.pem ubuntu@<パブリックIPアドレス>

スクリーンショット 2026-01-08 17.05.26.png
SSH接続できました!

ステップ3: サーバー環境のセットアップ(手動)

### システムを更新
# OSを最新で安全な状態にする
sudo dnf update -y

### Node.js 18をインストール
# server.jsを実行できるエンジン(ラインタイム)を入れる
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo dnf install -y nodejs

### Node.jsのバージョンを確認
node --version
npm --version

### Gitをインストール(まだの場合)
# 作業道具を入れる。
sudo dnf install -y git

##アプリケーションディレクトリを作成
mkdir -p ~/web-app
cd ~/web-app

スクリーンショット 2026-01-08 17.12.24.png
インストールが完了し、EC2上にアプリケーション用のweb-appディレクトリが作成されました!

サーバー環境のセットアップのイメージが具体的に体験できて、以下棲み分けできました!

IaaSがやってくれること

  • ネットワーク環境のセットアップ
  • 物理サーバーのセットアップ・管理
  • 物理ストレージのセットアップ・管理

自分でやること

  • OSのバージョン管理
  • ランタイム(例:Next.js)の選択・インストール
  • アプリケーション(例:web-app)の作成・管理
  • 作業道具(例:Git)を入れる

ステップ4: アプリケーションのデプロイ

方法Aと方法Bのうちおすすめを聞くと、方法Aが推奨と答えてくれました!
方法Bだと更新のたびに前ファイルを転送、バージョン管理ができない、変更履歴が残らないというデメリットがあります。そこをできるようにできたのがGitなのだと改めて思えました。

方法A: Git経由でデプロイ
git cloneが、Githubの認証方法変更が原因で実は下のコードではうまくいかなかったです。本題ではないのでまた別記事にまとめようと思います。

# GitHubにリポジトリを作成してプッシュ(ローカルで実行)
# その後、サーバー上で:

git clone https://github.com/<あなたのユーザー名>/web-app-comparison.git
cd web-app-comparison

# 依存関係をインストール
npm install

# アプリケーションを起動(フォアグラウンドでテスト)
npm start
# Ctrl+Cで停止

方法B: SCPでファイルを転送

# ローカルマシンで実行
scp -i ~/Downloads/iaas-key.pem -r . ec2-user@<パブリックIPアドレス>:~/web-app/

# サーバー上で
cd ~/web-app
npm install
npm start

ステップ5: プロセス管理の設定(PM2を使用)

プロセス管理が何かはなんとなくしっていましたが、サーバー設定の際に必須の作業としてあるとまでは理解していませんでした。。。!確かに、SSH切断するとアプリ停止したり、エラーで落ちると停止したままだと本番稼働できないため必須の作業となるなあと思いました。

# PM2をグローバルにインストール
sudo npm install -g pm2

# アプリケーションをPM2で起動
cd ~/web-app/web-app-comparison
pm2 start server.js --name "web-app"

# PM2の設定を保存
pm2 save

# システム起動時に自動起動するように設定
pm2 startup
# 表示されたコマンドを実行(sudoが必要)

# ステータス確認
pm2 status
pm2 logs web-app

ステップ6: リバースプロキシの設定(Nginx)

# Nginxをインストール
# Amazon Linux
sudo dnf install -y nginx

# Ubuntu
sudo apt install -y nginx

# Nginxの設定ファイルを編集
sudo nano /etc/nginx/conf.d/web-app.conf

以下の内容を追加:

server {
    listen 80;
    server_name <パブリックIPアドレス>;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
# Nginxの設定をテスト
sudo nginx -t

# Nginxを起動・有効化
sudo systemctl start nginx
sudo systemctl enable nginx

# ファイアウォール設定(必要に応じて)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

ステップ7: 動作確認

  1. ブラウザで http://<パブリックIPアドレス> にアクセス
  2. アプリケーションが表示されれば成功!

スクリーンショット 2026-01-08 22.46.49.png

IaaSでの作業のまとめ

自分で行った作業:

  • EC2インスタンスの作成と設定
  • OSの更新
  • Node.jsのインストール
  • Gitのインストール
  • アプリケーションコードのデプロイ
  • 依存関係のインストール
  • プロセス管理ツール(PM2)の設定
  • リバースプロキシ(Nginx)の設定
  • 自動起動の設定

EC2から本番環境で使えるようにするには、IT初心者目線で、かなり工数があったように感じました。

方法②:PaaSを用いてデプロイ

ステップ1: Herokuアカウントの作成

  1. https://www.heroku.com/ にアクセス
  2. 無料アカウントを作成

ステップ2: Heroku CLIのインストール

# macOS
brew tap heroku/brew && brew install heroku

# または公式サイトからインストール
# https://devcenter.heroku.com/articles/heroku-cli

ステップ3: Herokuにログイン

heroku login
# ブラウザが開くので、ログインを承認

ステップ4: Herokuアプリの作成

# プロジェクトディレクトリに移動
cd web-app-comparison

# Herokuアプリを作成
heroku create paas-web-app

# アプリのURLが表示される(例:https://paas-web-app-xxxxx.herokuapp.com)

スクリーンショット 2026-01-09 0.31.46.png
その他、Herokuアプリを作成時に認証情報としてクレジットカードの登録が必要だったり、初回ログイン時にはMFA登録が必要だったり、サービスを使うための初期設定が必要でした。

ステップ5: アプリケーションのデプロイ

# 依存関係をインストール(ローカルで)
npm install

# Herokuにデプロイ
git add .
git commit -m "Deploy to Heroku"
git push heroku main

# デプロイが完了するまで待つ(1-2分)

ステップ6: 動作確認

# アプリを開く
heroku open

# またはログを確認
heroku logs --tail

https://paas-web-app-eed84ae8dac5.herokuapp.com/
スクリーンショット 2026-01-09 0.35.59.png

Herokuアカウントを作成してHerokuCLI、herokuコマンドを打っていくと、OSの選択やランタイムなど諸々のインストールなしにアプリが無事デプロイされました!

PaaSでの作業のまとめ

自分で行った作業:

  • Herokuアカウント作成
  • Heroku CLIのインストール
  • heroku create コマンド実行
  • git push heroku main でデプロイ

所要時間: 約5-10分


比較:IaaS vs PaaS

作業量の比較

作業項目 IaaS PaaS
サーバーの準備 手動(EC2作成) 自動(heroku create
OSの設定 手動(更新、設定) 自動
ランタイムのインストール 手動(Node.js) 自動
依存関係のインストール 手動(npm install 自動
プロセス管理 手動(PM2設定) 自動
リバースプロキシ 手動(Nginx設定) 自動
SSL証明書 手動(Let's Encrypt等) 自動
デプロイ 手動(Git/SCP) 自動(git push
スケーリング 手動(複数インスタンス) 自動(heroku scale

管理責任の比較

レイヤー IaaS PaaS
アプリケーション 自分で管理 自分で管理
データ 自分で管理 自分で管理
ランタイム 自分で管理 PaaSが管理
ミドルウェア 自分で管理 PaaSが管理
OS 自分で管理 PaaSが管理
仮想化 IaaSが管理 PaaSが管理
サーバー IaaSが管理 PaaSが管理
ストレージ IaaSが管理 PaaSが管理
ネットワーク IaaSが管理 PaaSが管理

まとめ

今回は、理解が抽象的だったIaaSとPaaSの違いを実際に手を動かして体験してみました!
IaaSをすることで実際に必要な作業を体験できて、nginxなどの聞いたことのある言葉や、アプリケーションレイヤーのイメージが深まりました♪

参考リソース

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?