🐳

【Bunを使うための】Windows11にDockerをインストールする時の注意点

2024/09/14に公開

この記事は生成AIを多用しています。しかし多くの文章はオリジナルです。これからは正式的なAI文と、広告で心に刺さるなどのオリジナルを混ぜた、ライティングこそ必要になると思います。

BunはメジャーなNode.jsを超すか?

Bunとは2023年9月上旬に正式リリースされた、注目されているJavaScriptランタイムで、Node.jsの代替として使用できます。Node.jsよりも高速な実行が可能です。

TypeScriptをネイティブでサポートしており、型安全な開発を行うことができます。またJSXもサポートしているため、Reactなどのフレームワークとの親和性も高いです。

しかしWindows版がなく、実際はLinux(Unix)とMacでしか使えません。プログラマーでMacを使う人が多い理由は、コレと高品質だと思います。BunがNode.jsを超すには、このような利用者の少なさの解消だと思います。

WindowsでBunを使うには2つの方法がある

しかし昨今は、色々な方法で他のOSを利用する方法があります。しかし主に2つの方法が業務でも使われるメジャーな方法です。

方法❶VNCで遠隔操作する

この方法は昔からあった方法で、LinuxサーバーPCと作業用のWindowsPCの二台を使いサーバーにBunをインストールして使う方法です。この方法こそBunとUnixネイティブな方法で他の仮想な方法よりも、専門家ならLinuxが使えた方が良いというのが、1990年代からの定説です。

しかし「二台もPCを買えるほど余裕が無い」という人もいますが、中古PCなら安いです。ただし場所が狭くなるという理由だと解消できませんが、PCをTV代わりにしても良いでしょう。この方法だとノートPCの液晶が故障しても安値に使えます。

方法❷WindowsにWSLをインストールして仮想環境を使う

WSLとはWindowsでLinuxが使える方法です。他の方法で内蔵ディスクのパーティション(論理ドライブ)を例えばC・Dドライブなどに区切って、CにWindows、DにLinuxをインストールして両方を使う共存という方法もありましたが、これはWindowsが故障してCドライブが読めないという最悪なエラーがありましたので、共存方法があってもやめた方が良いです。

WSLには2つの紛らわしいWindowsで共存できない方法がある

この方法はたぶん、他では書かれていない、私の偏見が混じっているかもしれませんが、早く成功したいという点で書いています。

Windows版アプリのDockerは使わない

WSLはWindows版アプリのDockerデスクトップをインストールすると、DockerのWSLもインストールされます。しかしこれは使いづらいです。BunなどはWindows版アプリが無いので、以下の方法が良いです。

WindowsのWSLをまずインストールし、そのLinuxにDockerをインストール

他にWindowsのWSLというのがあり、これをインストールするとUbuntuLinuxが使えるようになります。このLinuxにDockerをインストールすることで、Mac・Linuxプログラマーの人ともデータを共有しやすくなります。

そしてDockerをインストールしたら、Bunを他の人と共同開発をDockerを使って行うことになります。Dockerは他にWebサーバーソフトやMySQLやVSコードなども使えますが、VSコードなどはWindowsを開発しているマイクロソフト社が開発しているので、最新対応などからWindows版のVSコードを利用します。

Dockerをインストールできたか?や定期的にどういう環境になっているのかがわかるパワーシェルスクリプトを作成してみた

Dockerをインストールしたら、他のブログなどではバージョンや動作中のプロセスなどを表示のコマンドの打ち方などを説明していますが、本時期ではそれを全部表示し、そのスクリプトを起動した日時を書類名に入れるので、上書きせずに、どの時期の動作でエラーが起きたかなども分かりそうなスクリプトを作りました。

書類名は一覧表示ということで「docker_list.ps1」

#######################################################################
#
# ~ログ名が日時付きなのでシステム管理がしやすくなる~
# Dockerの動作状況を確認し日時付きで書類保存するパワーシェルスクリプト
#
#######################################################################

# スクリプト実行時の日時を取得
$dateTime = Get-Date -Format "yyyyMMdd_HHmmss"

# ファイル名を作成
$fileName = "docker_list_$dateTime.txt"

# 各コマンドの実行結果を取得
# Docker EngineとDocker Clientのバージョン情報を表示
$dockerVersion = docker version
# ホストのOS、アーキテクチャ、ストレージドライバなど、詳細な情報を表示
$dockerInfo = docker info
# Dockerイメージの一覧を表示
$dockerImages = docker images
# 全てのコンテナの一覧(実行中、停止中)を表示
$dockerPs = docker ps -a
# Swarmモードでクラスタを構成している場合、各ノードの情報(ステータス、ロールなど)を表示
$dockerNodeLs = docker node ls

# 結果をファイルに書き込む
Out-File -FilePath $fileName -InputObject $dockerVersion -Append
Out-File -FilePath $fileName -InputObject $dockerInfo -Append
Out-File -FilePath $fileName -InputObject $dockerImages -Append
Out-File -FilePath $fileName -InputObject $dockerPs -Append
Out-File -FilePath $fileName -InputObject $dockerNodeLs -Append

# ファイルが作成されたことをターミナルで通知
Write-Host "Docker情報が以下のファイルに保存されました:" $fileName

# 下記を入れないとターミナルが直ぐに消えて見れない
Read-Host -Prompt "Press Enter to exit"

本当はクロスプラットホーム(多OS)対応ということで、Windowsのみでしか使えないWindowsパワーシェルではなく、Pythonで作っても良かったのですが、Pythonもコンテナになり中古のPCだと内蔵ディスク容量も少ないので、パワーシェルにしました。

またパワーシェルCoreならクロスプラットホームなのと、.NET Coreの今後の発展や、独壇場なTypeScriptやGitHubもマイクロソフトが開発なので、「パワーシェルは抑えておいた方が良いかな…」と思っています。

本プロジェクトのデプロイ先

https://github.com/shimada-print/ps1

Discussion