お勉強会レポ。 メモだけど 少し整理して、スライドとかもまとめたので、公開。
ハッシュタグ #omotesandorb
参加者さんも多く、サプライズゲストもいたので盛り上がりました。
#テーマ
いつもはデプロイとかテストとか、なんらかの緩めのテーマがあり、
それに沿ったLT会をやって、時間があまれば質疑応答、って流れです。
今回はテーマが「Rubyに関することならなんでもあり」でした
#人数
25人くらい。最近盛況ですね。
#場所
外苑前徒歩0分。すげー立地の会社でした。
オープンスペースで勉強会やってたんだけど
後ろが壁一面本棚でした! ビジネス系起業系だらけ。
下手な本屋さんより充実している可能性。
#Matzがいた
びっくり。
会場提供の会社の顧問をやってるらしく、
今回サプライズゲストで参加されたのだとか。
ぼくが生でMatzのお話聞くのは初めてでした。
エンジニアらしい情熱と、ユーモアさがある親しみやすそうなお方でしたね。
あんまり話できなかったですが。
#DSLホストのお話
発表者:Matz
スライド:(公開していらしたら誰か教えて下さい)
##DSL=ドメイン特化言語
-外部DSL(ホストと違う言語、SQLとか正規表現)
-内部DSL(ホストの文法を濫用(らんよう)したもの)
JSON(JavaScript Object Notation) Rakefile Gemspec RSpec
アプリケーションを開発することは、DSLの開発をするのとほぼ同意
by 達人プログラマーの人
- 文法
- 括弧を省略できるとか
- 語彙
- メソッド
- スコープ
- describe "test" do ~ end
- ネストできるのは結構偉大なこと。
なんでできるか?
中でinstance_execする
するとselfが変わる
インスタンス変数@varが変わる
濫(らん)用できる
抽象度を高くできるとうれしい。
Rubyはやりすぎ?
ちょうどいい点を探すのは難しい。
えいやでやってみないと分からない。
ソフトウェア開発において、たのしいは正義
(正義!)
#RubyのAST(抽象構文木)入門
発表者:神速さん
スライド:https://qiita.com/sinsoku/items/d112d7eee4283a38f70e
Rubyがコードを解釈する順番みたいな?
Ripperで分解できるよ
実務で役立つASTとしては
Rubocopに新しいルールを拡張するのがオススメ!
(Rubocopが静的解析するときも、このASTを使ってるのか、なるほど、って当たり前か)
誤検知の話。
Rubocopはメソッド名しかみてないので継承関係みてない。
型推論の夢
(Java使いとしては面白いなーと思った。いちいち型書かなくてもいいのが
こういう言語のいいところじゃん!それをわざわざ逆いくのかー。
でもまあ、静的解析が誤検知するのはアレだし、型書いても書かなくてもいい、
って形が実現できるならありかも。一方Java10は逆にvar採用したりしてる。
「ガチガチの型言語」vs「スーパーフリーダム言語」ではなく、
中間のちょうどいい型推論の模索が今アツいのかな?)
#仕様かバグかわからんRubyをなおす
発表者:うなすけさん(@yu_suke1994)
スライド:https://github.com/unasuke/omotesandorb-34
CASHを作ってる会社の人。
#AST見たい
ruby hoge.rb --dump=parsetree
だと見れるけど
ruby test.rb --dump=parsetree
は見れない
なんでだろう。いろいろ調べてるとMatzによる贅沢なレビューが始まる(笑)
##答え 「仕様」 by Matz
コマンドラインの問題で ruby test.rb --dump=parsetree
で--dump=parsetreeオプションはtest.rbに渡っちゃう。
##正解
ruby --dump=parsetree test.rb
#E2EのテストをRSpecとCapybaraでやっちゃうプロトタイプ
発表者:@mokuoさん
スライド:https://speakerdeck.com/mokuo/e2e-prototype-capybara
##ColdFusion
- 自動テスト一切なし
- 毎回手動テスト
- つらみ(わかる)
・リーダーも課題感あった(うちには課題感ないです)
##ページをクラスに見立てる
(Seleniumも練習したいんだけどなー)
#GraphQLを使ってみたお話
1ページ複数のリクエスト
↓
1ページ1APIでやればいいのでは?
(きつくね?)
APIエンドポイントが増えてつらい(やっぱり)
##そこでGraphQLです
Facebookががんばってるらしい。
フロント側でどういう表示をするかを定義できる。
APIに対してのクエリ言語の1つ
(要はネストでAPI叩けるってこと?)
##グラフ理論
一筆書きが可能か?
最短経路とか?
(セールス巡回問題とか?)
##Rubyでの書き方
field
edgesとnode
N+1問題が起きやすい?
まだ実用的でない?
(Facebookは1ページに何十とAPIリクなげたりしてそう。認証だけですごそう。
コレの恩恵がでかいのかも。
一方で、Rails使いはマイクロサービス指向なので、そんなにメリットないかも。わかんないけど。)
#byebugにプルリク出した話
発表者:@tzm_freedomさん
スライド:https://www.slideshare.net/tzm_freedom/cbyebugpr
デバッグどうやってる?
byebug派か RubyMine派か?
Ruby2.5で Rails5.2から入ってるbootsnapを使うと
RubyVM::なんとかでTracePointのコールバックが効いてない説
名前空間区切ってるんだからバッティングしないはず。
byebug全部読んでみた(すごい)
後半ついていけずorz
結論から言うと、debaseが外部呼び出し可能extern宣言?してたから
byebugとかぶってしまったのが悪かった?
解決策はバッティングした名前を変更プルリクした。無事マージされた。
Matz「debaseの書き方の方がちょっとお行儀悪いかも」
##オチ
byebugオーナー「あーdebaseからforkしたんだよね :)」
Rails on Docker
発表者:@bigplantさん
スライド:https://speakerdeck.com/bigplants/rails-on-docker
OpsDevとかの話
##無限ステージングの夢
空気を吸うようにデプロイしたい
(お、おう?)
ビルドは1秒でも早い方がいい
(せやな)
##ビルド高速化Tips
- Gemfileなどに変更がない場合はスキップできるよう先にCOPYする技
キャッシュが効くように順番とか気をつける。
まず必要なものを全部入れる
そしていらないのを削除する
1.5Gから500MB! これはでかい。
- docker history で
どこが容量食ってるか分かる
(あんまりやりすぎると変なバグ出そう)
-
docker buildではenv渡せない
(API_KEYを生で書いたりするからかな?) -
ARGで書く
-
assestがネックになる?ならない?
(自分、ビルド以降の話ぜんぜん知らないんだなあと感じた)
#懇親会
Matzのナッツ食べながらRubyの話とかしてました。
楽しくて終電逃しそうになったけど間に合いました。
会場提供してくださったビジネスバンクさんありがとう。