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

ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割Recruit Lifestyle Co., Ltd.
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
コンテナのユースケース考察
コンテナのユースケース考察コンテナのユースケース考察
コンテナのユースケース考察Shuji Yamada
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...WebSig24/7
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Kenjiro Kubota
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめMitsutoshi Kiuchi
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
SharePoint Framework Extension 基礎講座
SharePoint Framework Extension 基礎講座SharePoint Framework Extension 基礎講座
SharePoint Framework Extension 基礎講座Hiroaki Oikawa
 
自己紹介LT(公開版)
自己紹介LT(公開版)自己紹介LT(公開版)
自己紹介LT(公開版)Ken Muryoi
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門Tadahiro Ishisaka
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンスLivesense Inc.
 
クラウドでも非機能要求グレードは必要だよね
クラウドでも非機能要求グレードは必要だよねクラウドでも非機能要求グレードは必要だよね
クラウドでも非機能要求グレードは必要だよねYoshioSawada
 
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~Takunori Minamisawa
 
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話Takuya Kikuchi
 

La actualidad más candente (20)

Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
コンテナのユースケース考察
コンテナのユースケース考察コンテナのユースケース考察
コンテナのユースケース考察
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
 
SpringBootTest入門
SpringBootTest入門SpringBootTest入門
SpringBootTest入門
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
SharePoint Framework Extension 基礎講座
SharePoint Framework Extension 基礎講座SharePoint Framework Extension 基礎講座
SharePoint Framework Extension 基礎講座
 
自己紹介LT(公開版)
自己紹介LT(公開版)自己紹介LT(公開版)
自己紹介LT(公開版)
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
 
クラウドでも非機能要求グレードは必要だよね
クラウドでも非機能要求グレードは必要だよねクラウドでも非機能要求グレードは必要だよね
クラウドでも非機能要求グレードは必要だよね
 
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
 
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
GoとDDDでモバイルオーダープラットフォームを 型安全に作り直した話
 

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
 
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 (13)

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の被害報告
 
地域コミュニティのススメ
地域コミュニティのススメ地域コミュニティのススメ
地域コミュニティのススメ
 
自分を変えた一冊
自分を変えた一冊自分を変えた一冊
自分を変えた一冊
 
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アプリのモジュールはどこに置くべきか問題 (公開版)