window.pipedriveLeadboosterConfig={です。 ベース:'leadbooster-chat.pipedrive.com'、 companyId:11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2、 } ;(function () { var w = window もし (w.LeadBooster) {なら console.warn('LeadBooster already exists') } else { w.LeadBooster = { {. q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 関数 (n) { { this.q.push({ t: 'o', n: n, h: h }) this.q.push({ t: 't', n: n }) }, } } })() パブ/サブ付きRuby on Rails - The Codestについてさらに詳しく
The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2022-12-07
ソフトウェア開発

パブ/サブ付きRuby on Railsについてさらに詳しく

The Codest

ミハエル・パウラック

シニアRubyデベロッパー

Pub/Subはプロジェクトに多くのメリットをもたらします - コードをクリーンにし、サービスをデカップリングし、簡単にスケーラブルにすることができます。以下の記事でPub/Subについて詳しく学び、プロジェクトをレベルアップさせましょう!

Ruby on Rails (Rails、RoR)で書かれた有名なWebアプリケーションフレームワークです。 ルビー プログラミング言語。 パブ/サブ と呼ばれるソフトウェアデザインパターンの略称である。 パブリッシュ・サブスクライブ.Railsのソフトウェア・コンポーネント間の通信をPub/Subでどのように処理できるかを説明する。

パブ/サブとは?

パブ/サブ は、サービス間通信を提供するソフトウェアのデザインパターンである。サービス
は、発行者(生産する人)と受信者(消費する人)の2つの役割のいずれかを伴う。何が
消費されるべき生成物は、イベント、メッセージ、通知として決定される。その中で
本記事では、両者は同じものを指す言葉として同じ意味で使われている。
生産するサービスは消費する人を知らない。消費するサービスは
メッセージの発信元を知ることができる。お互いに知らないままでいられる。これは
メッセージキューでは、メッセージを送信するコンポーネントがその宛先を知っていることが多い。
- このスタイルのメッセージングでは、どこにいてもメッセージを送ることができる。このメカニズムは
の パブ/サブ そしてそれは、両者が切り離されていることを意味する。

相互の利益を表現するためには、共通の理解が必要である。したがって
この2つの役割には、メッセージのプロデューサーと、メッセージのプロデューサーの間のスティックという暗黙のメカニズムがある。
メッセージの消費者が出会う。このメカニズムは、サブジェクト、サブスクリプション、またはトピックと呼ばれる。これは
メッセージのサブジェクトへの分類を担当し、本質的にはステートレス・メッセージ・フィルタである。
トピックは放送局の役割を果たす。パブリッシャーはトピックへのメッセージを作成する、
サブスクライバはトピックからのメッセージを即座に受け取る。なぜなら
サービスでは、メッセージを交換する最も効率的な方法は、それらを非同期で処理することである。

Pub/SubなしのRails

デフォルトでは、コンポーネント間でメッセージを受け渡すソフトウェアデザインパターンにRailsのオーバーヘッドはありません。開発者は標準の オブジェクト指向プログラミング (OOP)パラダイム:関数にパラメータを渡し、値に関するクラスを求める。

アプリケーションがそれほど複雑でない場合は、これで十分かもしれない。アプリケーションの規模が大きくなると、例えば、いくつかの操作を非同期で行う必要が出てくる。 プロジェクト は、そのデータ・ワークフローを解決する抽象化を必要としている。車輪を再発明する代わりに、開発者は パブ/サブ この抽象性の欠如を埋めるために。

RailsによるPub/Subの長所

  • アクティブレコードのコールバックを避ける。
  • システムに非同期並列処理を追加することで、パフォーマンス、信頼性、スケーラビリティが向上する。
  • メッセージは、システムのさまざまな部分に非同期にブロードキャストすることができる。
  • システムのさまざまな部分にメッセージを非同期にブロードキャストできるようにする。
  • デカップリング - 機能の追加や変更は、Pub/Subのため何も影響しない。
    すべての相互作用の仕方を変更することができる。
  • メッセージコンシューマーは、定期的にアップデートや新しいメッセージをチェックする必要がなくなります。
    情報を提供します。特に、以下のようなシステムで問題となる配信遅延を減らすことができる。
    遅れは許されない。
  • システムが処理できる加入者数に制限はない、
    アップグレード、増殖、消滅はいつでも可能だ。

RailsによるPub/Subの欠点

  • Pub/Subシステムの主な欠点は、パブリッシャーとサブシステムが切り離されていることである。
    契約者

Rails Pub/Subの紹介

Railsのソースの例は、ライブラリ
パブ/サブ・オン・レイルズ (Rubyの命名法では、ライブラリのことをgemと呼びます):詳細はgemのreadmeを参照してください。実装はモジュールで構成されています:

  1. ドメイン
  2. イベント
  3. イベントハンドラ、
  4. イベント出版社
  5. 購読。

ドメイン

Pub/Subのコンテキストを提供するために、ビジネスロジックを記述する。 コード.

 モジュール Notifications
   extend PubSub::Domain
 終了
 モジュール Reports
   extend PubSub::Domain
 終了

イベント

これは、何が起こったかを記述するクラスである。例えば、キャンセルされた、変更された、作成された、破壊された、送信された、更新された。イベント名は次のようになります:これは財務諸表が作成されたことを意味します。

 クラス Reports::ProfitAndLossStatementCreatedEvent < PubSub::DomainEvent
   属性 :profit_and_loss_statement_id, Types::Strict::Integer
 終了

イベントパブリッシャー

イベントを発することができるクラス。この例では、サービス・レポートを作成しています。レポートが正常に作成されたら、そのレポートを作成したイベントを発行します。

クラス Reports::ProfitAndLossStatementService
   include PubSub::Emit
    def execute
     emit(:report_profit_and_loss_statement_created, profit_and_loss_statement_id: id) if result.ok?
   end
 end

イベントハンドラ

このクラスは、イベントの処理に応答して実行されなければならない。

モジュール Notifications
 class ReportsProfitAndLossStatementCreatedHandler < PubSub::DomainEventHandler
   def call
     ReportMailer.profit_and_loss_statement(profit_and_loss_statement).deliver_now
   終了

   プライベート

   def profit_and_loss_statement
     ProfitAndLossStatement.find(event_data.profit_and_loss_statement_id)
   終了
 終了
終了

サブスクリプション

イベントは、サブスクリプションを通じてハンドラに結び付けられる。

を通知します:
 reports__profit_and_loss_statement_created: async

使用例:

  • ソーシャルネットワークの「フォロー」機能、
  • モノのインターネット
  • 郵送、
  • 生成されたファイルに関する通知。

似たようなパターン

  1. イベントバス - コンポーネントは、誰がそれを拾うのか、何人の回答者が反応するのかを知ることなく、EventBusにイベントを送信することができます、
  2. オブザーバー - サブジェクトは、オブザーバーと呼ばれる依存者のリストを保持し、その状態が変化するたびに通知する、
  3. プーリング - ポーリングでは、クライアントは定期的に新しいイベントやデータがあるかどうかをシステムに問い合わせる。

宝石

  • https://github.com/edisonywh/rocketman

  • https://github.com/krisleech/wisper

  • https://github.com/stevo/pubsubオンレール

概要

Pub/subはRuby in Railsでは一般的なアプローチではありません。記事で紹介したように、このパターンはプロジェクトに多くの利点をもたらします - コードをクリーンにし、サービスを切り離し、簡単にスケーラブルにすることができます。

協力バナー

関連記事

フィンテック

Rubyの5つの活用例

Rubyで何ができるのだろうと思ったことはないだろうか。まあ、可能性は無限大でしょうが、多少なりとも知られている事例についてお話しできれば幸いです。

The Codest
パヴェル・ムジンスキー Software Engineer
ソフトウェア開発

TMUX、Vim、Fzf + RipgrepによるRails開発

数年前、私は友人たち(全員Java開発者)と焼き肉を食べていた。なぜその話になったのかはわからないが、私たちは自分のコーディング環境について話し始めた。I...

The Codest
マルチン・ドリワ Software Engineer
ソフトウェア開発

製品開発:PythonとRubyの比較

PythonとRubyはどちらも最も広く使われているバックエンドプログラミング言語です。Pythonの方が少し人気があり、応用範囲も広い。しかし、Rubyにも多くの利点があります。

The Codest
カミル・フェレンス 成長部門責任者
ソフトウェア開発

パックワークによるRuby on Railsのモジュール化 エピソード1

人間は、多くの時間と労力を割かなければ、問題の全体像を把握することが難しい。これは特に、大規模で複雑なアプリケーションを扱っているときに起こる......。

ニコラ・ニソリア
ソフトウェア開発

Rubyエコシステムにおけるラックの役割

Rubyのエコシステムにおけるラックの役割について専門家から学び、Rubyのスキルをアップさせましょう。

ニコラ・ニソリア

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    著作権 © 2025 by The Codest。無断複写・転載を禁じます。

    jaJapanese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese