199
Yuichiro MASUI <[email protected]> なぜRubyでRailsか 最新フレームワーク Ruby on Rails

Ruby de Rails

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Ruby de Rails

Yuichiro MASUI <[email protected]>

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

Page 2: Ruby de Rails

Ruby on Rails知ってる人~

Page 3: Ruby de Rails

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

Page 4: Ruby de Rails

Ruby loveな人~

Page 5: Ruby de Rails

Ruby on Rails

Page 6: Ruby de Rails

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

Page 7: Ruby de Rails

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

Page 8: Ruby de Rails

2005年12月14日

Page 9: Ruby de Rails

Rails 1.0リリース

Page 10: Ruby de Rails

現在はRails 1.1.6

Page 11: Ruby de Rails

来月にはRails 1.2が出る予定

Page 12: Ruby de Rails

煽り文句

Page 13: Ruby de Rails

生産性がJavaの10倍

Page 14: Ruby de Rails

15分でblog作ったり

Page 15: Ruby de Rails

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

Page 16: Ruby de Rails

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

Page 17: Ruby de Rails

ありがとうございます

Page 18: Ruby de Rails

おかげさまで大好評

Page 19: Ruby de Rails

でも、絶対10分じゃ無理

Page 20: Ruby de Rails

数十回練習した成果

Page 21: Ruby de Rails

2005/11/9Web Developer Study #1

Page 22: Ruby de Rails

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

Page 23: Ruby de Rails

この辺が限界

Page 24: Ruby de Rails

これもWebで公開してます

Page 25: Ruby de Rails

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

Page 26: Ruby de Rails

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

Page 27: Ruby de Rails

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

Page 28: Ruby de Rails

その為の方策

Page 29: Ruby de Rails

その1

Page 30: Ruby de Rails

Conventionover

Configuration

Page 31: Ruby de Rails

設定より規約

Page 32: Ruby de Rails

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

Page 33: Ruby de Rails

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

Page 34: Ruby de Rails

XMLの設定=コード

Page 35: Ruby de Rails

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

Page 36: Ruby de Rails

その2

Page 37: Ruby de Rails

DRY

Page 38: Ruby de Rails

Don't Repeat Yourself

Page 39: Ruby de Rails

同じ事は二度するな

Page 40: Ruby de Rails

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

Page 41: Ruby de Rails

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

Page 42: Ruby de Rails

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

Page 43: Ruby de Rails

バグの元

Page 44: Ruby de Rails

Railsならクラス作るだけ

Page 45: Ruby de Rails

class User < ActiveRecord::Baseend

Page 46: Ruby de Rails

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

Page 47: Ruby de Rails

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

Page 48: Ruby de Rails

class User < ActiveRecord::Base has_many :booksend

Page 49: Ruby de Rails

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

Page 50: Ruby de Rails

Conventionover

Configuration

Page 51: Ruby de Rails

設定より規約

Page 52: Ruby de Rails

ActiveRecordの規約

Page 53: Ruby de Rails

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

Page 54: Ruby de Rails

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

Page 55: Ruby de Rails

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

Page 56: Ruby de Rails

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

Page 57: Ruby de Rails

その3

Page 58: Ruby de Rails

言語重要

Page 59: Ruby de Rails

Ruby

Page 60: Ruby de Rails

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

Page 61: Ruby de Rails

1993年誕生

Page 62: Ruby de Rails

結構、歴史は長い

Page 63: Ruby de Rails

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

Page 64: Ruby de Rails

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

Page 65: Ruby de Rails

DHHがRubyを選んだ理由

Page 66: Ruby de Rails

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

ITProインタービューにて

Page 67: Ruby de Rails

なぜ美しいと思うか

Page 68: Ruby de Rails

思考との乖離が少ない

Page 69: Ruby de Rails

頭で考えた物が作れる

Page 70: Ruby de Rails

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

Page 71: Ruby de Rails

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

Page 72: Ruby de Rails

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

Page 73: Ruby de Rails

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

•a==b && obj.m

•obj.m if a==b

Page 74: Ruby de Rails

title = obj.name.strip.camelize

rescue ‘no title’

Page 75: Ruby de Rails

module RakeTask def method1 .... end

task :task1 do ..... endend

Page 76: Ruby de Rails

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

Page 77: Ruby de Rails

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

Page 78: Ruby de Rails

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

楽しい

Page 79: Ruby de Rails

その4

Page 80: Ruby de Rails

すぐ動く

Page 81: Ruby de Rails

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

Page 82: Ruby de Rails

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

Page 83: Ruby de Rails

scaffold

Page 84: Ruby de Rails

足場

Page 85: Ruby de Rails

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

Page 86: Ruby de Rails

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

Page 87: Ruby de Rails

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

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

Page 88: Ruby de Rails

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

Page 89: Ruby de Rails

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

Page 90: Ruby de Rails

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

Page 91: Ruby de Rails

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

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

Page 92: Ruby de Rails

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

Page 93: Ruby de Rails

その5

Page 94: Ruby de Rails

豊富なプラグイン

Page 95: Ruby de Rails

なんでもある

Page 96: Ruby de Rails

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

などなど・・・

Page 97: Ruby de Rails

日本語化はActiveHeatとRuby-GetText

Page 98: Ruby de Rails

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

Page 99: Ruby de Rails
Page 100: Ruby de Rails

CoCDRY言語重要すぐ動く

豊富なプラグイン

Page 101: Ruby de Rails

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

Page 102: Ruby de Rails

Railsのスローガン

Page 103: Ruby de Rails

that's optimized for programmer happiness

and sustainable

Page 104: Ruby de Rails

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

Page 105: Ruby de Rails

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

Page 106: Ruby de Rails

しかしRailsは万能じゃない

Page 107: Ruby de Rails

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

Page 108: Ruby de Rails

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

Page 109: Ruby de Rails

DB設計 (Model)

コントローラ設計

Scaffold

コード実装 HTML実装

Page 110: Ruby de Rails

現実そうはいかない

Page 111: Ruby de Rails

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

Page 112: Ruby de Rails

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

Scaffold

コード実装 HTML実装

画面設計

Page 113: Ruby de Rails

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

Page 114: Ruby de Rails

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

Page 115: Ruby de Rails

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

Page 116: Ruby de Rails

でもDBの変更もmigrationで楽々

Page 117: Ruby de Rails

migration

Page 118: Ruby de Rails

DBの変更を記述する

Page 119: Ruby de Rails

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

def self.down remove_column :users, :nick endend

Page 120: Ruby de Rails

DBの変更もRailsで書く

Page 121: Ruby de Rails

rake migrate

Page 122: Ruby de Rails

古い状態にも戻せる

Page 123: Ruby de Rails

rake migrate VERSION=3

Page 124: Ruby de Rails

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

Page 125: Ruby de Rails

rake remote:migrate

Page 126: Ruby de Rails

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

Page 127: Ruby de Rails

Capistrano

Page 128: Ruby de Rails

カピストラーノ

Page 129: Ruby de Rails

前はSwitchTowerって名前だった

Page 130: Ruby de Rails

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

Page 131: Ruby de Rails

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

Page 132: Ruby de Rails

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

Page 133: Ruby de Rails

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

Page 134: Ruby de Rails

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

Page 135: Ruby de Rails

Capistranoなら簡単

Page 136: Ruby de Rails

rake deploy

Page 137: Ruby de Rails

rake rollback

Page 138: Ruby de Rails

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

Page 139: Ruby de Rails

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

Page 140: Ruby de Rails

第一部おわり

Page 141: Ruby de Rails

小休憩

Page 142: Ruby de Rails

Yuichiro MASUI <[email protected]>

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

Page 143: Ruby de Rails

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

Page 144: Ruby de Rails

正直、あまりない

Page 145: Ruby de Rails

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

Page 146: Ruby de Rails

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

Page 147: Ruby de Rails

Railsで作れる人が居ない

Page 148: Ruby de Rails

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

始めましょう

Page 149: Ruby de Rails

日本の伝統 OJT

Page 150: Ruby de Rails

オファーは結構ある

Page 151: Ruby de Rails

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

Page 152: Ruby de Rails

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

Page 153: Ruby de Rails

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

Page 154: Ruby de Rails

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

Page 155: Ruby de Rails

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

Page 156: Ruby de Rails

安定して稼働できるか

Page 157: Ruby de Rails

やっぱりノウハウが必要

Page 158: Ruby de Rails

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

Page 159: Ruby de Rails

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

Page 160: Ruby de Rails

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

Page 161: Ruby de Rails

FastCGIはちょっと不安

Page 162: Ruby de Rails

最近の定番

Page 163: Ruby de Rails

mongrel+

Apache 2.2mod_proxy_balancer

Page 164: Ruby de Rails

mongrelRuby+CのWebサーバ

Page 165: Ruby de Rails

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

Page 166: Ruby de Rails

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

可能

Page 167: Ruby de Rails

速度に問題はないか

Page 168: Ruby de Rails

確かにRailsは遅いが

Page 169: Ruby de Rails

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

早くなる

Page 170: Ruby de Rails

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

Page 171: Ruby de Rails

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

Page 172: Ruby de Rails

Yuichiro MASUI <[email protected]>

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

Page 173: Ruby de Rails

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

Page 174: Ruby de Rails

rails プロジェクト名

Page 175: Ruby de Rails

ひな形が作られる

Page 176: Ruby de Rails

•app•controllers•models•views

•db•migrate

•test•unit

主なディレクトリ

Page 177: Ruby de Rails

models層が厚くcontrollerが薄い

Page 178: Ruby de Rails

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

おすすめ

Page 179: Ruby de Rails

gem installacts_as_authenticated

Page 180: Ruby de Rails

script/generate authenticated user

account

Page 181: Ruby de Rails

日本語を使うならRuby-GetText

Page 182: Ruby de Rails

gem install gettext

Page 183: Ruby de Rails

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

Page 184: Ruby de Rails

script/generate modelbookmark

Page 185: Ruby de Rails

bookmarkモデルを作成

Page 186: Ruby de Rails

migrationのひな形も同時に作成

Page 187: Ruby de Rails

bookmarkコントローラを作成

Page 188: Ruby de Rails

script/generate scaffold bookmark

Page 189: Ruby de Rails

script/server

Page 190: Ruby de Rails

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

Page 191: Ruby de Rails

test/unit/bookmark_test.rb

Page 192: Ruby de Rails

ZenTestで自動テスト

Page 193: Ruby de Rails

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

Page 194: Ruby de Rails

Ajaxも超簡単

Page 195: Ruby de Rails

prototype.jsによるエフェクト

Page 196: Ruby de Rails

RJSによるDOM操作

Page 197: Ruby de Rails

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

Page 198: Ruby de Rails

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

Page 199: Ruby de Rails

質問コーナー