web2.0 and ruby

Post on 21-Oct-2014

3.410 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

2008.02.26鈍器本セミナー 第二部

Web 2.0Web 2.0ととRubyRuby

(株)永和システムマネジメント

伊藤 浩一http://www.edit.ne.jp/~koic/

gem install rails gem install rails --yy

2Web 2.0とRuby

• 名前: 伊藤 浩一

• 日記: http://www.edit.ne.jp/~koic/

• Twitter: http://twitter.com/koic/

• メール: koic.ito@gmail.com

• 勤務先: 株式会社 永和システムマネジメント

– プログラマ 兼 現場リーダー

自己紹介

3Web 2.0とRuby

何やっている人が話すの?

4Web 2.0とRuby

仕事風景から~最近の新メニュー~

5Web 2.0とRuby

古今東西

デザパタ古今東西デザパタ古今東西

6Web 2.0とRuby

• 週末の夕会後、

• GoFのデザインパターンのパターン名やjava.langパッケージのクラス名など、

• テーマを決め、

• メンバーが順番に云って行き、

• パス三回でアウトになるサバイバルゲーム

それってなんなの?

7Web 2.0とRuby

なにが狙い?

• 少し離れ気味の知識、伝家の宝刀が錆びないよう素振り

• 奇妙な一体感とノスタルジーによるヒーリング効果

• 楽しく一週間の仕事を終える

8Web 2.0とRuby

思わぬ副作用~周辺プロジェクトの反応~

9Web 2.0とRuby

自ずから巻き込まれる

• 事例1 @nawoto LLWGリーダー

• 事例2 @_dotタン

10Web 2.0とRuby

巻き込まれ力の向上効果

11Web 2.0とRuby

巻き込まれ力~あまのりょーさんの仮説

『”involve” NOT ”evolve”』

あまのりょーさん

12Web 2.0とRuby

一目置かれる人に近づく!

13Web 2.0とRuby

• Web 2.0ビギナーズバイブル (毎日コミュニケーションズ)

• EngineerMind vol.5 (技術評論社)

– 『プログラマのための創造的プロジェクトファシリテーション』

• 開発の現場 vol.11 (翔泳社)

– 『保守プロジェクトとデベロッパーテスティング』

もうひとつの顔~ライター~

928ページ鈍器本

14Web 2.0とRuby

巻き込まれてシメシメやってきました

『”involve” NOT ”evolve”』

あまのりょーさん

15Web 2.0とRuby

今日はよろしくお願いします

16Web 2.0とRuby

• プログラマとしてのお話

– RubyとRuby on Rails

– Ruby on RailsとREST

• 現場リーダーとしてのお話

– Ruby on Railsによるチーム開発

• ライターとしてのお話

–次回作のプレビュー

アジェンダ

17Web 2.0とRuby

プログラマとしてのお話

18Web 2.0とRuby

Chapter 1. WebとRuby

19Web 2.0とRuby

• プログラミングを楽しくする言語

• プログラマのプログラマによるプログラマのための言語

• ツール(言語)は思考を規定する

Ruby

http://www.ruby-lang.org/ja/

20Web 2.0とRuby

Web 2.0 ビギナーズバイブル

Perl, PHP, Python, RubyなどのLightweight LanguageでWebアプリケーション開発を解説した書籍

21Web 2.0とRuby

Lightweight Language

• Lightweight Languageとは「脳力」を少なく消費する• 「脳力」はプログラミング活動中に消費される仮想的なパワーである•消費「脳力」の総和が少ないことももちろん重要だが瞬間最大消費「脳力」が大きすぎるのもよろしくない

22Web 2.0とRuby

発想→変換→表現(プログラム)

人間の脳への負担の少ない性質

say = "I love Ruby"puts say

say['love'] = "*love*"puts say.upcase

5.times { puts say }

変換

表現発想

距離

発想から表現までの変換の距離「脳力」が生産性の指標のひとつ

23Web 2.0とRuby

Ruby/Amazonを使った書誌情報取得例

Web APIを利用したサンプルコード

require 'amazon/search'

if ARGV.size != 2puts "Usage: #{$0} "¥"[Amazon Web Services AccessKey ID] [text to search for]"

exitendaccess_key, search_request = ARGVreq = Amazon::Search::Request.new(access_key)

req.keyword_search(search_request, 'books', Amazon::Search::LIGHT) do |book|

puts %{"#{book.product_name}" by #{book.authors.join(', ')}}end

$ ruby amazon-search.rb アクセスキーアクセスキーアクセスキーアクセスキー "restful web services“"RESTful Web Services" by Leonard Richardson, Sam Ruby, David HeinemeierHansson

amazon-search.rb

実行と結果

『RESTful Webサービス』より抜粋

24Web 2.0とRuby

Ruby on Railsによる波及効果が大きい

言語としてのRuby自体はWebと直接の関係はなく

25Web 2.0とRuby

Ruby on Rails

• Ruby製のWebアプリケーションフレームワーク

• 「美しいコードを書けるからRubyを選んだ」(David Heinemeier Hansson氏)– http://itpro.nikkeibp.co.jp/article/NEWS/20060620/241346/

• 現在のRubyブームの火付け役

http://www.rubyonrails.org/

26Web 2.0とRuby

Ruby on Railsの特徴

• DRY―Don’t Repeat Yourself

(繰り返しを避けること)

• Convention over Configuration(設定より規約)

• full-stack

27Web 2.0とRuby

割愛鈍器本 Chapter 11 をご参照ください

28Web 2.0とRuby

• DSL

• パターン

• REST指向

異なる側面

Patterns

DSL REST

full-stackDRYCoC

29Web 2.0とRuby

• Domain Specific Language (DSL)

– Webとデータベースの領域に特化した内部DSL

• 左から右へ

–目で文章を追う時と同じ動きで記述可能

• BDDフレームワーク『RSpec』に顕著

• 問題領域の語彙を使い、少ない記述でコードの意図を表すことができる

DSL

class Profile < ActiveRecord::Basebelongs_to :accountvalidates_presence_of :name

end

30Web 2.0とRuby

• 内部DSLによりすべてRubyの構文で記述可能

– RubyのAPIとRailsのAPIに違いがない

(補足) 内部DSL

汎用言語

対象ドメイン 外部DSL

外部DSL

汎用言語(Ruby)

内部DSL

内部DSL(Rails)

透過的

例えばXML例えばRuby Railsの場合

Railsの採った道

「脳力」の消費が低い言語で一貫できる

31Web 2.0とRuby

『Patterns of Enterprise Application Architecture』

『Refactoring Databases』『J2EE Patterns』などの

パターンが構成要素に含まれる

Patterns

後に出てくるものが優れていることは世の常

パターンは発明するものではなく発見されるもの

32Web 2.0とRuby

次章に続く

REST指向

33Web 2.0とRuby

Chapter 2. RailsとREST

34Web 2.0とRuby

RESTとROA

REST

ROA

• RESTはWebに依存しない設計条件

• ROA (Resource oriented Architecture)

– RESTアーキテクチャスタイルの実現手段のひとつ

アーキテクチャスタイル

アーキテクチャ

35Web 2.0とRuby

• プログラムを対象としたWeb

– HTTPとMachine ReadableなXMLに基づいている

ROAとプログラマブルWeb

リソース

require ‘open-uri‘require ‘rexml‘

open(“www...

HTML

XML

HTTP

URL

URL

マシン(プログラム)

プログラマブルWeb

• 東京の天気予報• 2008年2月26日の

スケジュール• 東京の地図

36Web 2.0とRuby

リソースとURI

リソース(東京の地図)

URI

• リソースとは実体だったり概念だったりする抽象的なもの

• RESTでは、クライアントが操作できるリソースごとにURIを公開

GET /maps/tokyo

メソッド情報 スコープ情報

公開した名前▼

37Web 2.0とRuby

HTTPリクエストとメッセージパッシング

GET /maps/tokyo

Map.find(:first, :conditions => [’area = ?’, ’tokyo’])

名詞 動詞

HTTPリクエスト(抜粋)

メッセージパッシング

38Web 2.0とRuby

リソース指向とオブジェクト指向

GET /maps/tokyo

Map.find(:first, :conditions => [’area = ?’, ’tokyo’])

GETPOSTPUTDELETE…

<<instance>>東京の天気予報

リソースクライアント

<<instance>>2008年2月26日

のスケジュール

<<instance>>東京の地図

URI

名前を持つ

メソッド名が標準化されている

39Web 2.0とRuby

• Webサービスを対象にActiveRecordのようなCRUDを備える

– Rails 2.0で正式に追加された

• REST指向フレームワークという特色をより強く打ち出す

– ActiveResource::Baseクラスを継承して、オブジェクトを公開するサイトを指定することでWebのCRUDに対応

Active Resource

class Map < ActiveResource::Baseself.site = ’http://localhost:3000’

end

40Web 2.0とRuby

• Lightweight LanguageによるWebアプリケーションフレームワークの台頭によりWebプログラミングの敷居が低くなりました

– Railsへの最初の一歩は以下のコマンドです

Chapter 1 & 2 まとめ

$ gem install rails -y

Rubyのインストールと、『鈍器本』の購入をお忘れなく

41Web 2.0とRuby

Chapter 3. Ruby on Railsによるチーム開発

~現場リーダーから見たRails~

42Web 2.0とRuby

• メンバーの立ち上がりが速い

• 比較的簡単な業務知識

• Model/Controllerのプロダクトコード実装量が少ない

• その分Viewやテストを厚く

– デスクトップライクなUIの作成は、JavaScriptで

• 自動化されたテストにするのが大変 ><

– そもそもUIのテストは自動化できるものと、できないものがある

• 限られた開発期間の中で、自動化をするための工数(投資)が見合わないことが多い

Railsを使ったお仕事の経験と風聞

43Web 2.0とRuby

• 道具が変わっても人が変わるわけではない–新しい技術を持ってきても、基礎となる開発の呼吸

は変わらない

– プラットフォーム独特の設計技法やコンピュータへの指示方法が変わる

•新しい技術への対応速度

• 継続的なプランニング、ホワイトボードディスカッション、報告・連絡・相談など、足元が重要

– チームのまわし方への配慮

新しいアイテムを手に入れた?

44Web 2.0とRuby

プロジェクトを取り巻くツール

45Web 2.0とRuby

人とツール

人はあらゆるツールよりも重要である。優れた人々に優れたツールを与えれば、ツールを持たない優れた人々よりも効率が上がる。特にそれを使うときが楽しいものであれば。

46Web 2.0とRuby

バージョン管理

テスティング

自動化SVN

RSpec on Railstest/unit

Capistrano

CC.rb

プロジェクトでの基盤技術とツール

• バージョン管理

• テスティング

– ユニットテスト

– 受入れテスト

• 自動化

– CI

– マイグレーション

– デプロイ

47Web 2.0とRuby

運用環境<production>

ローカル環境<test, development>

リポジトリ(V)

デプロイ(A)※リポジトリから運用環境へ

ソースをチェックアウト

マイグレーション(A)

継続的インテグレーションサーバ<test>

チェックアウト(V)

マイグレーション、テスト(A)

ユニットテスト(T)

コミット(V)更新、

チェックアウト(V)

受入れテスト(T)

作業

(V)バージョン管理(T)テスティング(A)自動化

3つの基盤技術と3つの環境3つの基盤技術

test, development, production

48Web 2.0とRuby

継続的インテグレーション

http://cruisecontrolrb.thoughtworks.com/

リポジトリ(V)

結果レポート、リビルド要求

CIサーバ

エラー通知メール

チェックアウト、ビルド

49Web 2.0とRuby

• 動作するプログラムへの期待を担保するには、プログラムを動かすこと

–静的チェックは構文チェックまでで動かない

• 他のメンバーと同じリソースを使ったテスト

–自分のコミットで自動ビルドが通らなくなった?

–自分の変更で他の人の環境が動かなくなった?

• 変更の差分が小さいうちに早目に検知

–差分が大きいほど、どこで壊したか調査が大変

静的コンパイルのないRubyで自動ビルド?

プログラムが動くまでがビルド、静的チェックは通過点に過ぎない

50Web 2.0とRuby

• わりと後付け

–開発促進よりセーフティーネットの意味合いが強い

• まず受入れテスト基盤を作るコストを考えること

–自動化への二つの道

最近の受入れテスト

51Web 2.0とRuby

• 最初は手作業(ドキュメントによるオペレーション)

• 合間合間にスクラッチで自動化

– 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サービスの受入れテスト ステップ例

階段の開始と幅はそのときの力量に応じます。人によりもっとカッコいいステップがあると思います。

52Web 2.0とRuby

• 道具が変わっても、 (Webアプリケーション開発というドメインにおいて) プロジェクトのまわし方は大きくは変わらない

–泥臭いところは通じていたりする

Chapter 3 まとめ

No, Silver Bullet!

53Web 2.0とRuby

Chapter 4. 次回作のプレビュー~ライターとしてのお話~

54Web 2.0とRuby

• Javaプログラマ向けRubyプログラミング書籍『タイトル未定』

• 鈍器本と同じく、毎日コミュニケーションズから

• 共著者に小野良 哲郎さん

–弊社コンサルティングセンター所属

• 2008年8月発売予定

次回作予告

★本章で取り扱う内容は書籍でボツになっている可能性があります

55Web 2.0とRuby

• Javaプログラマ向けRubyプログラミングガイド

• JRuby

• Ruby 1.9

–出版時期が微妙なため扱い方を検討中

三つの柱

56Web 2.0とRuby

アクセサ(メソッド)で宣言するのが慣例

属性へのアクセサ

class Productattr_reader :namedef initialize(name)@name = name

endend

public class Product {private String name;// スペーススペーススペーススペースのののの都合上都合上都合上都合上、、、、コンストラクタコンストラクタコンストラクタコンストラクタはははは省略省略省略省略public String getName() {return name;

}}

Ruby

Java

getter, setter と アクセサ(メソッド)の対応•getter … attr_reader•setter … attr_writer•getter, setter … attr_accessor

name属性へのアクセサ宣言

57Web 2.0とRuby

既存のクラスを拡張可能

オープンクラス

module Specmodule Exceptionsclass ExpectationNotMetError < StandardErrorend

endmodule Expectationsdef should_equal(expected)raise Spec::Exceptions::ExpectationNotMetError ¥if self != expected

endend

end

class Objectinclude Spec::Expectations

end

既存のObjectクラスを拡張

Ruby

p = Product.new(’Ruby’)p.name.should_equal(’Ruby’)p.name.should_equal(’Perl’)

Ruby利用例

58Web 2.0とRuby

すべてのクラス(のインスタンス)から参照可能

すべてのクラス(のインスタンス)から参照可能

public

同一のクラス(・パッケージ)もしくはサブクラス(のインスタンス)から参照可能

同一のクラスもしくはサブクラス(のインスタンス)から参照可能

protected

同一のクラス(のインスタンス)から参照可能(インスタンスが異なっても同一クラスならば参照可能)

同一のインスタンス(自分自身)からのみ参照可能。

レシーバ(self)の指定不可。

(同じインスタンスからも参照可能)

private

JavaJavaJavaJavaRubyRubyRubyRubyアクセスアクセスアクセスアクセス制御制御制御制御

• Javaはクラス単位、Rubyはオブジェクト単位と可視性が異なる

• Rubyにパッケージプライベートはない

パッケージの可視性

59Web 2.0とRuby

• ==メソッドとequalメソッド

– Javaと逆だよ

• オブジェクトの同値性比較は==メソッド (適宜オーバーライド)

• オブジェクトの同一性比較はequalメソッド (オーバーライドするな!)

• Enumerable#sortとEnumarable#sort_by

– sort_byメソッドの方が高速

– まずsort_byで考える

その他、Ruby Tips

60Web 2.0とRuby

• Ruby 1.8との後方互換性はない

– 1.8と1.9は別物

• 大きな変更

– Ruby VMの採用

– M17N対応

– ブロック変数のスコープを変更

–組み込みクラスとそのメソッドの追加、廃止

Ruby 1.9

などなど

Ruby 1.9ネタは、Appendixかなあ。

61Web 2.0とRuby

• Javaで実装されたRubyの処理系

• 現在のJRubyは、Ruby 1.8に対応

• JavaのライブラリをRubyのシンタックスで利用可能

– 処理系がJavaなので当然といえば当然ですが

• アーキテクチャの可能性

– Javaによる既存のサブシステムを背景にフロントをRailsで作る

– 2相コミットや非同期メッセージ処理などはJavaで

• 素直にJavaでやればいい気もしますが選択肢の幅として

– Enterprise Ruby ><

• サンプルは検討中

JRuby

62Web 2.0とRuby

Javaプログラマ向けのRubyプログラミングガイド

Chapter 4 まとめ

2008年8月発売予定

63Web 2.0とRuby

•少ない「脳力」でWebプログラミングができることで、プログラマブルWebの敷居が低くなりました

–機会があれば、Webの可能性をお楽しみください

•道具が変わっても人は変わらない

–如何により楽しい環境にしていくかが大事

おわりに

64Web 2.0とRuby

4q!

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

top related