Ruby Sapporo Night Vol.4

119
Ruby札幌 presents RubySapporoNight vol.4 日本Rubyの会 / Ruby札幌 島田浩二 [email protected]

description

 

Transcript of Ruby Sapporo Night Vol.4

Page 1: Ruby Sapporo Night Vol.4

Ruby札幌 presents

RubySapporoNightvol.4

日本Rubyの会 / Ruby札幌島田浩二

[email protected]

Page 2: Ruby Sapporo Night Vol.4

アジェンダ✓ 自己紹介✓ RubyとRuby札幌✓ Ruby on Rails入門✓ RubyCocoa関連いろいろ✓ 予告

Page 3: Ruby Sapporo Night Vol.4

自己紹介

Page 4: Ruby Sapporo Night Vol.4

しまだこうじ(snoozer.05)✓ 普通のフリーランス・プログラマ✓ ‘06に独立し、武者修行中

✓ Rubyとの関わり✓ Ruby札幌運営✓ RubyKaigi2007当日スタッフ✓ るびま、るりま

✓ プログラミングの楽しさを皆さんと共有したい✓ 自分の知らないコトやヒトと出会いたい✓ http://iddy.jp/profile/snoozer05

Page 5: Ruby Sapporo Night Vol.4

しまだこうじ(snoozer.05)✓ 組み込みZineに記事を書きました✓ 読んで評価をいただけると嬉しいです✓ Cの話題ですが…

http://kumikomizine.jp/article/corner/10/

Page 6: Ruby Sapporo Night Vol.4

本日もどうぞよろしくお願いします

Page 7: Ruby Sapporo Night Vol.4

Ruby

Page 8: Ruby Sapporo Night Vol.4

Rubyとは✓ まつもとゆきひろ氏によって開発された動的オブジェクト指向スクリプト言語

✓ http://www.ruby-lang.org/ja/✓ 楽しく、簡単に、自然にプログラミングがコンセプト

✓ 柔軟かつアジャイルな開発を支援✓ A Programmer’s Best Friend

Page 9: Ruby Sapporo Night Vol.4

Ruby札幌

Page 10: Ruby Sapporo Night Vol.4

Ruby札幌とは✓ 札幌にてRubyに関するイベントや活動を行っているコミュニティ✓ “From Sapporo, With Love For Ruby.” ✓ Ruby勉強会@札幌✓ RubySapporoNight ✓ 開発集会@札幌✓ Ruby&Rails入門講座 

Page 11: Ruby Sapporo Night Vol.4

http://ruby-sapporo.org/

Page 12: Ruby Sapporo Night Vol.4

本編

Page 13: Ruby Sapporo Night Vol.4

前回のRSNに参加いただいた方?

Page 14: Ruby Sapporo Night Vol.4

前回のRSN

Page 15: Ruby Sapporo Night Vol.4

AR特集

Page 16: Ruby Sapporo Night Vol.4

資料の作成はけっこう頑張った

Page 17: Ruby Sapporo Night Vol.4

機能の説明に終始しすぎて、魅力をうまく伝えられず

Page 18: Ruby Sapporo Night Vol.4

しょぼーん(́・ω・`)

Page 19: Ruby Sapporo Night Vol.4

どうしたらRubyやRailsの魅力をうまく伝えられるだろう

Page 20: Ruby Sapporo Night Vol.4

一昨日までの状況

Page 22: Ruby Sapporo Night Vol.4

閃いた(11/27未明)

Page 23: Ruby Sapporo Night Vol.4

僕が好きな所に絞って説明したらなんとかなるかもしれない

Page 24: Ruby Sapporo Night Vol.4

ということでなんとか準備して参りました

Page 25: Ruby Sapporo Night Vol.4

ならなかったらごめんなさい

Page 26: Ruby Sapporo Night Vol.4

とりあえずいきます

Page 27: Ruby Sapporo Night Vol.4

今年最後のRSN

Page 28: Ruby Sapporo Night Vol.4

Ruby on Rails入門 - 番外編

2007-11-28RubySapporoNight-4

僕がRailsに惹かれた理由

Page 29: Ruby Sapporo Night Vol.4

たくさんあるので今日はそのうちの一つについて(汗

Page 30: Ruby Sapporo Night Vol.4

一つ

Page 31: Ruby Sapporo Night Vol.4

言語指向プログラミング

Page 32: Ruby Sapporo Night Vol.4

LanguageOriented

Programming

Page 33: Ruby Sapporo Night Vol.4

言語指向プログラミングとは?

Page 34: Ruby Sapporo Night Vol.4

Martin Fowler

Page 36: Ruby Sapporo Night Vol.4

DSLを使ってソフトウェア構築を行う一般的な開発スタイル

Page 37: Ruby Sapporo Night Vol.4

DSLDomain Specific Language

Page 38: Ruby Sapporo Night Vol.4

ドメイン特化言語

Page 39: Ruby Sapporo Night Vol.4

特定の問題領域の解決に特化してデザインされた言語

Page 40: Ruby Sapporo Night Vol.4

DSLとは問題に対して言語を最適化するアプローチ

Page 41: Ruby Sapporo Night Vol.4

言語内DSLと

言語外DSL

Page 42: Ruby Sapporo Night Vol.4

言語内DSLホストとなる言語とDSLが同じもの

Page 43: Ruby Sapporo Night Vol.4

言語外DSLホストとなる言語とDSLが異なるもの

Page 44: Ruby Sapporo Night Vol.4

RailsとDSL

Page 45: Ruby Sapporo Night Vol.4

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

引用:「TODOを作りながら学ぶRailsチュートリアル」

Page 46: Ruby Sapporo Night Vol.4

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

引用:「TODOを作りながら学ぶRailsチュートリアル」

Page 47: Ruby Sapporo Night Vol.4

Webアプリ開発という問題領域に対する言語内DSLとしてのRails

Page 48: Ruby Sapporo Night Vol.4

プログラミングの面白さを改めて実感

Page 49: Ruby Sapporo Night Vol.4

具体例

Page 50: Ruby Sapporo Night Vol.4

簡単に4つほど

Page 51: Ruby Sapporo Night Vol.4

(1)

Page 52: Ruby Sapporo Night Vol.4

モデル間の関連をクラスメソッドで表現

Page 53: Ruby Sapporo Night Vol.4

class Host < ActiveRecord::Base has_many :eventsend

class Event < ActiveRecord::Base belongs_to :hostend

ruby_sapporo = Host.find(:first)ruby_sapporo.events.each do |event| puts event.nameend

Page 54: Ruby Sapporo Night Vol.4

(2)

Page 55: Ruby Sapporo Night Vol.4

データベースのマイグレーション

Page 56: Ruby Sapporo Night Vol.4

class CreateUsers < ActiveRecord::Migration def self.up create_table "users" do |t| t.column :login, :string t.column :email, :string t.column :created_at, :datetime t.column :updated_at, :datetime end end

def self.down drop_table "users" endend

Page 57: Ruby Sapporo Night Vol.4

(3)

Page 58: Ruby Sapporo Night Vol.4

データベース接続のためのアダプタ

Page 59: Ruby Sapporo Night Vol.4

ActiveRecord::Base.establish_connection( :adapter => “postgresql”, :host => “localhost”, :username => “foo”, :password => “bar”, :database => “rsn_development”)

Page 60: Ruby Sapporo Night Vol.4

(4)

Page 61: Ruby Sapporo Night Vol.4

ルーティング定義

Page 62: Ruby Sapporo Night Vol.4

ActionController::Routing::Routes.draw do |map| # You can have the root of your site routed by hooking up # '' -- just remember to delete public/index.html. map.connect '', :controller => "event", :action => "list"

# Allow downloading Web Service WSDL as a file # with an extension instead of a file named 'wsdl' map.connect ':controller/service.wsdl', :action => 'wsdl'

# Install the default route as the lowest priority. map.connect ':controller/:action/:id.:format' map.connect ':controller/:action/:id'end

Page 63: Ruby Sapporo Night Vol.4

Webアプリケーション開発に対するDSL的な工夫がたくさん

Page 64: Ruby Sapporo Night Vol.4

Railsの魅力

Page 65: Ruby Sapporo Night Vol.4

Rubyの表現力がパワー

Page 66: Ruby Sapporo Night Vol.4

DSLを支えるRubyの表現力

Page 67: Ruby Sapporo Night Vol.4

(1)

Page 68: Ruby Sapporo Night Vol.4

省略表記

Page 69: Ruby Sapporo Night Vol.4

メソッドの括弧を省略できるとか

Page 70: Ruby Sapporo Night Vol.4

class CreateUsers < ActiveRecord::Migration def self.up create_table( "users" ) { |t| t.column( :login, :string ) t.column( :email, :string ) t.column( :created_at, :datetime ) t.column( :updated_at, :datetime ) } end ...end

Page 71: Ruby Sapporo Night Vol.4

class CreateUsers < ActiveRecord::Migration def self.up create_table "users" do |t| t.column :login, :string t.column :email, :string t.column :created_at, :datetime t.column :updated_at, :datetime end end ...end

Page 72: Ruby Sapporo Night Vol.4

(2)

Page 73: Ruby Sapporo Night Vol.4

純粋なオブジェクト指向言語

Page 74: Ruby Sapporo Night Vol.4

シンボルや文字列もオブジェクト

Page 75: Ruby Sapporo Night Vol.4

ActiveRecord::Base.establish_connection( :adapter => “postgresql”, :host => “localhost”, :username => “foo”, :password => “bar”, :database => “rsn_development”)

Page 76: Ruby Sapporo Night Vol.4

(3)

Page 77: Ruby Sapporo Night Vol.4

ブロックのサポート

Page 78: Ruby Sapporo Night Vol.4

コンテキストをうまく表現できる

Page 79: Ruby Sapporo Night Vol.4

class CreateUsers < ActiveRecord::Migration def self.up create_table "users" do |t| t.column :login, :string t.column :email, :string t.column :created_at, :datetime t.column :updated_at, :datetime end end ...end

Page 80: Ruby Sapporo Night Vol.4

(4)

Page 81: Ruby Sapporo Night Vol.4

オープンクラス

Page 82: Ruby Sapporo Night Vol.4

標準クラスだって手を入れられる

Page 83: Ruby Sapporo Night Vol.4

大事なのは「問題」対「私たち」

Page 84: Ruby Sapporo Night Vol.4

DSLを支えるRubyの表現力

Page 85: Ruby Sapporo Night Vol.4

Rails以外にもあるよ

Page 86: Ruby Sapporo Night Vol.4

RubyでDSL

Page 87: Ruby Sapporo Night Vol.4

Rake

Page 88: Ruby Sapporo Night Vol.4

Rubyで作られたビルドツール

Page 89: Ruby Sapporo Night Vol.4

#settingTARGET = ‘hello’OBJ = FileList["./*.c"].ext("o")

#rakedesc "Build target."task :default => [TARGET]file TARGET => OBJ do sh "gcc ./#{OBJ} -o #{TARGET}"end

#rake cleanCLEAN.include("./#{OBJ}")CLEAN.include("#{TARGET}")

Page 90: Ruby Sapporo Night Vol.4

RSpec

Page 91: Ruby Sapporo Night Vol.4

プログラムの振舞を記述するためのDSLフレームワーク

Page 92: Ruby Sapporo Night Vol.4

describe Array, "when empty" do before do @empty_array = [] end

it "should be empty" do @empty_array.should be_empty end

it "should size 0" do @empty_array.size.should == 0 end

after do @empty_array = nil endend

Page 93: Ruby Sapporo Night Vol.4

Rubyの表現力

Page 94: Ruby Sapporo Night Vol.4

DSLの良いプラットフォーム

Page 95: Ruby Sapporo Night Vol.4

まとめ

Page 96: Ruby Sapporo Night Vol.4

DSLは問題に対して言語を最適化するアプローチ

Page 97: Ruby Sapporo Night Vol.4

問題領域=

人の考える領域

Page 98: Ruby Sapporo Night Vol.4

DSLとはプログラミング言語を人の思考に近づける

アプローチ

Page 99: Ruby Sapporo Night Vol.4

加えて言語内DSLだとプログラミング言語のパワーも引き継ぐことが出来る

Page 100: Ruby Sapporo Night Vol.4

良い例

Page 101: Ruby Sapporo Night Vol.4

Ruby On Rails

Page 102: Ruby Sapporo Night Vol.4

Webアプリケーション開発という問題領域に

対するDSL

Page 103: Ruby Sapporo Night Vol.4

Rubyの表現力がそれを支援している

Page 104: Ruby Sapporo Night Vol.4

DSLにのっかる楽しさ

Page 105: Ruby Sapporo Night Vol.4

DSLを作る楽しさ

Page 106: Ruby Sapporo Night Vol.4

RubyでDSLは面白い

Page 107: Ruby Sapporo Night Vol.4

皆さんも関心のある問題領域をRubyを使ってDSLってみませんか?

Page 108: Ruby Sapporo Night Vol.4

Ruby on Rails入門 - 番外編

2007-11-28RubySapporoNight-4

僕がRailsに惹かれた理由

Page 110: Ruby Sapporo Night Vol.4

RubyInject✓ mach_starをRubyで使えるようにしたもの✓ mach_star✓ 既存のシンボルを別のシンボルでオーバーライドできる

✓ 実行中のプロセスに任意のモジュールをロードできる

✓ PyObjCのobjc.injectのRuby版

Page 112: Ruby Sapporo Night Vol.4

予告

Page 113: Ruby Sapporo Night Vol.4

Ruby忘年会@札幌✓ 時:2007年12月23日(土)✓ 場所:札幌某所✓ 内容:✓ みんなで集まってワイワイ✓ もう少ししたらアナウンスします✓ 同時開催 : ✓ Ruby札幌ふりかえり

Page 114: Ruby Sapporo Night Vol.4

Ruby初め2008@札幌✓ 時:2008年1月2日✓ 場所:北海道情報大学札幌サテライト✓ 内容:✓ 2008年、どこよりも早い勉強会!✓ 高橋会長をお迎えしてお送りします!✓ 書き初め、読み合わせ、...etc✓ 待て!詳細

Page 115: Ruby Sapporo Night Vol.4

JPUG × Ruby札幌 合同イベント✓ 時:2008年2月16日(土)✓ 場所:エルプラザ大研修室✓ 内容:✓ Ruby界からは、かの角谷信太郎氏をお迎えして、RSpecを使ったテスト駆動開発入門「スはスペックのス~RSpecによるDeveloper Testingの紹介~」を行っていただく予定です!乞うご期待!

Page 116: Ruby Sapporo Night Vol.4

これからも真摯にRubyのことを伝えていければと思っています

Page 117: Ruby Sapporo Night Vol.4

2008年もRuby札幌をどうぞよろしくお願いします

Page 118: Ruby Sapporo Night Vol.4

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

Page 119: Ruby Sapporo Night Vol.4

なにかご質問は?