自作コマンドを作ってみる~頻用ディレクトリへの移動簡略化~

2024.06.28.金
技術

お久しぶりです、開発部の石原です。

日々の業務の中で、よく使うファイルやディレクトリというものが存在します。Tabでの補完があるとはいえ、長いものをいちいち入力するのはなかなか面倒です。
初めのうちはスニペットを登録して呼び出していたのですが、数が増えてきてついに覚えきれなくなったため、自作コマンド化してみました。
今回つくったのは、頻用ディレクトリにエイリアスをつけ、部分一致を使って簡単に移動できるコマンドです。

流れ

  1. エイリアスとフルパスのリストをcsvで作る
  2. エイリアスを選んだら、該当するディレクトリに移動する
  3. これをcdd(cd directoryの略)という自作コマンドにして、いつでもターミナルで呼び出せるようにする

やったこと

絞り込み部分にはpecoというツールを使いました。
同じことにチャレンジしたい方はこちらをあらかじめ入れておいてください。

homebrewの入ったmacであれば、以下のコマンドでインストールできます。


pecoとは?

対話的に選択肢を選べるのが特徴の、部分一致での検索機能がついたテキストフィルタリングツールです。
lsやcatの結果をpecoにかけると、絞り込んでの選択が可能になるため、目的の情報を探すのがとても楽になります。


遷移先ディレクトリのリストを作る

短縮名と実際の値のペアをCSVファイルに登録しておきます。
今回はディレクトリのパスにしていますが、コマンドのオプションなどでも使えると思います。


コマンドの実態を作る


ターミナルで常時使えるように設定

私はzshを使っているため、 ~/.zshrc を編集します。
bashユーザなら.bashrc や .bash_profileに書いてください。


動きを見る

csvに書いたリストの中から、該当の文字を含むエイリアスだけを表示し、そのディレクトリに移動できるようになりました。
動画の内容は以下の通りです。

  1. ~/に移動(通常のcdコマンド)
  2. cddコマンドを実行
  3. sampleを部分一致で検索し、選択
  4. sampleをエイリアスに設定してあるディレクトリに移動
  5. doc_rootを部分一致で検索し、選択
  6. doc_rootをエイリアスに設定してあるディレクトリに移動
cddコマンド利用例

cddコマンド利用例


今回のディレクトリはデモ用なのでありがたみがあまりありませんが、案件ごとのディレクトリの奥深くにある設定ファイルを一発で開いて編集したいケースなどには重宝します。

余談

cdd.shの中ではなく、cddコマンドの中にフォルダ移動処理を入れたのには理由があります。
スクリプト内でcdしても、スクリプト実行完了後に元のディレクトリに戻ってしまうからです。
このことになかなか気づかず、実装時は苦戦しました。


echoした結果を使ってcd

今回のケースです。今までのシェル上に帰ってこられるので、シンプルかつ合理的だとおもいます。

シェルスクリプト内でcd

cdd.sh内のecho部分を変更し、以下のように新規シェルを開かせれば、ターミナル上でも移動後のフォルダに残ることができます。
ただ、サブシェルが開いた状態になるので、cdd.shを実行するたびにシェルがどんどん入れ子になってしまいます。
ターミナルを閉じる時にいちいち確認されるため、操作性としてもいまいちです。推奨しません。


おまけ

今回のコーディングにはChatGPT3.5に手伝ってもらいました。
このように質問をすると、今回のようなスクリプトを教えてくれます。

folder_alias, folder_full_path という形式のcsvファイルを作り、これを使って対話的にディレクトリ移動をできるようにしたいです。
csvファイルの各行の1項目を表示し、pecoで選択し、2項目(パス)にcdで移動するシェルスクリプトを書いてください。

石原加奈子

石原加奈子

2019年入社、開発部所属。 主にWebFileの開発に携わっています。 自由時間にjavascriptやshellscript,、PHPなんかを使って効率化ツールを作るのが好きです。