1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCode Dev Containers で ローカル環境を汚さない開発環境を構築する(リモート編)

Last updated at Posted at 2026-01-06

はじめに

前回の
VSCode Dev Containers で ローカル環境を汚さない開発環境を構築する #Docker - Qiita
の続きです。
この記事では、VSCode の Remote Dev Containers と SSH接続 を組み合わせて、Mac/Windows から Linux サーバー上のコンテナで開発する環境を構築する方法を解説します。
実際私は、ローカルで VSCode Dev Containers を使って開発することは Linux機だけで、
Mac/Windows では 今回のリモートを使って開発をしています。

この記事で書くこと

  • リモート開発環境が解決する開発の課題
  • Remote Dev Containers の仕組みと利点
  • Linux サーバーへの SSH 接続設定
  • Docker のインストールと設定
  • VSCode でリモートコンテナに接続する手順
  • つまずきやすいポイントと注意点

前提条件・対象読者

  • Mac または Windows を使用している開発者
  • Linux サーバー(VPS や自宅サーバー)を用意できる方
  • 開発環境と本番環境の差異に悩んでいる方
  • どこからでも安全に開発環境にアクセスしたい方
  • SSH と Docker の基本的な知識がある方

背景・動機

開発環境の課題

従来の開発スタイルでは、以下のような問題がありました:

1. 開発環境と本番環境の差異

開発者: 「ローカル(Mac)では動いたのに、本番(Linux)でエラーが...」

典型的なケース:

  • OS の違い: Mac/Windows と Linux でファイルパスや改行コードが異なる
  • パッケージの違い: ライブラリのバージョンやバイナリの互換性問題
  • 環境変数の違い: ローカルと本番で設定が異なる

2. ローカルマシンのスペック不足

  • React、Next.js などのビルドが遅い
  • Docker コンテナを複数起動すると重い
  • M1系 Mac でのアーキテクチャ問題(ARM vs x86)

3. どこでも開発したい

  • 自宅の強力な PC で開発したい
  • 外出先のノート PC からアクセスしたい
  • セキュアな接続が必要

Remote Dev Containers が解決すること

Remote Dev Containers を使うと:

環境の統一: Linux サーバー上で開発することで本番と同じ環境
高速化: 強力なサーバーマシンのリソースを活用
どこでも開発: SSH 経由でどこからでもアクセス
セキュリティ: VPN で暗号化された安全な接続

手順・解説

構成図

[開発PC: Mac/Windows]
    ↓ SSH
[Linuxサーバー: Ubuntu]
    ↓ Docker
[Dev Container: Node.js環境 他]

1. Linux サーバーの準備

サーバーの選択肢

  • クラウド VPS: AWS EC2 など
  • 自宅サーバー: Linux Server をインストール
  • 仮想マシン: VMware、VirtualBox で Linux を起動

今回は Ubuntu 22.04 LTS を想定します。

サーバーへの初回接続

# SSH でサーバーに接続
ssh username@server-ip-address

2. Docker のインストール(Linux サーバー側)

公式手順に従ってインストール

Ubuntu での Docker インストール手順:

# 古いバージョンの削除
sudo apt-get remove docker docker-engine docker.io containerd runc

# 必要なパッケージのインストール
sudo apt-get update
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# Docker の GPG キーを追加
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# リポジトリのセットアップ
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Docker Engine のインストール
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo なしで Docker を実行できるように設定

# docker グループにユーザーを追加
sudo usermod -aG docker $USER

# グループ変更を反映(再ログインでも可)
newgrp docker

# 確認
docker run hello-world

重要: この設定により、sudo docker ではなく docker だけで実行できるようになります。

3. SSH キーの設定

ローカル PC で SSH キーペアを生成

# .ssh ディレクトリに移動
cd ~/.ssh

# SSH キーペアを生成
ssh-keygen -t ed25519 -C "your_email@example.com"

# ファイル名を指定(例: id_ed25519_devserver)
Enter file in which to save the key: id_ed25519_devserver
Enter passphrase (empty for no passphrase): [パスフレーズ入力]

公開鍵をサーバーにコピー

# 方法1: ssh-copy-id を使う(簡単)
ssh-copy-id -i ~/.ssh/id_ed25519_devserver.pub username@server-ip

# 方法2: 手動でコピー
cat ~/.ssh/id_ed25519_devserver.pub
# 出力された内容をコピー

サーバー側で:

# .ssh ディレクトリを作成
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# authorized_keys に公開鍵を追加
echo "コピーした公開鍵" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

SSH 設定ファイルの作成

ローカル PC の ~/.ssh/config を編集:

Host devserver
    HostName server-ip-address
    User username
    IdentityFile ~/.ssh/id_ed25519_devserver
    ServerAliveInterval 60
    ServerAliveCountMax 3

これにより、ssh devserver だけで接続できます。

4. VSCode 拡張機能のインストール

VSCode に以下の拡張機能をインストール:

  1. Remote - SSH (Microsoft 公式)

    • 拡張機能 ID: ms-vscode-remote.remote-ssh
  2. Dev Containers (Microsoft 公式)

    • 拡張機能 ID: ms-vscode-remote.remote-containers

5. VSCode で SSH 接続

リモートホストに接続

  1. コマンドパレット: Ctrl/Cmd + Shift + P
  2. 「Remote-SSH: Connect to Host...」と入力
  3. devserver を選択(または username@server-ip を入力)
  4. 新しい VSCode ウィンドウが開く

確認方法:

  • VSCode 左下に緑色で「SSH: devserver」と表示される
  • ターミナルを開くと Linux サーバーのシェルが表示される

プロジェクトフォルダを開く

# サーバー上でプロジェクトディレクトリを作成
mkdir -p ~/projects/my-remote-project

VSCode で:

  1. 「File」→「Open Folder...」
  2. /home/username/projects/my-remote-project を選択

6. Dev Container の設定

.devcontainer/devcontainer.json を作成

プロジェクトルートに .devcontainer フォルダを作成:

mkdir .devcontainer

.devcontainer/devcontainer.json:

{
  "name": "Remote Node.js Development",
  "image": "mcr.microsoft.com/devcontainers/typescript-node:20",
  
  "customizations": {
    "vscode": {
      "extensions": [
        "dbaeumer.vscode-eslint",
        "esbenp.prettier-vscode",
        "bradlc.vscode-tailwindcss"
      ],
      "settings": {
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "esbenp.prettier-vscode"
      }
    }
  },
  
  "forwardPorts": [3000, 5173],
  
  "postCreateCommand": "npm --version && node --version",
  
  "remoteUser": "node"
}

Dev Container で開く

  1. コマンドパレット: Ctrl/Cmd + Shift + P
  2. 「Dev Containers: Reopen in Container」を選択
  3. コンテナのビルドと起動を待つ

確認:

  • VSCode 左下に「Dev Container: Remote Node.js Development @ ssh://devserver」と表示される
  • ターミナルがコンテナ内のシェルになる

7. アプリケーションの作成と実行

Next.js アプリを作成

npx create-next-app@latest . --typescript --tailwind --app
npm run dev

ポートフォワードの確認

VSCode の「ポート」タブで、3000 がローカル PC に転送されていることを確認。

ブラウザで http://localhost:3000 にアクセスすると、リモートサーバー上で動いている Next.js アプリが表示されます!

8. Docker Compose を使った複数サービス連携 も可能

実行結果 & コツ

開発フローの確認

  1. ローカル PC で VSCode を開く
  2. Remote-SSH で Linux サーバーに接続
  3. Dev Container で開く
  4. コードを編集 → 自動保存
  5. ブラウザで localhost:3000 にアクセス
  6. リモートサーバー上で実行中のアプリが表示される!

つまずきポイントと回避策

1. SSH 接続がタイムアウトする

症状: 「Could not establish connection to "devserver"」

解決策:

# ~/.ssh/config に追加
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

2. Docker デーモンに接続できない

症状: 「Cannot connect to the Docker daemon」

原因: Docker グループへの追加が反映されていない

解決策:

# 一度ログアウトして再ログイン
exit
ssh devserver

# または
newgrp docker

3. ポートフォワードが機能しない

症状: localhost:3000 にアクセスできない

解決策:

  1. VSCode の「ポート」タブを確認
  2. ファイアウォールの確認(サーバー側)
  3. アプリケーションが 0.0.0.0 でリッスンしているか確認:
# Next.js の場合
npm run dev -- --hostname 0.0.0.0

4. コンテナビルドが遅い

原因: イメージのダウンロードに時間がかかる

解決策:

# サーバー側で事前にイメージをプル
docker pull mcr.microsoft.com/devcontainers/typescript-node:20

Remote Dev Containers の注意点

1. ネットワーク依存

  • インターネット接続が必須
  • 回線が不安定だと操作が遅延

2. ローカルファイルシステムとの違い

  • ファイルはリモートサーバー上に保存
  • Git でバージョン管理することを推奨
  • 重要なデータは定期的にバックアップ

3. リソース管理

  • サーバーのディスク容量に注意
  • 不要なコンテナ・イメージは定期的に削除:
docker system prune -a

4. 拡張機能の同期

  • ローカル PC にインストールした拡張機能は自動的にリモートには入らない
  • devcontainer.jsonextensions で指定する

開発のコツ

1. Git でコード管理

# サーバー上で Git 設定
git config --global user.name "Your Name"
git config --global user.email "your@email.com"

# SSH キーを GitHub に登録
ssh-keygen -t ed25519 -C "your@email.com"
cat ~/.ssh/id_ed25519.pub
# GitHub の Settings → SSH keys に登録

2. 定期的なスナップショット

スナップショットのとれる環境なら定期的に取得しておくと安心。

3. 複数プロジェクトの管理

~/projects/
  ├── project-a/
  │   └── .devcontainer/
  ├── project-b/
  │   └── .devcontainer/
  └── project-c/
      └── .devcontainer/

各プロジェクトで独立したコンテナ環境を構築。

まとめ(気づき)

学んだこと

  1. Remote Dev Containers の威力: 本番環境と同じ Linux 環境で開発できる
  2. SSH + Docker の組み合わせ: 強力なリモート開発環境を実現
  3. ポートフォワードの自動化: ローカルのように使える
  4. チーム開発への応用: .devcontainer を共有することで環境統一

Remote Dev Containers のメリット

  • 本番環境との一致: Linux で開発することで環境差異を解消
  • ハイスペック活用: 自宅の強力な PC やクラウドサーバーのリソースを活用
  • どこでも開発: VPN で外出先からも安全にアクセス
  • クリーンなローカル PC: 開発ツールをインストール不要
  • 柔軟な環境切り替え: プロジェクトごとに異なるコンテナ環境

ハマりポイントの振り返り

  • SSH キーの設定: パーミッション(700, 600)を正しく設定する
  • Docker グループ: 再ログインしないと反映されない
  • ポートフォワード: 自動で転送されるが、ファイアウォールに注意

次に伸ばすべきポイント

  • マルチステージビルド: 本番用イメージの最適化
  • CI/CD 連携: GitHub Actions
  • モニタリング: サーバーリソースの監視

実務での活用シーン

この Remote Dev Containers 環境は以下のような場面で特に有効です:

  1. 本番環境に近い開発: Linux 本番環境と同じ環境で開発
  2. ハイスペックマシンの活用: クラウドや自宅サーバーのパワーを利用
  3. リモートワーク: 外出先から安全に開発環境にアクセス
  4. チーム開発: 全員が同じ環境で作業
  5. マルチプロジェクト: プロジェクトごとに完全に分離された環境
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?