Ruby でワンライナー2020-03-13 Ruby みやざき #1桑畑英資
View Slide
⾃⼰紹介self_introduction = {name: "桑畑英資",age: 36,job: "フリーランスエンジニア",fav_language: %w(Scala Elm Ruby),comment: <<-EOS.gsub(/^ */, ""),⼤学のときにRubyを使う授業でRubyに触れて慣れ親しむ。その後にJavaなどにも触れたが、オブジェクト指向の⾔語としてはRubyの⽅が好きだった。更にその後Scalaを知ったので(以下略)今でもツールの⽤途でRubyは触っている。EOStwitter_id: "@mather314"}
ワンライナーとはOne-liner、⼀⾏で動くコードPerl ではよくある話シェルスクリプトでもよくある話grepとか、 sedとか、 awkとか、etc...最近だと pecoとかも使えるから可能性が広がって捗る例: 空のディレクトリに .gitkeepを作るワンライナーfor f in $(find . -type d -empty | grep -v '.git/') ; do echo "$f/.gitkeep" ; done(実際に実⾏するときは echoを touchにする)
Web フレームワークばかり使ってませんか?Ruby は汎⽤プログラミング⾔語です当然ですがスクリプトとして利⽤できますREPL (irb, pry)mruby など組み込みにも利⽤されている
極端な例として今回はワンライナーを紹介実は rubyコマンドにはいろいろな便利オプションがあります-e: ⽂字列をスクリプトとして実⾏する-r: ライブラリを読み込んで実⾏する (require)-n, -p: while gets; ... ; endのように囲んだ状態で動作する「それ Ruby じゃなくてもできるよ!」というツッコミは(知ってるので)無視します
単体で$ ruby -e 'puts "Hello,world!"'Hello,world!$ ruby -e 'puts [*1..10].shuffle.join(", ")'2, 1, 4, 9, 10, 7, 6, 8, 5, 3
標準⼊⼒と$ cat lorem.txtLorem ipsum dolor sit amet, consectetur adipiscing elit, ...$ cat lorem.txt | ruby -e 'puts $<.read.split(" ").map(&:capitalize).join(" ")'Lorem Ipsum Dolor Sit Amet, Consectetur Adipiscing Elit, ...$<: 標準⼊⼒をファイルとしてアクセスできるreadの他、 each, readlinesとかも便利。
ライブラリも使って$ seq 1 100 | ruby -r prime -n -e 'puts $_ if Prime.prime?($_.to_i)'2357111317192329313741434753596167717379838997
ご清聴ありがとうございました