Windowsでいい感じのCLI環境を構築する(git-bash→WSL)

Windows11

はじめに

私はWeb制作会社で働いています。

一応(雑魚ですが)Webエンジニアと呼ばれる職業です。
世間では「お洒落をして、スタバでMac」のイメージがありますが、
私は「甚兵衛で、自宅でWindows」です。

Webエンジニア界隈で「Mac」が使用されている理由の一つにターミナル環境があると思います。
社内でもMac信者が多く、「Windows(笑)」というような感じで扱われます。
そこでWindowsで最強のターミナル環境を構築して、社内のMacユーザをギャフンと言わせたいと思います。

シェル

以前の記事でも申し上げましたが、
持論として「新規からの環境構築はよりシンプルな方が吉です。」だと思っています。
そのため、新たに外部アプリをインストールするのではなく「Windows Subsystem for Linux (WSL)」をベースとして採用します。

Windows Subsystem for Linux (WSL)とは?

Windows Subsystem for Linux (WSL) とは、Linuxの(ELFフォーマット形式の)バイナリ実行ファイルをWindows 10およびWindows Server上でネイティブ実行するための互換レイヤーである。
Windows Subsystem for Linux (WSL)

WSL2については下記の記述もあります。

2019年6月、従来のWSL1とは機構の異なるWSL2を発表し、Windows 10 May 2020 Update(バージョン 2004)で正式サポートとなった。WSL1と並行してサポートされる。

WSLとの違いは以下のとおりである。

  • 本物のLinuxカーネルを使用する。
  • Linuxカーネルを仮想マシン上で動作させる。
  • Linux側のファイルシステムはNTFS上のディレクトリではなくディスクイメージファイルに格納する。
  • ホストとなるWindowsとは別のIPアドレスを使用する
    Windows Subsystem for Linux (WSL)

生のLinuxと遜色なく使えると解釈しました。

  • ホストとなるWindowsとは別のIPアドレスを使用する

ここの部分が少し癖がありそうですね…

Linuxのディストリビューションはどうするか?

安定のCentos, 前進的なUbuntu

手順を眺めていくと、WSLにインストールするディストリビューションが選べるようです。
私の中の選択肢として、CentosとUbuntuが浮上しました。

CentOS is considered to be a more stable distribution compared to Ubuntu. Mainly because package updates are less frequent. This can also prove to be a disadvantage of CentOS. If you want the latest version of a certain application or software, you will have to install them manually.
CentOS vs Ubuntu - Which One to Choose for Your Web Server

CentosはUbuntuに比べて安定性に重きをおいているようです。
ガンガン新しいものを導入したいのでしたら、Ubuntu, 安定性を求めるのでしたらCentosという感じでしょうか

現在、参画している業務ではAmazon Linuxを使用しています。

Amazon has its own Linux distribution that is largely binary compatible with Red Hat Enterprise Linux.
Amazon Machine Image - Wikipedia
(意訳: Amazon Linuxは、RHEL系のLinuxとほぼ互換性があります。)

とありますので、今回はRHEL系のCentosを選択したいと思います。
(デュアルブート的なことができるならそうしたいです…)
WSL2でCentosの導入は少し面倒でしたので、今回はUbuntuを採用します。

ターミナル

WSLのデフォルトのターミナルはコマンドプロンプトと同じになるようです。
ちょっと古臭いですし、使いにくそうなのでこちらは外部アプリをインストールします。

調べた感じ、Hyperというアプリケーションが良さそうなので、これを採用します。

前段まとめ

前置きが長くなってしまいましたが、下記のような構成で環境を構築していきます。

|シェル|WSL2|
|ディストリビューション|CentosUbuntu|
|ターミナル|Hyper|

WSL2インストール

以前のバージョンの WSL の手動インストール手順 | Microsoft Docsから、x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージをインストールし、インストーラを実行します。

その後、wslで起動バージョンの変更コマンドを行い、WSL2のインストールは完了です。

PS C:\Users\{Windowsのユーザ名}> wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
この操作を正しく終了しました。

ディストリビューションの選択

WSL のインストール | Microsoft Docsを参考にインストールを行います。

今回、Ubuntuはデフォルトのディストリビューションのようですので、wsl --installコマンドを実行します。

PS C:\Users\{Windowsのユーザ名}> wsl --install -d Ubuntu
ダウンロード中: Ubuntu
インストール中: Ubuntu
Ubuntu はインストールされました。
Ubuntu を起動しています...

インストール後、wslコマンドを実行すると、rootでログインされました。
(docker desktopをインストールしていた影響?)

しかし、/etc/issueファイルを確認すると、Ubuntu 20.04がインストールされているようなので、
とりあえずは成功しているようです。

PS C:\Users\{Windowsのユーザ名}> wsl
root@{デバイス名}:/mnt/c/Users/{ユーザ名}# cat /etc/issue
Ubuntu 20.04 LTS \n \l

初期設定

ユーザー関連

rootで作業するのは怖いので、新たに作業用のユーザ(ne{Windowsのユーザ名}i)を作成します。
面倒なのでrootでいきましょう。
トリッキーなことをしていると、変なところで躓いてしまうので、
Microsoftの推奨の設定に従います。

WSL 開発環境を設定する | Microsoft Docs
↑こちらのドキュメントに従い、設定を行うこととします。
理由はわからないけれど、rootでログインされてしまったので、新たに作業用のユーザを作成していきます。

とりあえず、他にユーザが存在しないことを確認

※ ユーザが見つかったら、userdelで削除しましょう

root@{デバイス名}: users
root@{デバイス名}: ls /home
パッケージの最新化
root@{デバイス名}:sudo apt update && sudo apt upgrade
作業ユーザの作成
# useraddコマンドのデフォルトの設定を確認
root@{デバイス名}:useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no

私は、シェルとしてbashを使用したく、homeディレクトリを作成して欲しいので下記のようにしました。

root@{デバイス名}:useradd -s /usr/bin/bash -m {新たに作成するユーザ名} -p aaaa
# aaaaはロックされないための初期パスワードなので任意の値で大丈夫です。

root@{デバイス名}:passwd {作成したユーザ名}
新しいパスワード:# 任意のパスワードを入力
新しいパスワードを再入力してください:# 任意のパスワードを入力
passwd: パスワードは正しく更新されました
sudoerに登録

作業中にsudo権限がないと不便なので、新たに作成したユーザをsudoersに登録します。

vim /etc/sudoers
または
visudo
で/etc/sudoersファイルを編集します。

# User privilege specification
root    ALL=(ALL:ALL) ALL
{作成したユーザ名} ALL=(ALL:ALL) ALL

または
sudoコマンドが使用できないと困るので、グループsudoに作成したユーザを追加でも対応できます。

root@{デバイス名}:/mnt/c/Users/{ユーザ名}# usermod -G sudo ne{Windowsのユーザ名}i
初回ログイン

作成したユーザでログインをしてみます。
Powershellで下記を試行します。

# デフォルトのユーザ名を変更
PS C:\Users\{Windowsのユーザ名}> ubuntu config --default-user {作成したユーザ名}
PS C:\Users\{Windowsのユーザ名}> ubuntu
{作成したユーザ名}@{デバイス名}:~$             

```PowerShell:PowerShell
PS C:\Users{Windowsのユーザ名}> ubuntu config --default-user root
```

```bash:ubuntu
root@{デバイス名}:/mnt/c/Users/{ユーザ名}# vim /etc/passwd
```

```passwd:passwd
root:x:0:0:root:/mnt/c/Users/{ユーザ名}:/bin/bash
```

Ctrl + DでPowershellに戻った後、ログイン時のデフォルトのユーザを変更して完了です。

うまくログインできたら終了です。

設定ファイル引き継ぎ(git-bashからの移行)

私の環境ではWSLを導入する前に、git-bashを使用していたので
Windowsのホームディレクトリにある.sshや.vim等の隠しファイルを移動してきます。

sudo mv /mnt/c/Users/{Windowsのユーザ名}/{隠しファイル} ~/

プロンプトの変更

gitのブランチ名をプロンプトに追加
wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh ~/.git-prompt.sh;

↓下記を参考にどうぞ

#cat ~/.bash_profile 
source ~/.git-prompt.sh
export PS1='\[\e[34;47m\]\u@\[\e[34;47m\]\h\[\e[37;46m\] \[\e[46;30m\]\W\[\e[36;49m\] \[\e[m\]$(__git_ps1 "(%s)")\[\e[m\]\n\$'

参考

WSL(Windows Subsystem for Linux)のターミナル比較とcygwin/Dockerとのベンチマーク | NHN テコラス Tech Blog | AWS、機械学習、IoTなどの技術ブログ
Windows Subsystem for Linux + Hyper を使う - Qiita
【Hyper】イケてて使いやすいターミナル環境を作るためのオススメプラグインまとめ【Electron】 | Blogenist – ブロゲニスト
ターミナルプロンプトの表示・色の変更 - Qiita
WSL 開発環境を設定する | Microsoft Docs

コメント

タイトルとURLをコピーしました