開発環境を構築しなおす機会があったので、自分用のメモを兼ねて書きました。
WSL2 (Windows Subsystem for Linux 2) 環境で shell を fish として環境構築していきます。
Linux のディストリビューションは Ubuntu を利用します。
また、Windows Terminal を利用してテーマ、色、フォントなどをカスタマイズしていきます。
fish とは
fish(通常は "friendly interactive shell" として知られる)は、ユーザーフレンドリーさを特徴とする Unix シェルの一つです。
fish を利用するメリット
- 優れた自動補完機能: fish は、入力中のコマンドや引数に基づいて、リアルタイムでのサジェストを提供します。これはコマンドの記憶や新しいコマンドの学習に非常に役立ちます。また、色分けされた表示によって、見た目も直感的でわかりやすいです。
- 設定の容易さ: fish には、他のシェルのような複雑な設定ファイルが不要です。ウェブベースの設定ツールを介して簡単にプロンプトの見た目や動作をカスタマイズできます。また、スクリプトや関数の作成も直感的で、学習が他のシェルより容易な印象です。
- 豊富なプラグインとテーマ: 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 を利用するメリット
-
複数のタブとプロファイル:
Windows Terminal は複数のタブで同時に異なるシェルやアプリケーションを動かすことができます。この機能により、例えば、WSL (Windows Subsystem for Linux)、PowerShell、Cmd などを同じウィンドウ内の異なるタブで並行して動作させることが可能です。それぞれのタブは異なるプロファイル設定を持つことができるので、外見や動作を独自にカスタマイズすることもできます。 -
高度なカスタマイズ性:
Windows Terminal は、外見や動作をユーザーの好みに合わせてカスタマイズすることができます。例えば、フォントの変更、背景の透明度や背景画像の設定、色テーマのカスタマイズなどが簡単にできます。これにより、作業効率を高めるだけでなく、使用感も向上します。 -
GPU アクセラレーションと高度なレンダリング:
Windows Terminal は GPU アクセラレーションを使用しており、テキストの描画が非常に高速です。また、テキストはアンチエイリアシングや ClearType の技術を使用して描画され、文字が非常に鮮明で読みやすくなっています。さらに、絵文字や豊富な文字セットをサポートしており、よりリッチな表現が可能となっています。
Windows Terminal の設定
最低限、以下を設定するといいと思います。
- スタートアップ
- Ubuntu > 外観(フォント設定に関しては後述)
好みなので、いろいろ試してみましょう。
参考までに、自分の例は以下となっています。
(スタートアップ)
(Ubuntu > 外観)
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 install
や go install
などでもインストール可能なので、特に普段 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 キーを押して表示される検索ボックスに「フォント設定」と入力し、検索結果を開きます。
- 解凍後のフォルダ内にある
*.ttf
ファイルを全選択して、フォント設定画面にドラッグ&ドロップします。
Windows Terminal でのフォント設定
- Windows Terminal を開きます。
-
Ctrl + ,
で設定画面を開きます。 - 左側メニューよりプロファイル
Ubuntu
(ペンギンアイコンじゃない方) を開きます。 -
追加の設定
>外観
を開きます。 -
フォントフェイス
でHackGen Console NF
を指定します。- この時点で「フォントが見つかりません」と言われるが、再起動で解決するため気にしなくていい
- Windows Terminal 再起動します。
- 文字化けが解消しています。
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 easy の asdf-vm
のインストールコマンドを実行します。
※ asdf
を利用していない人は、go
や brew
などお好みのパッケージマネージャを利用してインストールしてください。
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
ディレクトリを上に遡れるプラグインです。
以下のとおりインストールします。
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 ライフを!
参考サイト
- Linux 初心者が WSL2 と Windows Terminal のセットアップをやってみた | DevelopersIO
- 超便利!Windows Terminal のショートカットキー一覧|タブ作成や画面分割を簡単にする方法やキーの調べ方
- WSL2 の Ubuntu で keychain 経由で ssh-agent を使う
- 詳解 fish でモダンなシェル環境の構築(fish,tmux,powerline,peco,z,ghq,dracula) - Qiita
- 【完全版】fish shell ~スーパーコマンドライン~
- fish shell が結構良かった話 - Qiita
- Mac で fish shell 環境を 10 分で構築する
- WSL2 + Windows Terminal で fish のセットアップ
- WSL 環境に fish shell を入れたらいい感じのターミナルになった - Qiita
- fish を使ってみて分かったメリットや設定のコツ | blog.ojisan.io
- 6 歳娘「パパ、プロジェクトフォルダを見つけるのに何時間かけるの?」【ghq+fzf+zsh】 - Qiita
- 文化的な fish 環境を得る為の最短ルート - Qiita
- fish と fzf はじめて 豊かになりました / fish and fzf is good - Speaker Deck
- fish で「パスを通す」ための最終解答
- [fish] 展開される alias - abbr - Qiita