概要
だいぶ遅れてしまいましたが、UEC Advent Calender 2019 の1日めの記事です。 今日は、日常で使用しているリポジトリ移動用に作成したシェルスクリプト関数の紹介をします。
本文
ソースコードの管理は、Go言語のフォーマットに従って次のようなディレクトリ構造としています。 私は、ghq コマンドを使用して、リポジトリの管理をしているので、ghq のルートして、${gowork}を指定しています。
# 説明に不要なディレクトリは、省略しています。 ${gowork}/ +--- bin/ # 作成したバイナリファイル +--- pkg/ # Go言語の依存パッケージ +--- src/ # すべての言語のソースコード +--- github.com/${github_user}/${repository} +--- golang.org/ +--- ...
この方式は、ソースコードが1箇所にまとめられて管理が楽なのですが、リポジトリ間の移動が少々不便です。
ghq look
で移動することも可能ですが、その場合新規にシェルのプロセスが起動してしまうので移動を繰り返すと自分がghq look して起動したプロセス内にいるのか、最初に起動したシェルのプロセス内にいるのか分からなくなってしまいSSH等でリモートから接続している際には誤って接続を切ってしまうことがあります。
これを防ぐため、シェルのプロンプトにghq look で起動されたシェルのプロセスのときのみ GHQ
のような文字列を表示する方法もありますが、私は普段次のようなシェルスクリプト関数を定義して同一のプロセス内で移動するようにしています。
# Change Repository directory なので、cr としました。 cr() { local dir dir=$(find "${GOPATH}/src/" -name ${1:-.} -prune \ -o -type d -print 2> /dev/null | fzf +m) && cd "$dir" }
関数の内容的には、find
コマンドで${GOPATH}/src/
以下のディレクトリのリストを作り、fzf コマンドに流し込んでいるだけの簡単なものです。
ターミナルで cr
関数を呼ぶと、fzf のファジー検索が始まるので、一致したディレクトリを選択して Enter を入力すればそのディレクトリに cd
してくれます。
本当なら、.gif
ディレクトリを除いて検索をしたいのですが、うまくできなかったので今はこれで妥協しています。
その他
fzf
と ghq
コマンドは、はてなサマーインターンに行ってから使うようになりました。
gif 画像を作るために、ttyrec
, ttygif
, ttyplay
コマンドを初めて使ったのですが便利ですね。