パーフェクトRuby on Railsを読む~その2~

前回はこちらです。

hatek47320.hatenablog.com

パーフェクトRuby on Railsを読んでいき、気になったところをメモっていきます。

本自体の個人的な評価ですが、Rails入門本では飛ばされがちな細かい情報(知っていたほうが応用が利く情報)が網羅されていて、Railsでなんかアプリ作り出したくらいの人には最適と思いますし、逆にそこまで敷居も高くないと思います。

  • Rackについて

    • APサーバとフレームワークをつなぐインタフェース。これによりRailsから見たAPサーバを自由に選択できる(unicornやpumaなどが例)
    • Rackには「callというメソッドの定義」「callにenvまたはenvironmentという引数を一つ渡す」「HTTPステータスコード(数値オブジェクト)、HTTPヘッダ(ハッシュオブジェクト)、レスポンスボディ(文字列)の三つを配列でcallに渡す」という規約があり、これを満たせばとりあえずOK
  • 複数DB対応

    • Rails6.0からはRails標準として複数DB対応が可能。database.ymlにprimaryとsubという形で接続したいDBを追加する。DB名とmigration_pathをそれぞれ追加する形。あとは通常通りmigrationすればDBセットアップは可能
    • モデルを複数DB接続できるようにするためにestablish_connectionを用いる。モデル生成時に--database=subをオプションで指定すると、subデータベースに接続するための基底クラスが生成され、生成されたモデルはその基底クラスを継承する。
    • DBごとに読み書きの分離が可能。database.ymlのDB追加時にreplicaという形で指定すると、読み取り専用のDBを設定することができる。
    • アプリケーションレベルでは、モデル単位でどのDBに接続するかを設定する必要がある。この場合はモデル単位でconnect_toを利用してロール(writable、readable)とデータベースを明示する。DBコネクションをできる限り減らすため、テーブル全体に設定する場合はApplicationRecordで設定したほうが望ましい。
      • ロール名は独自で設定可能で、application.rbで設定可能。

セキュリティやEarly hintsに関する記載については飛ばしましたw

終わりに

とりあえず3章まで駆け足でメモって見ましたが、複数DBとかは大規模システムで普通に使いそうですね。例えば基幹システム側のDBとRailsのサブシステムのDBで色々やりたいとかそういう要件にも簡単に対応できそうな印象でした。

hontoの電子書籍はクーポンが充実していて非常にお得です。私もよくhontoの電子書籍を使っていますのでお勧めです(この本もこちらで買いました)