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