billage OSAKAでの 第82回 Ruby関西 勉強会に参加しました。

以下、メモです。

オープニング

  • 会場説明とか
  • いにしえの技術の ustream で中継してるはず (Flash の問題で確認できず)

大阪Ruby会議01 のお知らせ

コーディング面接とその対策

  • タイムスケジュールでの最初の発表者の到着が遅れると事前に連絡があったので順番入れ替え
  • 「RubyからPythonを呼び出す」はニーズが少なそうということで「コーディング面接とその対策」に変更
  • 具体例1: Array (配列) と List (Linked List) の違いは何ですか?
  • 具体例2: (メモ取り忘れ; ブラウザーで URL を入力した時の動作みたいな話だった)
  • 具体例3: クロージャとスコープについて
  • ミライセルフ、mitsucari で検索
  • 質疑応答
  • 実務よりの質問をするべきか、今回のような基礎的な質問をするべきか

Rails Girls Osaka

休憩

Rails でつくるマルチテナント型 Web アプリケーション

  • 「Re:lation」というB2B向けアプリケーションを開発
  • マルチテナントというのが、以前の railsdm での他の人の発表とネタかぶり
  • 「Re:lation」はメール受信箱をチームで共有するためのサービス
  • 最近はメールだけではなく twitter / LINE@ にも対応
  • ビジネス向けというのがマルチテナントに繋がる
  • B2C だとアプリケーションに直接ユーザー
  • B2B はアプリケーション - 組織 - ユーザー
  • 組織部分がテナントでユーザーが複数のテナントに属することはない
  • 設計
    • テナントごとに RDBMS のデータをどう分離するか
    • URL をどうするか
    • その他のデータストアは省略
  • インスタンスレベルで分離
    • 実際にはほぼなさそう
  • スキーマレベルで分離
    • PostgreSQL のスキーマ : 名前空間を分ける仕組み を使う
    • テナントごとにテーブルのセットを作ることになる
  • 行レベルで分離
    • 全テーブルに tenant_id カラムを持つ
    • where を忘れたらアウト
  • スキーマレベルで分離を採用
  • URL 設計 : テナント情報を含めるか含めないか、含めるならパスかサブドメインか
  • G Suite は共通 (mail.google.com など)
  • Yammer などはパスにテナント情報を持つ
  • Slack などはサブドメインにテナント情報を持つ
  • Re:lation はサブドメイン型を選択
  • 開発環境は xip.io を利用 (tenant1.127.0.0.1.xip.io など)
  • ステージング環境は Let’s Encrypt (マルチドメインでやっているが、ワイルドカード対応したので、それを使う予定)
  • apartment gem
    • rack middleware で自動で切り替えてくれる
    • db:migrate は全スキーマに適用する必要がある
    • テナント数が増えると db:migrate の時間が増える (サービス停止時間が長くなる)
    • 最近のアップデートで並列実行できるようになって多少ましになった
  • インデックス追加やカラム削除などのサービス稼働中でも実行できるものは db:migrate に入れずに実行して別途 db/schema.rb を更新している
  • 質疑応答
  • 行ごとではなくスキーマごとの分離を選んだ理由は?
  • 前のシステムで MySQL で似たようなことをしていたから
  • where 句を気にしなくて良いから
  • public スキーマには何か入れている?
  • tenant テーブルやプランなどテナント間で共有するもの
  • apartment gem で public スキーマにおくものかどうか定義できる
  • 運用側の管理画面でのスキーマ切り替えは?
  • 管理画面で apartment gem の切り替えメソッドを明示的に呼び出して実装している

rails のちょっと便利なテンプレ機能をご紹介

  • LT
  • チーム開発時の開発環境の構築 : docker or vagrant or else
  • 今回は docker の話
  • Rails のアプリケーションテンプレート機能
  • rails new に --template を指定する
  • DEMO
  • 例: https://github.com/Islands5/rails_template_source

発表では rails new しか言っていなかったけど、すでに作成済みのアプリでも rails app:template でテンプレートを適用できます。

React と GraphQL で作るWebアプケーション(GatsbyJS と Ruby on Rails)

休憩

Ruby 初級者向けレッスン 65回 –文字列–

  • 時間がおしていたので、はやめの説明
  • 時間がおしていたので、最後の解答例は省略

クロージング

  • 懇親会参加する人は残ってくださいというアナウンスとか

帰りに名札入れを返すときに billageOSAKA さんからおみやげとして施設の紹介パンフレットとかと一緒にキャロライナリーバーという一味唐辛子をいただきました。 懇親会のときにちょっと使ってみたら、本気でからかったので、興味がある人は billageOSAKA の直近のイベントか何かに行ってみると良いのではないでしょうか。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published