表参道.rb #34 行ってきた

お勉強会レポ。 ~~メモだけど~~ 少し整理して、スライドとかもまとめたので、公開。

ハッシュタグ #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ページ複数のリクエスト
↓

１ページ１APIでやればいいのでは？
（きつくね？）

APIエンドポイントが増えてつらい（やっぱり）

##そこでGraphQLです
Facebookががんばってるらしい。

フロント側でどういう表示をするかを定義できる。

APIに対してのクエリ言語の１つ
（要はネストでAPI叩けるってこと？）


##グラフ理論
一筆書きが可能か？
最短経路とか？
（セールス巡回問題とか？）

##Rubyでの書き方

field

edgesとnode

N+1問題が起きやすい？

まだ実用的でない？

（Facebookは１ページに何十と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とかの話

##無限ステージングの夢

空気を吸うようにデプロイしたい
（お、おう？）

ビルドは１秒でも早い方がいい
（せやな）

##ビルド高速化Tips

- Gemfileなどに変更がない場合はスキップできるよう先にCOPYする技
キャッシュが効くように順番とか気をつける。

まず必要なものを全部入れる
そしていらないのを削除する

1.5Gから500MB! これはでかい。

- docker history <image> で
どこが容量食ってるか分かる

（あんまりやりすぎると変なバグ出そう）

- docker buildではenv渡せない
（API_KEYを生で書いたりするからかな？）

- ARGで書く

- assestがネックになる？ならない？

(自分、ビルド以降の話ぜんぜん知らないんだなあと感じた）


#懇親会

Matzのナッツ食べながらRubyの話とかしてました。
楽しくて終電逃しそうになったけど間に合いました。

会場提供してくださったビジネスバンクさんありがとう。