Omotesando.rb#92に参加しました!

こんにちは!もとひろです。

12月7日にOmotesando.rb#92に参加しました!
【オフライン開催】Omotesando.rb #92 - connpass
技術系オフラインイベントに参加すること自体初めてで、ただいるだけなのにめちゃくちゃ緊張しました。笑
参加しての感想などを記録しておきます。

最初の自己紹介

最初に全員自己紹介をしました。(焦りました笑)
あぁこの企業聞いたことあるな、とか、作ってるって言ってたもの聞いたことあるな、とか自分なりに色々思いながら自己紹介を聞いていました。
自分が自己紹介したときに、「フィヨルドブートキャンプで学習しています」と言うと、「あぁあそこね」という雰囲気でみなさん知ってるんだなとちょっと驚きました。
学習中であってもあたたかく迎えてくださる感じがありがたかったです。

LTの感想

LTの内容に関しては正直ついていけてなく、単語をメモすることで精一杯でした。
それでもみなさんの熱意を直に感じることができたので、オフラインでLTを聴けて良かったなと思いました。

以下LTの感想&自分で調べた事等追加で記録してます。
途中に自分の感想が入ってしまっているので感想部分は文字色を変えました。

MNTSQ株式会社様

(もんてすきゅー)
簡単に言えば「契約書のGitHub」を提供している。
過去の契約に至るやり取りや履歴等を全部残しておくことができるので、後々プロジェクトに参加した人でもなぜこの契約はこのように締結されているのかがわかりやすいとのことです。
会場ありがとうございました!

OKURA Masafumiさん

FBCのアドバイザー、Kaigi on Railsのチーフオーガナイザー

Albaにきたissue、からのrender jsonの話

Alba

Okuraさん自作のgem
okuramasafumi/alba: Alba is a JSON serializer for Ruby.

Alba is a JSON serializer for Ruby, JRuby, and TruffleRuby.

直訳:Alba は、RubyJRuby、および TruffleRuby 用の JSONリアライザーです。
シリアライズとは:直列化(serialize)。オブジェクトとそのインスタンス変数をバイト列やXMLに変換すること。 これにより、オブジェクトをファイルとして保存したり、ネットワークで送信することができるようになる。

本題

Albaにきたissue、からのrender jsonの話
元のissue
renderのオプションにlocationを使うとwarningがでるというissue
renderの中身…
この辺から難しくてついていけてませんでしたが、後日調べるうちに関連してそうなOkuraさんのQiitaの記事を見つけました。
RailsがJSONをレンダーするときに何が起きているのか #Rails - Qiita
上記リンク内のこの部分

add内の1行目で引数が文字列でなければto_json(options)を呼ぶようになっています。

を示して「これを覚えて帰って」って最後おっしゃってたと思います。

gemにissueがこんなふうに来て、こうやって調査して解決していくんだな、ということを知れてよかったです。

神速さん

「CircleCIの高速化」

CircleCI

CircleCI について - CircleCI
いまさらだけどCircleCIに入門したので分かりやすくまとめてみた #CircleCI - Qiita
色々読んでみましたが難しかったです…

CIを速くするアイデア

ソースコードの変更がない場合、テストを実行する必要がない
ソースコードの変更がない:fast-forward、コミットメッセージ変更しただけ
DynamicConfigration :CircleCiの機能、生成したYAMLでCIを実行

CircleCI(CIとかCDとか)の理解が全然足りませんでした。
私はRailsi18nでしかYAMLを使ったことがなかったので、YAMLでいろんなことができるんだなぁと驚きました!

euglena1215さん(ゆーぐれなさん)

Railsでエンドポイントごとのテストカバレッチを測定する」

テストカバレッチ:

テストカバレッジ(test coverage)とは、ソフトウェアテストの進捗を表す尺度の一つで、テスト対象のソースコードのうち、どの程度の割合のコードがテストされたかを表すもの。

テストカバレッジ(コードカバレッジ)とは - 意味をわかりやすく - IT用語辞典 e-Words

なぜやろうと思ったのか

Railsアップグレードでの動作確認は手動でしなくて良い。テストカバレッジが高い
例外:社内向けの管理画面は手動での動作確認が必要(テストカバレッジが低いから)→テストを増やす必要がある
やみくもにテストを増やすのではなく、指標が欲しい。
→どの指標がより正確か

CodeLineCoverageを指標としてみた

CodeLineCoverage:テスト中に実行されたコードと実行されていないコードを区別し実行された割合を算出
LineCoverageと一緒?
テストカバレッジをフローチャートで確認する
分岐網羅ってみたことある…と思ったらプラクティスでちゃんとやってた!
ホワイトボックステストにおけるカバレッジとテストケース
ActiveAdmin:Railsプラグイン。簡単に管理画面を作りたい時に作れるgem。9つのエンドポイント(≒機能)が定義される。
Active Admin | The administration framework for Ruby on Rails
このファイル(app/admin/users.rb)が読み込まれただけで全ての行が実行されたことになってしまう(テスト書いてなくても通ってしまう)
数行でいくつもの画面を生成できるので、機能数とコードの行数が比例しない。
→ActiveAdminを使った管理画面ではCodeLineCoverageを指標にするのは不適切

EndPointCoverage(造語)を指標とした

ActiveAdminにおいて機能数に比例するのはエンドポイント。
実現方法
Railsのroutes相当の情報を取得:Rails.application.routes.routes初めてみた!

Rails.application.routes.routes.map do |route|
  path = route.path.spec.to_s.gsub('(.:format)', '')
  { verb: route.verb, path: }
end

テストファイルを読み込みルーティングに対応するテストを抜き出す。
上記2つのデータを合わせて、テストされている・されていないエンドポイントを分けて割合を出す。

先日テストのプラクティスをやったので、コードの内容は難しかったけれどなんとなく言っていることの流れは少し掴めた気がしました!
テストカバレッチとかは実際に仕事では重要な話だけど、学習中にはあまり出てきていないので面白かったです!

まいむさん

ワンライナーfizzbuzz

ワンライナー:一行で書かれたコマンドの組み合わせ。

試作

$ seq 100 | awk '$1%15==0{print "FizzBuzz"}$1%5==0{print "Buzz"}$1%3==0{print "Fizz"}$1%15{print $1}'

seq:連続した数字の列を出力するコマンド
awk パターン{アクション}:パターンにマッチしたときにアクションを実行。アクションはテキスト処理を記述。
実行結果: 

$1に入った数値が%15%5%3そのままprintと全部経由していくので、%5に該当してBuzzが出てもそのあとに5が出てしまっている

1つめ

さっきのものに条件分岐を追加。

$ seq 100 | awk '{ if ($1%15==0)print "FizzBuzz"; else if ($1%3==0)print "Fizz"; else if ($1%5==0)print "Buzz"; else print $1; }'

実行結果:OK! 

2つめ

$ seq 100 | sed -e '3~3s/.*/Fizz/' -e '5~5s/.*/Buzz/' -e '15~15s/.*/FizzBuzz/'

sed 'コマンド/引数/フラグ' 対象ファイル:非対話型エディタ。指定したファイルをコマンドに従って処理する。
-esedで複数のコマンドを指定する際に使用する。
s:指定されたパターンに基づいて行を置換するコマンド。sed 's/置換前文字列/置換後文字列/フラグ'
.*正規表現で任意の文字列。

実行結果:OK! 

こちらを再現する上で全然想定通りではないことがあったのですが、そちらはまた別の機会に記事にしたいと思います。

3つめ

$ seq 100 | sed -e '15~15c\FizzBuzz' -e '3~3c\Fizz' -e '5~5c\Buzz'

c:指定した行をテキストに置換する。
scの違いは、sは指定された文字列のみ置換し、cは指定された行まるごと置換する。
実行結果:OK! 

4つめ

$ seq 100 | ruby -ne 'if $_.to_i%15==0; puts "FizzBuzz" elsif $_.to_i%5==0; puts "Buzz" elsif $_.to_i%3==0; puts "Fizz"else puts $_ end'

-e:引数に記述されたRubyのコードを実行するためのオプション
-n:標準入力の内容を一行ずつ読み込む
$_: nオプションで読み込んだ文字列が格納される変数
実行結果:OK! 

そもそもワンライナーというのを全く知らず、1行でFizzBuzzが出力できるんだということに驚きました!
そしてLinuxのコマンドを自分はほとんど知らないなと今回再現してみて思いました。
シェル芸ってすごい!

雑談会

みなさん優しい方ばかりでした!
覚えていることを箇条書きで書きます。
vimに移行したい→neovimっていうのがある
Rubyはリリースした後リリースパーティがある(だいたいクリスマス後らへん)
・Ruby3.4のitの話題(この話っぽい
・企業研修でフィヨルドでお世話になりました〜という方がいた
フィヨルド卒業生のmaimuさんに聞きたかったことを色々伺いました!ありがとうございます!

自分からあまり話したりはできなかったので、次はもっといろんな方にお話を伺えるようにしたいなぁと思いました。

おわりに

長くなってしまいました…。
もし間違っている箇所等あればご指摘いただければ幸いです。

参加してみて、みなさんの熱量を感じられて自分もモチベーション上がったし楽しかったので、またイベントに参加してみたいと思っています!
行って良かったです!


終わります👋