こんにちは。21B のゆきくらげです。新歓ブログリレー 5 日目の今回は Windows で Web 開発を行う上でとても便利な、 WSL の導入について解説します。
(この記事ではWSL は WSL 2 のことを指します)
そもそもWSL って何?
詳しい説明は他の記事に任せるとして、ここでは簡単な説明をします。
WSL は Windows Subsystem for Linux の略です。直訳すると "Linux 用の Windows サブシステム" となります。誤解を恐れずに言うと、Windows の一部のリソースを使って Linux をエミューレートする仕組みです。
WSL を導入することで次のような利点が得られます。
- サーバーと似た環境で作業が出来る。
- Web サーバーは技術的な利点から Linux 系の OS で動いていることが多いです。これらに併せることで、環境の差によるバグの削減、開発体験の向上につながります。
- CUI を中心とした開発が行いやすい。
- CUI (ターミナルに文字を打ってアプリケーションを動かす) は GUI (グラフィカルに表示された要素を通してアプリケーションを動かす) と比べて、作業の記録がしやすいです。GUI においては、画像や動画などを使って操作を記録する必要がありますが、CUI においては実行するコマンドの文字列を記録するだけでよいです。
- Windows にも CUI は存在しますが、個人的にはカスタマイズ性やググラビリティなどを考えると Linux の CUI の方が体験が良いです。
インストールと初期設定
Windows 10 バージョン 2004 (2020年5月 ~) 以降は、非常に簡単に WSL が導入できます。ぶっちゃけると↑の公式の Docs が全てです。
まず、管理者権限のPowerShell (アプリ検索 → "PowerShell" と入力 → "Windows PowerShell" で右クリック → 管理者として実行) にて次のコマンドを実行します。
wsl --install
すると割と長いダウンロードが走り、Ubuntu が起動すると思います。実はもうこれでインストールは完了していて、あとは初期設定です。
Enter new UNIX username
- ユーザー名を設定します。好きな名前で結構です。
New password
- パスワードを設定します。入力中は文字が現れませんが、きちんと入力できています。忘れないようにしましょう。
Retype new password
- パスワードをもう一度入力します。
これらを設定すると、シェル(bash)が起動します。次のようになっていれば OK。
ユーザー名@...:~$
以降は PowerShell で Ubuntu
コマンドを実行すれば wsl が起動します。
wsl をシャットダウンするときは wsl --shutodown
コマンドを実行します。
これでにて導入は終了です.
シェルの簡単な使い方
まずはシェルに最初から表示されている文字列を見てみます.
ユーザー名@...:~$
この ~
の部分をカレントディレクトリといいます.カレントディレクトリは現在いるディレクトリの位置です.~
は WSL のホームディレクトリを表しています.(後でもう少し説明します)
そして,$
の右側にはコマンドを入力します.
コマンドは
コマンド名 コマンドに渡す何かしら
という形をしています.先ほどの wsl --install
では wsl
に --install
を渡しています.
基本的なコマンド
ls
コマンドを使って今いるディレクトリに含まれるフォルダとファイルの一覧を表示できます.
ls
今は何も表示されません.これはまだディレクトリやファイルなどを作っていないからです.
mkdir
でディレクトリを作成できます.
mkdir test
もう一度 ls
を実行すると
test
と表示されると思います.
cd
でカレントディレクトリを変更できます.
cd test
カレントディレクトリが ~/test
になりました.例えばここで
mkdir test2
mkdir test3
とすると,ディレクトリの構造は次のようになります.
~
+ test <- イマココ
+ test2
+ test3
ls
コマンドを実行すると test2
と test3
が表示されます.
一階層上に戻るにはcd ..
を使います
cd ..
~ <- イマココ
+ test
+ test2
+ test3
ディレクトリの削除には rm -r ディレクトリ名
を使います.(今は -r
を気にしなくても良いです)カレントディレクトリが ~
であることを確認して次のコマンドを実行します
rm -r test
続いて ls
を実行します.test
ディレクトリが削除されたことが分かります.
このように,基本的には 「cd
で目的地まで行って,ls
で中身を確認しつつ,コマンドを実行する」動きを繰り返して利用します.
よく使うコマンドについて
(僕が)よく使うコマンドを載せておきます。軽く機能を説明しますが、詳しい解説は Google 先生に任せます。
cd
(change directory)- ディレクトリを移動する。
ls
(list segments)- ディレクトリ内のファイル / ディレクトリを表示する。
- だいたい
cd
した後に使う ls -a
(隠しファイルも表示する)もめちゃくちゃ使う
mv
(move)- ファイルを移動する(名前の変更にも使える)
rm
(remove)- ファイルを削除する
-r
オプションでディレクトリも削除できる
mkdir
(make directory)- ディレクトリを作成する
cat
(concatenate)- ファイルの中身を表示する
- 実際は結合
concatenate
の略でファイルの中身を結合させるものらしい。このブログを書いていて初めて知った。
- 実際は結合
- ファイルの中身を表示する
vi
(visual editor) /vim
(vi imitation)- Vim エディタを起動する(
僕はあんまり使ってないけど)
- Vim エディタを起動する(
code
(visual studio code)- VSCode を起動する
git
(git)- git 職人への道は長い......
Windows Terminal について
Windows Terminal はタブ機能の付いたターミナルです.Windows の PowerShell や WSL の bash などを同じウィンドウで管理することができ,開発には必須のアプリといえます.
最近プリインストールアプリになりましたが,インストールされていない人は Microsoft Store からインストールすることができます.
Windows Terminal を起動し,上部タブの + ボタンの横にあるメニューボタンを押すと Terminal で使えるシェルの一覧が出ます.ここから Ubuntu を選択することで,WSL のシェルを起動することができます.
起動時のディレクトリを変更(Terminal で WSL を使うならほぼ必須)
ここでシェルのカレントディレクトリを見ると PowerShellから起動したとき ~
であったのが /mnt/c/Users/[ユーザー名]
になっていると思います.実はこれは罠で,WSL は /mnt/c
以下のファイルを操作するのが非常に遅いのです.
WSL と Windows ではそれぞれ独立してファイルを管理します.
~
は WSL 側のホームディレクトリで,
/mnt/c/Users/[ユーザー名]
は Windows 側のホームディレクトリです.
ファイルフォーマットの違いによって読み書きの速度が遅くなっているらしいですが,詳しいことは僕も分かっていません.しかし,とにかく /mnt/c
のままではまともな体験は得られないので,変更してしまいます.
Terminal のメニューから,設定を開きます.サイドバーの「プロファイル」から Ubuntu を選択して,「開始ディレクトリ」を %USERPROFILE%
から \\wsl$\Ubuntu\home\ユーザー名
に変更しましょう.
WSL のシェルを再度開くと,カレントディレクトリが ~
になっていると思います.
「PATH を通す」について
作業中,「PATH を通す」という作業が必要になることが稀によくあります.コレをなるべく簡単に説明します.
まず知っていてほしいのは,(大半の)コマンドに本体があるということです.
例えば,ls
コマンドの本体は /usr/bin/ls
にあります.ユーザーが ls
を実行すると,シェルはそれを受け取り /usr/bin/ls
を実行します.実際,ls
コマンドを /usr/bin/ls
と書いても動作しますが,ここでシェルが ls
をどうやって /usr/bin/ls
と解釈しているのかがキモになってきます.
PATH は環境変数の一種です.環境変数は,シェルを立ちあげている限りどこからでも参照できる値です.文で書いても分かりにくいので,次のコマンドで PATHの中身を見ることができます.
echo $PATH
結果
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: ....
ズラっとでてきましたね.PATH では区切り文字として :
が使われています.これを踏まえてみてみると,複数のディレクトリへのパスが連なっていることが分かると思います.
シェルがコマンドを受け取ると,この PATH に設定されたディレクトリの中から コマンドと同名のファイルを見つけてきて実行します.もう一度 PATH を見てみると /usr/bin
があります!ここに ls
が存在することでシェルはls
を /usr/bin/ls
と解釈することができます.(逆に存在しなかったら ls
ではなく /usr/bin/ls
と打たなくてはいけなくなります!)
さて,これで PATH の役割は コマンドを実行するとき /usr/bin/ls
のように入力しなければならないところを ls
と入力するだけでよくする事だとわかりました.
時として,この PATH にないディレクトリを新たに PATH に追加したい事があります.こうすることでユーザー定義のコマンドをコマンド名だけで実行できるようになるからです.そして,この PATH にディレクトリを登録することを「PATH を通す」と言う訳です.
PATH は次のコマンドを実行することで通すことができます.いますぐ必要はありませんが,「PATHを通す」の意味を覚えておいて,必要になったときググれるようにしておきましょう.
$echo 'export PATH=パス:$PATH' >> .bash_profile
バックアップについて
定期的なバックアップは非常に大事です。PowerShell から下のコマンドを実行することでまるごとバックアップすることができます。(ubuntu20220305
の部分は適当な名前を付けましょう。)
cd ~/Documents && wsl --export Ubuntu ubuntu20220305.tar
サイズによってかなり時間がかかりますが、終わると自分のドキュメントフォルダにバックアップが作成されるはずです。これを外部ディスクにとっておくなりなんなりしましょう。
いかが
でしたか
?
明日のブログリレーはは Swan 君 (@SWSRtech) の記事です。お楽しみに!