Yokohama.rb Monthly Meetup #75 に参加した

2016-12-10(土)の Yokohama.rb Monthly Meetup #75 に参加しました。

yokohamarb.doorkeeper.jp

次の流れでした。

  • 前半は Ruby レシピブック読書会
  • 後半は LT

今回は、参加者の @Nabetani さんがすでにメモを書いてくださっています。僕もメモしておきます。

qiita.com

レシピブック

今回はレシピ 240 から 243 まで読みました。おもにシステム寄りの Ruby プログラミングについてでした。

レシピ 240

システムのダイナミックリンクライブラリを Ruby から呼ぶためのレシピです。

システムライブラリを呼ぶためのライブラリとして dl が紹介されていますが、これは Ruby 2.0 以降では deprecated になっており、2.2 以降では削除されています。かわりに fiddle を使うとよさそうです。

また、macOS 環境では libc の代わりに libSystem.B.dylib を使う必要があります。

stackoverflow.com

たとえば、次のような感じで標準 C ライブラリの関数としておなじみの strlen が呼べます。

require 'fiddle/import'
module LibSystem
  extend Fiddle::Importer
  dlload 'libSystem.B.dylib'
  extern 'int strlen(char*)'
end
p LibSystem.strlen('abc')  #=> 3

レシピ 242

Ruby 付属のベンチマークライブラリである benchmark についてです。

@igrep さんからベンチマークにより便利な benchmark-ips を紹介してもらいました。与えたブロックの 1 秒あたりの繰り返し回数 (iteration per second: ips) を測定する gem です。評価値が大きいほど評価がよいので、直感的という話などをしていました。

github.com

軽く使いたいなら Benchmark#measure を使っておくと楽そうです。次のように書けます。

require 'benchmark'
puts Benchmark.measure { 'a' * 1_000_000 }

レシピ 243

シェルのコマンドを Ruby から起動するためのレシピです。

@Nabetani さんも書いておられますが、Kernel.#open の引数に | (パイプ)をつけて | df -k のように文字列を渡すと、IO.popen と同じ動きになることにびっくりしました。つまり、任意のコマンドを実行できるということです。この仕様については、次のドキュメントの最初にも

ファイル名 file が `|' で始まる時には続く文字列をコマンドとして起動し、 コマンドの標準入出力に対してパイプラインを生成します

と明記してあります。

さらに、これは macOS でも Windows でも実行できることを、前回に引き続き @igrep さんに Windows 環境で実験してもらいました!

File.open にはこのような仕様がないので、ファイル操作にはこちらを使っておいたほうが、万一のコマンドインジェクションは防げるので安心ということだそうです。

LT

LT 一本目は、先月と話がかなり被るのですが、僕が 10 月に受けていた GMO ペパボの第二新卒向け研修「ペパボカレッジ」について、社のテックブログに書いたエントリをもとにご紹介しました。

LT 二本目は、@ryonext さんから、先日の Re:Invent で発表された AWS のサービス群について紹介がありました。AWS は VPS から人工知能まで幅広いですね……。

懇親会

もう 12 月なので、忘年会と銘打たれていた気がします。来年もよろしくお願いします!!1


次回は 2017-01-14(土)です。次のリンクから申し込めます。ぜひぜひ。

yokohamarb.doorkeeper.jp