エンジニアの環境問題

エンジニアの環境問題

システム開発では、開発環境、検証環境、ステージング環境、本番環境など、さまざまな環境を利用することになる。開発環境は開発者自分で構築する場合もあるだろうが、それ以外はプロジェクト側から提供される場合などもある。

サーバ自体をどこの何を利用するのかはエンジニアの相性好き嫌いやもあるが、これは利用した経験によるものだから大事な事である。弊社では長いことさくらインターネットのVPS環境を使ってきたので、使いやすさと安定的な稼働によって安心感がある。一方でお客様提供の他のホスティング会社などではトラブル対応などを経験したことがあるが、トラブルの多い会社は敬遠したい。となる。企業側が言うところの稼働率と稼働継続時間など関係ない。実際に自分たちがトラブルにあうか、あわないかだけの点において判断するしかない。

開発であれば、VPSやクラウドなどの種類もあるが、一定以上の規模であればAWSかGCPという選択になる。

OSのインストールや環境構築、ミドルウエアの導入設定、ネットワークの設定、プログラミング言語環境、などなどを自分でできることは必須であろう。

さらに、今の時代であればDockerコンテナで環境構築することが当然である。もしも、コンテナ管理していないとなると、環境構築に無駄な時間を費やすことになる。また、並行していくつもの環境を利用することができるか、できないか。ここもまた差が開くところだ。

WSL (Windows Subsystem for Linux)
Windows 上で Linux カーネル互換環境を提供する仕組み。WSL2 は Hyper-V 上の軽量 VM。

WSL 上で Docker/Podman を直接使う
→ Windows に Docker Desktop を入れず、WSL2 内の Ubuntu に直接 Docker をインストール。

WSL + Ubuntu VM
→ WSL 上には最小限しか置かず、別途 VirtualBox/VMware/Hyper-V 上の Ubuntu サーバを立て、そこで Docker を動かす。

歴史的なことを言えば、WSLはWSL1からWSL2のバージョンでの違いがある。

ここもおさらいしておくと

バリエーションの区別

  • WSL1
    • Windows のシステムコールを変換して Linux バイナリを動かす方式
    • 仮想化ではなく互換レイヤー
    • Docker 等の本格利用はほぼ不可(cgroups 等がない)
  • WSL2
    • Hyper-V 上に軽量 VM として Linux カーネルを動かす方式
    • 完全な Linux カーネルを持ち、Docker がそのまま動作
    • I/O や systemd も対応しており、通常の開発環境として十分
  • WSL2 + Ubuntu VM(VirtualBox/VMware/Hyper-V などで別途立てる)
    • WSL2 自体とは別に「完全な Ubuntu サーバ」を VM として用意
    • その中で Docker / k8s を実行
    • WSL2 はあくまで「Windows からの開発アクセスのための橋渡し」

項目WSL1WSL2WSL2 + Ubuntu VM
導入の容易さ◎ Windowsに標準機能wsl --install で即利用△ VMイメージ作成+ネットワーク設定
Linux互換性△ カーネル非搭載、制約多い◎ カーネル搭載で本物のLinux◎ 完全なUbuntu
Docker対応✕ 非対応◎ ネイティブ利用可◎ 本番同等
パフォーマンス○ ファイルI/O高速(Windows直結)✕ Linuxネイティブ性能なし◎ ネイティブLinuxに近い○ VMオーバーヘッドあり
Windowsとの統合◎ Windows FSに直アクセス○ 共有可能だが I/O遅め△ 共有フォルダ/SSH設定必要
ネットワーク再現性△ 制約多い○ 単一環境なら十分◎ VMごと独立、複数ノード検証可
運用負荷◎ 少○ 普通△ VM更新・管理が必要

WSL1

  • もう歴史的経緯のみ。現在は非推奨。
  • 「軽く Bash を叩く」用途以外は使わない。

WSL2

  • Laravel/Next.js/React の開発、単一コンテナ、DB連携など 通常の開発用途はすべてこれで十分
  • VSCode Remote - WSL との相性も◎。

WSL2 + Ubuntu VM

  • k8s クラスタや複数ノードのネットワーク検証、本番同等構成の再現が必要なときに選ぶ。
  • リソースをVM単位で固定できるので、負荷試験にも有効。

「k8s クラスタ」とは Kubernetes によって管理される複数サーバの集合体。Docker コンテナを「1台で動かす」から「何十台でも自動で運用する」レベルに引き上げる仕組みです。将来的に「数万ユーザー規模」「複数リージョン冗長化」になったら k8s クラスタを検討する流れが自然です。

 株式会社 iPLUS ONE