Ruby札幌 presents
RubySapporoNight
vol.4
日本Rubyの会 / Ruby札幌
島田浩二
snoozer.05@gmail.com
アジェンダ
✓ 自己紹介
✓ RubyとRuby札幌
✓ Ruby on Rails入門
✓ RubyCocoa関連いろいろ
✓ 予告
自己紹介
しまだこうじ(snoozer.05)
✓ 普通のフリーランス・プログラマ
✓ 06に独立し、武者修行中
✓ Rubyとの関わり
✓ Ruby札幌運営
✓ RubyKaigi2007当日スタッフ
✓ るびま、るりま
✓ プログラミングの楽しさを皆さんと共有したい
✓ 自分の知らないコトやヒトと出会いたい
✓ http://iddy.jp/profile/snoozer05
しまだこうじ(snoozer.05)
✓ 組み込みZineに記事を書きました
✓ 読んで評価をいただけると嬉しいです
✓ Cの話題ですが…
http://kumikomizine.jp/article/corner/10/
本日も
どうぞよろしく
お願いします
Ruby
Rubyとは
✓ まつもとゆきひろ氏によって開発された
動的オブジェクト指向スクリプト言語
✓ http://www.ruby-lang.org/ja/
✓ 楽しく、簡単に、自然にプログラミング
がコンセプト
✓ 柔軟かつアジャイルな開発を支援
✓ A Programmer s Best Friend
Ruby札幌
Ruby札幌とは
✓ 札幌にてRubyに関するイベントや活
動を行っているコミュニティ
✓ From Sapporo, With Love For Ruby.  
✓ Ruby勉強会@札幌
✓ RubySapporoNight 
✓ 開発集会@札幌
✓ Ruby&Rails入門講座 
http://ruby-sapporo.org/
本編
前回のRSNに
参加いただいた方?
前回のRSN
AR特集
資料の作成は
けっこう頑張った
機能の説明に終始
しすぎて、魅力を
うまく伝えられず
しょぼーん
(́・ω・`)
どうしたらRubyや
Railsの魅力をうま
く伝えられるだろう
一昨日までの状況
http://noplans.org/product/t-shirt/
閃いた
(11/27未明)
僕が好きな所に絞っ
て説明したらなんと
かなるかもしれない
ということで
なんとか準備して
参りました
ならなかったら
ごめんなさい
とりあえず
いきます
今年最後のRSN
Ruby on Rails入門 - 番外編
2007-11-28
RubySapporoNight-4
僕がRailsに
惹かれた理由
たくさんあるので
今日はそのうちの
一つについて(汗
一つ
言語指向
プログラミング
Language
Oriented
Programming
言語指向
プログラミング
とは?
Martin Fowler
http://www.martinfowler.com/articles/
DSLを使って
ソフトウェア構築
を行う一般的な
開発スタイル
DSLDomain Specific Language
ドメイン
特化言語
特定の問題領域の
解決に特化してデ
ザインされた言語
DSLとは
問題に対して言語を最
適化するアプローチ
言語内DSL
と
言語外DSL
言語内DSL
ホストとなる言語と
DSLが同じもの
言語外DSL
ホストとなる言語と
DSLが異なるもの
RailsとDSL
RailsではRubyを拡張して
DSLっぽく使っている
引用:「TODOを作りながら学ぶRailsチュートリアル」
Webに特化させてる故に
書きやすい
引用:「TODOを作りながら学ぶRailsチュートリアル」
Webアプリ開発という
問題領域に対する言語
内DSLとしてのRails
プログラミングの
面白さを改めて実感
具体例
簡単に4つほど
(1)
モデル間の関連を
クラスメソッドで表現
class Host < ActiveRecord::Base
has_many :events
end
class Event < ActiveRecord::Base
belongs_to :host
end
ruby_sapporo = Host.find(:first)
ruby_sapporo.events.each do ¦event¦
puts event.name
end
(2)
データベースの
マイグレーション
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"
end
end
(3)
データベース接続の
ためのアダプタ
ActiveRecord::Base.establish_connection(
:adapter => postgresql ,
:host => localhost ,
:username => foo ,
:password => bar ,
:database => rsn_development
)
(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
Webアプリケーション
開発に対するDSL的な
工夫がたくさん
Railsの魅力
Rubyの表現力
がパワー
DSLを支える
Rubyの表現力
(1)
省略表記
メソッドの
括弧を省略
できるとか
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
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
(2)
純粋な
オブジェクト
指向言語
シンボルや
文字列も
オブジェクト
ActiveRecord::Base.establish_connection(
:adapter => postgresql ,
:host => localhost ,
:username => foo ,
:password => bar ,
:database => rsn_development
)
(3)
ブロックの
サポート
コンテキスト
をうまく表現
できる
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
(4)
オープン
クラス
標準クラス
だって手を
入れられる
大事なのは
「問題」対
「私たち」
DSLを支える
Rubyの表現力
Rails以外
にもあるよ
RubyでDSL
Rake
Rubyで
作られた
ビルドツール
#setting
TARGET = hello
OBJ = FileList["./*.c"].ext("o")
#rake
desc "Build target."
task :default => [TARGET]
file TARGET => OBJ do
sh "gcc ./#{OBJ} -o #{TARGET}"
end
#rake clean
CLEAN.include("./#{OBJ}")
CLEAN.include("#{TARGET}")
RSpec
プログラムの
振舞を記述す
るためのDSL
フレームワーク
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
end
end
Rubyの表現力
DSLの良い
プラットフォーム
まとめ
DSLは
問題に対して言語を
最適化するアプローチ
問題領域
=
人の考える領域
DSLとは
プログラミング言語
を人の思考に近づける
アプローチ
加えて言語内DSL
だとプログラミング
言語のパワーも引き
継ぐことが出来る
良い例
Ruby On Rails
Webアプリケーション
開発という問題領域に
対するDSL
Rubyの表現力が
それを支援している
DSLにのっかる
楽しさ
DSLを作る
楽しさ
RubyでDSLは
面白い
皆さんも関心のある
問題領域をRubyを
使ってDSLって
みませんか?
Ruby on Rails入門 - 番外編
2007-11-28
RubySapporoNight-4
僕がRailsに
惹かれた理由
RubyCocoa関連
✓ RubyCocoa 0.13.0 リリース
✓ rucola 0.0.2 リリース
✓ rubigen
✓ newgem
✓ RubyInject 0.1.0 リリース
RubyInject
✓ mach_starをRubyで使えるようにしたもの
✓ mach_star
✓ 既存のシンボルを別のシンボルでオーバー
ライドできる
✓ 実行中のプロセスに任意のモジュールを
ロードできる
✓ PyObjCのobjc.injectのRuby版
RubyCocoa関連
✓ RubyCocoa 0.13.0 リリース
✓ rucola 0.0.2 リリース
✓ rubigen
✓ newgem
✓ RubyInject 0.1.0 リリース
予告
Ruby忘年会@札幌
✓ 時:2007年12月23日(土)
✓ 場所:札幌某所
✓ 内容:
✓ みんなで集まってワイワイ
✓ もう少ししたらアナウンスします
✓ 同時開催 :
✓ Ruby札幌ふりかえり
Ruby初め2008@札幌
✓ 時:2008年1月2日
✓ 場所:北海道情報大学札幌サテライト
✓ 内容:
✓ 2008年、どこよりも早い勉強会!
✓ 高橋会長をお迎えしてお送りします!
✓ 書き初め、読み合わせ、...etc
✓ 待て!詳細
JPUG Ruby札幌 合同イベント
✓ 時:2008年2月16日(土)
✓ 場所:エルプラザ大研修室
✓ 内容:
✓ Ruby界からは、かの角谷信太郎氏をお迎
えして、RSpecを使ったテスト駆動開発
入門「スはスペックのス∼RSpecによる
Developer Testingの紹介∼」を行って
いただく予定です!乞うご期待!
これからも真摯に
Rubyのことを
伝えていければと
思っています
2008年も
Ruby札幌を
どうぞよろしく
お願いします
ご清聴
ありがとう
ございました
なにか
ご質問は?

Ruby Sapporo Night Vol4