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

2016-07-09(土)の Yokohama.rb Monthly Meetup #70 に参加しました。

yokohamarb.doorkeeper.jp

参加者は 8 人。内容は次のような感じでした。

  • レシピブック読書会
  • どう書く
  • 吉田飯店で懇親会

レシピブック読書会

今回はレシピ 234 から 237 まで読みました。

レシピ 234

Ruby が require, load するときに参照するパスである ロードパス を制御するレシピです。ロードパスを設定するには、次の三つの方法

  • 環境変数 RUBYLIB
  • オプション -I
  • グローバル変数 $LOAD_PATH ($:)

がありますが、一番下の $LOAD_PATH を使うことが多いという話でした。

パスの区切りは OS によって違う(Windows なら ;, UNIX 系なら :)ので、定数になってるんじゃないかという話が出ました。実際のところ定数 File::PATH_SEPARATOR として存在していて、システムに応じて ;, :, , のどれかが入っているようです。

どの OS で使われるのかわからなかった謎のカンマ , については、次のとおり RISC OS 用に存在していたものだそうです。

レシピ 235

ruby コマンドでスクリプトを実行するときに、バグになりそうな箇所などについて警告を出せます。すべての警告を出すには、次のようにオプションに -w または -W2 を指定します。

$ ruby -w foo.rb

自前で警告を出したいときは、次のようにコードを書くと、オプションに -w または -W2 を指定したときだけ警告が出せます。

warn 'foobar' if $VERBOSE

これは、-w または -W2 指定を指定したとき、$VERBOSEtrue になるからです。

なお、stderr.puts$VERBOSE の値にかかわらず普通に出力されます。

また、require している外部 gem についての警告を抑止するための gem があるという話が出ました。

github.com

レシピ 236

デバッグ関係のレシピです。

ruby コマンドで -d オプションをつけて実行すると、例外発生時に例外をすぐ表示します。また、マルチスレッド環境でどれかのスレッドが例外を投げると、メインスレッドに例外を投げ直してくれます。

処理系組み込みのデバッガもあります。次のコマンドで debugrequire しつつスクリプトを実行すると、デバッガが起動します。

$ ruby -r debug foo.rb

実際には byebug を使うことが多いのではという話でした。

レシピ 237

UNIX 系の OS 上で /etc 次の情報(ユーザ情報やグループ情報)を取得するためのレシピです。

Etc.passwdEtc.group にブロックを渡すと、ユーザ情報やグループ情報を表す Struct::PasswdStruct::Group を順に取得できます。

Etc.passwd do |pw|
  p pw
end

この Etc.passwdEtc.group へブロックを渡さずに実行すると、実行するたびに違う Struct::Passwd オブジェクトが順番に返ってきて、最後までいくと nil が返ってくるようになるという挙動に会場はざわ…ざわ…となってました。

Etc.passwd   # 実行するたびに別の Struct::Passwd が返る

「どう書く」初挑戦

どう書く」というイベントの Yokohama.rb 版として、今回は @Nabetani さん作成の問題「Rails on Tiles」に挑戦しました。

40 分の挑戦時間で解けた人は 2 人でした。私は残念ながら時間内に解けず……

挑戦のあと、@Nabetani さんから解説の時間。

考えをコードへ無理なく落とし込めるようにしていきたいという感じです。Yokohama.rb 的には、こういうイベントではペアプログラミングをすることが多いそうなので、機会があれば参加してみたいですね。

追記:当日考えていた方針(すごくナイーブ)で正しく動くところまで書きました。


次回 2016-08-06(土)の Yokohama.rb は以下リンクから申し込めます。

yokohamarb.doorkeeper.jp