【Sinatra】Rack::URLMap を使ってコントローラーを分割する
2022/06/14
app.rb がだんだんファットになってきて、コントローラーを分割したくなった
コントローラーを分割するやり方はいくつかあって、Rack::URLMap を使う方法を試したのでメモ
app.rb
require 'sinatra/base'
class RootController < Sinatra::Base
get '/' do
"RootController"
end
end
class UsersController < Sinatra::Base
get '/' do
"UsersController"
end
end
class TasksController < Sinatra::Base
get '/' do
"TacksController"
end
end
app.rb にまとめて書いたけど、本来は別ファイルに書く(controllers ディレクトリを作って)
config.ru
require './app'
run Rack::URLMap.new({
'/' => RootController,
'/users' => UsersController,
'/tasks' => TasksController
})
$ bundle exec rackup
Puma starting in single mode...
* Puma version: 5.6.4 (ruby 3.1.2-p20) ("Birdie's Version")
* Min threads: 0
* Max threads: 5
* Environment: development
* PID: 29609
* Listening on http://127.0.0.1:9292
* Listening on http://[::1]:9292
Use Ctrl-C to stop
$ curl localhost:9292
RootController
$ curl localhost:9292/users
UsersController
$ curl localhost:9292/tasks
TacksController
サクッとできた
ただ /users/:user_id/tasks
みたいな名前付きパラメータが含まれるルーティングはうまくいかなかった