はじめに
最近、Claude Codeなどの自律型AIエージェントや、CLIベースの強力な開発ツールをワークフローに組み込む機会が急激に増えてきました。
AIがターミナル上で自律的にコードを生成し、コマンドを叩いてテストを回してくれる現代において、開発者にとっても、「CUI(ターミナル)を中心としたシームレスな開発体験」の重要性が、以前にも増して高まっています。
しかし、WSL2(Ubuntu)のターミナルを開いた直後、cdとlsを繰り返して目的のプロジェクトを探したり、~/Documents/GitHub/や~/workspace/の下に様々なリポジトリが無秩序に散らかっていたりしませんか?
かつてはghq + pecoの組み合わせでディレクトリを管理するのが定番でしたが、現在はより高速で 圧倒的に強力な「プレビュー機能」 を持つfzfを組み合わせるのがモダンなベストプラクティスです。
本記事では、Mac向けの情報が多いこの組み合わせを、WSL2 (Ubuntu) 環境へ最適に導入する手順 から 「ターミナル上でリポジトリの中身をのぞき見し、選択した瞬間にVS Codeが立ち上がる最強のショートカット を設定するまでを解説します。
1. ghqの導入と基本設定
ghq は、Gitリポジトリをホスティングサービス(GitHubなど)のドメインやユーザー名ごとに整理して自動配置してくれる神ツールです。
Goのインストール(※要注意トラップ)
Ubuntu環境では、Goを使ってインストールするのが最も確実です。
ただし、ここで単に sudo apt install golang-go を実行すると古いバージョンのGoが入ってしまい、ghqのインストール時にエラーになることがよくあります。
これを防ぐため、Go言語公式Wikiでも推奨されているPPA(最新版のリポジトリ)を追加してからインストールします。
# 最新のGoを取得するためのPPAを追加
sudo add-apt-repository ppa:longsleep/golang-backports -y
sudo apt update
# 最新版のGoをインストール
sudo apt install golang-go -y
ghqのインストール
最新のGoが入ったら、以下のコマンドで ghq をインストールします。
同時に、インストールしたツールをターミナルからすぐに呼び出せるよう、~/.bashrc へのPATH追記と反映までを一気に実行してしまいます。
# ghqのインストール
go install github.com/x-motemen/ghq@latest
# Goでインストールしたバイナリ(~/go/bin)へのパスを通す
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.bashrc
# 設定を現在のターミナルに反映
source ~/.bashrc
ghqのルートディレクトリ設定
クローンしたリポジトリをどこに保存するかを設定します。今回は~/ghqをベースにします。
git config --global ghq.root ~/ghq
【重要】自動的にSSHプロトコルでクローンさせる設定
GitHubからリポジトリをクローンする際、後々コミット時にPGP署名(GPG署名)を行うことや、認証の確実性を考慮すると、HTTPSではなく SSH でセキュアにクローンしたい場面が多くあります。
しかし ghq の仕様上、ghq get (アカウント名)/(リポジトリ名) と短縮形で指定して実行すると、デフォルトではHTTPS通信(https://github.com/... )として解釈されてしまいます。
これを「自動的にSSHでのクローン」に変換させるため、Gitの insteadOf という機能を設定しておきます。
git config --global url."git@github.com:".insteadOf "https://github.com/"
この設定を1行入れておくだけで、以降は ghq get mfunaki/my-repo と打った際にも、裏側で自動的に git@github.com:mfunaki/my-repo.git として解釈され、SSH経由でスムーズにクローンが行われるようになります。
2. fzf の導入
fzf はターミナル上の出力をインクリメンタルサーチできるフィルタツールですが、単なる曖昧検索ツールだと思っていませんか? 実は、fzfの真骨頂は「プレビュー機能」にあります。
Ubuntuの apt で入るバージョンは古いことがあるため、公式推奨のGitクローン経由でのインストールがおすすめです。
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
インストールを実行すると、途中で以下の3つの質問(対話プロンプト)が表示されます。基本的にはすべて y (Yes) を入力して進めてください。
-
Do you want to enable fuzzy auto-completion?
(あいまい検索による自動補完を有効にしますか?) -
Do you want to enable key bindings?
(履歴検索などのキーバインドを有効にしますか?) -
Do you want to update your shell configuration files?
(.bashrc 等の設定ファイルを自動更新してよろしいですか?)
3. 【準備】プレビュー用のモダンツールを導入
fzf のプレビュー画面をリッチにするため、モダンなファイルツリー表示ツールである eza (旧 exa の後継) をインストールしておきます。
sudo apt update
sudo apt install eza -y
4. 【本命】ターミナルから爆速で移動&プレビュー&VS Code起動
ここからが本番です。
「ghq で管理しているリポジトリを fzf で検索し、右側のプレビュー画面でディレクトリ構造を確認してから、移動と同時にVS CodeのRemote-WSLで開く」という一連の動作を、ショートカットキー一発で呼び出せるようにします。
お使いのシェルの設定ファイル(~/.bashrc または ~/.zshrc)の末尾に、以下のスクリプトを追記してください。
# ghq + fzf 連携関数(プレビュー機能付き)
function cd-ghq() {
# ezaを使って右側にディレクトリツリーをプレビュー表示する
local dir="$(ghq list --full-path | fzf --reverse --height 50% --prompt='Select Repo > ' --preview 'eza --tree --level=2 --color=always --icons {}')"
if [ -n "$dir" ]; then
cd "$dir"
echo "Moved to $dir"
# そのままVS Codeで開く
code .
fi
}
# Ctrl + g で呼び出せるようにキーバインドを設定 (Bash用)
bind '"\C-g":"cd-ghq\n"'
(zsh をお使いの場合は、キーバインド行を zle -N cd-ghq と bindkey '^g' cd-ghqに書き換えてください。)
追記したら、source ~/.bashrc で設定を反映させます。
動作確認
ターミナル上で Ctrl + g を押してみてください。
リポジトリの一覧と同時に、その中身(ツリー構造)が右側にプレビューされます。カーソルキーで上下に移動するだけで、エディタを開く前に「あ、このプロジェクトだ」と一瞬で判断できます。
Enterを押せば、そのディレクトリへ移動すると同時に、自動的にVS Codeが立ち上がります!
やっぱやめた(これじゃない)という時には、Esc キーで抜けられます。
思考のスピードでプロジェクトを切り替えられる、最高に気持ちいい体験の完成です。
ワンポイント: fzfを入れたら絶対に使うべき「Ctrl + R」
インストール時にキーバインドを有効化すると、Ctrl + R でコマンド履歴のあいまい検索ができるようになります。
これが今回構築した「リポジトリ移動(Ctrl + G)」と最高のコンボになります。
先ほどの Ctrl + G で目的のリポジトリを選択すると、即座にVS Codeが立ち上がりますよね。その直後、VS Codeの内蔵ターミナルを開いて Ctrl + R を押し、run や test などと打つだけで、「前回そのプロジェクトで叩いた長いビルドコマンドや、テスト起動コマンド」を1秒で呼び出して再実行できます。
また、Claude CodeなどのAIエージェントに投げた「長文の指示プロンプト」も、キーワード検索で一瞬で復元できるため、相性は抜群です。
カーソルキーの上矢印 ↑ を連打して履歴を遡る日々は、今日で終わりにしましょう!
終わりに(次回予告)
WSL2上のターミナルから一瞬でVS Codeを開けるようになると、AIを活用した開発スピードは劇的に上がります。
しかし、この環境でいざ git commit をしようとした際、「パスフレーズの入力画面がバグってコミットできない(WSL2/Ubuntuにいるつもりなのに command not found 等になる)」 という、VS Code内蔵ターミナル特有の恐ろしい罠が待ち受けていることがあります。
次回は、この「WSL2 × VS Code の Git認証トラップ」を、Ubuntu純正のGUIダイアログ(WSLg)を使ってスマートに完全解決する方法を解説します!
もし今回の記事が少しでもお役に立てましたら、いいねやストック、アカウントをフォローしてお待ちいただけると、次回の執筆の大きな励みになります!
