494 Views
July 09, 25
スライド概要
Omotesando.rb #111 で使用したLT資料です。
https://omotesandorb.connpass.com/event/359259/
ブルーモ証券CTO
Rails engine に packwerk いれると大変 (だからやめとけ) 2025.07.03(Thu.) Omotesando.rb #111 ブルーモ証券株式会社 小林悟史(noel) ブルーモ証券株式会社 ©2025 Bloomo Securities Inc.
• 小林 悟史(小林 ノエル) @free_world21 • ブルーモ証券株式会社 取締役CTO 好きなバンド • LʼArc~en~Ciel • PIERROT • Janne Da Arc • Acid Black Cherry THE FARM@NY ©2025 Bloomo Securities Inc. CARR WORKPLACE@Chicago
1年前こんなLTした ©2025 Bloomo Securities Inc.
1年前こんなLTした ©2025 Bloomo Securities Inc.
1年前こんなLTした ©2025 Bloomo Securities Inc.
Rails engine とは? YOUTRUSTさんが解説してくれたので割愛 ©2025 Bloomo Securities Inc.
Packwerkとは? - Shopifyが開発してるモジュラーモノリス化支援gem - Railsで使う場合はよく packs-rails というgemといっしょに使われる - app/packs 配下に package(ミニRails)としてコードを区切って 入れる - 基本の使い方は package 間の依存関係を管理して、違反を検出する ©2025 Bloomo Securities Inc.
Rails Engine(共通モデル部分)部分が膨れてきたので、packwerk を入れてみた - Rails engine に gem ‘packwerk’ を追加して bundle install - Rails engine 内部で満を持して packwerk check を実行する! $ bundle exec packwerk check /usr/local/bundle/gems/packwerk3.2.2/lib/packwerk/rails_load_paths.rb:60:in `require_application': A Rails application could not be found in /brooklyn_base (RuntimeError) ©2025 Bloomo Securities Inc.
詳しい人(ChatGPT)に聞いてみた ©2025 Bloomo Securities Inc.
詳しい人(ChatGPT)が手順も教えてくれた! ©2025 Bloomo Securities Inc.
より詳細な手順を聞いてみたら、こんな感じのディレクトリ構成にしろって言われた ©2025 Bloomo Securities Inc.
より詳細な手順を聞いてみたら、こんな感じのディレクトリ構成にしろって言われた packageのコードはここ Packwerkの設定ファイルはここ ©2025 Bloomo Securities Inc.
より詳細な手順を聞いてみたら、こんな感じのディレクトリ構成にしろって言われた packageのコードはここ Packwerkの設定ファイルはここ 🤔 ©2025 Bloomo Securities Inc.
とりあえずやってみる 1. brooklyn_base (Rails engine) 直下に packs ディレクトリを作る 2. その中に適当な package を2つ作る(A, B) A 3. A, Bはそれぞれ独⽴した package ということにする 4. あえてAがBに依存するコードを書く(AからB内に定義されている クラスを呼び出す) 5. packwerk check を実⾏して、違反が検出されるか B (ちゃんと Packwerk が動いているか)確かめる ©2025 Bloomo Securities Inc.
とりあえずやってみる ©2025 Bloomo Securities Inc.
とりあえずやってみる 🤔通ちゃった・・・ ©2025 Bloomo Securities Inc.
詳しい人(ChatGPT)にクレームをいれる😡 ©2025 Bloomo Securities Inc.
色々やった結果、動かす方法がわかるが・・・ 1. brooklyn_base (Rails engine) 直下の packs ディレクトリを spec/dummy(テスト⽤ホストアプリ)配下にコピーする 2. spec/dummy 配下で packwerk check を実⾏する 3. ちゃんと動作する︕ ©2025 Bloomo Securities Inc.
色々やった結果、動かす方法がわかるが・・・ 1. brooklyn_base (Rails engine) 直下の packs ディレクトリを spec/dummy(テスト⽤ホストアプリ)配下にコピーする 2. spec/dummy 配下で packwerk check を実⾏する 3. ちゃんと動作する︕ - こんな感じのスクリプトファイルを書く - CIではそれを実⾏する ©2025 Bloomo Securities Inc.
結論:Rails engine に packwerk を入れるのはやめた • そもそも Rails engine 自体が1つの package になるようにするのが王道の使い方 – 1 Rails engine = 1 packwerk package というイメージ • 明らかに無理くり感がある – Rails engine 内部で Packwerk が使われることをは想定されてない • モジュラーモノリスをやるにしても、もうちょっと他のやり方があるはず Rails engine に packwerk いれると大変 (だからやめとけ) ©2025 Bloomo Securities Inc.
We are Hiring! 一緒にBloomoのサービス開発を してくれる仲間を募集中! https://careers.bloomo.co.jp/ ©2025 Bloomo Securities Inc.