Submit Search
そのRails Engine、 本当に必要ですか?
1 like
3,627 views
nixiesan
モノリシックなRailsアプリケーションで Rails Engine を採用しなかった話 表参道.rb #41 〜技術的負債〜 Nobuhiro Nikushi 2018/12/06
Software
Read more
1 of 26
Download now
Download to read offline
1
2
3
4
5
6
Most read
7
8
9
10
Most read
11
12
Most read
13
14
15
16
17
18
19
20
21
22
23
24
25
26
More Related Content
PPTX
CloudFront経由でのCORS利用
Yuta Imai
PPTX
Azure API Management 俺的マニュアル
貴志 上坂
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
PPTX
20211109 JAWS-UG SRE keynotes
Amazon Web Services Japan
PPTX
20220409 AWS BLEA 開発にあたって検討したこと
Amazon Web Services Japan
PPTX
クラウドでも非機能要求グレードは必要だよね
YoshioSawada
PDF
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
Hibino Hisashi
PDF
Where狙いのキー、order by狙いのキー
yoku0825
CloudFront経由でのCORS利用
Yuta Imai
Azure API Management 俺的マニュアル
貴志 上坂
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
20211109 JAWS-UG SRE keynotes
Amazon Web Services Japan
20220409 AWS BLEA 開発にあたって検討したこと
Amazon Web Services Japan
クラウドでも非機能要求グレードは必要だよね
YoshioSawada
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
Hibino Hisashi
Where狙いのキー、order by狙いのキー
yoku0825
What's hot
(20)
PDF
Google Cloud で実践する SRE
Google Cloud Platform - Japan
PDF
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Amazon Web Services Japan
PDF
AWSのログ管理ベストプラクティス
Akihiro Kuwano
PDF
Azure Monitor Logで実現するモダンな管理手法
Takeshi Fukuhara
PDF
JenkinsとCodeBuildとCloud Buildと私
Shoji Shirotori
PDF
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
Shuji Kikuchi
PDF
webエンジニアのためのはじめてのredis
nasa9084
PDF
20200721 AWS Black Belt Online Seminar AWS App Mesh
Amazon Web Services Japan
PDF
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
PDF
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Amazon Web Services Japan
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
PDF
DevOps with Database on AWS
Amazon Web Services Japan
PPTX
WayOfNoTrouble.pptx
Daisuke Yamazaki
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
PDF
Kongの概要と導入事例
briscola-tokyo
PDF
Amazon S3を中心とするデータ分析のベストプラクティス
Amazon Web Services Japan
PDF
AIOpsで実現する効率化 OSC 2022 Online Spring TIS
Daisuke Ikeda
PDF
AWS Black Belt Online Seminar - Amazon Lightsail
Amazon Web Services Japan
PDF
DevOpsに求められる様々な技術とその連携の学習方法
CASAREAL, Inc.
PPTX
ビッグデータ処理データベースの全体像と使い分け 2018年version
Tetsutaro Watanabe
Google Cloud で実践する SRE
Google Cloud Platform - Japan
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Amazon Web Services Japan
AWSのログ管理ベストプラクティス
Akihiro Kuwano
Azure Monitor Logで実現するモダンな管理手法
Takeshi Fukuhara
JenkinsとCodeBuildとCloud Buildと私
Shoji Shirotori
[AKIBA.AWS] AWS Elemental MediaConvertから学ぶコーデック入門
Shuji Kikuchi
webエンジニアのためのはじめてのredis
nasa9084
20200721 AWS Black Belt Online Seminar AWS App Mesh
Amazon Web Services Japan
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Amazon Web Services Japan
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
DevOps with Database on AWS
Amazon Web Services Japan
WayOfNoTrouble.pptx
Daisuke Yamazaki
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
Kongの概要と導入事例
briscola-tokyo
Amazon S3を中心とするデータ分析のベストプラクティス
Amazon Web Services Japan
AIOpsで実現する効率化 OSC 2022 Online Spring TIS
Daisuke Ikeda
AWS Black Belt Online Seminar - Amazon Lightsail
Amazon Web Services Japan
DevOpsに求められる様々な技術とその連携の学習方法
CASAREAL, Inc.
ビッグデータ処理データベースの全体像と使い分け 2018年version
Tetsutaro Watanabe
Ad
Similar to そのRails Engine、 本当に必要ですか?
(20)
PPTX
Tech fun rails_workshop
OMEGA (@equal_001)
KEY
Real world rails
Jun Yokoyama
PPTX
Shinjuku.rb #28 LT Rails Engineで変なことをやってみた話
Takeuchi Yuichi
PDF
Rubykansai 81
Satomi Tsujita
PDF
Tottoruby 20110903
Takashi SAKAGUCHI
PDF
Hyper → Highspeed → Development
aktsk
PDF
Rails3.1rc4を試してみた
Takahiro Hidaka
PDF
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
R S
PDF
パフォーマンス計測Ciサービスを作って得た知見を共有したい
zaru sakuraba
PPTX
fluxflex meetup in Tokyo
Kyosuke Inoue
PDF
Railsの開発環境作るぞ
Yoichi Toyota
PPTX
【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン
linkbal
PPTX
UnicastWS vol.2
Unicast Inc.
PDF
Sqale の Puppet と Chef (と テスト)
hiboma
KEY
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
Yasuko Ohba
PDF
PaaSの作り方 Sqaleの場合
hiboma
PPTX
Fluxflex meetup 2011 in Tokyo
Kyosuke Inoue
PDF
クラウドインターネットルータ
Yasuhito Takamiya
PDF
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
schoowebcampus
PPTX
Rails on GKEで運用するWebアプリケーションの紹介
Makoto Haruyama
Tech fun rails_workshop
OMEGA (@equal_001)
Real world rails
Jun Yokoyama
Shinjuku.rb #28 LT Rails Engineで変なことをやってみた話
Takeuchi Yuichi
Rubykansai 81
Satomi Tsujita
Tottoruby 20110903
Takashi SAKAGUCHI
Hyper → Highspeed → Development
aktsk
Rails3.1rc4を試してみた
Takahiro Hidaka
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
R S
パフォーマンス計測Ciサービスを作って得た知見を共有したい
zaru sakuraba
fluxflex meetup in Tokyo
Kyosuke Inoue
Railsの開発環境作るぞ
Yoichi Toyota
【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン
linkbal
UnicastWS vol.2
Unicast Inc.
Sqale の Puppet と Chef (と テスト)
hiboma
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
Yasuko Ohba
PaaSの作り方 Sqaleの場合
hiboma
Fluxflex meetup 2011 in Tokyo
Kyosuke Inoue
クラウドインターネットルータ
Yasuhito Takamiya
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
schoowebcampus
Rails on GKEで運用するWebアプリケーションの紹介
Makoto Haruyama
Ad
そのRails Engine、 本当に必要ですか?
1.
© RakSul,Inc. All
Rights Reserved. そのRails Engine、 本当に必要ですか? モノリシックなRailsアプリケーションで Rails Engine を採用しなかった話 表参道.rb #41 〜技術的負債〜 Nobuhiro Nikushi 2018/12/06
2.
© RakSul,Inc. All
Rights Reserved. About me 二串 信弘 ● Works for RAKSUL INC. from 2017/3 ● Tech Lead in Raksul Platform Team ● Favorite Languages: Ruby, Golang, TypeScript, etc ● Private: English, Violin, 子育て
3.
ファブレス型印刷/広告EC “ラクスル” 物流のUber “ハコベル” 会社のサービス紹介 印刷や物流といった伝統的な産業で事業を展開
4.
● ラクスルのシステムのRebuildを進めています ● PHPで書かれた一枚岩のWebシステムを、Railsなどで作り変えてます 最近やっていること ref ●
一枚岩なレガシーシステムを ラクスルではどのように Rebuildしているの か?https://www.slideshare.net/nixiesan/rebuild-124366117 ● そうだ、ラクスルを作り直そう! | RakSul Tech Blog https://tech.raksul.com/2017/12/18/raksul-platform-project/
5.
● 新しいRailsアプリケーションでは、複数コンポーネント1Railsアプリ同居型のモノリ スアプローチを採用しています。 ● そのリポジトリ構成の戦略として、Rails
Engineを使うかを検討し、結果採用を見送 りました。その時の知見を共有します。 今日の話
6.
© RakSul,Inc. All
Rights Reserved. ● raksul-core = 新しい Rails アプリケーション ● 既存システム(github:raksul/raksul) の置き換えとしてスタート raksul-core, the new place for raksul.com raksul (existing PHP sytem) DB LB GET https://raksul.com/path/to/page raksul-core (The new raksul.com in Rails) 置き換え機能、新機能既存ページ The Raksul’s Database migration
7.
© RakSul,Inc. All
Rights Reserved. 新しいRailsアプリ(raksul-core)の機能要件 ● 3つのサイト(or API)機能を提供する ○ 以後 と呼ぶ ○ 管理画面 以後 と呼ぶ ○ 内部 以後 と呼ぶ ● これら機能は1つのRailsアプリで管理したい ○ 意図してモノリシックなアプローチを採用しているため ref: 詳しい経緯 一枚岩なレガシーシステムを ラクスルではどのように Rebuildしているの か?https://www.slideshare.net/nixiesan/rebuild-124366117
8.
© RakSul,Inc. All
Rights Reserved. 1. Rails Engine案 ○ 表側のサイトと管理画面を同居させる文脈でインターネットを検索すると事例 が結構見つかる。案として検討 ○ 結局、採用見送り 2. namespace(Module)で単純分割する案 ○ 採用 リポジトリ構成案
9.
© RakSul,Inc. All
Rights Reserved. 3コンポーネント(Web, Ops, API) + 1 Rails Engine(Shared) 構成 Rails Engine を使った構成案 Layering of raksul-core by Rails Engine 責務 Web ● A rails app for Public Web Site ● フロント向けAPI(BFF)も兼任 Ops ● 管理画面 ● フロント向けAPI(BFF)も兼任 API ● A rails app for Internal Web APIs for other systems Shared ● Rails Engine ● Modelを共通レイヤとして ● コンポーネントまたいで利用可 能なコアビジネスロジックはここ に
10.
© RakSul,Inc. All
Rights Reserved. メリット ● Gemfileを小さく保てる ○ 個々で好きな を選択できて の依存関係を小さ く保てる ● 各 app が独立して起動するのでnamespace不要 ■ 例 の と の が あってもよい。それぞれ独立した サーバプロセスとなるので。 ● フロントエンドのアセット系管理の柔軟性が増す ○ しかり、 しかり で別々で管理できる ● config/environments/production.rb 等 設定ファイルが独立 ○ 用だけの設定とかあっても、それぞれで独立管理なので問題ない Rails Engine を使った構成案のメリット
11.
© RakSul,Inc. All
Rights Reserved. 一見するとめちゃくちゃ良い案ではないか、とおもってしまった自分がいました。 ちょっと冷静に考えると、これらメリットはメリットであるものの本当にそのメリットは必須 なんだろうかとおもいました。 そこでデメリットについても考えてみました。 ちょっと冷静に考えてみる
12.
© RakSul,Inc. All
Rights Reserved. ● 初期の構築に時間がかかる ○ リポジトリ構成をどうすればいい で ○ CI、デプロイ、インフラ周りが複雑化 ● リポジトリ構成の複雑化は新入りのキャッチアップコストにつながる ● Rails Engine の知識。http://guides.rubyonrails.org/engines.html を読めば分か るでしょ、という意見もあるけど、分からない人もいます。 ● そもそもモデルが遠くに(shared)に行ってしまうデメリット ○ 単体テストとか、 とかの運用大変そう ○ このあたりはどのレイヤを に切り出すかを変えれば変わるかもしれ ません ● test/dummy/app を管理しなければならない手間が生まれる Rails Engine を使った構成案のデメリット
13.
© RakSul,Inc. All
Rights Reserved. 違う切り方で Rails Engine を適用すれば、うまく運用できたのかもしれないが... Rails Engineの構成案
14.
© RakSul,Inc. All
Rights Reserved. メリット < デメリット 弊社ではRails Engine の採用を見送りました
15.
© RakSul,Inc. All
Rights Reserved. namespace(Module)で単純分割する案 を採用しました もう1つの案
16.
© RakSul,Inc. All
Rights Reserved. 3種類のコンポーネントを定義 Controller以上をnamespace(module)で単純分割 namespaceによるコンポーネント同居構成案 Database Models Thor CLI(Batch) Controllers Views, Serializers Controllers Views, Serializers Controllers Serializers Web Ops API raksul.com 管理画面 api.raksul.local 責務 Web ● Public Web Site ● フロント向けAPI(BFF)も兼任 Ops ● 管理画面 ● フロント向けAPI(BFF)も兼任 API ● Internal Web APIs for other systems Layering of raksul-core by single rails app
17.
© RakSul,Inc. All
Rights Reserved. ● 3コンポーネントを切る Top Level Module を定義 `Web`, `Ops`, `Api` ● Controller以上のレイヤをModule(=ディレクトリ)で分割するだけ ● routes.rb肥大化は config/routes/{web,ops,api}.rb で分割(後述) ● Controllers, Views, Serializers はコンポーネントをまたいで依存させてはいけな い、のルールを守る ○ 例 内で コンポー ネント するのはコンポーネントまたぎなので ○ 例 を コンポーネントのコントローラが参照して はいけません。代わりに を実装しましょう。 シンプル KISSの原則 namespaceによるコンポーネント同居構成案の概要
18.
© RakSul,Inc. All
Rights Reserved. Controller ex) ● Api::V1::UsersController ● Web::Mypage::OrdersController ● Ops::UsersController リポジトリ構成(Controller) . ├── app/ │ ├── controllers/ │ │ ├── api/ │ │ │ |── v1/ │ │ │ | └── users_controller.rb │ │ ├── application_controller.rb │ │ ├── concerns │ │ │ ├── api/ .. │ │ │ ├── ops/ .. │ │ │ └── web/ .. │ │ ├── ops/ │ │ │ └── users_controller.rb │ │ └── web/ │ │ ├── account/ .. │ │ ├── mypage/ .. │ │ └── top_page_controller.rb
19.
© RakSul,Inc. All
Rights Reserved. Serializers(AM::Serializers) ● web/, ops/, api/でディレクトリを 切る View ● web/, ops/ でディレクトリを切る リポジトリ構成(Presentation) │ ├── serializers/ │ │ ├── api/ │ │ │ └── v1/ │ │ │ └── user_serializer.rb │ │ ├── concerns/ │ │ │ ├── api/ │ │ │ ├── ops/ │ │ │ └── web/ │ │ ├── ops/ │ │ └── web/ │ │ ├── api │ │ │ └── v1 │ │ │ ├── order_serializer.rb │ └── views/ │ ├── layouts/ │ │ ├── ops/ │ │ └── web/ │ ├── ops/ │ └── web/
20.
© RakSul,Inc. All
Rights Reserved. routes.rb肥大化対策 コンポーネント単位でファイルを分 割 cf Railsのroutes.rbを複数のファイ ルに分割する | 日々雑記 config/routes.rb # config/routes.rb Rails.application.routes.draw do draw :api draw :ops draw :web end # config/routes/web.rb Rails.application.routes.draw do constraints host: 'raksul.com' do namespace :mypage do get '/', to: 'top_page#show' end # etc... end end
21.
© RakSul,Inc. All
Rights Reserved. ● フロントエンドの構成の工夫。ref: Webpackerをやめるなら ● デプロイ周りのカスタマイズ 時間の都合、やむなく興味があれば直接質問ください。 ref: WebpackManifestというgemが便利、という https://tech.raksul.com/2018/10/18/rails-webpack-without-webpacker/ namespaceによるコンポーネント同居構成案のデメリット
22.
© RakSul,Inc. All
Rights Reserved. ● この構成で1年ほど運用できている ● 開発効率は非常によい ● シンプルなやり方なので初見でも理解できるい この構成で運用して
23.
© RakSul,Inc. All
Rights Reserved. ● インターネット上で得られる知見は、必ずしも自分のケースにマッチするわけではな いので、組織の人数やスキル感、運用時のことを考えて決めよう ● Simple な構成は正義 学び
24.
© RakSul,Inc. All
Rights Reserved. まとめ
25.
© RakSul,Inc. All
Rights Reserved. 複数コンポーネント1Railsアプリ同居型のモノリスアプローチを選択し、そのリポジトリ構 成の戦略として、Rails Engineを使うかを検討し、結果採用を見送った際の知見を共有 しました。 まとめ
26.
© RakSul,Inc. All
Rights Reserved. Thank you!
Download