Macでクリップボードの文字を、ターミナルからRubyの即席ワンライナーで処理する

〜ある日のこと〜

Flutterプロジェクト作ろうとしたらめちゃくちゃ怒られた。

$ flutter create FlutterSandbox

"FlutterSandbox" is not a valid Dart package name.

From the [Pubspec format description](https://www.dartlang.org/tools/pub/pubspec.html):

**DO** use `lowercase_with_underscores` for package names.

Package names should be all lowercase, with underscores to separate words,
`just_like_this`.  Use only basic Latin letters and Arabic digits: [a-z0-9_].
Also, make sure the name is a valid Dart identifier -- that it doesn't start
with digits and isn't a reserved word.

DO use lowercase_with_underscores for package names.

Flutterさん激おこやんけ...

で、どうやらFlutterプロジェクトはファイル名もsnake_caseで書くことが多いらしいことがわかった。

本題

Flutterのチュートリアルをこなすときに、ファイル名はできるだけチュートリアルの名前をそのまま使うようにしたい。

例えば以下のようなチュートリアルだったら、navigate_to_a_new_screen_and_back.dartという風にしたい。(ちょっと長いけど)

flutter.dev

でも、チュートリアルのタイトルはNavigate to a new screen and backといった感じで、snake_caseで記述されていない。

絶対に手打ちしたくない

クリップボードにコピーされた文章を、いい感じにワンライナーで。でもシェルスクリプトも書きたくないので、Rubyでやった。

$ pbpaste
Navigate to a new screen and back

$ ruby -e "puts '`pbpaste`'.gsub(' ', '_').downcase"
navigate_to_a_new_screen_and_back

いい感じ。

バッククォートでくくるとそこだけ展開してくれるので、クリップボードの文字列がpbpasteに格納される。それをシングルクォートでくくってStringとして認識させ、あとは置換してdowncaseするだけで完成。

おわりに

別に難しい処理じゃないしsedとかawkとか使えよって言われたらそれはそうなんだけど、普段使い慣れているツールをこういう場面でコソッと使いこなせると結構楽しい。