カスタムスクリプトの管理

現在弊社の岡本と伊藤が沖縄でWork-cationしています。
羨ましいので、私もブログのネタ作りを兼ねてちょっとどこかにふらっと行こうかな、と考えている前田です。

前回のブログで生産性を上げる為に使いこなしたいコマンドラインアプリケーション集という記事を書きました。
今回はどうやってそれらを使って自分なりにカスタムして使っているかを書こうと思います。

カスタムスクリプトをどう管理すれば良いか

皆さんはちょっとしたカスタムスクリプトなどをどのように管理されていますでしょうか?
ネットに落ちているちょっとしたシェルスクリプトなどは非常に便利ですが、.bashrc.bash_profileなどに書いていくと無秩序な感じになってしまいます。
そこで、どうすれば綺麗に管理出来るか自分なりに考えて、スクリプトを管理するディレクトリを作って役割毎にディレクトリを作り、そこですべて管理するようにしました。
詳細は下記githubに上げています。

https://github.com/maeda11131/.custom_scripts

.bashrc.bash_profile

1
source $HOME/.custom_scripts/scripts.sh

だけ書き、後は.custom_scriptsの中に機能に応じて書いていくだけになっています。

各ファイル・ディレクトリの役割、ルールなど

scripts.sh

パスを通したり、各ファイルの読み込みなど

read_files.sh

スクリプトファイル、データファイルの読み込みなど

alias.sh

エイリアスを管理

scripts

シェル関数を置くディレクトリです。
管理しやすいように、ルールを2点設けています。

  • 1ファイルに1関数を定義する。
  • ファイル名は*.sh形式で定義し、関数名とファイル名を同じにする。

例えばgotoというシェル関数定義がありますが(こちらの記事を参考に作成させて頂きました)、ファイル名はgoto.shとし、関数名はfunction gotoと定義します。
こう定義することによって、scripts listコマンドでどの関数がカスタムシェル関数として定義されているかを表示することが出来るようにしています。

1
$ scripts list
agvi
cdf
goto
jj
repeat
tab
vv

datas

scriptsディレクトリのシェル関数などで使用するデータを定義するファイルを置くディレクトリ。

例えば、goto関数で使用するデータは下記のように定義しておき、初回の読み込みでgoto関数に必要なpaths変数にセットされるようにしています。

1
#!/bin/bash

declare -A paths
paths+=(["s"]=$HOME/.custom_scripts)
paths+=(["project"]=$HOME/project/project_a)
paths+=(["do"]=$HOME/Downloads)
paths+=(["de"]=$HOME/Desktop)
paths+=(["ssh"]=$HOME/.ssh)

これでgoto sと打つと、$HOME/.custom_scriptディレクトリに移動します。
新しいパスを追加したい時はこのファイルに追加するようにします。

また、pecoを使用してdata/peco/ディレクトリ配下に定義したファイルを使ってコマンドのスニペットやパスの管理をしています。
.gitignoredatas/peco/privates/*を指定して、アクセスキーの入ったコマンドスニペットなどをgit管理しないようにもしています。

customs

scriptsディレクトリで定義したシェル関数などを組み合わせたスクリプトファイルを置くティレクトリ。
シェル関数として定義するものにふさわしくない(汎用的でない)スクリプトなどを定義します。
例えば、プルリクエスト処理を自動化するcreate_pull_requestファイルなどを定義しています。
参考
GitHub の Pull Request 発行をもっとスマートに

また、scriptsディレクトリと同じように、customs listコマンドでスクリプトを一覧表示します。

1
$ customs list
create_pull_request
sample_repeat

supports

各シェル関数やカスタムシェルスクリプトなどで使用するサポート的な関数などを置いています。
例えばdata_echo関数はdatasディレクトリに定義しているデータを表示する為の関数です。
直接実行するのではなく、goto関数などから実行しています。

1
$ goto list
do - /Users/maedamasaki/Downloads
de - /Users/maedamasaki/Desktop
ssh - /Users/maedamasaki/.ssh
s - /Users/maedamasaki/.custom_scripts

templates

カスタムスクリプトなどで使用するテンプレートを定義する。

まとめ

以上、私はこんな感じで管理しています、というのを紹介させて頂きました。
ただしあまり便利にし過ぎてそれに慣れてしまったら、カスタマイズ出来ないサーバー環境などでコマンド操作する時などに「あのコマンド何だっけ?」とか困りそうですね。
あんまり変なカスタマイズをやり過ぎないようにします。。

このエントリーをはてなブックマークに追加