SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
Railsアプリのモジュール
はどこに置くべきか問題
!
muryoimpl
題材
http://y-yagi.tumblr.com/post/92386974040/rails-routing-constraints
「迷ったらlib置いとけ」
ってこと?
ちょっと違うのでは…
参考意見その2
https://twitter.com/hanachin_/status/491046610839695361
参考意見その2について
• むやみにlibに置くべきではないと思う(理由は後
述)
• 個人的には、libってあまりアプリ機能に関する
ものっておくべきでないという認識
なぜか?
lib == ライブラリ
アプリ機能の拡張って
ライブラリか?
否
参考意見その2
https://twitter.com/hanachin_/status/491046610839695361
参考URL
http://blog.lunarlogic.io/2013/declutter-lib-directory/
ざっくり言うと…(1)
• libにファイル置く場合のガイドラインみたい
のって示されてないよね
• アプリのdomainに特化してないものをlibに置く
べきってBryan Helmkampが言ってた
• 基本的にアプリに関するものはサブディレクト
リ切ってそこに置こう
ざっくり言うと…(2)
• Monkey patchesは lib と config/initializers に分
かれる
• lib/ext … 組込Ruby classのStringやArrayの拡張
• lib/hack … 本来あるべきではないけどやらねーと
困るんだってやつを置く(ライブラリのバグ修正的
な)
• -> これはgithubでforkして使うが一般的かな?
ざっくり言うと…(3)
• libには、(そのアプリに限らず)一般に使いまわせるようなもの
を置く
• app内ファイルが直接参照しないもの
• Ruby core class や 他のライブラリ、gem の一部のみが
アクセスできるもの
• global変数/アプリの定数/環境変数に依存しないもの
• githubに置いたり、わざわざgemにするほどでもないgem
の拡張
ざっくり言うと…(4)
• ちょっとしたアプリ特有の設定(API keyのよう
なもの)
• libにおいてもいいけど、全体的な風潮は
config/initializers だよね(私見)
同意。
だって
ソース追うときって
機能については
app の中にあること前提
で探したりしません?
なかったら、gem の
機能かな?って思いません?
app/以下 ->
config 以下 ->
gem? or lib/以下
muryoimpl.search_path
みたいな感じ
なので
まとめ
• libには、アプリの拡張は置かない
• アプリの拡張はapp/以下の置く
• サブディレクトリ切ったらいいんだよ
• app/decorators, app/workers/ みたいな
• 読むときに混乱招かないようにするのが大事
以上。

Más contenido relacionado

La actualidad más candente

君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Takayuki Shimizukawa
 
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-Shinichiro Yoshida
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
Git Flowを運用するために
Git Flowを運用するためにGit Flowを運用するために
Git Flowを運用するためにShun Tsunoda
 
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁 ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁 宜浩 香月
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Shin Ohno
 
そのRails Engine、 本当に必要ですか?
そのRails Engine、 本当に必要ですか?そのRails Engine、 本当に必要ですか?
そのRails Engine、 本当に必要ですか?nixiesan
 
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますester41
 
SlideShareをやめて SpeakerDeckに移行します
SlideShareをやめて SpeakerDeckに移行しますSlideShareをやめて SpeakerDeckに移行します
SlideShareをやめて SpeakerDeckに移行しますMamoru Ohashi
 
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発Yahoo!デベロッパーネットワーク
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こうShinnosuke Tokuda
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
Sinatra Pattern 20130415
Sinatra Pattern 20130415Sinatra Pattern 20130415
Sinatra Pattern 20130415Naotoshi Seo
 
DiI/DIコンテナを一から学んでみた
DiI/DIコンテナを一から学んでみたDiI/DIコンテナを一から学んでみた
DiI/DIコンテナを一から学んでみたtak
 
僕なりのAtlassianの管理メソッド
僕なりのAtlassianの管理メソッド僕なりのAtlassianの管理メソッド
僕なりのAtlassianの管理メソッドNarichika Kajihara
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 

La actualidad más candente (20)

君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
 
ServiceとRepository
ServiceとRepositoryServiceとRepository
ServiceとRepository
 
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
Git Flowを運用するために
Git Flowを運用するためにGit Flowを運用するために
Git Flowを運用するために
 
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁 ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
そのRails Engine、 本当に必要ですか?
そのRails Engine、 本当に必要ですか?そのRails Engine、 本当に必要ですか?
そのRails Engine、 本当に必要ですか?
 
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えします
 
SlideShareをやめて SpeakerDeckに移行します
SlideShareをやめて SpeakerDeckに移行しますSlideShareをやめて SpeakerDeckに移行します
SlideShareをやめて SpeakerDeckに移行します
 
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
Sinatra Pattern 20130415
Sinatra Pattern 20130415Sinatra Pattern 20130415
Sinatra Pattern 20130415
 
DiI/DIコンテナを一から学んでみた
DiI/DIコンテナを一から学んでみたDiI/DIコンテナを一から学んでみた
DiI/DIコンテナを一から学んでみた
 
僕なりのAtlassianの管理メソッド
僕なりのAtlassianの管理メソッド僕なりのAtlassianの管理メソッド
僕なりのAtlassianの管理メソッド
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 

Más de Ken Muryoi

buoys gem の紹介
buoys gem の紹介buoys gem の紹介
buoys gem の紹介Ken Muryoi
 
約一年、XP2nd 読書会に参加して感じたこと
約一年、XP2nd 読書会に参加して感じたこと約一年、XP2nd 読書会に参加して感じたこと
約一年、XP2nd 読書会に参加して感じたことKen Muryoi
 
自己紹介LT「俺の迷走っぷり」
自己紹介LT「俺の迷走っぷり」自己紹介LT「俺の迷走っぷり」
自己紹介LT「俺の迷走っぷり」Ken Muryoi
 
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)Ken Muryoi
 
Default scopeの被害報告
Default scopeの被害報告Default scopeの被害報告
Default scopeの被害報告Ken Muryoi
 
地域コミュニティのススメ
地域コミュニティのススメ地域コミュニティのススメ
地域コミュニティのススメKen Muryoi
 
自分を変えた一冊
自分を変えた一冊自分を変えた一冊
自分を変えた一冊Ken Muryoi
 
自己紹介LT(公開版)
自己紹介LT(公開版)自己紹介LT(公開版)
自己紹介LT(公開版)Ken Muryoi
 
Rubyコミュニティをアピールしませんか?
Rubyコミュニティをアピールしませんか?Rubyコミュニティをアピールしませんか?
Rubyコミュニティをアピールしませんか?Ken Muryoi
 
Acceptance testは開発者がつくるべき(公開版)
Acceptance testは開発者がつくるべき(公開版)Acceptance testは開発者がつくるべき(公開版)
Acceptance testは開発者がつくるべき(公開版)Ken Muryoi
 
るびま10周年の告知
るびま10周年の告知るびま10周年の告知
るびま10周年の告知Ken Muryoi
 
関西Ruby会議方面から来ました
関西Ruby会議方面から来ました関西Ruby会議方面から来ました
関西Ruby会議方面から来ましたKen Muryoi
 
地域Ruby会議にいこうぜ!
地域Ruby会議にいこうぜ!地域Ruby会議にいこうぜ!
地域Ruby会議にいこうぜ!Ken Muryoi
 
地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とか地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とかKen Muryoi
 

Más de Ken Muryoi (14)

buoys gem の紹介
buoys gem の紹介buoys gem の紹介
buoys gem の紹介
 
約一年、XP2nd 読書会に参加して感じたこと
約一年、XP2nd 読書会に参加して感じたこと約一年、XP2nd 読書会に参加して感じたこと
約一年、XP2nd 読書会に参加して感じたこと
 
自己紹介LT「俺の迷走っぷり」
自己紹介LT「俺の迷走っぷり」自己紹介LT「俺の迷走っぷり」
自己紹介LT「俺の迷走っぷり」
 
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)
 
Default scopeの被害報告
Default scopeの被害報告Default scopeの被害報告
Default scopeの被害報告
 
地域コミュニティのススメ
地域コミュニティのススメ地域コミュニティのススメ
地域コミュニティのススメ
 
自分を変えた一冊
自分を変えた一冊自分を変えた一冊
自分を変えた一冊
 
自己紹介LT(公開版)
自己紹介LT(公開版)自己紹介LT(公開版)
自己紹介LT(公開版)
 
Rubyコミュニティをアピールしませんか?
Rubyコミュニティをアピールしませんか?Rubyコミュニティをアピールしませんか?
Rubyコミュニティをアピールしませんか?
 
Acceptance testは開発者がつくるべき(公開版)
Acceptance testは開発者がつくるべき(公開版)Acceptance testは開発者がつくるべき(公開版)
Acceptance testは開発者がつくるべき(公開版)
 
るびま10周年の告知
るびま10周年の告知るびま10周年の告知
るびま10周年の告知
 
関西Ruby会議方面から来ました
関西Ruby会議方面から来ました関西Ruby会議方面から来ました
関西Ruby会議方面から来ました
 
地域Ruby会議にいこうぜ!
地域Ruby会議にいこうぜ!地域Ruby会議にいこうぜ!
地域Ruby会議にいこうぜ!
 
地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とか地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とか
 

Railsアプリのモジュールはどこに置くべきか問題 (公開版)