カスタムスクリプトの管理
現在弊社の岡本と伊藤が沖縄でWork-cationしています。
羨ましいので、私もブログのネタ作りを兼ねてちょっとどこかにふらっと行こうかな、と考えている前田です。
前回のブログで生産性を上げる為に使いこなしたいコマンドラインアプリケーション集という記事を書きました。
今回はどうやってそれらを使って自分なりにカスタムして使っているかを書こうと思います。
カスタムスクリプトをどう管理すれば良いか
皆さんはちょっとしたカスタムスクリプトなどをどのように管理されていますでしょうか?
ネットに落ちているちょっとしたシェルスクリプトなどは非常に便利ですが、.bashrc
や.bash_profile
などに書いていくと無秩序な感じになってしまいます。
そこで、どうすれば綺麗に管理出来るか自分なりに考えて、スクリプトを管理するディレクトリを作って役割毎にディレクトリを作り、そこですべて管理するようにしました。
詳細は下記githubに上げています。
https://github.com/maeda11131/.custom_scripts
.bashrc
か.bash_profile
に
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
コマンドでどの関数がカスタムシェル関数として定義されているかを表示することが出来るようにしています。
$ scripts list
agvi
cdf
goto
jj
repeat
tab
vv
datas
scriptsディレクトリのシェル関数などで使用するデータを定義するファイルを置くディレクトリ。
例えば、goto
関数で使用するデータは下記のように定義しておき、初回の読み込みでgoto
関数に必要なpaths
変数にセットされるようにしています。
#!/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/
ディレクトリ配下に定義したファイルを使ってコマンドのスニペットやパスの管理をしています。
.gitignore
にdatas/peco/privates/*
を指定して、アクセスキーの入ったコマンドスニペットなどをgit管理しないようにもしています。
customs
scriptsディレクトリで定義したシェル関数などを組み合わせたスクリプトファイルを置くティレクトリ。
シェル関数として定義するものにふさわしくない(汎用的でない)スクリプトなどを定義します。
例えば、プルリクエスト処理を自動化するcreate_pull_request
ファイルなどを定義しています。
参考
GitHub の Pull Request 発行をもっとスマートに
また、scripts
ディレクトリと同じように、customs list
コマンドでスクリプトを一覧表示します。
$ customs list
create_pull_request
sample_repeat
supports
各シェル関数やカスタムシェルスクリプトなどで使用するサポート的な関数などを置いています。
例えばdata_echo
関数はdatas
ディレクトリに定義しているデータを表示する為の関数です。
直接実行するのではなく、goto
関数などから実行しています。
$ goto list
do - /Users/maedamasaki/Downloads
de - /Users/maedamasaki/Desktop
ssh - /Users/maedamasaki/.ssh
s - /Users/maedamasaki/.custom_scripts
templates
カスタムスクリプトなどで使用するテンプレートを定義する。
まとめ
以上、私はこんな感じで管理しています、というのを紹介させて頂きました。
ただしあまり便利にし過ぎてそれに慣れてしまったら、カスタマイズ出来ないサーバー環境などでコマンド操作する時などに「あのコマンド何だっけ?」とか困りそうですね。
あんまり変なカスタマイズをやり過ぎないようにします。。