Soumettre la recherche
Mettre en ligne
サービスクラス、その前に
•
2 j'aime
•
12,326 vues
Yasutomo Uemori
Suivre
Rails Developer Meetup2018 Day2のスポンサーセッション時のスライドです。 https://techplay.jp/event/655769
Lire moins
Lire la suite
Ingénierie
Signaler
Partager
Signaler
Partager
1 sur 26
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Rubocopとの付き合い方
Rubocopとの付き合い方
Yasutomo Uemori
Rails on Dockerとの戦い
Rails on Dockerとの戦い
Yasutomo Uemori
WP REST API の活用事例と今後
WP REST API の活用事例と今後
Yuusuke Yoshida
Nespのコード生成
Nespのコード生成
Kouji Matsui
Docker study for beginner in My Company 2017/10/19
Docker study for beginner in My Company 2017/10/19
TearTheSky
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
DIVE INTO CODE Corp.
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
Shogo Iwano
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
Recommandé
Rubocopとの付き合い方
Rubocopとの付き合い方
Yasutomo Uemori
Rails on Dockerとの戦い
Rails on Dockerとの戦い
Yasutomo Uemori
WP REST API の活用事例と今後
WP REST API の活用事例と今後
Yuusuke Yoshida
Nespのコード生成
Nespのコード生成
Kouji Matsui
Docker study for beginner in My Company 2017/10/19
Docker study for beginner in My Company 2017/10/19
TearTheSky
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
DIVE INTO CODE Corp.
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
Shogo Iwano
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Kouji Matsui
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
haljik Seiji
Ciじゃない方のJenkins
Ciじゃない方のJenkins
Katsuhiro Miura
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
Akira Inoue
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
Takuya Kawabe
フロントエンドの技術を刷新した話し。
フロントエンドの技術を刷新した話し。
Yutaka Horikawa
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hong Chen
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
DroidKaigi - Welcome talk
DroidKaigi - Welcome talk
Masahiro Hidaka
DevOpsって何?
DevOpsって何?
Gosuke Miyashita
Async deepdive before de:code
Async deepdive before de:code
Kouji Matsui
Cocoa関西勉強会#49
Cocoa関西勉強会#49
yashigani
[社内勉強会]Gradleを使おう
[社内勉強会]Gradleを使おう
hirooooo
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
慎一 古賀
Aiming study#6pdf
Aiming study#6pdf
Koutaro Chikuba
20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発
Mao Ohnishi
Dot netconf2017 - VS拡張
Dot netconf2017 - VS拡張
Tatsuya Ishikawa
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
慎一 古賀
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
Ouka Yuka
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
Ecsとlambdaのバッチ処理
Ecsとlambdaのバッチ処理
政雄 金森
ヘッドレスCMS調査 Strapiを試してみた
ヘッドレスCMS調査 Strapiを試してみた
SosukeYamada
Contenu connexe
Tendances
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Kouji Matsui
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
haljik Seiji
Ciじゃない方のJenkins
Ciじゃない方のJenkins
Katsuhiro Miura
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
Akira Inoue
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
Takuya Kawabe
フロントエンドの技術を刷新した話し。
フロントエンドの技術を刷新した話し。
Yutaka Horikawa
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hong Chen
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
DroidKaigi - Welcome talk
DroidKaigi - Welcome talk
Masahiro Hidaka
DevOpsって何?
DevOpsって何?
Gosuke Miyashita
Async deepdive before de:code
Async deepdive before de:code
Kouji Matsui
Cocoa関西勉強会#49
Cocoa関西勉強会#49
yashigani
[社内勉強会]Gradleを使おう
[社内勉強会]Gradleを使おう
hirooooo
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
慎一 古賀
Aiming study#6pdf
Aiming study#6pdf
Koutaro Chikuba
20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発
Mao Ohnishi
Dot netconf2017 - VS拡張
Dot netconf2017 - VS拡張
Tatsuya Ishikawa
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
慎一 古賀
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
Ouka Yuka
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
Tendances
(20)
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
Ciじゃない方のJenkins
Ciじゃない方のJenkins
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
フロントエンドの技術を刷新した話し。
フロントエンドの技術を刷新した話し。
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App Inventor
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
DroidKaigi - Welcome talk
DroidKaigi - Welcome talk
DevOpsって何?
DevOpsって何?
Async deepdive before de:code
Async deepdive before de:code
Cocoa関西勉強会#49
Cocoa関西勉強会#49
[社内勉強会]Gradleを使おう
[社内勉強会]Gradleを使おう
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
Aiming study#6pdf
Aiming study#6pdf
20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発
Dot netconf2017 - VS拡張
Dot netconf2017 - VS拡張
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Similaire à サービスクラス、その前に
Ecsとlambdaのバッチ処理
Ecsとlambdaのバッチ処理
政雄 金森
ヘッドレスCMS調査 Strapiを試してみた
ヘッドレスCMS調査 Strapiを試してみた
SosukeYamada
Non-Functional Programming in Scala
Non-Functional Programming in Scala
takezoe
俺がモデルだ!問題に立ち向かう
俺がモデルだ!問題に立ち向かう
Akira Suenami
InDesign正規表現勉強会_名古屋_0727
InDesign正規表現勉強会_名古屋_0727
ShinyaNakagawa
エンジニアのお仕事.pdf
エンジニアのお仕事.pdf
shumashimo1
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料
Takashi Aoe
アプリエンジニアからクラウド専用のインフラエンジニアになってみて
アプリエンジニアからクラウド専用のインフラエンジニアになってみて
Sato Shun
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀
増田 亨
Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
駅すぱあとWebサービスにおけるAWSとその周辺
駅すぱあとWebサービスにおけるAWSとその周辺
Mikawa Kouta
Adminとうまく共存するためのApex開発Tips
Adminとうまく共存するためのApex開発Tips
Takashi Hatamoto
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
開発初心者がAWSサービスを色々使ってアプリ開発をした話
開発初心者がAWSサービスを色々使ってアプリ開発をした話
MaiFujisawa
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
Tokoroten Nakayama
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
Drecom Co., Ltd.
May the FaaS be with us!!
May the FaaS be with us!!
真吾 吉田
Drupal Market in Japan @ 「DrupalCon 2016 New Orleans」情報交換会
Drupal Market in Japan @ 「DrupalCon 2016 New Orleans」情報交換会
Hidekazu Ikeda
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
クラウド時代の人材育成
クラウド時代の人材育成
Trainocate Japan, Ltd.
Similaire à サービスクラス、その前に
(20)
Ecsとlambdaのバッチ処理
Ecsとlambdaのバッチ処理
ヘッドレスCMS調査 Strapiを試してみた
ヘッドレスCMS調査 Strapiを試してみた
Non-Functional Programming in Scala
Non-Functional Programming in Scala
俺がモデルだ!問題に立ち向かう
俺がモデルだ!問題に立ち向かう
InDesign正規表現勉強会_名古屋_0727
InDesign正規表現勉強会_名古屋_0727
エンジニアのお仕事.pdf
エンジニアのお仕事.pdf
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料
アプリエンジニアからクラウド専用のインフラエンジニアになってみて
アプリエンジニアからクラウド専用のインフラエンジニアになってみて
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀
Ruby on Rails 入門
Ruby on Rails 入門
駅すぱあとWebサービスにおけるAWSとその周辺
駅すぱあとWebサービスにおけるAWSとその周辺
Adminとうまく共存するためのApex開発Tips
Adminとうまく共存するためのApex開発Tips
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
開発初心者がAWSサービスを色々使ってアプリ開発をした話
開発初心者がAWSサービスを色々使ってアプリ開発をした話
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
May the FaaS be with us!!
May the FaaS be with us!!
Drupal Market in Japan @ 「DrupalCon 2016 New Orleans」情報交換会
Drupal Market in Japan @ 「DrupalCon 2016 New Orleans」情報交換会
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
クラウド時代の人材育成
クラウド時代の人材育成
Plus de Yasutomo Uemori
Active job meets kubernetes
Active job meets kubernetes
Yasutomo Uemori
Ruby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDD
Yasutomo Uemori
GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境
Yasutomo Uemori
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Yasutomo Uemori
Rails api way in aiming
Rails api way in aiming
Yasutomo Uemori
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
Yasutomo Uemori
Plus de Yasutomo Uemori
(6)
Active job meets kubernetes
Active job meets kubernetes
Ruby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDD
GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Rails api way in aiming
Rails api way in aiming
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
サービスクラス、その前に
1.
サービスクラス、その前に
2.
自己紹介 植森 康友 株式会社Aiming 大阪スタジオ所属 主な仕事 WebAPI開発 社内ツール開発 devops Dockerおじさん 最近はkubernetesも
3.
株式会社Aimingについて Railsの使い所 ゲームのWebAPI 社内ツール、管理ツールなどのWebアプリケーション
4.
今日の話 サービスクラスなんとなくわかるけど、ぐらいの人向け 個人的にサービスクラスとかそういうのの前に知っておいてほしい ことを話します ちょっとエモめ
5.
ドメインサービス Railsで多く語られてきた「サービスクラス」(に近いもの) ビジネスロジックを表現するための一つの手段 Railsの文脈ではだいたい複数のモデルにまたがる処理を責務として 持つクラス どのドメインモデルにも紐付かないビジネスロジックを表現するた めのもの 例えば キャラクター作成時には初期武器と初期ジョブを付与する ログイン時にギフトのマスタ情報を参照して受け取ってないギ フトをキャラクターに付与する
6.
ドメインサービス Railsで多く語られてきた「サービスクラス」(に近いもの) ビジネスロジックを表現するための一つの手段 Railsの文脈ではだいたい複数のモデルにまたがる処理を責務として 持つクラス どのドメインモデルにも紐付かないビジネスロジックを表現するた めのもの 例えば キャラクター作成時には初期武器と初期ジョブを付与する ログイン時にギフトのマスタ情報を参照して受け取ってないギ フトをキャラクターに付与する
7.
ビジネスロジックってなんだ???
8.
ビジネスロジック データに対する処理手順といったようなものを指す ビジネスロジックという用語は明確な定義がなく、人によって意味 が異なる可能性がある。
9.
そもそもMVCとは何だったのか? よくある説明 Controller: ModelとViewをつなぐもの View: ユーザへのプレゼンテーション Model:
ビジネスロジック
10.
Modelとはビジネスロジックである。
11.
ビジネスロジックという用語は明確な定義がない
12.
('‑') ???
13.
MVCとは何だったのか? 参考: あの日見たM V
WhateverのModelを僕たちはまだ知らない View: ユーザへのプレゼンテーション Controller: ModelとViewをつなぐもの Model: ViewとController以外の全て そもそもMVCはプレゼンテーションとモデルを分割するためのもの。
14.
MVCはModelの設計方針について何一つ語ってはいない
15.
じゃあModelの設計どうしたらいいの?
16.
RailsはMVCフレームワークである Modelの設計方針はエンジニアの手に委ねられている 当然の話として、アプリケーションの振る舞いはアプリケーション によって違う 例えば、WebAPIとWebアプリケーションの設計は同じように はいかない ただしRailsには ActiveRecord という強力なModelの指針がある Rails Guide曰く、 Active
Recordとは、MVCで言うところのM、つまりモ デルに相当するもの Railsの出発点は Model = ActiveRecord
17.
しかしRailsならではのつらみ 時代がたち、出発点がActiveRecordであることから来るつらみが溢 れてきた PoEAAやDDDで紹介されているようなActiveRecord以外のModel の設計パターンが非常に取りづらい(相性が悪い) Railsならではのアプローチを模索していく必要がある
18.
ここ数年のRailsエンジニアのModelとの戦いは、 ActiveRecord = Model という固定概念からいかに脱却するかの戦い
19.
Decorator Helperが関数的であり、OOP的に扱いたいという欲求から生まれた いわゆるデコレータパターン データオブジェクトからViewに対する振る舞いを分離する
20.
Form Webアプリケーションで複雑になりがちなFormをオブジェクト化 したもの データオブジェクトからFormに表示するための振る舞いを分離する 値オブジェクト的な側面も持つ 場合によってはvalidationなどの責務も持つ
21.
Service ビジネスロジックの一部をオブジェクト化したもの 複数のデータオブジェクトのトランザクション境界をActiveRecord から分離する DDD本来のドメインモデルからは少し変わっている(が、気にしな くて良い)
22.
エトセトラ Serviceクラスが銀の弾丸ではないし、今まで語られてきたパターンだけ がModelの設計パターンではない Repository(Query) 複数のARからデータを1つのオブジェクト、 あるいはそのコレクションにマッピングする Policy banken gem。ユーザの権限をオブジェクト化する Serializer active_record_serializers gem。jsonなどのデータ形 式にキャストする Value
Object 値そのものをオブジェクト化したもの。 Immutableが望ましい。Date、URI、Pathnameなど。 Validator 、 Callback 、etc....
23.
サービスクラスとかの前に考えたいこと 自分たちのアプリケーションはどのぐらいの規模になりそうか? Modelの設計方針はどうするのか? アプリケーションはどういう振る舞いが期待されるのか? WebAPI? Webアプリケーション?
24.
まとめ 設計とは地図のようなもの。チーム全体で「自分たちのアプリケーショ ン」に対する共通認識を持つのが重要だと思います。 ModelのRailは自分たちで引いていきましょう!
25.
余談: 初日の感想 Railsの設計論はModelを卒業してアプリケーション全体のデザインに届 きつつあるのかなと思いました
26.
We are hiring! 株式会社Aimingではエンジニアを募集しています! ゲームのWebAPI
→ 「普通のWebアプリケーション」ではない Railsの設計に興味がある 社内ツール→ 「普通のWebアプリケーション」なRailsの設計に興 味がある
Télécharger maintenant