10分でできるswitchtower〜下ごしらえ

前回のrails勉強会で好評だった(?)switchtowerネタをようやくまとめようかと思い始めたわけです。次回まで引っ張るわけにもいきませんし。
さしあたり今回はswitchtowerに入れるためのサンプルアプリケーションを作ったうえでsvnレポジトリに入れるところまでをやってみようと思います。

今回は事前準備編ということで、面倒な人向けにレンジでチンするだけのtar.gzを用意しました。Subversion-1.3.0、fsfsフォーマットのレポジトリをアーカイブしてあります。
こちらからどうぞ。

蔵書管理アプリケーションの用意

(相方の)趣味と実益を兼ねて、蔵書管理アプリをつくってswitchtowerでdeployしたい
と思います。このエントリでは下準備編ということで、普通のrailsアプリケーション
を作るところまでやってみたいと思います。

0. 環境設定

今回はSQLite3を使ったWebアプリを作りたいと思います。ですので、gem他で
sqlite3-rubyをインストールしておいてください。当然railsも入れておいてください
ね。

 # gem install --require-dependencies rails sqlite3-ruby
   (略)

1. 雛型の生成

蔵書管理アプリということでアプリ名はBookShelfで。項目としては『書名』『著者』
『説明』『巻数』あたりを入力していきたいと思います。

まずはお決まりのrailsコマンドで雛型を生成します。

 $ mkdir /home/moro/switchtower_in_10m
 $ cd /home/moro/switchtower_in_10m
 $ rails BookShelf
   (略)

2. DBの設定

雛型は生成されましたね。次は何はともあれscaffoldをするためにDBの設定をします。

 $ cd BookShelf
 $ vim config/database.yml

いろんな設定がありますが、バシバシ消して、今回必要な項目だけを残すことします。
database.ymlはこんな感じになります。

development:
  adapter: sqlite3
  database: db/book_shelf.dev

test:
  adapter: sqlite3
  database: ":memory:"

production:
  adapter: sqlite3
  database: db/book_shelf

3. subversionレポジトリの作成とimport

続いて作成したrailsアプリ(雛型)をsubversionレポジトリに登録します。
細かい手順は省略しますが、(1)レポジトリの作成、(2)作ったアプリのimportという手順で進めます。ちゃんとやりたい場合は
wiki.rails2u.comの記事を参考にするのがいいと思います。

 $ cd /home/moro/switchtower_in_10m/
 $ svnadmin create sw_10m.repos
 $ svn import ./BookShelf file://home/moro/switchtower_in_10m/sw_10m.repos -m " * initial import"
   (略)

importが無事に完了したら、作業用のworking copyをcheckoutします。以降はこのBookShelf.workにて作業を進めたいと思います。

注意::今回はdeploy先の環境でもdb/database.ymlを使いまわすする都合上、db/database.ymlもレポジトリに入れています。実際の環境ではdb/database.ymlを入れないとも多いと思いますのでご注意ください。
 $ svn checkout file:///home/moro/switchtower_10m_cooking/sw_10m.repos BookShelf.work
   (略)

4. migrationの作成

さきほどcheckoutしたwork copyはすでに2.でDBの設定ができているはずです。
続いて実際にテーブルを作ります。最近のrailsではSQLiteもmigrationの対象になりました。早速使ってみましょう。

 $ cd /home/moro/switchtower_in_10m/BookShelf.work
 $ ruby script/generate migration CreateTable
       exists  db/migrate
       create  db/migrate/001_create_table.rb

さらに、生成されたmigrateファイルを編集し、テーブルを定義します。

 $ vim db/migrate/001_create_table
 ---

class CreateTable < ActiveRecord::Migration
  def self.up
    create_table :books do |table|
      table.column :name,         :string
      table.column :description,  :string
      table.column :author,       :string
      table.column :number,       :integer
    end
  end

  def self.down
    drop_table :books
  end
end

これを定義したら、実際にmigrationを実行すると、DBテーブルが定義されます。
(初回は自動的にSQLite なDBファイルが作成されます。)

 $ rake migrate
 (in /home/moro/switchtower_10m_cooking/BookShelf.work)

5. scaffold

あとはいつものようにscaffoldしてアプリケーションを作成します。

 $ ruby script/generate scaffold Book
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/books
      exists  test/functional/
  dependency  model
      exists    app/models/
      exists    test/unit/
      exists    test/fixtures/
      create    app/models/book.rb
      create    test/unit/book_test.rb
      create    test/fixtures/books.yml
      create  app/views/books/_form.rhtml
      create  app/views/books/list.rhtml
      create  app/views/books/show.rhtml
      create  app/views/books/new.rhtml
      create  app/views/books/edit.rhtml
      create  app/controllers/books_controller.rb
      create  test/functional/books_controller_test.rb
      create  app/helpers/books_helper.rb
      create  app/views/layouts/books.rhtml
      create  public/stylesheets/scaffold.css

続いて起動してみます。

 $ ruby script/server
 $ firefox http://localhost:3000

うまくいってますね。まずはCRUDしたりいろいろと遊んでみましょう。

6. svn commit そして。。

仕上げに、ここまで作ったアプリをsvnに登録します。log以下のファイル以外すべてをレポジトリに登録することにします*1

 $ svn --force remove log/*
 $ svn propset "svn:ignore" '**.log*' log
 $ svn add app/views/books
   (略)

すべてが済んだら、svn commitします。

 $ svn status
   (略)
 $ svn commit -m "create sample app for Switchtower demo."
   Adding         app/controllers/books_controller.rb
   Adding         app/helpers/books_helper.rb
   Adding         app/models/book.rb
   Adding         app/views/books
   Adding         app/views/books/_form.rhtml
   Adding         app/views/books/edit.rhtml
   Adding         app/views/books/list.rhtml
   Adding         app/views/books/new.rhtml
   Adding         app/views/books/show.rhtml
   Adding         app/views/layouts/books.rhtml
   Sending        config/database.yml
   Adding         config/lighttpd.conf
   Adding  (bin)  db/book_shelf.dev
   Adding         db/migrate
   Adding         db/migrate/001_create_table.rb
   Sending        log
   Deleting       log/development.log
   Deleting       log/production.log
   Deleting       log/server.log
   Deleting       log/test.log
   Adding         public/stylesheets/scaffold.css
   Adding         test/fixtures/books.yml
   Adding         test/functional/books_controller_test.rb
   Adding         test/unit/book_test.rb
   Transmitting file data .................
   Committed revision 2.

ということで作成したサンプルでsvnレポジトリの中身を作りました。今日はここまでで、Switchtowerを使ってみよう本編に続きます。

*1:今回はdevelopment用のDB、db/book_shelf.devもレポジトリに入れちゃいます。