第16回 Rails Girls Tokyoに参加しました!

3月1日、2日に第16回 Rails Girls Tokyoにスタッフとして参加させていただきました!

参加した感想を記録として書いていきます。

参加する上での自分の目標とその結果

  • みなさんに挨拶をする
    当たり前のことなのですが…
    普段私が学習しているフィヨルドブートキャンプ(以下FBC)のメンターさん・アドバイザーさんがコーチとして参加されていたので、オフラインでお会いする機会は私にはなかなかなかったので認知してもらおう!という気持ちでご挨拶しました。
    また、Organizerのエモリさんは、私がRubyKaigiで参加させていただくエモリハウスの家主さんでもあるので、事前にしっかりご挨拶したいと思っていました。

    結果FBCのメンターさん・アドバイザーさんはもちろん、エモリさんやOmotesando.rbの方、参加者の方やスポンサーの方など、たくさんの方にご挨拶して、たくさんお話させていただきました!🙌
    オフラインイベントへの参加回数もそれほど多くなく、たくさんの人と話したことがなかった私にはとても良い経験でした!

  • 良い刺激をもらってくる
    最近は体調を崩したりしたこともあって、学習に対してなかなか気持ちが低空飛行な感じだったので、このイベントで良い刺激をもらいたいなと考えていました。
    結果として、学習への熱量、コミュニティの暖かさを感じ、全てが自分にとってやる気を上昇させる良い刺激でした!🔥

スタッフとしてやったこと

  • 会場設営や受付など
    オーガナイザーのえんじぇるさんや会場のSTORESさんの方々がかなりやってくださっていたので、スタッフとしてあまり機能できていなかったように思います…
    もっと自分から仕事を探してテキパキ仕事するべきだったなと反省しています。

ワークショップについて

私はRailsGirlsのイベントに参加したことがなかったので、イベントの流れも勉強になりました!
RailsGirlsガイドに沿ってWebアプリケーションを構築していきます。
コーチとGirls (参加者)の方が1対1で進めていきます。
チームは事前に分かれていましたが、誰が誰を担当する等組み合わせは当日の座った席で決めていたようでした。
私はスタッフでみなさんが学習している周りを(たまに)巡回していましたが、コーチの方々の熱量はもちろん、参加者の方々もすごく真剣で、かつ和気藹々としていて楽しそうに作業していました!✨
そして学びが多くて、私も一緒に学びたい…と巡回しながら常に思ってました😭
最後にWebアプリが完成して集合写真のとき、参加者の方々がとても笑顔で嬉しそうで、それを見ていた私もとても嬉しい気持ちになりました!😄

スポンサーLT&コーチLT

スポンサーLTでは、11社のスポンサーの方々がお話してくださいました。
FBCでは聞いたことのない企業さんのお話が聞けて、面白かったです👀
LTの中で、「RailsGirlsで参加者だった人がエンジニアになってその後もRailsGirlsイベントのOrganizerをやってくれている」というお話がありました。このお話を聞いて最初はとても驚いたのですが、イベントを終えてRailsGirlsのコミュニティの居心地の良さを私も感じたので納得でした!
またプログラミングは仕事として書くコードだけではなく、自分自身の生活上での問題を解決するものを作ったり、あるいは自分が楽しむためにコードでアートを描いたりもできるんだよ、ということも知ることができて勉強になりました!
最後の松田さんのお話では、Rubyコミュニティのお話が聞けてRubyKaigiに参加するのが楽しみになりました!

全体を通しての感想

RailsGirlsのオフラインイベントに参加するのは初めてだったので緊張していましたが、
私と同じFBCで学習する受講生の方々がスタッフだったので強かったです!

最後の懇親会でコーチも参加者もみんなで楽しくわいわい雑談していて本当に良いコミュニティだと思いました!
RailsGirlsのコミュニティの暖かさを直に感じられて本当に楽しかったので、またぜひ参加したいです!🙌

Organizerのえんじぇるさん、maimuさん、エモリさん、コーチのみなさん、スタッフのみなさん、STORESのみなさん、スポンサーの方々、参加者のみなさん
本当にありがとうございました!

おまけ

2日目のイベント終了後体力がなくなってしまい、二次会に参加できませんでした…
(帰りの電車は寝過ごしたり出口を間違えたりでなかなか家に着きませんでした)
RubyKaigiのときはもっと長丁場ですし自分が参加したいイベントに参加できないのは悲しいので、5月までに体力をつけようと思いました!🏃‍♀️

Ruby の ===

Ruby3.3リファレンスマニュアルで主要なクラスだけ調べた。

経緯

昨日の「勝手にモブプロ」で、Rubyにも===あるよねって話が出てた。
そうだっけ?なにするんだっけ?って思ったので調べた。

結論

Objectクラスで===は定義されている。デフォルトはObjectクラスの==と同じ。
=====は、各クラスの性質に合わせて各クラスで再定義されている。

=====と異なる意味で再定義されている主要なクラス↓
・Range
Regexp
・Proc
・Module

case when式when===を呼び出している。

詳細

Objectクラスの == と ===

根本的なところ

==

Object#== (Ruby 3.3 リファレンスマニュアル)

オブジェクトと other が等しければ真を返します。
デフォルトでは equal? と同じオブジェクトの同一性判定になっています。

つまりobject_idが等しければtrueを返す。

このメソッドは各クラスの性質に合わせて再定義すべきです。多くの場合、オブジェクトの内容が等しければ真を返すように(同値性を判定するように)再定義されることが期待されています。

この部分は下記のおまけに記載。

===

Object#=== (Ruby 3.3 リファレンスマニュアル)

デフォルトでは内部で Object#== を呼び出します。

==と同じくobject_idが等しければtrueを返す。

case 式で使用されるメソッドです。制御構造/case も参照してください。

case式に関しては以下。
制御構造 (Ruby 3.3 リファレンスマニュアル)

case whenをifにすると===がみえてくる

case 式0
when 式1, 式2
  stmt1
when 式3, 式4
  stmt2
else
  stmt3
end

は以下とほぼ等価

_tmp = 式0
if 式1 === _tmp or 式2 === _tmp
  stmt1
elsif 式3 === _tmp or 式4 === _tmp
  stmt2
else
  stmt3
end


=== が ==と異なる再定義をしているもの

Range

Range#=== (Ruby 3.3 リファレンスマニュアル)
始端と終端のなかにあるときにtrueを返す。
内部ではRange#cover?が実行されている。
(2.5以前はRange#include?だった)

(1..10) === 10     #=> true
(1...10) === 10    #=> false

("a".."b").include?("a")    #=> true
("a".."b").include?("ab")   #=> false
("a".."b").cover?("ab")     #=> true
("a".."b") === "ab"         #=> true
Regexp

Regexp#=== (Ruby 3.3 リファレンスマニュアル)
文字列との正規表現マッチを行う。マッチしたときはtrueを返す。

/\A[a-z]*\z/ === "HELLO"  #=> false
/\A[A-Z]*\z/ === "HELLO"  #=> true

"HELLO" === /\A[A-Z]*\z/  #=> false
#逆はダメなので注意
Proc

Proc#=== (Ruby 3.3 リファレンスマニュアル)
Procオブジェクトを実行して結果を返す。

proc = Proc.new{ | a , b | a * b }

proc.call(2, 5)     #=> 10
proc[2, 5]          #=> 10
proc === [2, 5]     #=> 10
Module

Module#=== (Ruby 3.3 リファレンスマニュアル)
指定のオブジェクトがそのクラスかそのサブクラスのインスタンスであるときtrueを返す。

class Mikan < Object
end

class Arita < Mikan
end

mikan = Mikan.new
arita = Arita.new

Object === mikan   #=> true
Mikan === mikan    #=> true
Arita === mikan    #=> false
Object === arita   #=> true
Mikan === arita    #=> true
Arita === arita    #=> true

mikan === Mikan    #=> false
#逆はダメなので注意

おまけ

== は 人の目で同じならtrue、に再定義がほとんどっぽい

たしかにequal?==がちょっと意味が違うクラスがほとんど。
人の目でみて同じならtrue、という意味に再定義されている。

Integer

Integer#== (Ruby 3.3 リファレンスマニュアル)

1 == 2            #=> false
1 == 1.0          #=> true
1.equal?(1.0)     #=> false

1はIntegerクラスで1.0はFloatクラスだが、==はtrueになる

Array

Array#== (Ruby 3.3 リファレンスマニュアル)

array = [ "a", "c", 7 ]

array == [ "a", "c" ]             #=> false
array == [ "a", "c", 7 ]          #=> true
array.equal?([ "a", "c", 7 ])     #=> false
Hash

Hash#== (Ruby 3.3 リファレンスマニュアル)

hash = { 1 => :a, 2 => :b }

hash == { 1 => :a }               #=> false
hash == { 2 => :b , 1 => :a }     #=> true
hash == { 2 => :b , 1.0 => :a }   #=> false 

{ :x => 1 } == { :x => 1.0 }      #=> true 
Range

Range#== (Ruby 3.3 リファレンスマニュアル)

range = (1..2)

range == (1..2)                #=> true
range == (1...2)               #=> false
(1..2) == Range.new(1.0, 2.0)  #=> true
range.equal?(1..2)             #=> false
Regexp

Regexp#== (Ruby 3.3 リファレンスマニュアル)

a = /\d\d\d/

a == /\d\d\d/    #=> true
a == /\d{3}/     #=> false
a.equal?(/\d\d\d/)   #=> false

終わりに

るりま読んでこれ書いたけど、チェリー本にがっつり書いてあった…。

===がどのように定義されているか分かるとwhen節の条件部に何を書くか明確にできる。(気がする)

完全未経験から現在フィヨルドブートキャンプで学習中。
自分で気になったところの記録(メモ)です。
間違い等あればご指摘いただければ幸いです。

参考リンク

library _builtin (Ruby 3.3 リファレンスマニュアル)

2024.2.12~2024.2.18【週報】

今週の振り返り

目標と成果

目標 成果 反省・感想
JSクラスの課題のOKをもらう 👍
バイトがある日も最低1時間は勉強する ○? 一応やったけど…

やったこと

今週の学習時間

学習時間:31時間30分
学習日数:7日

今週あった出来事&感情

  • 初めてのLT会に参加!
    自分の知らないことも多くとても興味深く聞かせていただきました〜!

  • 家族が発熱しコストコ行くの中止
    コロナ陽性…

  • 私も土曜から発熱しバイト休む
    数年ぶりの発熱…

来週の目標

  • はやく元気になる

来週の予定

  • 前職上司の退官を祝う会に参加する
    なので絶対に元気にならないといけない…


    頑張ろう!

2024.2.5~2024.2.11【週報】

今週の振り返り

目標と成果

目標 成果 反省・感想
Omotesando.rb#94の参加記録記事を書く ⚪︎ 👍
バイトがある日も最低1時間は学習する × 3日できた…
(提出物が返ってきたらそれの修正に取り掛かる) ⚪︎ 💪

やったこと

  • JSクラス課題修正
    命名難しい…

  • 自作npm着手
    JSクラスの課題が返ってくるまでのあいだ、少し自作npmのことを考えてました。
    イデア出しがなかなか難しいなと感じています…

  • Omotesando.rb参加記録投稿
    今回も知らないことがたくさんあって勉強になりました🙏
    参加記録:Omotesando.rb#94にオンライン参加しました!

  • Rails輪読会参加
    Gitフック機能、RuboCopオプション、Brakeman
    バイトで1回しか参加できず…😭

  • リーダブルコード輪読会参加
    条件文の引数順、三項演算子
    早期リターン、ガベージコレクション、ネスト、continue

今週の学習時間

学習時間:22時間45分
学習日数:6日
週5でバイトしてましたが、目標をたてたことでなんとかPCに向かうことができました。
(日曜日は心折れましたが…)

今週あった出来事&感情

  • たくさん稼働延長(残業)した結果、体がボロボロになった
    倉庫でのアルバイトのため肉体労働が中心なのですが、残業まで頑張った結果体がボロボロになりました。苦笑
    来週は加減してやりたいと思います。

来週の目標

  • JSクラスの課題のOKをもらう

  • バイトがある日も最低1時間は勉強する
    朝起きてバイト前に勉強する方がいいのかもしれない…💡

来週の予定

  • 懸命にバイトする…

  • 家族でコストコに行く

Omotesando.rb#94にオンライン参加しました!

2月1日にOmotesando.rb #94に参加しました!
【オフライン開催】Omotesando.rb #94 - connpass
都合で今回は初のオンライン参加をしました。
参加しての感想・自分で調べたことを記録しています。
間違い等ありましたらコメントいただけたら幸いです。

会場提供:MEDLEY様 Layzieさん

医療ヘルスケアの未来を作るサービスを提供。
人材プラットフォーム事業(ジョブメドレーなど)
医療プラットフォーム事業(電子カルテやオンライン診療支援システム、患者向けオンライン医療事典など)
システムの8割くらいRailsで、残りはNode、Goとか。
エンジニア募集中とのことです!

ふぁくとさん (@faktfakt)

Rails+OracleDBにおけるboolean型カラムの初期設定でハマったこと」

t/fではなくてboolean型のtrue/falseにしたいが、なかなか難しかったというお話でした。
Railsのデフォルトがt/fでOracleのデフォルトがY/Nになっているようで、
そのズレが原因のような気がするとおっしゃっていました。
私はRDBMSではPostgreSQLSQLiteしか触ったことがないため、OracleDatabase自体をあまりよく分かっていませんが、
「元々これだったのでなぜその技術が選定されたのか分からない」というお話しも出ていて、
そのへんは難しいのだなぁと感じました。

Yuji Tさん (@yujittttttt)

正式なタイトルを全文メモできませんでした…すみません。
神奈川県公立高等学校入学者選抜インターネット出願システムの不具合(メールが受信できない問題)に関するお話でした。
DKIMの設定がされていなくてDKIM認証が失敗してしまっている、とのことでした。
LT内で紹介されていた記事:出願システム不具合の原因、DKIM 未設定& DMARC 検疫か | カナガク
DKIM:送信メールの改ざんやなりすましを防ぐ技術。
出願システム不具合の原因、DKIM 未設定& DMARC 検疫か | カナガク
知らない単語もたくさん出てきましたが、メールが送信されてから受信されるまでどのような認証を通っているのかの流れがなんとなく分かった気がしました。
SPF/DKIM/DMARCとは?意味・定義 | ITトレンド用語 | ドコモビジネス | NTTコミュニケーションズ
GMailも今月から1日5000件以上メールを送信する場合は規制が入ったりする(要件を満たす必要がある)そうで、
年々メールを送ることが難しくなってきている、メールを送るのはやめた方が良い、という意見もあるとのことです。
そんな現状を全く知らなかったので、もっとITのニュースをとりこむようにしようと思いました。

ShintaniTeppeiさん (@euglena1215)

「習うより慣れる Ruby AST」


AST:Abstract Syntax Tree(抽象構文木
RubyAST:Rubyのプログラムを意味のあるかたまりごと(トークン)でツリー構造に変換したもの
ソースコードはあくまで文字列なので、文字列を解釈可能なものに変換する必要がある
Rubocop:RubyプログラムをRubyASTに変換して、あらかじめ用意しておいた違反しているツリー構造と一致しているかどうかをパターンマッチして警告を出している

RubocopはRubyのコードをASTという形に変換して解析していることを初めて知りました!
スライドにたくさんの例を示してくださったおかげで、ASTがどういうものなのかなんとなく分かった気がしました。

RubyプログラムがどんなASTになるのか、逆にASTがどんなRubyプログラムにマッチするのか確認できるツールを作成されたとのことでした!
ツール:rubocop-ast.wasm
ブログ記事:rubocop-ast.wasm を作った - カレーの恩返し

RuboCopの解析をもう少し調べてみましたが、難しかったです…。
RubyのコードをParserというgemでASTに変換して解析している、というだけ分かりました。
もう少し学習を進めてから再度学んでみたいと思いました。
RuboCop Under a Microscope - Speaker Deck

なぜASTを調べたのかとの問いに、RuboCopのカスタムルールを作りたくて、とおっしゃっていました。
カスタムルールの作り方の記事が結構あったので自分用に残しておきます。
Rubocop でカスタムルールを作る - Money Forward Developers Blog
RuboCopの新しいルールを追加する方法(Custom Copの作り方) - アジャイルSEの憂鬱
[Rails基礎] RuboCop カスタムCopのつくり方

maki O/O/さん (@makiOo1o)

「独学・業務未経験者の学習方法」


以前の自己紹介で就活されていることは知っていましたが、独学で学習されていたのは知らず驚きました!
そしてやったこと一覧が山盛りで興味深く聞かせていただきました。

質問をレベル分けする、というのは質問が苦手な私もすぐできるしやってみようと思いました。
ロジックを考える際、自分も少し紙に書いてやっている部分が少しあるのですが、
makiさんがやってらっしゃる紙プログラミングのように丁寧ではないので、
もっと深掘りすることでロジックを説明する力がつくのかな、と感じました。

今後の学習で使えるヒントがたくさんあったので、実践していきたいです!

小林悟史(noel)さん (@free_world21)

Ruby/Railsの勉強会のおかげでブルーモ証券起業した」


以前にLTをしたことがきっかけで証券会社のシステムをRailsで作ったというお話でした!
LTの資料をSpeakerDeckにあげて、そのリンクをLinkedInに載せていたところ、XのDMでお声がかかったとのことでした。
そのきっかけになったLTはこちら↓
金融機関の(システムの)作り方 - Speaker Deck

話を聞いていて初学者の私は、ただただ「すごい〜!」と驚くばかりでした。
Railsってやろうと思えば証券会社のシステムも作れるのか!なんでもできるんだな!」と思いました。 (なんでもかはわかりませんが)
Railsの勉強をしていくのがさらに楽しみになりましたし、LTをすることで自分の将来の幅が広がっていくことも聞けて良かったです!

ryosk7さん (@ryosk7)

「技術書典からバックレなくて良かった話」


技術書典15でRubyとNFTを題材にした本を出されたそうです!
スライドの「お前なにやってたん期間」に笑いました。笑
限られた10日程の期間の中でのスケジュールがすごかったです。

その限られた期間の中で勉強されたという言語が、知らないものだったので調べました。
SOLIDITY:Ethereum(ブロックチェーン技術が備わったプラットフォーム)のブロックチェーン上で動作するプログラム(コントラクト)を記述することができるプログラミング言語
Solidityとは?基本文法や実装方法まで実例を用いて詳しく解説|Udemy メディア
Solidityはどのような開発言語?特徴・習得難易度・市場価値をご紹介|フォスターフリーランス
Solidity とは何か? 開発環境を構築する! #初心者 - Qiita
Hardhat:Ethereumの開発環境でのスマートコントラストの環境開発ツール HardHat: 導入方法
Hardhatの公式ドキュメントを読み解いてみた #Blockchain - Qiita

また、インプットとアウトプットが両方できた、とおっしゃっていたのも印象的でした。
執筆、というとアウトプットのイメージが強かったのですが、執筆に向けて新言語を勉強したり今までの技術を再度確認したりすることでインプットもできるのだなと思いました。

kaibaさん

「動かして完全に理解するSidekiq」


非同期処理の詳しくの図がわかりやすかったです!
コードをお借りして再現できるかやってみようとしましたが、そもそもRedisを起動するためにDockerが必要なのを忘れていました…。
パーフェクトRuby on Railsを読んでいて、ActiveJobの非同期処理でSidekiq実行するというときにRedis環境のためにDockerが必要でそこで立ち止まったのを思い出しました…。
Dockerの知識がほぼないので、もう少し学習を進めて再度チャレンジしようと思います。
LTのデモで実際にキューの中のジョブを実行している様子を並列と縦列で見て、なるほど〜と思いました!


まとめ

初めてのオンライン参加でしたが、しっかりLTをきくことができました。
LTも技術の話から多種多様でとても面白かったです!
また現地参加して、いろんな方とお話ししてみたいと思いました!
ありがとうございました!


2024.1.29~2024.2.4【週報】

今週の振り返り

目標と成果

目標 成果 反省・感想
JSクラスプラクティスのクラス分けを決めて、
機能を最低1つは実装する
⚪︎ 提出できたので
レビューきたら修正
学習時間を40時間超える × 学習時間を全然把握
していなかった
SOFTSKILLSを読み終える ⚪︎ 🙌

やったこと

  • JSクラス課題
    標準入力
    Readline | Node.js v21.6.1 Documentation

  • Rails輪読会参加
    エラーハンドリング
    CI、GitHubActions
    Rubocop

  • リーダブルコード輪読会参加
    コメント:実例、コードの意図、情報密度

  • 勝手にモブプロ参加
    Rackについてでした!良い勉強になりました!
    [Rails基礎] RackとRackミドルウェア|Railsの練習帳

  • Omotesando.rb#94オンライン参加
    初めてオンライン参加しましたが、やはり現地参加したい〜と思いました!

今週の学習時間

学習時間:39時間45分 学習日数:5日

今週あった出来事&感情

  • 友人とカレーを食べに行った🍛
    彼女の行動力や仕事への考え方を聞いて学びになった!

来週の目標

  • Omotesando.rb#94の参加記録記事を書く

  • バイトがある日も最低1時間は学習する

  • (提出物が返ってきたらそれの修正に取り掛かる)

来週の予定

  • 懸命にバイトする…



2024.1.22~2024.1.28【週報】

今週の振り返り

目標と成果

目標 成果 今後
JS非同期処理のプラクティス課題を終わらせる ⚪︎ 👍
Omotesando.rb参加記録のブログ記事を投稿する ⚪︎ 👍
SOFTSKILLSの第6部を読み終える ⚪︎ 第7部へ

やったこと

今週の学習時間

学習時間:20時間
学習日数:5日
今週はかなり少なかったです…

今週あった出来事&感情

  • FBCの方たちとランチ会🍖
    今後のアイデア出しに参考になるお話をたくさんしてくれました!楽しかったです😄

  • FBCミートアップ参加
    ミートアップでのコミュニケーションにもここ数ヶ月でだいぶ慣れてきました😅笑

  • 新春輪読会EXPO2024開催🎍
    主催させてもらいました!
    みなさんに楽しかったと言っていただけて嬉しいです😭✨
    コミュニティ参加をしたいけど勇気がでない、という人の後押しが少しでも出来たなら幸いです🙌

  • 風呂の電気がつかなくなった
    不動産屋、大家さんとのやりとりにてんやわんや

  • 車のバッテリーがあがっていてバッテリー交換した
    保険会社、ロードサービスとのやりとりにてんやわんや
    そして金欠…

来週の目標

  • JSクラスプラクティスのクラス分けを決めて、機能を最低1つは実装する

  • 学習時間を40時間超える

  • SOFTSKILLSを読み終える
    第7部で全部読み終わるので頑張ろう!

来週の予定

  • Omotesando.rb#94 オンライン参加