Slide 1

Slide 1 text

出張!Railsウォッチ
 in 銀座Rails#12
 森 雅智 / @morimorihoge 八田 昌三 / @hachi8833 2019/08/29 1


Slide 2

Slide 2 text

About Me
 ● 森 雅智: @morimorihoge
 ● BPS株式会社でRailsの受託開発チームをやってたり、週1大学非常勤で Web開発を教えてたりします
 ● Ruby/Rails歴は8年くらい。Web開発は14年くらい
 ● 前回の銀座RalisでActiveRecordでVIEWを使おうという話をしました
 About BPS & TechRacho
 ● Web受託開発や電子書籍製品開発をやっている会社です
 ● TechRachoという自社技術Blogを運営しています
 ○ 3年ほど前から平日毎日更新してます
 ○ https://techracho.bpsinc.jp/ ● お仕事相談、転職相談、TechRachoへのご意見など気軽にどうぞ
 ○ https://www.bpsinc.jp/ 2


Slide 3

Slide 3 text

Railsウォッチとは?
 技術ブログTechRachoで毎週連載しているRails / Ruby界隈を中 心とした雑多な情報を提供する技術雑談マガジン
 3


Slide 4

Slide 4 text

@hachi8833(TechRacho編集部) ● 八田昌三(はったしょうぞう) ○ TechRacho 記事執筆・編集・翻訳( 2016.08 〜) ○ サイトメンテナンス ○ ローカライズ業界出身 ○ 好きなもの : 正規表現 /Go/Ruby/Goby など多数 ● やってきたこと ○ Rails チュートリアル翻訳・翻訳ディレクション ○ Rails ガイド翻訳 ○ Goby 言語メンテナー 4

Slide 5

Slide 5 text

「Railsウォッチ」の情報源のほんの一部 ● Rails 公式ニュース https://weblog.rubyonrails.org/news/ ● Ruby 公式ニュース https://www.ruby-lang.org/en/news/ ● Ruby Weekly https://rubyweekly.com/ -- おすすめ! ● RubyFlow http://www.rubyflow.com/ ● Hacklines https://hacklines.com/en?ucc=libhunt&tags=Ruby%2CRails ● Postgres Weekly https://postgresweekly.com/ ● DB Weekly https://dbweekly.com/ ● Serverless Status https://serverless.email/ ● JavaScript Weekly https://javascriptweekly.com/ ( React Status や Node Weekly など姉妹サイトも) ● GitHub Trending https://github.com/trending 他にも強い人のツイート、はてなブックマーク、 Publickey なども 実は「 BPS 社内 Slack に流れてきた記事」「良記事からの別記事リンク」が重宝してます 5

Slide 6

Slide 6 text

今日の皆様の情報
 6
 事前にアンケートを出させていただきましたので、紹介します
 ご回答頂いたみなさま、ありがとうございました。


Slide 7

Slide 7 text

今日のトピック
 7
 ● Rails 6新機能を抜粋して紹介
 ● 週間Railsウォッチで紹介したGem / ライブラリから一部を紹介
 
 ※間違いなどあれば物言い・Twitter等でご意見下さい(質疑タイムあるかも?


Slide 8

Slide 8 text

Rails6 新機能紹介
 8


Slide 9

Slide 9 text

Rails 6の試し方
 環境を汚したくなければDockerで手軽にお試しできます
 9
 $ docker pull ruby $ docker run --rm -it ruby bash root@392debe154fd:/# gem install rails Fetching thread_safe-0.3.6.gem Fetching tzinfo-1.2.5.gem Fetching zeitwerk-2.1.9.gem Fetching rack-2.0.7.gem ...(略)... Successfully installed sprockets-3.7.2 Successfully installed sprockets-rails-3.2.1 Successfully installed rails-6.0.0 40 gems installed root@392debe154fd:/# rails -v Rails 6.0.0

Slide 10

Slide 10 text

Rails6の新機能から少しピックアップ解説
 ● 複数DB対応を中心に紹介してみます
 10


Slide 11

Slide 11 text

複数DB対応
 ● これまでRailsデフォルトでは1つのDBのみを想定していたものが、Gemを使わずに 複数DB対応できるようになった
 ● 一般的に複数DBが必要とされる用途両方に対応
 ○ master-replica構成の負荷分散 
 ○ 異なるDBの同時参照 
 11
 Rails公式リリースノートより 
 https://weblog.rubyonrails.org/releases/


Slide 12

Slide 12 text

複数DB: master-replica構成での負荷分散
 ● 主要なユースケース
 ○ 参照(SELECT)がとても多いサイトで、 更新系はmasterノード、参照系はreplicaに流す 
 ○ ※以前まではmaster-slaveの用語が一般的だったので、検索したい人はそちらの用語も 
 ● Rails6以前の解決策の例(Gem)
 ○ eagletmt/switch_point: ほぼ同じことができる 
 ○ thiagopradi/octopus: Shardingにも対応している(が、公式はRails6にサポートしないと言っているの で、Sharding構成で使っているシステムは悩ましい) 
 ● 嬉しいと思われる人たち
 ○ AWS RDSなどで簡単にreplicaを作れる世の中になったので、サービスが育った時Gem追加せずに 対応できるのは利点 
 12


Slide 13

Slide 13 text

複数DB: 異なるDBの同時参照
 ● 主要なユースケース
 ○ 別システムのDBをActiveRecordで参照したい 
 ○ ※replicaと異なり、接続先DBによってスキーマが異なる(Adapterも異なる) 
 ● Rails6以前の解決策の例(Gem)
 ○ eagletmt/switch_point: ほぼ同じことができるが、migrationサポートがないので必要ならridgepoleな どの併用が必要
 ○ customink/secondbase: デフォルトの1つ目のDBの他にもう一つだけDBを設定できる。migrationも 対応している(が、Rails 5.1までで更新が止まっている?) 
 ● 嬉しいと思われる人たち
 ○ エンタープライズアプリケーションなどの要件によっては利用するケースがありえる 
 13


Slide 14

Slide 14 text

複数DBの使い方(1) database.yml
 ● これまでの形式ではなく、1階層深い書き方をするようになる
 14
 一つ目のDB識別子は `primary` で予約されている 
 二つ目以降は任意の識別子が利用できる 
 migrationファイルのディレクトリを指定 


Slide 15

Slide 15 text

複数DBの使い方(2) migration
 ● rails generate migrationに `--database` オプションを追加して実行
 15
 DBごとにmigration_pathsに置かれる 
 rails db:migrate:IDENTIFIER でDBごとにmigration実行 


Slide 16

Slide 16 text

複数DBの使い方(3)Modelの設定
 16
 接続先DBごとにApplicationRecord相当の親クラスを作成し、ActiveRecordの継承クラス はどのDBに接続させるかで親クラスを分ければ良い


Slide 17

Slide 17 text

複数DBのオプション
 ● 基本的にEdge Rails Guidesを参照すればOK
 ○ https://edgeguides.rubyonrails.org/active_record_multi ple_databases.html
 17


Slide 18

Slide 18 text

Railsウォッチで話題になったGem/ライブラリなど
 ● Fullstaq Ruby
 ● Ruby on Jets
 ● Serveo / Ngrok
 ● FactoryBot v.s. FixtureSet
 18


Slide 19

Slide 19 text

Fullstaq Ruby
 ● jemallocを使った高速化版MRI ○ 最近Hotでよく話題になっている印象です ○ https://fullstaqruby.org/ 19


Slide 20

Slide 20 text

Ruby on Jets
 ● Railsっぽく書いたコードがAWSのAPI Gateway + Lambdaベースのコードとして deployできる
 ○ ruby-jp slackの #serverless channelでもっと情報交換したいです(願望) 
 ○ https://rubyonjets.com/
 20


Slide 21

Slide 21 text

Serveo / Ngrok
 ● ローカルで動いているアプリをInternetから見られるように公開できる
 ○ Ngrokは自前ドメインの利用などが有料(クライアントはバイナリ配布) 
 ○ ServeoはOSSで自前でサーバーを立てることも可能 
 ○ 手元の開発環境を実機でサクッとデモしたい、などのときにとても便利です 
 21
 ※serveo.netがちょうど落ちていたのでSS撮れず・・・ 


Slide 22

Slide 22 text

FactoryBot v.s. FixtureSet
 ● 恐らく日々戦争を起こしている界隈では
 ● 皆さんどちら派ですか?
 ● 公開Railsウォッチの参加者内ではテストデータが大きく複雑になってくると FixtureSet派が多い印象でした
 ● 参考 ○ Rails API: `ActiveRecord::FixtureSet`(翻訳)
 ■ https://techracho.bpsinc.jp/hachi8833/2019_07_11/77512
 22


Slide 23

Slide 23 text

宣伝:週刊Railsウォッチ 公開つっつき会
 ● 毎月第一木曜日、社外の方も参加できる公開つっつき会を開 催してます
 ○ 直近は2019/09/05(木)19:30~@西新宿 BPS会議スペー スにて
 ● TechRachoの週刊Railsウォッチの最新記事、または「週刊 Railsウォッチ公開つっつき会」でぐぐってTECH PLAYから君も エントリー!
 ○ https://techplay.jp/event/746615
 23


Slide 24

Slide 24 text

次回以降もブラッシュアップしていきます
 感想・リクエストなどあればTwitter
 #ginzarails
 @morimorihoge
 @hachi8833
 までお声かけください
 24