Sinatra用にTemplateを用意して開発の初期コストを低減する

  • 3
    いいね
  • 0
    コメント

この記事は、SLP_KBITその2 Advent Calendar 2016の14日目の記事です。

はじめに

Railsでアプリ開発を行う際に、テスト用の設定ファイルやTwitterbootstrapを使うために色々と書いたり、他のアプリからコードをコピペしたり、実際にコードを書き始めるまでの準備にとても時間がかかる場合があると思います。
その手間を軽減するために、RailsにはApplication Templateという機能があります。
しかし、Sinatraには、自分が調べた限りでは、このような機能はありませんでした。
そのため、Sinatraを軽量なRailsのように扱いたいと思っていました。

Sinatraのメリット

Ruby使いがWebアプリを作る、となるとRailsが一番に思い浮かぶと思います。
しかし、数時間規模のハッカソンやデモ用のアプリ開発などでは、Railsは大げさでちょっと……という方もいらっしゃるのではないでしょうか。
個人的には、モデルが存在しない or 静的なモデルしか存在しない場合にはRailsよりもSinatraを使ったほうがスリムなアプリ開発が行えるのではないかと考えています。

SinatraTemplateとは

主な機能としては、テストやアセットまわりの、アプリ開発する上で必須の設定をあらかじめ用意したものになります。
RailsのApplication TemplateのSinatra版のようなものを目指しています。
ソースコードはこちら (https://github.com/gembaf/sinatra_template) にあります。

ディレクトリ名などは、Railsを参考にしています。
まずは、ざっくりと使い方を説明したいと思います。

使い方

流れとしては、以下のようになります。

  • SinatraTemplateをcloneする
  • 自身のリポジトリとして名前やremoteなどを変更する
  • 自身のリポジトリとしてpushする

clone後のリポジトリの初期化用として、init.shを用意しています。
実行すると以下のような処理が行われます。

  • ユーザ名とリポジトリ名の入力を求める
  • 上記の情報を基に、SinatraTemplateのコード上に存在するユーザ名とリポジトリ名を書き換える
  • SinatraTemplateのgitの履歴を消す(rm -rf .git)
  • 自分自身(init.sh)を削除する

このスクリプトの実行後には、gitの管理下にないSinatraTemplateが残ることになります。
その後は、自分のリポジトリとして扱えば、色々と用意の整った状態でfirst commitできます。

テストまわり

テスト関係は、rspecfactory_girlというRailsでもメジャーな組み合わせを導入しています。
さらに、capybarapoltergeistも導入しているので、UIのテストも可能です。
また、コードの品質評価として、rubocopも導入しています。

アセットまわり

JavaScript関係のライブラリの管理はbowerを利用しています。
デフォルトで使用しているライブラリは、jquerybootstrapbootswatchです。
アセットまわりの記法としては、coffeesassをデフォルトとしています。

もちろん、変更の度にコンパイルをする必要はなく、Railsと同じような感じで使うことができます。

Model

初めの方で述べた通り、モデルとして扱うデータは、静的なデータを想定しています。
動的なデータをDBで扱うようなものは、Railsを使うべきだと思います。
ユニットテストの例も兼ねて、UserAgentの判別を行うモジュールのみ、あらかじめ用意してあります。

View

Railsと同じように、layoutファイルを用意しているので、全体的な見た目を統一することができます。
デフォルトで、ナビゲーションバーを表示するようにしています。

herokuへのデプロイ

herokuへデプロイするための設定も整えているので、以下の流れでデプロイできます。

$ heroku create
$ heroku config:set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-multi.git
$ git push heroku master

外部サービス

circlecicodeclimateに必要な設定ファイルを用意しているので、自分のリポジトリとして各サービスで設定するとそのまま使えます。

おわりに

SinatraTemplateは、自分用として作っているので、まだまだ作りが甘い部分が多々あります。
今後は、ユーザが必要な機能やライブラリを選択して、それ以外のものについては、初期化の段階で削除できるような機能をつけたいと思っています。
あと、今回は生のSinatraを触ったことで、Railsのスゴさを改めて感じることができました。

この投稿は SLP_KBITその2 Advent Calendar 201614日目の記事です。