Ruby de Rails

Post on 19-Jan-2015

2.048 views 3 download

Tags:

description

 

Transcript of Ruby de Rails

Yuichiro MASUI <masui@masuidrive.jp>

なぜRubyでRailsか最新フレームワーク Ruby on Rails

Ruby on Rails知ってる人~

Ruby on Railsでアプリを作ったことある人~

Ruby loveな人~

Ruby on Rails

37signalsに所属するDHHが作ったフレームワーク

2004年7月に初めてのRails 0.5.0公開

2005年12月14日

Rails 1.0リリース

現在はRails 1.1.6

来月にはRails 1.2が出る予定

煽り文句

生産性がJavaの10倍

15分でblog作ったり

10分でオンラインブックマークが作れる

「10分で作るRailsアプリ」をみたことある人

ありがとうございます

おかげさまで大好評

でも、絶対10分じゃ無理

数十回練習した成果

2005/11/9Web Developer Study #1

「1時間で作るWebアプリ」

この辺が限界

これもWebで公開してます

なぜJavaの10倍の生産性を誇るのか

少ないコードでアプリが書ける

どの言語を使っても1行のコストはあまり変わらない

その為の方策

その1

Conventionover

Configuration

設定より規約

デフォルトの動作が規約として多数盛り込まれてる

JavaのフレームワークはXMLで設定する物が多い

XMLの設定=コード

設定ではコード量は減らない

その2

DRY

Don't Repeat Yourself

同じ事は二度するな

DBのO/Rマッピングを行う時

DBのカラム名をコードに書くのはDRY違反

DB変更したらコードの変更もいる

バグの元

Railsならクラス作るだけ

class User < ActiveRecord::Baseend

テーブル定義はDBから参照する

ただ、リレーションだけは設定する必要がある

class User < ActiveRecord::Base has_many :booksend

これだけでusersテーブルのマッピング終わり

Conventionover

Configuration

設定より規約

ActiveRecordの規約

テーブル名の単数形のクラスでActiveRecord::Baseを継承するとO/Rマッパになる

だからSQLでテーブル定義するだけで設定はいらない

規約に沿わない場合は設定が必要

class User < ActiveRecord::Base set_table_name 'user' set_primary_key 'pkey'end

その3

言語重要

Ruby

まつもとひろゆきさんが作ったオブジェクト指向言語

1993年誕生

結構、歴史は長い

でも今までキラーアプリがなかった

でもRailsのおかげでRuby本が大売れ

DHHがRubyを選んだ理由

Rubyは美しいコードを書くことができる,プログラマをハッピーにする言語だと感じたのです。

ITProインタービューにて

なぜ美しいと思うか

思考との乖離が少ない

頭で考えた物が作れる

言語の柔軟性が非常に高い

本当のオブジェクト指向、演算子のオーバーライド、オブジェクトへのメソッド追加...

RailsではRubyを拡張してDSLっぽく使っている

•if a==b then; obj.m(); end

•a==b && obj.m

•obj.m if a==b

title = obj.name.strip.camelize

rescue ‘no title’

module RakeTask def method1 .... end

task :task1 do ..... endend

標準ライブラリなどにも手を入れまくり

Webに特化させてる故に書きやすい

思いついたのを簡単にコードにできたらプログラムは

楽しい

その4

すぐ動く

まず目の前に動く物があると作業がはかどる

動くまで時間がかかるとテンションが続かない

scaffold

足場

コントローラに1行書くだけでCRUD完成

Create - 作成Read - 表示Update - 更新Delete - 削除

DBにテーブル作って空のモデルクラスつくってコントローラにscaffoldって

書くだけでDB更新アプリ完成

これが10分Railsムービーの内容

あとは足場を頼りに骨組みを作っていけばいい

scaffold以外に色々なジェネレータも出ている

これらを使えば管理画面とかは

コード書かなくても行ける

生成されたコードは勉強にも役に立つ

その5

豊富なプラグイン

なんでもある

画像アップならfile_columnタグはacts_as_tabbable

などなど・・・

日本語化はActiveHeatとRuby-GetText

ただプラグインが増えすぎで探すのが大変

CoCDRY言語重要すぐ動く

豊富なプラグイン

以上5つがRailsの生産性の高さを支えている

Railsのスローガン

that's optimized for programmer happiness

and sustainable

プログラマーの幸福と創造性の継続に最適化されたフレームワーク

Railsで幸福になりませんか?

しかしRailsは万能じゃない

プログラマが全部設計できるならずいぶん楽なんだけど

自分で考えたアプリを作る場合

DB設計 (Model)

コントローラ設計

Scaffold

コード実装 HTML実装

現実そうはいかない

顧客のアプリを作る場合は画面ありきの設計になる

DB設計 (Model)コントローラ設計

Scaffold

コード実装 HTML実装

画面設計

顧客は画面しか見ないから

画面からDBを設計するのが一番のネックになる

コードが少なくなった分DB設計が肝になる

でもDBの変更もmigrationで楽々

migration

DBの変更を記述する

class AddNick < ActiveRecord::Migration def self.up add_column :users, :nick, :text end

def self.down remove_column :users, :nick endend

DBの変更もRailsで書く

rake migrate

古い状態にも戻せる

rake migrate VERSION=3

サーバのDBも簡単に変更できる

rake remote:migrate

Railsにはdeploy管理のアプリも付いてくる

Capistrano

カピストラーノ

前はSwitchTowerって名前だった

レシピを書くとコマンド一つでアップして再起動とかしてくれる

しかも過去の分は全部バックアップした上で

あなたのプロジェクトは過去の履歴を全部とってますか?

すぐに前のバージョンに戻せますか?

担当者がいなくてもアップデートできますか?

Capistranoなら簡単

rake deploy

rake rollback

Railsはコードだけじゃなくサポートアプリも含めてAll in oneな環境

さてRailsで幸福になるのは良いけど

第一部おわり

小休憩

Yuichiro MASUI <masui@masuidrive.jp>

仕事でRailsホントに使えるの?

実際問題、Railsで動いてるサイトはあるの?

正直、あまりない

表に出さないだけであることは、あるらしい

仕事でRailsを使う場合の障壁

Railsで作れる人が居ない

勉強を兼ねて小さなプロジェクトから

始めましょう

日本の伝統 OJT

オファーは結構ある

デザイナはSmatyしかわからない

やってみたらうちの周りは全員問題なし

近々デザイナー向けRails本が出るらしい

サーバがRailsに対応していない

自鯖でRails入れれば問題なし

安定して稼働できるか

やっぱりノウハウが必要

lighttpd+FastCGIはlighttpdが固まる事がある

Apache2+mod_fcgid私は経験ないが不安定らしい

Apache1.3+mod_fastcgiFastCGIでは一番安定してる

FastCGIはちょっと不安

最近の定番

mongrel+

Apache 2.2mod_proxy_balancer

mongrelRuby+CのWebサーバ

Apacheをリバースプロキシにして使う

これならApacheでPHPを動かして混在させることも

可能

速度に問題はないか

確かにRailsは遅いが

キャッシュを使って動的生成を減らせば

早くなる

それでも遅ければスケールアウトできる

まずは、小さな物から試してみませんか?

Yuichiro MASUI <masui@masuidrive.jp>

Railsで作るどうやって作ってるの?

実際にアプリを組むにはどっから始めればいい?

rails プロジェクト名

ひな形が作られる

•app•controllers•models•views

•db•migrate

•test•unit

主なディレクトリ

models層が厚くcontrollerが薄い

ユーザ単位のアプリならacts_as_authenticatedが

おすすめ

gem installacts_as_authenticated

script/generate authenticated user

account

日本語を使うならRuby-GetText

gem install gettext

下準備はこれぐらいで次はmodelを作成

script/generate modelbookmark

bookmarkモデルを作成

migrationのひな形も同時に作成

bookmarkコントローラを作成

script/generate scaffold bookmark

script/server

流行物だしUnitTestぐらい書いておこう

test/unit/bookmark_test.rb

ZenTestで自動テスト

あっという間にアプリが完成

Ajaxも超簡単

prototype.jsによるエフェクト

RJSによるDOM操作

一緒にアプリを作ってみませんか?

ご静聴ありがとうございました

質問コーナー