uuidgen コマンドをちょっとだけ便利にする

justInCaseTechnologiesのエンジニアの Otani です。

開発でユニークな識別子が必要な場面が時々あり、そのような場面で Universally Unique Identifier - UUID を使うことが多いです。

tl;dr

uuidgen に以下のような、エイリアスを設定して、UUID を簡単にペーストできるようにしてます。

alias uuidgen='uuidgen | tr "[:upper:]" "[:lower:]" | tr -d "\n" >/dev/stderr | pbcopy'

uuidgen コマンド

macOS には uuidgen というコマンドがあり、UUID が必要な場面で使っています。

$ uuidgen
B2907FAD-2DCC-49AC-9178-8206876A6175

基本的にはこのように大文字の出力されるのですが、私個人は小文字での表記になれているので、小文字を使いたいところ。また、出力された文字列をいちいち選択してコピーするのも面倒。

エイリアス設定

という訳で、以下のようなエイリアスを設定しています。

alias uuidgen='uuidgen | tr "[:upper:]" "[:lower:]" | tr -d "\n" >/dev/stderr | pbcopy'

uuidgen した内容をパイプで渡しながら、小文字変換したり (tr "[:upper:]" "[:lower:]")、末尾改行なくしたり (tr -d "\n") して、クリップボードに格納します (pbcopy) 。

ちょっとだけ工夫したのは、結果を stderr にも出力するようにしているところ。

alias uuidgen='uuidgen | tr "[:upper:]" "[:lower:]" | tr -d "\n" | pbcopy'

でもやりたいことは実現できるのですが、結果がターミナルに表示されなくなり、ペーストするまでどんな UUID が得られたのか分かりません。

なので、 stderr に出力することもよって結果もターミナル上で確認できるようにしています。

使い方

標準で用意されている uuidgen を上書きしているので、単に uuidgen と実行すれば良いだけです。

$ uuidgen
2df3da7d-287b-4301-ad0f-b07607f01b4b

ちなみに私個人は .zshrc

setopt magic_equal_subst

を指定しているので、 =uuidgen で元の uuidgen を実行できるようにしています。

$ =uuidgen
E34C966D-7BF1-4CBD-B989-C638302104F3

追記 2021.11.22

zsh / bash なら tee コマンドを使っても同様のことができるようです。

alias uuidgen='uuidgen | tr "[:upper:]" "[:lower:]" | tr -d "\n" | tee >(pbcopy)'

stderr に余計な出力しないので、こちらの方がよいかもしれません。

参考 : コマンドの結果を画面とパイプの両方に渡す方法

追記