Web2.0 and Ruby

2,677 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,677
On SlideShare
0
From Embeds
0
Number of Embeds
76
Actions
Shares
0
Downloads
19
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Web2.0 and Ruby

  1. 1. 2008.02.26 鈍器本セミナー 第二部 Web 2.0とRuby gem install rails -y (株)永和システムマネジメント 伊藤 浩一 http://www.edit.ne.jp/~koic/
  2. 2. 自己紹介 • 名前: 伊藤 浩一 • 日記: http://www.edit.ne.jp/~koic/ • Twitter: http://twitter.com/koic/ • メール: koic.ito@gmail.com • 勤務先: 株式会社 永和システムマネジメント – プログラマ 兼 現場リーダー Web 2.0とRuby 2
  3. 3. 何やっている人が話すの? Web 2.0とRuby 3
  4. 4. 仕事風景から ~最近の新メニュー~ Web 2.0とRuby 4
  5. 5. 古今東西 デザパタ古今東西 Web 2.0とRuby 5
  6. 6. それってなんなの? • 週末の夕会後、 • GoFのデザインパターンのパターン名や java.langパッケージのクラス名など、 • テーマを決め、 • メンバーが順番に云って行き、 • パス三回でアウトになるサバイバルゲーム Web 2.0とRuby 6
  7. 7. なにが狙い? • 少し離れ気味の知識、伝家の宝刀が錆びない よう素振り • 奇妙な一体感とノスタルジーによるヒーリング効 果 • 楽しく一週間の仕事を終える Web 2.0とRuby 7
  8. 8. 思わぬ副作用 ~周辺プロジェクトの反応~ Web 2.0とRuby 8
  9. 9. 自ずから巻き込まれる • 事例1 @nawoto LLWGリーダー • 事例2 @_dotタン Web 2.0とRuby 9
  10. 10. 巻き込まれ力の 向上効果 Web 2.0とRuby 10
  11. 11. 巻き込まれ力~あまのりょーさんの仮説 『”involve” NOT ”evolve”』 あまのりょーさん Web 2.0とRuby 11
  12. 12. 一目置かれる人に近づく! Web 2.0とRuby 12
  13. 13. もうひとつの顔~ライター~ • Web 2.0ビギナーズバイブル (毎日コミュニケーションズ) • EngineerMind vol.5 (技術評論社) – 『プログラマのための創造的プロジェクトファシリテーション』 • 開発の現場 vol.11 (翔泳社) – 『保守プロジェクトとデベロッパーテスティング』 928ページ 鈍器本 Web 2.0とRuby 13
  14. 14. 巻き込まれてシメシメやってきました 『”involve” NOT ”evolve”』 あまのりょーさん Web 2.0とRuby 14
  15. 15. 今日はよろしく お願いします Web 2.0とRuby 15
  16. 16. アジェンダ • プログラマとしてのお話 – RubyとRuby on Rails – Ruby on RailsとREST • 現場リーダーとしてのお話 – Ruby on Railsによるチーム開発 • ライターとしてのお話 – 次回作のプレビュー Web 2.0とRuby 16
  17. 17. プログラマとしてのお話 Web 2.0とRuby 17
  18. 18. Chapter 1. WebとRuby Web 2.0とRuby 18
  19. 19. Ruby • プログラミングを楽しくする言語 • プログラマのプログラマによるプログラマのため の言語 • ツール(言語)は思考を規定する http://www.ruby-lang.org/ja/ Web 2.0とRuby 19
  20. 20. Web 2.0 ビギナーズバイブル Perl, PHP, Python, Rubyなどの Lightweight LanguageでWeb アプリケーション開発を解説し た書籍 Web 2.0とRuby 20
  21. 21. Lightweight Language • Lightweight Languageとは 「脳力」を少なく消費する • 「脳力」はプログラミング活動 中に消費される仮想的なパワ ーである • 消費「脳力」の総和が少ない ことももちろん重要だが瞬間 最大消費「脳力」が大きすぎる のもよろしくない Web 2.0とRuby 21
  22. 22. 人間の脳への負担の少ない性質 発想→変換→表現(プログラム) 距離 発想 表現 say = quot;I love Rubyquot; puts say say['love'] = quot;*love*quot; 変換 puts say.upcase 5.times { puts say } 発想から表現までの変換の距離「脳力」が生産性の指標のひとつ Web 2.0とRuby 22
  23. 23. Web APIを利用したサンプルコード Ruby/Amazonを使った書誌情報取得例 amazon-search.rb require 'amazon/search' if ARGV.size != 2 puts quot;Usage: #{$0} quot;¥ quot;[Amazon Web Services AccessKey ID] [text to search for]quot; exit end access_key, search_request = ARGV req = Amazon::Search::Request.new(access_key) req.keyword_search(search_request, 'books', Amazon::Search::LIGHT) do |book| puts %{quot;#{book.product_name}quot; by #{book.authors.join(', ')}} end 実行と結果 $ ruby amazon-search.rb アクセスキー quot;restful web services“ quot;RESTful Web Servicesquot; by Leonard Richardson, Sam Ruby, David Heinemeier Hansson 『RESTful Webサービス』より抜粋 Web 2.0とRuby 23
  24. 24. 言語としてのRuby自体は Webと直接の関係はなく Ruby on Railsによる 波及効果が大きい Web 2.0とRuby 24
  25. 25. Ruby on Rails • Ruby製のWebアプリケーションフレームワーク • 「美しいコードを書けるからRubyを選んだ」 (David Heinemeier Hansson氏) – http://itpro.nikkeibp.co.jp/article/NEWS/20060620/241346/ • 現在のRubyブームの火付け役 http://www.rubyonrails.org/ Web 2.0とRuby 25
  26. 26. Ruby on Railsの特徴 • DRY―Don’t Repeat Yourself (繰り返しを避けること) • Convention over Configuration (設定より規約) • full-stack Web 2.0とRuby 26
  27. 27. 割愛 鈍器本 Chapter 11 をご参照ください Web 2.0とRuby 27
  28. 28. 異なる側面 • DSL • パターン Patterns • REST指向 DSL REST DRY full-stack CoC Web 2.0とRuby 28
  29. 29. DSL • Domain Specific Language (DSL) – Webとデータベースの領域に特化した内部DSL • 左から右へ – 目で文章を追う時と同じ動きで記述可能 • BDDフレームワーク『RSpec』に顕著 • 問題領域の語彙を使い、少ない記述でコードの 意図を表すことができる class Profile < ActiveRecord::Base belongs_to :account validates_presence_of :name end Web 2.0とRuby 29
  30. 30. (補足) 内部DSL • 内部DSLによりすべてRubyの構文で記述可能 – RubyのAPIとRailsのAPIに違いがない Railsの 採った道 外部DSL 内部DSL 対象ドメイン 外部DSL 内部DSL(Rails) 透過的 汎用言語 汎用言語(Ruby) 例えばRuby 例えばXML Railsの場合 「脳力」の消費が低い言語で一貫できる Web 2.0とRuby 30
  31. 31. Patterns パターンは発明する ものではなく発見 されるもの 『Patterns of Enterprise Application Architecture』 『Refactoring Databases』『J2EE Patterns』などの パターンが構成要素に含まれる 後に出てくるものが優れていることは世の常 Web 2.0とRuby 31
  32. 32. REST指向 次章に続く Web 2.0とRuby 32
  33. 33. Chapter 2. RailsとREST Web 2.0とRuby 33
  34. 34. RESTとROA • RESTはWebに依存しない設計条件 • ROA (Resource oriented Architecture) – RESTアーキテクチャスタイルの実現手段のひとつ アーキテクチャスタイル REST アーキテクチャ ROA Web 2.0とRuby 34
  35. 35. ROAとプログラマブルWeb • プログラムを対象としたWeb – HTTPとMachine ReadableなXMLに基づいている 人 URL HTML リソース マシン(プログラム) URL プログラマブルWeb XML ▲ • 東京の天気予報 HTTP • 2008年2月26日の require ‘open-uri‘ require ‘rexml‘ スケジュール • 東京の地図 open(“www... Web 2.0とRuby 35
  36. 36. リソースとURI • リソースとは実体だったり概念だったりする抽象 的なもの • RESTでは、クライアントが操作できるリソース ごとにURIを公開 URI リソース (東京の地図) 公開した名前 ▼ GET /maps/tokyo メソッド情報 スコープ情報 Web 2.0とRuby 36
  37. 37. HTTPリクエストとメッセージパッシング GET /maps/tokyo HTTPリクエスト(抜粋) 名詞 動詞 メッセージパッシング Map.find(:first, :conditions => [’area = ?’, ’tokyo’]) Web 2.0とRuby 37
  38. 38. リソース指向とオブジェクト指向 GET /maps/tokyo URI リソース メソッド名が クライアント GET 標準化されている POST PUT 名前を持つ DELETE … <<instance>> <<instance>> <<instance>> 2008年2月26日 東京の天気予報 東京の地図 のスケジュール Map.find(:first, :conditions => [’area = ?’, ’tokyo’]) Web 2.0とRuby 38
  39. 39. Active Resource • Webサービスを対象にActiveRecordのような CRUDを備える – Rails 2.0で正式に追加された • REST指向フレームワークという特色をより強く 打ち出す – ActiveResource::Baseクラスを継承して、オブジェ クトを公開するサイトを指定することでWebのCRUD に対応Map < ActiveResource::Base class self.site = ’http://localhost:3000’ end Web 2.0とRuby 39
  40. 40. Chapter 1 & 2 まとめ • Lightweight LanguageによるWebアプリケーシ ョンフレームワークの台頭によりWebプログラミ ングの敷居が低くなりました – Railsへの最初の一歩は以下のコマンドです $ gem install rails -y Rubyのインストールと、『鈍器本』の購入をお忘れなく Web 2.0とRuby 40
  41. 41. Chapter 3. Ruby on Railsによる チーム開発 ~現場リーダーから見たRails~ Web 2.0とRuby 41
  42. 42. Railsを使ったお仕事の経験と風聞 • メンバーの立ち上がりが速い • 比較的簡単な業務知識 • Model/Controllerのプロダクトコード実装量が少ない • その分Viewやテストを厚く – デスクトップライクなUIの作成は、JavaScriptで • 自動化されたテストにするのが大変 >< – そもそもUIのテストは自動化できるものと、できないものがあ る • 限られた開発期間の中で、自動化をするための工数(投資)が見合 わないことが多い Web 2.0とRuby 42
  43. 43. 新しいアイテムを手に入れた? • 道具が変わっても人が変わるわけではない – 新しい技術を持ってきても、基礎となる開発の呼吸 は変わらない – プラットフォーム独特の設計技法やコンピュータへの 指示方法が変わる • 新しい技術への対応速度 • 継続的なプランニング、ホワイトボードディスカッ ション、報告・連絡・相談など、足元が重要 – チームのまわし方への配慮 Web 2.0とRuby 43
  44. 44. プロジェクトを取り巻くツール Web 2.0とRuby 44
  45. 45. 人とツール 人はあらゆるツールよりも重要である。 優れた人々に優れたツールを与えれば、 ツールを持たない優れた人々よりも効率が 上がる。 特にそれを使うときが楽しいものであれば。 Web 2.0とRuby 45
  46. 46. プロジェクトでの基盤技術とツール • バージョン管理 • テスティング – ユニットテスト – 受入れテスト RSpec on Rails CC.rb test/unit Capistrano • 自動化 – CI SVN – マイグレーション 自動化 – デプロイ テスティング バージョン管理 Web 2.0とRuby 46
  47. 47. 3つの基盤技術 3つの基盤技術と3つの環境 (V)バージョン管理 test, development, production (T)テスティング (A)自動化 受入れテスト(T) リポジトリ(V) 運用環境 <production> チェックアウト (V) 更新、 継続的インテグレーション チェックアウト コミット(V) サーバ (V) <test> ローカル環境 デプロイ(A) 作業 <test, development> ※リポジトリから運用環境へ ソースをチェックアウト マイグレーション、テスト (A) マイグレーション(A) ユニットテスト(T) Web 2.0とRuby 47
  48. 48. 継続的インテグレーション CIサーバ チェックアウト、ビルド リポジトリ(V) 結果レポート、リビルド要求 エラー通知 メール http://cruisecontrolrb.thoughtworks.com/ Web 2.0とRuby 48
  49. 49. 静的コンパイルのないRubyで自動ビルド? • 動作するプログラムへの期待を担保するには、 プログラムを動かすこと – 静的チェックは構文チェックまでで動かない • 他のメンバーと同じリソースを使ったテスト – 自分のコミットで自動ビルドが通らなくなった? – 自分の変更で他の人の環境が動かなくなった? • 変更の差分が小さいうちに早目に検知 – 差分が大きいほど、どこで壊したか調査が大変 プログラムが動くまでがビルド、静的チェックは通過点に過ぎない Web 2.0とRuby 49
  50. 50. 最近の受入れテスト • わりと後付け – 開発促進よりセーフティーネットの意味合いが強い • まず受入れテスト基盤を作るコストを考えること – 自動化への二つの道 Web 2.0とRuby 50
  51. 51. Webサービスの受入れテスト ステップ例 • 最初は手作業(ドキュメントによるオペレーション) • 合間合間にスクラッチで自動化 階段の開始と幅はそのと – irb時代 きの力量に応じます。 人によりもっとカッコいい • net/httpでWebサービスにリクエストを送る ステップがあると思います。 • 結果を目視 – Ver 0.1 • Irbで書いたコードを元におれおれテスティングフレームワーク • net/httpでWebサービスにリクエストを送る • WebサービスのレスポンスXMLをrexmlでパースして文字列比較を行った結果、失敗し たら例外を投げる – Ver 0.2 • test/unitを導入 • net/httpでWebサービスにリクエストを送る • WebサービスのレスポンスXMLをrexmlでパースして文字列比較のアサーションを行う Web 2.0とRuby 51
  52. 52. Chapter 3 まとめ • 道具が変わっても、 (Webアプリケーション開発 というドメインにおいて) プロジェクトのまわし方 は大きくは変わらない – 泥臭いところは通じていたりする No, Silver Bullet! Web 2.0とRuby 52
  53. 53. Chapter 4. 次回作のプレビュー ~ライターとしてのお話~ Web 2.0とRuby 53
  54. 54. 次回作予告 • Javaプログラマ向けRubyプログラミング書籍 『タイトル未定』 • 鈍器本と同じく、毎日コミュニケーションズから • 共著者に小野良 哲郎さん – 弊社コンサルティングセンター所属 • 2008年8月発売予定 ★本章で取り扱う内容は書籍でボツになっている可能性があります Web 2.0とRuby 54
  55. 55. 三つの柱 • Javaプログラマ向けRubyプログラミングガイド • JRuby • Ruby 1.9 – 出版時期が微妙なため扱い方を検討中 Web 2.0とRuby 55
  56. 56. 属性へのアクセサ アクセサ(メソッド)で宣言するのが慣例 public class Product { Java private String name; スペースの都合上、コンストラクタは // スペースの都合上、コンストラクタは省略 public String getName() { return name; } } class Product name属性への Ruby attr_reader :name アクセサ宣言 def initialize(name) @name = name getter, setter と アクセサ(メソッド)の対応 end •getter … attr_reader end •setter … attr_writer •getter, setter … attr_accessor Web 2.0とRuby 56
  57. 57. オープンクラス 既存のクラスを拡張可能 module Spec Ruby module Exceptions class ExpectationNotMetError < StandardError end end module Expectations def should_equal(expected) raise Spec::Exceptions::ExpectationNotMetError ¥ if self != expected end end 既存のObjectクラスを 利用例 Ruby end 拡張 p = Product.new(’Ruby’) class Object p.name.should_equal(’Ruby’) include Spec::Expectations p.name.should_equal(’Perl’) end Web 2.0とRuby 57
  58. 58. パッケージの可視性 • Javaはクラス単位、Rubyはオブジェクト単位と可視性が異なる • Rubyにパッケージプライベートはない アクセス制御 アクセス制御 Ruby Java private 同一のインスタンス(自分 同一のクラス(のインスタン 自身)からのみ参照可能。 ス)から参照可能 レシーバ(self)の指定不可。 (インスタンスが異なっても 同一クラスならば参照可 (同じインスタンスからも参 能) 照可能) protected 同一のクラスもしくはサブ 同一のクラス(・パッケー クラス(のインスタンス)か ジ)もしくはサブクラス(のイ ら参照可能 ンスタンス)から参照可能 public すべてのクラス(のインスタ すべてのクラス(のインスタ ンス)から参照可能 ンス)から参照可能 Web 2.0とRuby 58
  59. 59. その他、Ruby Tips • ==メソッドとequalメソッド – Javaと逆だよ • オブジェクトの同値性比較は==メソッド (適宜オーバーラ イド) • オブジェクトの同一性比較はequalメソッド (オーバーライ ドするな!) • Enumerable#sortとEnumarable#sort_by – sort_byメソッドの方が高速 – まずsort_byで考える Web 2.0とRuby 59
  60. 60. Ruby 1.9 • Ruby 1.8との後方互換性はない – 1.8と1.9は別物 • 大きな変更 Ruby 1.9ネタは、 Appendixかなあ。 – Ruby VMの採用 – M17N対応 – ブロック変数のスコープを変更 – 組み込みクラスとそのメソッドの追加、廃止 などなど Web 2.0とRuby 60
  61. 61. JRuby • Javaで実装されたRubyの処理系 • 現在のJRubyは、Ruby 1.8に対応 • JavaのライブラリをRubyのシンタックスで利用可能 – 処理系がJavaなので当然といえば当然ですが • アーキテクチャの可能性 – Javaによる既存のサブシステムを背景にフロントをRailsで作 る – 2相コミットや非同期メッセージ処理などはJavaで • 素直にJavaでやればいい気もしますが選択肢の幅として – Enterprise Ruby >< • サンプルは検討中 Web 2.0とRuby 61
  62. 62. Chapter 4 まとめ Javaプログラマ向けのRubyプログラミングガイド 2008年8月発売予定 Web 2.0とRuby 62
  63. 63. おわりに • 少ない「脳力」でWebプログラミングができ ることで、プログラマブルWebの敷居が低 くなりました – 機会があれば、Webの可能性をお楽しみくだ さい • 道具が変わっても人は変わらない – 如何により楽しい環境にしていくかが大事 Web 2.0とRuby 63
  64. 64. 4q! ご清聴ありがとう ございました Web 2.0とRuby 64

×