akadama

そこらへんにいるプログラマが適当にやってます

スマホサイトを作ったときの話

ここ数ヶ月関わっていた、Javaで書かれてたスマホサイトをRubyで書きなおしたときの話
社内のWikiに書いたら外にも書けよと言われたのでブログ再開がてら書いてみる

元の問題

  • 他のプロジェクトのフォークである
  • あっちで更新があるたびマージとか無いわ…
  • テストが無い…
  • 悲しいぐらいに無い
  • デプロイは手動
  • 死ねる……

こんな状況だったので、こりゃ作り直したほうが早いわ…と思い
チーム内では技術の選定とかは意見通しやすかったのでRubyでやってみよう
ということになった。というかした。

フロント

ではアプリケーション作成に使うフレームワークはどうするか?
ぱっと以下の3つが思い浮ぶ

  • Rails
  • Sinatra
  • Padrino

Ruby未経験者がいて教育コストかけてられないのでRailsは即却下

結論から言うとSinatraを採用した。
Padrinoと迷ったが自分が使ったことのあるもののほうがいいだろという理由から。
ただ、後から考えるとPadrinoのほうがよかったかもしれない
(ジェネレータもあるし、Controllerの分割等が容易なため)

ViewはスマホだしHTML5。slimとか使いたかったけど教えるの大変なのでerbで記述することにした

  • jQuery
  • jQueryUI

スマホのUIを構築するということで当然JavaScriptは必須。
この用途だとサイズが大きいかもだがjQueryがデファクトスタンダードであろうということで採用
UI系での処理を行うためにjQueryUIも導入

jQuery MobileはHTML作成のルール(クラス付け)だったりが大変&自分が理解してないのを教えれないということで見送り
jqMobiというのもちょうど正式版が出てはいたがこれも検証等々してる余裕はなかったので見送り

O/Rマッパー

  • DataMapper

ActiveRecordとどちらを使うか迷ったが、既存テーブルの利用に関して処理の流れがわかりやすかったので採用

ただ、値の更新時に自動で更新日付等を入れる処理を実装するのに苦労した
(最終的には既存のメソッドに手を加えることで対応)
あとauto_migrateってメソッドはRailsとかでdb:migrateとかしたことある人には危険すぎる…
(値を消してmigrateしなおし。値が残るのはauto_upgrade)

テスト

  • RSpec
  • RR
  • Capybara
  • (Capybara-webkit)

テストフレームワークはいろいろなものがあるが、今回はRSpecを導入
WebのAPIとの通信等のテストを記述する場所にはRRも用いる
Web系のテストはCapybaraで記述。
JavaScriptが必要なものに関してはCapybara-webkitを使おうと思っていた(headlessテストができるため)けど
周りが使えそうもないので見送り

デプロイ

  • Capistrano
  • Capistrano-ext

Ruby製のデプロイツール
Railsでの使用を想定して作られたが他のツールでも利用可能
Capistrano-extを使えばStaging環境と本番環境とか複数環境に適用できるのに魅力を感じ採用

CI

  • Jenkins

言わずと知れたCIツール
今回のプロジェクトではリポジトリ(svn)をポーリングして、
変更があればユニットテスト、インテグレーションテストを行い、
問題がなければステージング環境に自動デプロイを行う環境を構築した

細かい設定等々は後日