Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rubyでワンライナー / One-liner on Ruby

mather
March 13, 2020

Rubyでワンライナー / One-liner on Ruby

mather

March 13, 2020
Tweet

More Decks by mather

Other Decks in Programming

Transcript

  1. Ruby でワンライナー
    2020-03-13 Ruby みやざき #1
    桑畑英資

    View Slide

  2. ⾃⼰紹介
    self_introduction = {
    name: "
    桑畑英資",
    age: 36,
    job: "
    フリーランスエンジニア",
    fav_language: %w(Scala Elm Ruby),
    comment: <<-EOS.gsub(/^ */, ""),
    ⼤学のときにRuby
    を使う授業でRuby
    に触れて慣れ親しむ。
    その後にJava
    などにも触れたが、
    オブジェクト指向の⾔語としてはRuby
    の⽅が好きだった。
    更にその後Scala
    を知ったので(以下略)
    今でもツールの⽤途でRuby
    は触っている。
    EOS
    twitter_id: "@mather314"
    }

    View Slide

  3. ワンライナーとは
    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
    にする)

    View Slide

  4. Web フレームワークばかり使ってませんか?
    Ruby は汎⽤プログラミング⾔語です
    当然ですがスクリプトとして利⽤できます
    REPL (irb, pry)
    mruby など組み込みにも利⽤されている

    View Slide

  5. 極端な例として今回はワンライナーを紹介
    実は ruby
    コマンドにはいろいろな便利オプションがありま

    -e
    : ⽂字列をスクリプトとして実⾏する
    -r
    : ライブラリを読み込んで実⾏する (require)
    -n
    , -p
    : while gets; ... ; end
    のように囲んだ状
    態で動作する
    「それ Ruby じゃなくてもできるよ!」というツッコミは
    (知ってるので)無視します

    View Slide

  6. 単体で
    $ ruby -e 'puts "Hello,world!"'
    Hello,world!
    $ ruby -e 'puts [*1..10].shuffle.join(", ")'
    2, 1, 4, 9, 10, 7, 6, 8, 5, 3

    View Slide

  7. 標準⼊⼒と
    $ cat lorem.txt
    Lorem 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
    とかも便利。

    View Slide

  8. ライブラリも使って
    $ seq 1 100 | ruby -r prime -n -e 'puts $_ if Prime.prime?($_.to_i)'
    2
    3
    5
    7
    11
    13
    17
    19
    23
    29
    31
    37
    41
    43
    47
    53
    59
    61
    67
    71
    73
    79
    83
    89
    97

    View Slide

  9. ご清聴ありがとうございました

    View Slide