紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【Rubyイベントレポート】Saitama.rb #19にはじめて参加してきました

f:id:yokoyantech:20190731215230p:plain

はじめに

さいたま市の大宮で開催されたSaitama.rb #19に参加してきました。

saitamarb.connpass.com

参加した理由と目的

社外でRubyを書いている人と繋がるためです。今の会社ではRubyを書くエンジニアが少数であるため、社内だけではなかなかRubyに対する見聞を広めることが難しい環境です。平日の夜に都内で開催されている、Ginza.rbなどにも興味がありますが、息子と一緒にお風呂に入るというミッションを最優先している ため、今回は土曜日に開催されていたSaitama.rb に参加することにしました。

会場は貸会議室の6Fさん

だったのですが、6Fという名前から、6階で開催されるのだろうと思い込みをしていました。正確には、会議室6Fの8階が正しい会場でした。案の定迷いました・・・。

Rails6読み合わせ WEB+DB Press

まず、主催のタケユー・ウェブの竹内さんから、WEB+DB PressのRails6特集の読み合わせを行いました。

WEB+DB PRESS Vol.111

WEB+DB PRESS Vol.111

  • 作者: 松田明,y-yagi,佐藤建太,夜道,村田賢太,伊藤英明,見川孝太,新井剛,関陽介,海老原圭吾,長田洸明,大原壯太,藤原俊一郎,松本宏太,末永恭正,久保田祐史,牧大輔,笹田耕一,竹馬光太郎,池田拓司,はまちや2,竹原
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/06/24
  • メディア: 単行本
  • この商品を含むブログを見る

以下、概要です。

  • Production系の機能が拡充された
  • テストの並列化
    • これまでもGemで並列化はできてた
    • 本体に組み込まれた
  • スタートアップ時はいいけど、成長していくと苦しい?
    • Github
  • 最新のWebpackerを知らなくても使えるように
    • サーバ屋でも使えるように
  • Active Storage
    • ファイルアップロード処理
    • これまでは標準でなかった
    • バリデーションなどがまだない
  • Action Text
    • リッチテキスト
    • ダイレクトアップロードにも対応
      • 直接S3にアップロードできる
  • Action Mailbox
    • メールの受信処理
    • 送り先のメールアドレスを見て、この処理をする、などがやりやすくなった
    • 内部的にはActive Strageを使っている
  • RailsのWebpackerの思想が書かれてる
  • 複数DB対応
    • DatabaseSelector
      • これはすごい!!
        • RESTの思想
          • Getするときは基本的にDBは読み込み
            • 強制的にReadOnly DBの方にアクセスしに行く
          • 更新はPATCH
            • 強制的にReadWrite DBの方にアクセスしに行く

もくもく(Ruby Silverの学習)

私はRuby Silver受験を控えてるため、教科書の学習を行いました。

論理演算子

  • rubyは最後に評価したオペランドを返す
  • 変数のデフォルト値を簡単に書ける
$ irb
2.6.3-p62 :001 > a = 1 || 2
 => 1
2.6.3-p62 :002 > b = b || 1
 => 1
2.6.3-p62 :003 > c ||= 1
 => 1
  • &&and演算子はどちらも論理積。
    • ただし、&&の方が強い
2.6.3-p62 :004 > p 1 && 2
2
 => 2
2.6.3-p62 :005 > p 1 and 2
1
 => 2

文字列

文字列リテラルと式展開

  • ""は式展開できる
  • ''は式展開できない
2.6.3-p62 :006 > a = 1
 => 1
2.6.3-p62 :007 > p "a is #{a}"
"a is 1"
 => "a is 1"
2.6.3-p62 :008 > p 'a is #{a}'
"a is \#{a}"
 => "a is \#{a}"
  • 文字列中に数値に置き換えられない場合は、直前まで変換する
2.6.3-p62 :016 > "12ab3".to_i
 => 12
  • ピリオドも数値には変換できないので注意
2.6.3-p62 :018 > "1.9".to_i
 => 1
  • 文字列から始まる場合は、0を返す
2.6.3-p62 :017 > "ab123".to_i
 => 0

バックスラッシュ記法

  • ""はバックスラッシュ記法(\nや、\rなど)が使える
    • \xxの文字そのもの
    • \n改行
    • \rキャリッジリターン
  • ''は使えない
  • \xの例
    • 2進数と16進数
2.6.3-p62 :023 > p "101"
"101"
 => "101"
2.6.3-p62 :021 > p "\101"
"A"
 => "A"
2.6.3-p62 :022 > p "\x41"
"A"
 => "A"
  • 出力メソッドの違い
メソッド 改行 出力内容 バックスラッシュ記法
p 引数毎に改行 inspectメソッド 展開されない
print 改行しない to_sメソッド 展開される
puts 引数毎に改行 to_sメソッド 展開される
2.6.3-p62 :024 > p "a\nb"
"a\nb"
 => "a\nb"
2.6.3-p62 :025 > print "a\nb"
a
b => nil
2.6.3-p62 :026 > puts "a\nb"
a
b
 => nil

ヒアドキュメント

  • <<+終端文字列で改行をを含む文字列を表現できる
  • 可読性がいい
  • シェルスクリプトでも採用されている
2.6.3-p62 :029 > query = <<SQL
2.6.3-p62 :030"> select *
2.6.3-p62 :031"> from my_table
2.6.3-p62 :032"> SQL
 => "select *\nfrom my_table\n"
  • ヒアドキュメントの終端文字の前にはスペースを入れたらダメ
    • スペースを入れるとヒアドキュメントが終わらない
2.6.3-p62 :033 > query = <<SQL
2.6.3-p62 :034"> select *
2.6.3-p62 :035"> from my_table
2.6.3-p62 :036">  SQL
2.6.3-p62 :037"> SQL
 => "select *\nfrom my_table\n SQL\n"
  • 階層が深い場合は、<<-を使う
def foo
  <<-RESULT
    Ru
    by
  RESULT
end

p foo
$ ruby 3-40.rb
"    Ru\n    by\n"
  • <<-を外すとエラーになる
    • 終端文字列のRESULTの前にスペースが有るため
def foo2
  <<RESULT
    Ru
    by
  RESULT
end

p foo2
$ ruby 3-40.rb
3-40.rb:17: can't find string "RESULT" anywhere before EOF
3-40.rb:11: syntax error, unexpected end-of-input, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END
  • ''で識別子をくくると式展開を無効化できる
a = 1

s = <<'TEST'
    #{a}
TEST

p s
$ ruby 3-41.rb
"    \#{a}\n"

%記法

  • 文字列を囲む記号を自分で決めることができる
2.6.3-p62 :001 > a = %*test*
 => "test"
  • ""を使う場合、エスケープしなくてよいのが楽
2.6.3-p62 :002 > b = %*"test"*
 => "\"test\""

もくもく2(REx)

ひたすら教科書の写経も飽きてきたので、RExの問題を50問解くことにしました。

www.ruby.or.jp

Proc

productメソッド

  • 配列の要素の組み合わせを作成して、配列で返す
2.6.3-p62 :002 > arr = [1,2].product([3,4])
 => [[1, 3], [1, 4], [2, 3], [2, 4]]

%

2.6.3-p62 :001 > p "Hello" % 5
"Hello"
 => "Hello"

ちょっとわからない

前回の記事にまとめたフリップフロップです。

10.times{|d| print d == 3..d == 5 ? "T" : "F" }
(irb):5: warning: flip-flop is deprecated
FFFTTTFFFF => 10
2.6.3-p62 :006 > 3..0
 => 3..0
2.6.3-p62 :007 > 0 == 3..0 == 5
 => false..false
2.6.3-p62 :008 > 1 == 3..1 == 5
 => false..false
2.6.3-p62 :009 > 2 == 3..2 == 5
 => false..false
2.6.3-p62 :010 > 3 == 3..3 == 5
Traceback (most recent call last):
        4: from /home/gitpod/.rvm/rubies/ruby-2.6.3/bin/irb:23:in `<main>'
        3: from /home/gitpod/.rvm/rubies/ruby-2.6.3/bin/irb:23:in `load'
        2: from /home/gitpod/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
        1: from (irb):10
ArgumentError (bad value for range)
2.6.3-p62 :011 > 4 == 3..4 == 5
 => false..false
2.6.3-p62 :012 > 4 == 5..5 == 5
Traceback (most recent call last):
        4: from /home/gitpod/.rvm/rubies/ruby-2.6.3/bin/irb:23:in `<main>'
        3: from /home/gitpod/.rvm/rubies/ruby-2.6.3/bin/irb:23:in `load'
        2: from /home/gitpod/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
        1: from (irb):12
ArgumentError (bad value for range)

成果発表

最後に、各自のもくもくの成果を発表しました。

  • Rails6でブログ作ってみた
  • Rails6へのアップグレードの調査・準備できた
  • Vue.js触れた
  • Rubocop調査できた
  • Ruby Silverの学習できた
  • Google Authモジュールの選定
  • ARのクエリやった
    • Rails光色ドキュメント読めた
  • Rails Girlsの準備した
  • パターンマッチ試した

参加した感想

初めてのもくもく会でしたが、他の人も作業に集中しているため、自分の作業も非常にはかどりました。Saitama.rb後の懇親会にも参加させていただき、Railsでどんなことをやっているか情報交換を行うことができました。会社務めの方、未経験からエンジニアになった方、フリーランスの方、経営者の方など、様々な立場の方がいて非常に興味深いお話を伺うことができました。次回もまた参加したいと思います!

まとめ

ということで、今回はSaitama.rb #19の参加レポートをまとめました。非常に楽しかったので、次回もまた参加したいと思います!