Chiroru's Diary

日々の学びをちょこちょこメモしていきます

RailsGirls Online More!に参加しました!

6月27日(土)にRailsGirls Tokyo, Nagoya, Nagano, Sendai合同で開催されたOnline More!(以下RGMore)に参加させていただきました!

【目次】

当日について

SpatialChatを使い、座学エリア・もくもくエリア・雑談エリアに分かれて各自好きなことを行うスタイルでした。

私は、座学エリアにて『Ruby超入門』の著者で、現在Fjord bootcampでアドバイザー(7/1より技術顧問)の Kuniaki Igarashi さんによるRubyRails・学習ガイドのお話を聞かせていただきました!

Railsのお話

Rails6.0から追加されたActionText機能について、実践を交えながら紹介いただきました。

ActionText

Railsにリッチテキストコンテンツと編集機能が追加できます。

コードをほとんど書かずにWordのような機能を実現でき、画像はドラック&ドロップで貼り付けられるので、例えばTwitterから画像を貼ったりすることもできました。
またリサイズも自動で行ってくれます。

私も作ってみました👇

f:id:chiroru_memo:20200629152734p:plain
editページ

写真はアルバニアに旅をした時のものです。
(日本人の99%は行かないって言われているマイナーな国です。。)

Contentあたりを見るとわかるように、ちょっとした字体の調整だったり、引用だったり目次だったりを表示する機能がついています。

また右端の矢印で作業を戻したり進めたりできます。本当にWordみたい!

下の方が切れてしまっているのですが、完成したらページ下のcreate/updateボタンで完成。

f:id:chiroru_memo:20200629152813p:plain
indexページ

このindexで見るとわかるように、さっき見切れていた写真がいい感じにリサイズされています! ちょっと手を加えれば簡単なブログのようなものも作れちゃいそうです✨

その他注意点など

  • モデルはmessage.rbだが、テーブルはaction_text_rich_textsで、record_typeとrecord_idでポリモーフィック関連になっているのでN+1問題を考慮する必要がある

  • その他active_storage_blobsactive_storage_attachmentsのテーブルもあり、これらはActive Storageに関するもの。
    画像やファイル名は、active_storage_blobsに保存されている

  • N+1問題への対応としてwith_rich_text_#{name}_and_embedsメソッドを使う場合、action_text_rich_textsactive_storage_attachmentsテーブルは取得するが、active_storage_blobsは取得しない

【その他参考】

Rubyのお話

リファレンスマニュアルを利用して、ArrayとEnumerableのメソッドを見ていきました。

その中でいくつか気になったメソッドをまとめてみました👇

Array

self * sep -> String

Array#joinと同じような動きができます。

p [1,2,3] * ","
# => "1,2,3"

bsearch { |x| ... } -> object | nil

条件を満たす値を二分探索するので、検索が遅いarrayを速く処理できます。
(利用する場合、事前にソートしておく必要があります)

ary = [0, 4, 7, 10, 12]
ary.bsearch {|x| x >=   6 } # => 7
ary.bsearch {|x| x >= 100 } # => nil

cycle(n=nil) {|obj| block } -> nil

配列の全要素を n 回(nilの場合は無限に)繰り返し、ブロックを呼びだします。

a = ["a", "b", "c"]
a.cycle {|x| puts x }  # print, a, b, c, a, b, c,.. forever.

combination(n) {|c| block } -> Array

サイズ n の組み合わせをすべて生成し、それを引数としてブロックを実行します。
順序の指定はできません。

a = [1, 2, 3, 4]
a.combination(3).to_a  #=> [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]

concat(*other_arrays) -> self

自身の末尾に破壊的に連結します。 破壊的ではあるが、「!」が付かない。

[ "a", "b" ].concat( ["c", "d"] ) #=> [ "a", "b", "c", "d" ]
[ "a" ].concat( ["b"], ["c", "d"] ) #=> [ "a", "b", "c", "d" ]

a = [ 1, 2 ]
a.concat(a, a)                    #=> [1, 2, 1, 2, 1, 2]

intersection(*other_arrays) -> Array

共通要素を新しい配列として返します。

[1, 1, 3, 5].intersection([3, 2, 1])                  # => [1, 3]
["a", "b", "z"].intersection(["a", "b", "c"], ["b"])  # => ["b"]

Enumerable

まずEnumerableモジュール・Enumeratorとは

  • 「Enumerableモジュール」は繰り返しを行なうクラスのための Mix-in

  • 「Enumeratorクラス」は(each以外のメソッドにも) Enumerableの機能を提供する

  • 「Enumeratorオブジェクト」はeachなどの繰り返し処理を行うメソッドのブロックを省略した場合に(も)返ってくる

Enumerableをincludeしてeachを用いることで、Arrayのメソッドが大体使えるようになります。

【6/30追記】

上記に関して、FBをigaigaさんにいただきました! 🙏

大筋あってるので細かいのですが、詳しく書くとこんな感じです

・eachメソッドを定義してあるクラスにEnumerableモジュールをincludeできる
・includeするとEnumerableに定義されてあるメソッドが全部つかえるようになる
・Arrayは最初からEnumerableがinclude済み(なのでEnumerableのメソッド群もつかえる)

chunk {|elt| ... } -> Enumerator

条件にそうもの、そわないものを分ける時などに便利です。
(even?は偶数であれば真を、そうでない場合は偽を返す)

enum.chunk {|elt| key }.each {|key, ary| do_something }

# 整数列を連続する奇数/偶数に分ける
[3,4, 1, 5,].chunk {|n|
  n.even?
}.each {|even, ary|
  p [even, ary]
}
# => [false, [3]]
#    [true, [4]]
#    [false, [1, 5]]

detect(ifnone = nil) -> Enumerator

findと同じだが、Railsのfindと被ってしまうため、代わりにこちらを使う。

[1, 2, 3, 4, 5].detect {|i| i % 3 == 0 }   # => 3

tally -> Hash

self に含まれる要素を数え上げた結果を Hash で返します。

["a", "b", "c", "b"].tally  #=> {"a"=>1, "b"=>2, "c"=>1}

学習ガイド

RubyとRailsの学習ガイド2019年版をもとにお話いただきました。

その中でも「Railsの技術を伸ばしていくときにお勧め」として挙げられていた『パーフェクト Ruby on Rails 』は中級者向けとのことなので、勉強が進んだら読んでみたいと思いました。

もうすぐ発売される『パーフェクト Ruby on Rails 【改訂2版】』では、igaigaさんも執筆されていたそうでこちらも気になります!

またHTTPのおすすめ文献『暗号技術入門』も読んでみたいなと思いました。

【6/30追記】
igaigaさんより🙏

「HTTPでも使われている暗号技術を解説した本」という感じです。一言だと「暗号技術の本」ですね。めっちゃ良い本なのでお勧めです。

分野別でレベルごとに読むべき技術書を書いてくださっているので、ぜひこれからの学習の際にも参考にさせていただきたいと思いました。

感想

RGMore!あっという間の3時間でした。私がいつも参加させていただいているNagoya,NaganoのMore!は、主に本をみんなで読み進めるスタイルの勉強会なので、今回igaigaさんがお話してくださった座学形式の勉強会は新鮮でした。
中でもやはりRailsのActionTextは便利なのに一瞬で実現できてしまい、改めてRailsの面白さを感じられた気がします!
そして、普段中々お会いできない全国のRGさんたちと交流できたことも、とても嬉しかったです! 第2回があればぜひまた参加したい😆

今回このような場を用意してくださったRailsGirlsJPの皆さま、貴重なお話を聞かせてくださったigaigaさん、そしてRGのみなさん、ありがとうございました🤲✨🌼