こんにちは。本日も昨日に引き続き RubyKaigi に参加してきたので、レポートしたいと思います。
My way with Ruby (by Kouhei Sutou)
2日目のkeynoteです。テンションの低い「おはようございまーす」の声から始まりました。
- 「私のRubyist活動」
- RSS/Atom parser with validation
- 宣伝:コード懇親会
– Matzさんも参加します! - REXML
- Rabbit
– Rubiestのためのプレゼンテーションツール
– RD(Ruby Document)サポート
– Rabbit Slide Show
– Rabbitはすごい - test-unit
- テストフレームワーク
- 逆順のバックトレース
- Rurema(るりま)
- Apache Arrow Ruby
- Red Arrow
- Red Data Tools
– Wikipediaに対応
It’s Rubies All The Way Down (by Kirk Haines)
- What is a “Stack”?
- The Ruby Bits
- IOWA?
- IOWA!
- Rails!
- FCGI Bitterness
- Mongrel
- Briefly Book in IOWAland
- More Ruby In My Stack!
- Pure Ruby Stack
- Asynchronous Logger
- Still Running Today…
- Front End Proxy/LB
– Twitter, Facebook - Static Asset Caching
- Webserver For Static Assets
– $ ruby -run -e httpd – -p 8080 .
– Puma + Rack vs NGINX - Database
- Key/Value Store
– Roma - Deployment
- Other Stuff?
- Boston Host/Logged SSH Bolwerk
- Wrapping Up
- Would You Want To?
- Why Might This Be Crazy?
- Thanks to Cookpad
Improve Ruby coding style rules and Lint (by Koichi ITO)
このセッションでは、Rubocop にまつわる様々なことについて話していました。
- Rubocop 使ってないけど一番作ってる
- 「皆さん、これ(Rails)知ってますか? 知ってますよね?」
- Rubocop やってる
– バグ修正などしている - esm 朝ごはんスポンサー
- 2007年 何があった?
– Dave Thomas 来日 - Ruby のコードは多様性がある
- Rubocop にも公式ドキュメントはある!
- cop 作った 19個!(すごい!)
Part1
- Style と Lint の違いについて
- Ruby では多くのスタイルが存在
- Rubocop のデフォルトは、「Ruby Style Guide」という本に沿って設定されている
- Rubocop の Style は変えていい!
– rubocop.yml を編集 - Style は好みによって色々変わってくるもの
- 一方 Lint は?
- Style ほど設定多くない
- 例)UnifiedInteger とか
- ERB.new 警告が出る
- 警告でも良いかもしれないが、-w の場合は警告がうもれる
- 一方、Rubocop は対象のリポジトリを指定できるのでGood
- Style は文化、好きにしていい。Lint は従っておいたほうが良さそうなものの集まり
Part2
- 実装はAST
- ruby-parse
- Rails app 以外にも適用?
- それ Style じゃね?
– Style/Mixin#5261 としてマージ - cop を作ったら、GH/rails/rails リポジトリで走らせて、大丈夫かどうか調べておくのが良さそう
Part3
- MiniTest
- assert_not
- Rubocop に Rails の人が来るようになった
- Rubocop と Rails 役割違う
- 「Rails / OSS パッチ会」 が開催されますのでぜひ参加してください
mruby can be more lightweight (by Yurie Yamane)
mruby でのメモリ使用量削減について、発表されました。
- VSCode は OSS って言いつつ一部のコードが公開されてない
- 実演
- Today’s topic
– 組み込み、mruby
– メモリが潤沢じゃない環境 - nucleo で mruby を動かしたい!
- F411RE と F401RE がある
– F401RE の方が有名で、情報も多い
– でもメモリ量が少ない - Cの関数はROM上で良い、Rubyは動的に定義されることがあるため困る
- 今回、mruby のRAM使用量を削減することに成功
RAM から ROM へ
- ROM に持っていけるものは持っていこう!
– 動的ではないメソッド
– シンボルもROM - クラス内メソッドをハッシュではなく配列で定義
– 実行時のメソッドの検索が遅くなる代わりに、メモリ使用量が少なくなる
– 静的に定義されるメソッドは多くないだろうし多少は大丈夫そう - このあたりの話について詳しく知りたい方は「Rubyのしくみ」を読んでください
- ハッシュはどうしても空バケツができてしまい、メモリの無駄
→ 配列にしよう! - Ruby のメソッドと C の関数を id で結びつけ
- RAM を先に見に行く、定義されていなければ ROM を参照
- しかし、お気付きのとおり、remove_method で メソッドを消せないという問題がある
Firmware programming with mruby/c (by Hitoshi HASUMI)
mruby/c とマイコンを用いた酒造での IoT について、解説されておりました。
- このセッションは、主に初心者に聞いてほしい
- それから、お酒の好きな人に聞いてほしい
- mruby/c について
– 今回は、単に「エムルビー シー」と発音することにします - マイコンでのtask・・・Linuxで言うところのスレッド
- 旭日酒造(十旭日というブランド)
- なぜラズパイではなくマイコンを使ったのか?
– ブート速い(0.5秒くらい)
– セキュリティイシューを狭める 良い
– 低消費電力、発熱が少ない(重要)
– 酒造は 35℃、湿度 70% なんてことも
– ラズパイだと発熱が不安
– 低コスト、マスプロしやすい - CYPRESS PSoC5LP を使用
- 他のマイコンでも mruby/c は動かないことはないが、動くマイコンは(現時点では)あまり無い
- 現状の mruby/c
– インスタンス変数がない(最近できた?)
– each がない
– ステップ実行ができない - mrubyc-utils
- 始まったばかりの mruby/c ですが、宜しくおねがいします。
RNode with code positions (by Yuichiro Kaneko)
2.5系から追加された話
- 以下のようなものは、ソースコードの位置についての情報を使っている
– Exception 発生場所
– Warning の発生場所 - 2.5系からは、行番号だけではなく、カラムの情報を持つ
- Ruby はゼロベース
- また、位置はバイト数で表している
- 以下のようなものは、ソースコードの位置についての情報を使っている
– Exception 発生場所
– Warning の発生場所 - 2.5系からは、行番号だけではなく、カラムの情報を持つ
- Ruby はゼロベース
- また、位置はバイト数で表している
ブランチカバレッジとは?
- 分岐でどのブランチを実行したか
- どれくらいカバーしているか
- 3項演算子は1行だったりして分かりづらい
– 1行に2個の3項演算子があるともっと分かりづらい
ASTについての話
- ruby –dump=p
- 抽象構文木
- $1, $2, $3 で値を受け取れる
- ruby –dump=i
ここから実装の話
- 実装してみた
- AST の各ノードに対して位置情報を持つ
- parser_params
- @1, @2, @3 で受け取れる
- 「反対意見が無いなら入れちゃえば?」と言われた
– (会場拍手) - Ruby-VM-AST
– Conference Driven Development - というわけで、最近の Ruby は文字位置を持つようになりました
- NoMethodError が行内のどこで起きたか分かるようになった
Type Profiler: An analysis to guess type signatures (by Yusuke Endoh)
Ruby 2.6 に向けた成果
endless range
- (
1...
) とかけるようになった
–ary[1..-1]
って書いたり
–ary.drop(1)
って書いていたのを
–ary[1..]
と書けるように! - 他にも
–1.step{|i| ...}
を(1..).each
と書けたり
–i=1; ary.each{...; i+1}
をary.zip(1..){|x,i| ...}
と書けたり - beginless については実装はできたけど、入れるかどうかは matz がどう言うか次第?
Ruby3’s Type
- 詳しく知りたい方は「型システム入門」をどうぞ
- Ruby の既存の型解析って?
– Steep
– RDL
– contracts
– dry-types
– Sorbet - 今日はRDLについて主に
- Ruby は意味のない値を返すことがある
– 型解析で void 型がほしい! - static type check で annotation は別ファイル、というのが Matz の希望らしい
- TypeDB という方法
- Type Profiler の紹介
– Ruby では厳密な type inference は無理
→ Type Profiler という名前を付けた - ヒューリスティックに解析
- 静的解析は速くて良い
- しかし解析の限界がある
- 動的解析は簡単になんでも解析できるが遅い
Ruby Committers vs the World (by CRuby Committers)
ピンクのシャツを着た Ruby コミッターが登壇し、Ruby の話題について対談を行いました。
Ruby 2.6.0 Preview 2 について
- Ruby 2.6.0 Preview 2 がリリースされました
- JIT が入っています!!
– 「(Preview 1 よりも)Preview 2 の方がずっと速いんで試してください!!」 - AST が入ったよ
– parse.y でパースできる
– 使ってね! - RubyGems3 が入った
- Endress Range が入った
- $SAFE が process global になった
– 未来には消える方向で(笑) - Preview 3 では元々のバックトレースが出てくる機能入れたい
Q. リファインメント消しますか?
- 消しません!!
- でも、便利にするため、変わることはあるかも
autoload やめろよというチケットについて
- 移行パス消せないね、という話になるのでは
- autoload 遅い!
- rails console とか遅い
- irb irc で autoload 使ってる人~?
– (ちらほら挙手)
– 「あんまりいないね・・・じゃあ消して良いのでは?」 - 「まつもとさん、1回rails使ってみたら良いんじゃないですか?(笑)」
yield_self
- 名称の代替案ある人~?
– 「thenってどうですか?」「全然よくないですね!(笑)」 - まつもとさん「thenが良い」
– みんな反対してた
– そしたら、自分で入れた - (登壇者に対して)なぜ then が嫌なんですか?
– キーワードと同じだし、promise で被る - 矢印ラムダのときも反対したよね
– 何年かに一回こういうことが起こる - (座席に対して)then が良いと思う人~?
– ちらほらいるじゃん!
– 「矢印ラムダのときより(賛成している人が)多い気がする」 - 「then が嫌な人は、今のうちに Matz を取り囲めばなんとかなるかもしれません」
method メソッド
- 第一候補:
map(&Math.:sqrt)
、each(&.:puts)
map(&Math\.sqrt)
でも良いけど、今更バックスラッシュ使うのはちょっと- 下線を付けたり、太字にしたりと、会場では色々な案が出されました
Beginless Range について
- SQL の DSL で使うと便利
–where(id: (..10))
- 実装はやってみたら出来た
- 便利ではあるものの、each をどうするか
- 良いユースケースがあれば教えてください
- 「Rails 勢としては入れてほしい」
SO_ORIGINAL_DST
- Linux には入っているのに glibc には入ってない
- 入れてもいいけど、入れる必要もあまりないのでは
while else
- while の後に else が書ける
- break されると else 内のコードは実行されない
- Python にはある
- rescue を end が付くやつ全部付けていいことにする、みたいな話
- どっちを入れるか
– while に else が欲しい人は今のうちに!
2日目の感想
色々と知らないことがあったので勉強になりました。またカジュアルな雰囲気のセッションも多く、とても楽しむことができました。明日も頑張ります。