吉田和弘 株式会社ミッタシステム http://www.mitta-sys.jp/ Rubyのすすめ 吉田和弘 株式会社ミッタシステム http://www.mitta-sys.jp/
Rubyist Magazineで紹介 「RubyOnRailsを使ってみる」連載中
ライド・オン・Rails ソフトバンク(SBCr)から発売中 with babie さん 400ページ
WEB+DB PRESS WEB+DB PRESS 連載中 with 高橋さん
Railsとの出会い きっかけ Rubyで書き直す 昔Perlで書いたCGI 仕様拡張 どうしよう… cgi.rb, Mysql/Ruby, eRuby 大きくなると保守たいへん
Ruby on Rails いきなりしっくりきた テンプレートはeRubyで記述 ActiveRecord SQLで書いてもいい
Ruby on Rails 開発事例
Rails 開発事例 託児施設 入退室管理・請求書発行 携帯メール連絡網 etc.
託児施設 入退室管理・請求書発行
託児施設(1) 入退室管理 ActiveRecord Apollo (Delphi VCL) GUIのテストをある程度自動化できた
託児施設(2) 月次請求書発行 Excel Win32OLE Apollo Excelのテストを自動化できた
託児施設(3) リモートメンテナンス Capistrano mysql … (backup) svn up rake db:migrate デプロイ(配置)ツール
毎朝svn up タッチパネル DB Excel PC 松山 svn repos 高松
携帯メール連絡網
Rails入門
Railsの構成 ActionController ActionView: eRuby ActiveRecord (Model): DSL ActiveResource (RESTful) capistrano: デプロイツール
Model *..* User 登録関係 購読関係 管理権限 出席番号 既読・出欠確認 *..* Room Topic 配信関係 *..*
Model *..1 User 1..* Membership Subscription *..1 *..1 Room Topic Publication 1..* *..1
ドメイン特化言語(DSL) class Topic < ActiveRecord::Base has_many :subscriptions has_many :users, :through => :subscriptions class Subscription < ActiveRecord::Base belongs_to :topic
アジャイルな仕組み テスト駆動開発(TDD) migration plugin 全てRubyで記述できる テスト環境DB Fixtures: テストデータ migration DBスキーマをバージョン管理 plugin 配布:subversionで公開するだけ 全てRubyで記述できる
サーバ構成 Webrick, Lighttpd , Apache, mongrel Pound, mod_proxy, FastCGI, mongrel_cluster DB: MySQL, PostgreSQL, Firebird, Oracle, …
開発風景 script/generate model Blog vi db/migrate/… rake db:migrate script/generate controller … vi test/… rake test vi app/…
Ruby入門
最近のRuby Ruby on Rails YARV -> RubyVM (Ruby 1.9) Ruby 1.8.6-p36 JRuby, IronRuby, etc. Ruby会議2007
Rubyの特徴 スクリプト言語 オブジェクト指向言語 動的言語
スクリプト言語 インタプリタ 実行時にも構文解析できる 文法要素の多くが値を持つ トップレベルがある require eval 制御構文も式 最初から式を書ける
オブジェクト指向言語 統一データモデル 全ての値はObject Mix-in 特異メソッド/クラス 1+1 1.+(1) 一本筋の通った。統一感のある。
動的言語 リフレクション 動的なメソッド呼び出し オープンクラス 全ては実行文 クラス情報を実行時に操作できる send method_missing オープンクラス いつでも/どこでも 再定義できる 全ては実行文
クラスとインスタンス class C def hello(name) "Hello from #{name}" end obj = C.new puts obj.hello("kaz") # Hello from kaz
インスタンス変数 class C def initialize(name) @name = name end def hello "Hello from #{@name}" obj = C.new("kaz") puts obj.hello # Hello from kaz
モジュールとmix-in module M def hello "Hello from #{@name}" end class C def initialize(name) @name = name include M
継承 class B < C def bye … end obj = B.new("kaz") obj.hello obj.bye
特異メソッド obj = C.new("kaz") def obj.bye … end obj.bye
まとめ オブジェクトモデル モジュールのmix-inによる柔軟な継承 オブジェクト固有のメソッド(特異メソッド)
Thank you