1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コマンドを簡略化したい

Posted at

最近コマンドの抽象化・簡略化について色々と学ぶ機会があったのでそれについて書いていきます。

きっかけ

同じチームの人とペアで作業している時に、その人がごく短いコマンドを実行したら

  • 特定の作業ディレクトリで VSCode が起動
  • ファイル名に今日の日付の入った markdown 形式のファイルが生成される

といったことが実現されており、サッとメモを取りたい時にすぐに VSCode が起動できる状態になっていることに気づき、ちょっと真似したくなったのでやってみました。

実装してみる

上記のことを実行したければ、それらのコマンドをまとめてシェルスクリプトにしてコマンドラインから実行できるようにすればいいので稚拙ながら書いてみたシェルスクリプトがこちら。

markdown.sh
# !/bin/sh

cd ~/Documents/markdown
if [ ! -d ./`date '+%Y%m'` ]; then
    mkdir `date '+%Y%m'`
fi
code ./`date '+%Y%m'` `date '+%m%d.md'`

単純に cd で作業ディレクトリに移動して、今月のディレクトリが存在していなければ作成して、今日の日付の markdown ファイルをオープンしています。
で、このシェルスクリプトに実行権限を付与し、 ~/.zshrc に alias を追加すればいい感じに。

chmod 755 markdown.sh

md というコマンドを実行すれば上記のシェルスクリプトが実行されるようにしてみます。

alias md='sh ~/markdown.sh'

設定を反映

source ~/.zshrc

この状態で実際に md と実行してみると、以下のように今月のディレクトリの中で今日の日付のファイルが生成された状態で VSCode が起動しました。

スクリーンショット 2020-04-24 16.04.10.png

応用

これだけだと味気ないのでもう 1 つ具体例を。
例えば、業務で扱う AWS アカウントが複数あったりして Profile をその都度切り替えなければならないケースは結構あると思います。
S3 にファイルをコピーする場合、

aws s3 cp {file_path} s3://{bucket_name}/

のようなコマンドを実行します。
このコマンドの場合、オプションで Profile の指定を行っていないので実行環境でセットされているデフォルトの AWS アカウントのキーが使用されます。
デフォルトとは別の Profile を使う場合は

aws s3 cp {file_path} s3://{bucket_name}/ --profile {profile_name}

のように --profile オプションで対象の Profile を指定します。
この場合はそこまでコマンドが複雑じゃないのでそのまま書いて実行してしまえばいいですが、無理やりコマンド化してみます。

# !/bin/sh
function s3cp () {
    aws s3 cp ~/test_data/test.txt s3://sample_bucke_name/ --profile $1
}

引数に実行する AWS アカウントの Profile を指定する s3cp という関数を作りました。
これを .zshrc などに記述すると実行できるようになります。

この状態で

s3cp sample_profile

と実行すると、実際には

aws s3 cp ./test.txt s3://sample_bucket_name/ --profile sample_profile

というコマンドが実行され、 sample_bucket_name~/test_data/test.txt がコピーされます。
ちょっと例があんまりよくなかった気もしますが、実行するコマンドの長さを比べるとだいぶスッキリしたと思います。

複雑なコマンドだったり、頻繁に実行するコマンドはこのような形で抽象化することができればコマンド実行時の typo や「このコマンドのオプション何だっけ…」と毎回 help を確認する手間が少しでも省けると思います。

まとめ

今回、冒頭で述べた出来事がきっかけでコマンドの抽象化、簡略化について興味が湧いたのでごく簡単な内容ですがやってみました。
特に markdown の方は作業ログを付けながらやるときには大変便利になりました。

抽象化することで複雑なコマンドをいちいち書かなくてもよくなってコマンドを間違えるリスクも減りますし、誰が実行しても同じコマンドが実行されるようになるのでメリットも多いと思います。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?