【第11週】パRails輪読会🚂 (2023-10-30~ 2023-11-03)

tags: パRails🚂

目次


2023-10-30(月)

ファシリ

@moegi29

ドライバー

@sadanora

読んだところ

5-1-4 220p コラムから
5-1-5 終わりまで。
PR:

次回

5-1-6 223p 「ジョブの例外処理」から。🚂

学んだこと・感想

  • @sharoa

    • 今日も今日とて難しい。。
    • もはや感想しか言えない。
    • Active-jobではバックエンドにある複数のキューを扱うことができる。
    • 非同期実行したい処理ごとにキューを分けておくことでバックエンドキュー上でのジョブの把握が容易になるらしい。
    • ジョブクラスごとに追加するキューを指定するにはqueue_as メソッドを使うらしい。
    • Railsの機能の中にはActive Jobを利用している機能が多数ある。その中のAction Mailerのdeliver_laterメソッドはActive job経由でメール送信を非同期実行する。
  • @moegi29

    • Active~という名前が多くてActiveJobは非同期タスクを実行するライブラリということを忘れがち。。
    • バックエンドにSidekiqを使うときActibJobを利用してSidekiqを使う方法とSidekiqのAPIを直接使う方法がある。
    • ジョブクラスごとにキューをわけておくことでジョブの把握が容易になる。ジョブクラスごとに追加するキューを指定するにはqueue_asメソッドを使う
    • Marshalはシリアライズ、デシリアライズの処理を行うもの
    • async エィシンクと読む
  • @motohiro-mm

    • アダプターはデフォルトでasyncだが、他にもSidekiqとかがある
    • アダプターはSidekiqでActiveJobを使う方法と、SidekiqのAPIを直接使う方法がある
    • 複数のキューを管理したいときはqueue_asメソッドに設定。処理ごとに分けると把握しやすい。
    • やりたいのにやれない悲しい。テキスト通りにすすめててもなかなか難しい。
  • @sadanora

    • Active Jobではバックエンドにある複数のキューを扱うことができる。
    • ジョブごとに追加するキューを指定するにはqueue_asメソッドを使う。
    • docker急に出てきて身動き取れない気持ち。
    • 読んでいてもピンとこない話が割と長いこと続いている気がするので振り返りとかやってもいいのかも?
  • @ayu-0505

    • Active Jobと非同期バックエンドの直接利用は状況において変更する。
    • キューはデフォルトでは1つ?だがキュー管理として複数のキューを追加し、ジョブを振り分けることができる。
    • 最近見たネットの記事で、キューは下から取り出すタオル棚のイメージがあって、なるほど〜となってました。

2023-10-31(火)

ファシリ

@sharoa

ドライバー

@moegi29

読んだところ

5-1-6 223p 「ジョブの例外処理」から
5-2-1 227p 終わりまで。
PR: https://github.com/motohiro-mm/Perfect_Ruby_on_Rails_Ch5/pull/3

次回

5-2-2 227p 「Active Storageの動作と設定」から。🚂

学んだこと・感想

  • @sharoa

    • Active jobにはジョブをリトライするためのretry_onとジョブを破棄するためのdiscard_onという例外処理がある。
    • Sidekiqなどバックエンド側でリトライの仕組みをもっているものがあり、retry_onの注意として二重でリトライが走らないようにする必要がある。
    • Active storageの画像アップロード機能が目の前で確認できてよかった。
  • @moegi29

    • ActiveJobではジョブを実行したときに発生した例外をキャッチして対応を変える仕組みがある。retry_onとdiscard_onを使って例外処理をする。
    • retry_onではいろんなオプションが指定できる。Sidekiqでもバックエンド側でリトライの仕組みをもっていることがあるので注意。
    • Rails5.2からファイルアップロード機能としてActiveStorageが提供されるようになった。
    • 今日はエラーがでずよかった
  • @sadanora

    • ジョブの例外処理
      • Active Jobは例外をキャッチする仕組みを持っている
        • retry_on
          • ジョブをリトライする
          • Sidekiqなどでもリトライの仕組みを持っていたりするので、被らないように注意
        • discard_on
          • ジョブの破棄
      • 例外処理のテスト
        • ActiveJob::TestCaseを継承したクラスで実装する
    • ActiveStorage
      • 画像アップロードを簡単に実装できる
      • attachmentで、ActiveStorage用属性を指定できる

2023-11-01(水)

ファシリ

@ayu-0505

ドライバー

@motohiro-mm

読んだところ

5-2-2 227p 「Active Storageの動作と設定」から
5-2-5 「ダイレクトアップロード機能」まで。
PR:https://github.com/motohiro-mm/Perfect_Ruby_on_Rails_Ch5/pull/4

次回

5-2-6 233p 「Active Storageの問題点」から。🚂

学んだこと・感想

  • @ayu-0505

    • Active Stroage機能は2つのモデル(Blob,Atttachment)で構成される。画像の取り扱い機能。
    • 本番環境のクラウドストレージサービスも学習が必要かも。
    • ダイレクトアップロードはメリットデメリットについてもう少し調べていきたい。
  • @sadanora

    • 途中参加で中身全然はいってこなかったw
    • Active Storageはポリモーフィック関連付けによって画像を紐づけるモデルと画像を紐づけている
      • ActiveStorage::AttachmentActiveStorage::Blobとの中間テーブル
      • ActiveStorage::Blobは画像のメタ情報を格納している
  • @sharoa

    • 今日は比較的わかりやすくて、ふむふむと思えた。(それでもなんだこれ、みたいな単語?もあるけど。)
    • 他のアップロード用のgemと同様にActive Storageにもサムネイル生成の機能がついている。
    • ただ、画像アップロード用のgemによってサムネイル生成のタイミングが異なる。
        - CarrierWaveはアップロードしたタイミングでサムネイルを生成
        - Shrineはアップロードした後に非同期でサムネイルを生成可能
        - Active Storageはサムネイル画像用のURLにアクセスしたタイミングでサムネイルを生成
    • ファイルへのアクセス制限で、Active Storageを利用した場合、ユーザーの目に触れるURLは必ずアプリケーションサーバのドメインになる。アプリケーションサーバにリクエストが届くとサーバはファイル用の期限付きURLを作成し、そこにリダイレクトする。(期限はデフォルトで5分)
  • @hiromisugie

    • Active Storageについて、プラクティスでやったところを復習することができて良かった。
    • Active Storageはポリモーフィック関連を採用している。
    • 画像のアップは、実際のアプリではS3、GCS、Azureなどにアップするので、この3つはデフォルトで選択できるようになっている。
    • サムネイル作成はImageMagickを使う。これもプラクティスでやったがほぼ忘れていたので改めて読めて良かった…!
    • Active Storageは、ファイルへのアクセス制限を現実的な形で実現できる。(ページにアクセス制限をかけつつ、画像そのものは期限付きURLへリダイレクトすることで、公開されても被害を抑えることができる)
    • ダイレクトアップロード機能は、アプリケーションサーバを経由せずにファイルを直接クラウドストレージにアップできる。これによりアップロードにかかる時間を減らし、アプリケーションサーバへの負荷を軽減できる。
      • 良いことづくめな気がするが、「ダイレクトアップロードでは、ファイルがアップロードされたにもかかわらずレコードにまったくアタッチされないことがある」らしい(Railsガイドより)。理解が及んでいないけど、注意事項もあるということも一旦わかりました。
  • @motohiro-mm

    • Active Storageの機能は2つのモデルで作られる
      • ActiveStorage::Attachment→主となるモデルとBlobとの中間テーブルに相当するモデル
      • ActiveStorage::Blob→アップロードファイルのメタ情報を管理するモデル
    • has_one_attached :portrait:userとblobを1対1で紐づける
    • サムネイル作成はImageMagickとImageProcessingを使う
    • ファイルへのアクセス制限は期限付きURLを生成することで被害を限定的に抑える
    • ダイレクトアップロード機能
      • アプリケーションサーバを経由しないことで、アップロードにかかる時間を減らせる
      • ファイルがアップロードしたのにレコードにアタッチされない可能性がある
    • blobがなんなのか分かりました
  • @moegi29

    • ActiveStorageの機能はActiveStorage::AttachmentとActiveStorage::Blobの2つでできている
    • ActiveStotageはデフォルトでS3,GCS,AzureStorageの3つのクラウドストレージに対応していて、GCSはGoogleクラウドストレージのことだった。
    • ActiveStorageがファイルへのアクセス制限をしてくれる機能は便利そう。

Select a repo