システム開発では、開発環境、検証環境、ステージング環境、本番環境など、さまざまな環境を利用することになる。開発環境は開発者自分で構築する場合もあるだろうが、それ以外はプロジェクト側から提供される場合などもある。
サーバ自体をどこの何を利用するのかはエンジニアの相性好き嫌いやもあるが、これは利用した経験によるものだから大事な事である。弊社では長いことさくらインターネットの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 | WSL2 | WSL2 + 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
WSL2
WSL2 + Ubuntu VM
「k8s クラスタ」とは Kubernetes によって管理される複数サーバの集合体。Docker コンテナを「1台で動かす」から「何十台でも自動で運用する」レベルに引き上げる仕組みです。将来的に「数万ユーザー規模」「複数リージョン冗長化」になったら k8s クラスタを検討する流れが自然です。