こういう感じのアプリケーションがあったとします。 で、この例だとまったくファットじゃないんだけど、Controller がファットになってきてしまった場合に、いい感じに分割したくなることもありますよね。 ということでとりあえずこうしてみた。 各クラスが Sinatra::Base を継承するではなくて、Base を設けてそれを継承するようにしているのは、各クラス内でそれぞれ before を書きたくなかったからです。 が、このように書いてしまうと、リクエストパスによっては 1 回のリクエスト中に before 内の処理が複数回実行されてしまいます。(実際に before に適当に p 123 とか書いて起動して、アクセスしてみるとわかる) それだと最悪なので、最終的にこうした。 ルーティングを config.ru に書きたくなかったので、定数化して呼び出すようにしています。 参考 Sina