2016-07-09(土)の Yokohama.rb Monthly Meetup #70 に参加しました。
参加者は 8 人。内容は次のような感じでした。
- レシピブック読書会
- どう書く
- 吉田飯店で懇親会
レシピブック読書会
今回はレシピ 234 から 237 まで読みました。
レシピ 234
Ruby が require
, load
するときに参照するパスである ロードパス を制御するレシピです。ロードパスを設定するには、次の三つの方法
- 環境変数
RUBYLIB
- オプション
-I
- グローバル変数
$LOAD_PATH
($:
)
がありますが、一番下の $LOAD_PATH
を使うことが多いという話でした。
パスの区切りは OS によって違う(Windows なら ;
, UNIX 系なら :
)ので、定数になってるんじゃないかという話が出ました。実際のところ定数 File::PATH_SEPARATOR
として存在していて、システムに応じて ;
, :
, ,
のどれかが入っているようです。
PATH環境変数の要素のセパレータ。 https://t.co/lAWAYm9mSB #yokohamarb
— みよひで@大阪マラソン走ります (@miyohide) 2016年7月9日
どの OS で使われるのかわからなかった謎のカンマ ,
については、次のとおり RISC OS 用に存在していたものだそうです。
@miyohide 1.9以降では削除されてしまったけど、おそらくはRISC OS
— なかだ の (@n0kada) 2016年7月9日
レシピ 235
ruby
コマンドでスクリプトを実行するときに、バグになりそうな箇所などについて警告を出せます。すべての警告を出すには、次のようにオプションに -w
または -W2
を指定します。
$ ruby -w foo.rb
自前で警告を出したいときは、次のようにコードを書くと、オプションに -w
または -W2
を指定したときだけ警告が出せます。
warn 'foobar' if $VERBOSE
これは、-w
または -W2
指定を指定したとき、$VERBOSE
が true
になるからです。
なお、stderr.puts
は $VERBOSE
の値にかかわらず普通に出力されます。
また、require
している外部 gem についての警告を抑止するための gem があるという話が出ました。
レシピ 236
デバッグ関係のレシピです。
ruby
コマンドで -d
オプションをつけて実行すると、例外発生時に例外をすぐ表示します。また、マルチスレッド環境でどれかのスレッドが例外を投げると、メインスレッドに例外を投げ直してくれます。
処理系組み込みのデバッガもあります。次のコマンドで debug
を require
しつつスクリプトを実行すると、デバッガが起動します。
$ ruby -r debug foo.rb
実際には byebug を使うことが多いのではという話でした。
レシピ 237
UNIX 系の OS 上で /etc
次の情報(ユーザ情報やグループ情報)を取得するためのレシピです。
Etc.passwd
や Etc.group
にブロックを渡すと、ユーザ情報やグループ情報を表す Struct::Passwd
や Struct::Group
を順に取得できます。
Etc.passwd do |pw| p pw end
この Etc.passwd
や Etc.group
へブロックを渡さずに実行すると、実行するたびに違う Struct::Passwd
オブジェクトが順番に返ってきて、最後までいくと nil
が返ってくるようになるという挙動に会場はざわ…ざわ…となってました。
Etc.passwd # 実行するたびに別の Struct::Passwd が返る
「どう書く」初挑戦
「どう書く」というイベントの Yokohama.rb 版として、今回は @Nabetani さん作成の問題「Rails on Tiles」に挑戦しました。
40 分の挑戦時間で解けた人は 2 人でした。私は残念ながら時間内に解けず……
挑戦のあと、@Nabetani さんから解説の時間。
考えをコードへ無理なく落とし込めるようにしていきたいという感じです。Yokohama.rb 的には、こういうイベントではペアプログラミングをすることが多いそうなので、機会があれば参加してみたいですね。
追記:当日考えていた方針(すごくナイーブ)で正しく動くところまで書きました。
次回 2016-08-06(土)の Yokohama.rb は以下リンクから申し込めます。