37
45

More than 1 year has passed since last update.

100万人に伝えたい!失敗を乗り超えた話を共有しよう

WSL2 + Windows Terminal + fish で快適なターミナル環境を構築しよう!(2023 年版)

Last updated at Posted at 2023-07-30

開発環境を構築しなおす機会があったので、自分用のメモを兼ねて書きました。

WSL2 (Windows Subsystem for Linux 2) 環境で shell を fish として環境構築していきます。
Linux のディストリビューションは Ubuntu を利用します。
また、Windows Terminal を利用してテーマ、色、フォントなどをカスタマイズしていきます。

fish とは

fish(通常は "friendly interactive shell" として知られる)は、ユーザーフレンドリーさを特徴とする Unix シェルの一つです。

fish を利用するメリット

  1. 優れた自動補完機能: fish は、入力中のコマンドや引数に基づいて、リアルタイムでのサジェストを提供します。これはコマンドの記憶や新しいコマンドの学習に非常に役立ちます。また、色分けされた表示によって、見た目も直感的でわかりやすいです。
  2. 設定の容易さ: fish には、他のシェルのような複雑な設定ファイルが不要です。ウェブベースの設定ツールを介して簡単にプロンプトの見た目や動作をカスタマイズできます。また、スクリプトや関数の作成も直感的で、学習が他のシェルより容易な印象です。
  3. 豊富なプラグインとテーマ: fish には、様々なプラグインとテーマが提供されており、これにより機能の追加や見た目のカスタマイズが非常に容易です。特に fisher や Oh My Fish といったプラグインマネージャを利用すると、多くのプラグインやテーマを簡単にインストール・管理できます。

以下からインストール手順を記載していきます。

WSL2

WSL のインストール | Microsoft Learn を参考にインストールをします。
PowerShell または Windows コマンド プロンプトを管理者モードで開き、wsl --install コマンドを入力します。

wsl --install

このコマンドで WSL version2、また Ubuntu 22.04(2023年7月30日現在)がインストールされます。
(少し前まではもういくつかの手順が必要でした)
インストール完了後、PC を再起動します。
再起動後、自動的に Ubuntu アプリが起動します。
初回起動時にユーザー名とパスワードを設定する必要があります。

Windows Terminal

Microsoft Store アプリ からダウンロードします。

Windows Terminal - Microsoft Store アプリ

Windows Terminal を利用するメリット

  1. 複数のタブとプロファイル:
    Windows Terminal は複数のタブで同時に異なるシェルやアプリケーションを動かすことができます。この機能により、例えば、WSL (Windows Subsystem for Linux)、PowerShell、Cmd などを同じウィンドウ内の異なるタブで並行して動作させることが可能です。それぞれのタブは異なるプロファイル設定を持つことができるので、外見や動作を独自にカスタマイズすることもできます。

  2. 高度なカスタマイズ性:
    Windows Terminal は、外見や動作をユーザーの好みに合わせてカスタマイズすることができます。例えば、フォントの変更、背景の透明度や背景画像の設定、色テーマのカスタマイズなどが簡単にできます。これにより、作業効率を高めるだけでなく、使用感も向上します。

  3. GPU アクセラレーションと高度なレンダリング:
    Windows Terminal は GPU アクセラレーションを使用しており、テキストの描画が非常に高速です。また、テキストはアンチエイリアシングや ClearType の技術を使用して描画され、文字が非常に鮮明で読みやすくなっています。さらに、絵文字や豊富な文字セットをサポートしており、よりリッチな表現が可能となっています。

Windows Terminal の設定

最低限、以下を設定するといいと思います。

  • スタートアップ
  • Ubuntu > 外観(フォント設定に関しては後述)

好みなので、いろいろ試してみましょう。
参考までに、自分の例は以下となっています。

(スタートアップ)

image.png

(Ubuntu > 外観)

image.png

Windows Terminal のショートカット

ショートカットを覚えると操作効率が上がるため、よく使う操作についてはぜひ覚えてください。

Visual Studio Code

Visual Studio Code をインストールしていない場合は Windows にインストールしてください。
また、WSL2 から VSCode を操作するため、拡張機能 Remote Development - Visual Studio Marketplace をインストールしておくといいでしょう。

Git

Ubuntu にデフォルトでインストールされている Git は最新バージョンでないことがあるため、以下を実行します。

sudo add-apt-repository ppa:git-core/ppa
sudo apt update && sudo apt upgrade

アップデート後、バージョン確認をします。

$ git --version
git version 2.41.0

Git に記載されている Latest source Release と一致していれば OK です。

zip & unzip

後続の手順で利用します。
デフォルトの Ubuntu にはインストールされていないため、インストールします。

sudo apt install zip unzip -y

fish

og:fish-shell/fish-shell: The user-friendly command line shell. を参考にインストールをします。

sudo apt-add-repository ppa:fish-shell/release-3
sudo apt update
sudo apt install fish -y

以下のように fish コマンドが機能すれば OK です。

$ fish
Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish

デフォルトのシェルを fish に変更しましょう。
which fish で fish がインストールされているパスを確認し、chsh コマンドでシェル設定を変更します。

$ which fish
/usr/bin/fish
$ chsh -s /usr/bin/fish

Fisher

fish のプラグインマネージャー fisher をインストールします。

jorgebucaran/fisher: A plugin manager for Fish

curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

asdf

asdf とは 開発言語(Node.js、Python など)や開発ツール(AWS CLI, AWS SAM CLI, Terraform など)のバージョンを管理できるコマンドラインツールです。
後続の ghq をインストールするために asdf をインストールします。
asdf をインストールする理由は、ghq のパッケージマネージャのひとつとして asdf が利用でき、かつ自分のチームでは開発言語等のバージョン管理に asdf を利用していて都合がいいためです。
ghq は brew installgo install などでもインストール可能なので、特に普段 asdf を利用していない方はインストール不要です。

Getting Started | asdf

asdf の最新バージョンをダウンロードします。

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.12.0

▼ Fish & Git のインストールコマンドを実行します。

~/.config/fish/config.fish に以下を追記します。

# asdf
source ~/.asdf/asdf.fish

補完は次のコマンドを使用して手動で構成する必要があります。

mkdir -p ~/.config/fish/completions; and ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions

バージョン確認し、動作すれば OK です。

$ asdf --version
v0.12.0-816195d

Windows Terminal の外観をカスタマイズする

テーマ

ターミナルのテーマを自分の好みに合わせて変更していきます。
テーマの一覧は oh-my-fish/docs/Themes.md at master · oh-my-fish/oh-my-fish を参照してください。
自分は Powerline-style が好きなので、theme-bobthefish にします。

oh-my-fish/theme-bobthefish: A Powerline-style, Git-aware fish theme optimized for awesome.

まずはテーマを fisher でインストールします。

fisher install oh-my-fish/theme-bobthefish

この時点で Git 管理しているディレクトリへ移動すると、文字化けしています。
文字化けを解消するために、フォント設定をします。

フォント

好みのフォントをインストールします。
ここでは yuru7/HackGen: Hack と源柔ゴシックを合成したプログラミングフォント 白源 (はくげん/HackGen) を使用します。

miiton/Cica: プログラミング用日本語等幅フォント Cica(シカ) も人気があると思うので、お好みでどうぞ。
(単純にスター数と最近の更新頻度を見て白源を採用しました)

Windows へのインストール
  • https://github.com/yuru7/HackGen/releases より、最新版の Assets をダウンロードします。
    • Nerd Fonts でアイコンフォントも使用したいので HackGen Console NF を使用します。
    • 2023 年 7 月 16 日時点の最新は HackGen_NF_v2.9.0.zip
  • 任意のフォルダで zip を解凍します。
  • Windows キーを押して表示される検索ボックスに「フォント設定」と入力し、検索結果を開きます。
    • image.png
  • 解凍後のフォルダ内にある *.ttf ファイルを全選択して、フォント設定画面にドラッグ&ドロップします。
Windows Terminal でのフォント設定
  • Windows Terminal を開きます。
  • Ctrl + , で設定画面を開きます。
  • 左側メニューよりプロファイル Ubuntu(ペンギンアイコンじゃない方) を開きます。
  • 追加の設定 > 外観 を開きます。
  • フォントフェイスHackGen Console NF を指定します。
    • この時点で「フォントが見つかりません」と言われるが、再起動で解決するため気にしなくていい
  • Windows Terminal 再起動します。
    • 文字化けが解消しています。

image.png

Visual Studio Code でのフォント設定
  • VSCode を開きます。
  • Ctrl + Shift + p > Preferences: Open Settings (UI) を選択します。
  • 設定の検索バーに terminal.integrated.fontFamily と入力します。
  • Terminal › Integrated: Font Family 設定に HackGen Console NF を指定します。
  • VSCode のターミナルを開きます。
    • 文字化けが解消しています。

GitHub SSH 接続

GitHub に ssh 接続できるようにする - Qiita を実施します。
ただし、秘密鍵をssh-agentに登録する のパートのみ、WSL2 の Ubuntu で keychain 経由で ssh-agent を使う#keychain の導入 を実施します。
記事の冒頭に記載があるように、最後のコマンド source $HOME/.keychain/$HOST-sh の箇所は source $HOME/.keychain/$HOST-fish として実行します。

fish の便利なプラグイン

fish での操作効率性を上げるプラグインをインストールしていきます。

fzf

fzf は、コマンドラインでのインタラクティブな検索・選択をサポートする高速なフィルタリングツールです。
入力された行データからインタラクティブに曖昧(fuzzy)検索を行ってくれるコマンド(fuzzy finder)です。
いろいろすごいので、とりあえず以下サイトのデモを見てください。

PatrickF1/fzf.fish: 🔍🐟 Fzf plugin for Fish

以下のコマンドでインストールしていきます。

sudo apt install fzf -y
sudo apt install bat -y
sudo apt install fd-find -y
alias fd='fdfind' && funcsave fd
alias bat='batcat' && funcsave bat
fisher install PatrickF1/fzf.fish

Ctrl + R📜 Search History のスクショのようなコマンド履歴検索画面が出れば OK です。

ghq + fzf

ghq は、GitHub やその他のリモートリポジトリのローカルクローンを整理し管理するためのツールです。
特に、多数のリポジトリをクローンしてローカルで管理する開発者にとって非常に便利です。
ghq を使用することで、リポジトリの統一されたディレクトリ構造を維持しつつ、複数のリポジトリを簡単に取得・移動・調査することができます。
リポジトリの検索には fzf を利用します。

x-motemen/ghq: Remote repository management made easyasdf-vm のインストールコマンドを実行します。
asdf を利用していない人は、gobrew などお好みのパッケージマネージャを利用してインストールしてください。
asdf 以外でのインストール方法は上記公式サイトをご参照ください。

asdf plugin add ghq
asdf install ghq latest
asdf global ghq latest

fish プラグイン decors/fish-ghq: ghq completion and keybinding for fish shell もインストールしておきます。

fisher install decors/fish-ghq

~/.config/fish/config.fish に起動設定を追記します。

# fisherパッケージ decors/fish-ghq の設定
set GHQ_SELECTOR fzf

インストール後、ghq を利用してリポジトリをクローンします。

ghq get git@github.com:<org>/<repo>.git

複数リポジトリをインストールした後、Ctrl + g でリポジトリをあいまい検索し、Enter で選択したローカルリポジトリのディレクトリに移動できていれば OK です。
6 歳娘「パパ、プロジェクトフォルダを見つけるのに何時間かけるの?」【ghq+fzf+zsh】 - Qiita の GIF 画像のようなイメージになります。

z

過去にアクセスしたディレクトリを追跡します。
頻度と最新性を組み合わせて、念頭に置いたディレクトリにジャンプできます。

jethrokuan/z: Pure-fish z directory jumping

cd コマンドの履歴から指定された相対パスに部分一致するパスを検索しています。
z をインストールした後にアクセスしたことあるディレクトリにしか行けません。
Tab での補完もできます。

以下のとおりインストールします。

fisher install jethrokuan/z

以下のように動作確認できれば OK です。

cd ~/.config/fish/ # 移動したいディレクトリへアクセス
cd ~ # 動作確認のため、他の適当なディレクトリへ移動
z fish # ~/.config/fish/ へ移動できる

fish-bd

ディレクトリを上に遡れるプラグインです。

0rax/fish-bd: Quickly go back to a parent directory up in your current working directory tree. Don't write 'cd ../../..' redundantly, use bd instead.

以下のとおりインストールします。

fisher install 0rax/fish-bd

以下のように動作確認できれば OK です。

bd # cd ..

起動時に fish ロゴを表示

WSL 環境に fish shell を入れたらいい感じのターミナルになった - Qiita の「おまけ: fish 起動時にかわいいお魚を表示」 を参考にすると、起動時に fish ロゴを表示できるようになります。

シェルは fish が利用されていると自分にも他人にも分かりやすいので、入れておくといいと思います。

その他

wslu

fish シェルで aws sso コマンドなどを使うときなど、ターミナルからブラウザを開けるようにするためにインストールします。

sudo apt install wslu

~/.config/fish/config.fish に起動設定を追記します。

# wslu
export BROWSER=wslview

終わりに

以上で環境構築は終わりです。
他にもおすすめなプラグインや操作方法があればぜひ教えてください。

fish を初めて使う人、見知らぬコマンドがあった人は、ぜひ手になじむまで繰り返し使ってみてください。
きっと開発効率が向上すると思います!
それでは楽しい fish ライフを!

参考サイト

37
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
45