SlideShare a Scribd company logo
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/ みたいな
• 読むときに混乱招かないようにするのが大事
以上。

More Related Content

What's hot

これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
Takahiro YAMADA
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
Takahiro Moteki
 
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
Amazon Web Services Japan
 
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)Tomoaki Uchida
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
 
大規模負荷試験時にやったこと
大規模負荷試験時にやったこと大規模負荷試験時にやったこと
大規模負荷試験時にやったこと
まべ☆てっく運営
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
 
ワタシハ Azure Functions チョットデキル
ワタシハ Azure Functions チョットデキルワタシハ Azure Functions チョットデキル
ワタシハ Azure Functions チョットデキル
Tsuyoshi Ushio
 
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
Masaya Tahara
 
複数サーバでセッションを共有する冴えたやりかた
複数サーバでセッションを共有する冴えたやりかた複数サーバでセッションを共有する冴えたやりかた
複数サーバでセッションを共有する冴えたやりかた
Junpei Nakada
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
NTT DATA Technology & Innovation
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
Masahiko Sawada
 
PostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVSPostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVS
Noriyoshi Shinoda
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
tobaru_yuta
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
Masahito Zembutsu
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
 

What's hot (20)

これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
 
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
 
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
大規模負荷試験時にやったこと
大規模負荷試験時にやったこと大規模負荷試験時にやったこと
大規模負荷試験時にやったこと
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
ワタシハ Azure Functions チョットデキル
ワタシハ Azure Functions チョットデキルワタシハ Azure Functions チョットデキル
ワタシハ Azure Functions チョットデキル
 
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
 
複数サーバでセッションを共有する冴えたやりかた
複数サーバでセッションを共有する冴えたやりかた複数サーバでセッションを共有する冴えたやりかた
複数サーバでセッションを共有する冴えたやりかた
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
 
PostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVSPostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVS
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 

More from 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
 

More from 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アプリのモジュールはどこに置くべきか問題 (公開版)