railsアプリのモジュールはどこに置くべきか問題 (公開版)
TRANSCRIPT
Railsアプリのモジュールはどこに置くべきか問題
!
muryoimpl
題材http://y-yagi.tumblr.com/post/92386974040/rails-routing-constraints
「迷ったらlib置いとけ」 ってこと?
ちょっと違うのでは…
参考意見その2https://twitter.com/hanachin_/status/491046610839695361
参考意見その2について
• むやみにlibに置くべきではないと思う(理由は後述)
• 個人的には、libってあまりアプリ機能に関するものっておくべきでないという認識
なぜか?
lib == ライブラリ
アプリ機能の拡張って ライブラリか?
否
参考意見その2https://twitter.com/hanachin_/status/491046610839695361
参考URLhttp://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/ みたいな
• 読むときに混乱招かないようにするのが大事
以上。