スタイル・エッジ技術ブログ

士業集客支援/コンサルティングのスタイル・エッジのエンジニアによるブログです。

WSLアプリを入れてsystemctlを使おう!

はじめに

こんにちは。システム事業部のTAKです。
私はWindows10内のWSL環境をローカル開発環境として使用しているのですが、従来のWSL環境ではsystemctlが使えなかったため、サービスの登録ができないなど少し残念な思いをしていました。
(なおWindows11&Ubuntu22.04.1であれば、昨年4月頃のWindows Updateにより今回紹介する内容が既に反映されています)

ところが昨年の11月下旬にWSLアプリがMicrosoftストアで正式リリースとなりました。
元々Windowsに入っていたWSLをアプリとして切り出した形になりますが、主に以下のメリットが増えました。

  • systemdが利用できる
  • 機能追加やバグフィックスがOSアップデートを待たなくて済むようになる

ちなみに、既にWSLを入れていた方は以下メッセージがWSL起動時に表示されているかと思います。

LinuxWindows サブシステムが Microsoft Store で入手可能になりました。
'wsl.exe --update' を実行するか、https://aka.ms/wslstorepage にアクセスしてアップグレードできます
Microsoft Store から WSL をインストールすると、最新の WSL 更新がより速く提供されます。
詳細については、https://aka.ms/wslstoreinfo
をご覧ください。

ここまで読んで(察しの良い方はタイトルで)お気づきとは思いますが、Windows環境のみのお話です。
そもそもWSLって何??という方は、すぐ下に公式ドキュメントのリンクを貼っていますので、先に概要を調べてから戻ってきていただけると助かります。

なお、以下に記載しているインストールから設定までの話は、MicrosoftのWSL公式ドキュメントを読めば詳細にすべて書いてあります。
また、wslコマンドのオプションも豊富にありますので、WSLの理解を深めたい方は本記事を読み終わった後に公式ドキュメントも読まれる事をオススメします。

learn.microsoft.com

それでは始めていきましょう!

インストール&設定

前提条件

Windows 10 バージョン 2004 以上 (ビルド 19041 以上) または Windows 11

Microsoftストアよりインストール

Windows Subsystem for Linux
上記リンクのストアページよりWSLアプリをインストールします。はい、完了です。
ちなみに、OS同梱版で動かしていた人もこの手順で移行できます。簡単ですね。
(このペンギンのアイコン、微妙にイラっとするのは私だけでしょうか…?)

systemdのサポート設定

WSLアプリを起動(ターミナル等で起動でもOK)すると、新規の場合はUbuntuのインストール、既に利用している人はそのLinuxOSが起動すると思います。
以下コマンドを実行し、systemdのサポート設定を行います。

$ ls /etc/wsl.conf
# 無ければ作成
$ sudo touch /etc/wsl.conf
$ sudo vi /etc/wsl.conf

wsl.confに以下内容を追記

[boot]
systemd=true

WSL再起動のため、PowerShellより以下コマンドを実行。

wsl.exe --shutdown

再起動後、WSLに入ると以下のようにsystemctlコマンドが使えるようになっていると思います。

systemctl list-unit-files --type=service

これでsystemctlが使えるようになりました!!かんたん!!
WSL内にLAMPなどの学習環境を作った際や、Dockerをインストールした際にsystemctlに登録できない!といった悲しみから解放されます!ヤッター!

と、ここまでの設定手順も公式ドキュメントに記載がありますので、細かい部分についてはそちらをご確認ください。
Windowsフォルダの自動マウント設定の書き方などが載っています。

learn.microsoft.com

systemd設定後にちょっとハマった事

Dockerが起動しなくなった

私の環境ではDocker Desktopを使用せず、WSL内にDockerをインストールしていました。
従来のWSLではsystemctlが使えなかったため、Dockerのdaemonを手動起動させるようにしていた(といっても.bashrcに記載していた)のですが、その設定(/etc/docker/daemon.json)が邪魔してうまく動かなくなってしまったようで…
詳しくはDocker公式ドキュメントを参照してみてください。
同様に、systemctlが動作する状態でdaemon.jsonが残ったままDockerの最新化をしようとすると、エラーを吐いてインストールが失敗するのでご注意ください。

最後に

WSLにより、Windowsでの開発環境構築は一昔前と比べて飛躍的に便利になりました! まだ使った事がない方も、ちょっと使ってみたけどsystemctlが使えず不便に感じていた方も、この記事をきっかけにチャレンジしてもらえると嬉しいです!

スタイル・エッジ・グループでは一緒に働く仲間を募集しております。 興味をお持ち頂けましたら是非とも下記をクリックしてください↓↓

recruit.styleedge-labo.co.jp