@znz blog

ZnZ の memo のようなもの

第80回 Ruby関西 勉強会に参加しました

| Comments

第80回 Ruby関西 勉強会 に参加しました。

以下、メモです。

会場

railsdm できたことのある Aiming さんが会場でした。

オープニング

会場案内など。

mruby搭載ボードGR-CITRUSの新しい開発環境の紹介 @momoonga

  • GR-CITRUS : Ruby プログラム
  • WA-MIKAN : Wi-Fi 通信
  • SAMBOU-KAN : モーター制御 が増えた
  • GR-CITRUS 開発環境 : Visual Studio Code 拡張の Rubic というのが増えた
  • mrbgem の組み合わせのバリエーションが選べる
  • Rubic のデモ
  • WA-MIKAN のデモ
  • SAMBOU-KAN のデモ
  • 「RubyRobo 192.168.4.1」という SSID で接続先 IP アドレスがわかるようになっていた
  • WiFi 接続して操作はうまくいかなかった
  • リリース
  • https://github.com/wakayamarb/wrbb-v2lib-firm/blob/master/rubic-repository.json
  • Release に data.zip
  • Rubic の方にリポジトリを追加してもらうと、後は Release を自由に増やしていける

  • 質疑応答

  • Q: どこで買える?
  • A: 秋月, 独自のネットショップ, 大阪だと共立電子
  • SAMBOU-KAN は扱ってもらえてないので、個人のみ

self を考える @yalab

  • 発表資料: https://www.slideshare.net/yalab/self-86099114
  • https://twitter.com/yalab/status/948112876027256832 rubyでプログラミングされてる方に質問です。selfというものを
  • 正式には、レシーバーを指定しないではなく、レシーバーを省略した
  • いろんな場所での self
  • private メソッドは self. をつけて呼ぶことができない (self.puts "hoge" とか)
  • irb の中で irb "a" でサブ irb に入って self に色々きいてみる
  • self.class とか
  • self.methods.grep /plu/ (String にしなくても grep できる)
  • self.method(:pluralize).source_location (Active Support の場所がでてくる)
  • 質疑応答
  • Q: self の由来は?
  • A: たぶん Smalltalk 由来
  • Q: あえて self をつけたい場合は?
  • A: self.hoge= を呼びたいときとか
  • self.hoge= は private でも呼べる (self. を省略するとローカル変数への代入になるため)

protected でも同じ:

1
2
3
4
5
6
7
8
9
10
% irb --simple-prompt -r irb/completion
>> class A; protected def hoge=(hoge);end;end
=> A
>> irb A.new
>> self.hoge=:hoge
=> :hoge
>> ^D
=> #<IRB::Irb: @context=#<IRB::Context:0x00007fcec08c4ad8>, @signal_status=:IN_EVAL, @scanner=#<RubyLex:0x00007fcec08cce68>>
>> A.new.hoge = :hoge
NoMethodError: protected method `hoge=' called for #<A:0x00007fcec08a5318>

休憩

プロを目指す人のための例外処理(再)入門 @jnchito

  • 発表資料: https://speakerdeck.com/jnchito/number-rubykansai-2018-01-13
  • 西脇から高速バスで2時間
  • 例外と例外処理についておさらい
  • 「ハンマーを持つ人にはすべてが釘に見える」
  • 本当にあった怖い話
  • 例外を握りつぶしていた例
  • 例外処理は使い方を間違えると、害の方が大きくなる
  • できることと、やっていいことは異なる
  • 原則は rescue しない
  • 例外処理のバッドプラクティス
  • 例外の握りつぶし
  • Exception を rescue (普通は StandardError で良い)
  • begin と rescue の範囲が広い
  • 例外クラスを指定しないと NameError や NoMethodError まで捕捉されてしまう
  • 例外処理をテストしない
  • ネットの記事には要注意 (Exception を rescue しているものとか多いらしい)
  • 例外処理のベストプラクティス
  • 原則として rescue しない
  • ログに残したり通知したりする
  • 対象を絞り込む (begin; Date.new(year, month, day); rescue ArgumentError; nil; end)
  • この例なら Date.valid_date? があるので例外処理を使わない書き方ができる
  • 例外処理もテストする
  • 高度なトピック
  • 業務エラーとシステムエラーの区別をすべき
  • 業務エラーには原則として例外を使わない (rails の if @model.save とか)
  • 例外処理をなくしても業務エラーに対処できるか?
  • 使わない実装例: all_success &= (ロールバックも考慮すべき)
  • システムエラーは原則としてフレームワークなどの共通処理に任せる
  • 例外処理とロールバックの関係
  • 「アトミック操作は何か」を常に意識する
  • Rails で複数のレコードを同時に更新する場合: transaction do ... end と業務エラー時に raise ActiveRecord::Rollback で明示的にロールバック
  • 攻めの例外
  • 予期せぬ条件分岐で例外を発生させる
  • else で矛盾する可能性のある値を返すのもバグの元
  • ありえないエラーには強気で (transaction の中で普通はエラーにならない update! を使ってダメならシステムエラー)
  • Q: &=&&= の方が良いのでは?
  • A: 良さそう
  • Q: 素人は rescue すんな!! は他のフレームワークにもあてはまる?
  • A: rails 以外 ruby 以外でもフレームワークに共通処理があるはずなので、あてはまるはず

Ruby 2.5.0 の主な変更点 @znz

発表資料としては特に用意せずに https://docs.ruby-lang.org/ja/latest/doc/news=2f2_5_0.html をみながら気になった点を話しました。

最初に Rabbit Slide Show の過去の発表資料から適当に自己紹介のページだけ開いておいて、自己紹介をした後は、 Ruby 2.5.0 リリース をみながら色々話をして、 時間があるだけNEWS for Ruby 2.5.0をみながら色々話をしていました。

GitLab にコントリビュート @ogomr

休憩

ちょっと用事があったので、外出。

Ruby初級者向けレッスン 64回 - クラス @higaki

グループワークをしている途中で戻ってきました。

クロージング

告知など

  • 2/10(土)に大阪(日本橋)で GR-CITRUS などのミニハッカソン
  • https://dddrb.doorkeeper.jp/ でプロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで 読書会の第2回を2月に予定
  • OSS Gate大阪ミートアップ for React
  • 7月中頃か8月中頃にRubyビジネス推進協議会のイベントが予定されていて、その翌日にRuby関西でもちょっと大きめの勉強会 (関西 RubyKaigi になるか第n回 Ruby関西 勉強会になるかどうかは未定) をする予定なので、スタッフ募集 (興味がある方は Ruby関西のdoorkeeper の問い合わせからどうぞ)
  • 今回の会場の IT勉強会の会場 » Aiming 大阪スタジオ の紹介

懇親会

懇親会は特に事前の募集とかはなく、会場に残ってもらって一緒に移動という感じでした。 実際にいってみると cuzic さんが予想で予約した人数でぴったりだったようでした。

Comments