FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

Sinatra本一気学習@開発合宿 in 三浦海岸

gみなさまこんにちは!さげはしです。

この度、年4回(一人2回参加)開催される開発合宿に三浦海岸まで行って参りました!
とりあえず開発合宿の総括などは別にするとしまして、今回私はRubyの軽量FremeWork Sinatra電子書籍である、入門Sinatraをひと通りやり通す!という課題に一人黙々と挑戦しました。
本の概要は

Webサイト、Webサービス、WebアプリケーションをRubyで作成するためのDSL、それがSinatraです。本書は、基本的なRubyのプログラミングを理解したプログラマが、Sinatraを使い始めるために必要な知識をコンパクトにまとめた書籍です。ルーティング、ビュー、キャッシュなどを使ったアプリケーションの書き方から、内部構造の解説や、サブクラス化を用いたModularスタイルのアプリケーションを解説。さらにはカスタムブログエンジンを例に、アプリケーション構築の全体を紹介します。
という内容になっており、Sinatraはどういう物なのかというのが凄くよく分かる、初歩〜初級者向けの内容となっておりました。
ここでは、その中で個人的に「へ〜」となった部分をピックアップしてお伝えしたいと思います。

SinatraはFramework「ではない」

いやーいきなりこんなこと書いてあってどうしたもんかと思いましたが、これは多分「狭い意味での」Framework、特に最近のMVCを実装するための機能をフルスタックで持っているわけではないよ、というのを強調したいんだと思いました。

Ruby on Railsを始め、Frameworkと呼ばれるPackageの中には基本的にRouting、ORM、TemplareEngineが(外部のパッケージを使うとしても)依存するような形で実装されているのが普通なのかな、と。

一方、SinatraPerlのDancerなどは、所為Micro Frameworkと呼ばれるような感じで、ORMやTemplateEngineは外部のものを自由に選択できるようになっているので、まぁその辺気をつけろよーってことだと思いました。

複数Sinatra Appsをまとめて動かせる

これはちょっとすげーと思ったというか、なるほどなーと思ったもの。
コードを見てもらえれば早いと思うのですが、

require ‘sinatra/base’

class Foo < Sinatra::Base
  get (‘/foo’) { ‘foo’ }
end

class Bar < Sinatra::Base
  get (‘/bar’) { ‘bar’ }
  use Foo
  run!
end

というような感じで、一つのAppの中に複数のClass、Routing定義が存在できて、かつバッティングしても読み込んだ順に動くから気にしないでイイ!とか、なんかすげーな、と思いました。

Classic / Moduler

Sinatraって書き方が2種類あるんですよね。まぁ皆様的には常識だと思いますが。

基本的にシンプルなClassic style

require 'sinatra'

get '/' do
  'Hello world!'
end


と、よりモダン?なmoduler style

require 'sinatra/base'

class MyApp < Sinatra::Base
  get '/' do
    'Hello world!'
  end

  run!
end

という感じで、まぁサクッとClassic styleで作るのもいいのですが、多少手の込んだ物になると、moduler styleの方が結果見やすいコードになったりすると思います!

まとめ

おいおい、丸2日使ってこれだけかよ!って思われる方もいるかと思いますが、基本は本をなぞっていくだけなので、そんなに発見はないというか、そもそも初心者向けの本ですから、びっくりするような発見というのはないのが当たり前!ですよね?

ただ、Sinatra自体はとても軽量なので、私の管轄であるインフラ領域の管理ツールなどでは気軽に採用することが出来そうだなーと思っております。それが一番の収穫かも。