rubykaigi2009 presentation slide

80
tDiary Ruby1.9 対応の過程と 今後のロードマップ 柴田 博志 (tDiary.org) SHIBATA Hiroshi (tDiary.org) Our tDiary's policy and strategies to support Ruby 1.9 and our future plan. 1 2009719日日曜日

Upload: hiroshi-shibata

Post on 15-May-2015

1.919 views

Category:

Technology


0 download

DESCRIPTION

Our tDiary's policy and strategies to support Ruby 1.9 and our future plan.

TRANSCRIPT

Page 1: RubyKaigi2009 Presentation Slide

tDiary の Ruby1.9 対応の過程と今後のロードマップ

柴田 博志 (tDiary.org)

SHIBATA Hiroshi (tDiary.org)

Our tDiary's policy and strategies to support Ruby 1.9 and our future plan.

12009年7月19日日曜日

Page 2: RubyKaigi2009 Presentation Slide

自己紹介

22009年7月19日日曜日

Page 3: RubyKaigi2009 Presentation Slide

• SHIBATA Hiroshi a.k.a hsbt (hsbt.org)

• ソフトウェアエンジニア

• 1981年生まれ 北海道在住

32009年7月19日日曜日

Page 4: RubyKaigi2009 Presentation Slide

Rubyとの関わり

• 高専4年の時の応用数学で id:gotoken から教えてもらう

• tDiary を使い始めて主にWeb関連のライブラリを使い始める

42009年7月19日日曜日

Page 5: RubyKaigi2009 Presentation Slide

• Administrator of developer team for tDiary.org

52009年7月19日日曜日

Page 6: RubyKaigi2009 Presentation Slide

RubyKaigi2009テーマ「変わる/変える」

62009年7月19日日曜日

Page 7: RubyKaigi2009 Presentation Slide

よろしくお願いします。

72009年7月19日日曜日

Page 8: RubyKaigi2009 Presentation Slide

Agenda

• まずはじめに

• tDiary-2.3.2リリース計画(Ruby 1.9 サポート)

• Ruby 1.9 対応の詳細

• tDiary-2.3.3~ future

82009年7月19日日曜日

Page 9: RubyKaigi2009 Presentation Slide

まずはじめに

92009年7月19日日曜日

Page 10: RubyKaigi2009 Presentation Slide

tDiary使ってる人いますか?

102009年7月19日日曜日

Page 11: RubyKaigi2009 Presentation Slide

tDiary

112009年7月19日日曜日

Page 12: RubyKaigi2009 Presentation Slide

tDiaryと言えば…

122009年7月19日日曜日

Page 13: RubyKaigi2009 Presentation Slide

tDiary

• feed reader でコメントスパムが(ry

• tDiaryのソースコードは読まない方が(ry

• テストコードがない典型的レガシーコー(ry

132009年7月19日日曜日

Page 14: RubyKaigi2009 Presentation Slide

tDiary

• Tsukkomi oriented Diary system

• before Railsから開発継続中(25年計画)

• Rubyと共に成長

• レンタルサーバーにRubyを入れさせる作戦

142009年7月19日日曜日

Page 15: RubyKaigi2009 Presentation Slide

tDiaryはRubyと共に成長

152009年7月19日日曜日

Page 16: RubyKaigi2009 Presentation Slide

2009/01/30Ruby 1.9 Release!

162009年7月19日日曜日

Page 17: RubyKaigi2009 Presentation Slide

Ruby 1.9使ってる人いますか?

172009年7月19日日曜日

Page 18: RubyKaigi2009 Presentation Slide

RubyKaigi2009テーマ「変わる/変える」

182009年7月19日日曜日

Page 19: RubyKaigi2009 Presentation Slide

「変える」tDiary による Ruby

1.9 普及作戦

192009年7月19日日曜日

Page 20: RubyKaigi2009 Presentation Slide

tDiary によるRuby 1.9 普及作戦

• Ruby 1.9はいつかは使わなければならない

• tDiaryをRuby 1.9普及のキラーアプリにする

• とりあえず動くからRubyを1.9にバージョンアップしてしまう

202009年7月19日日曜日

Page 21: RubyKaigi2009 Presentation Slide

Agenda

• まずはじめに

• tDiary-2.3.2リリース計画(Ruby 1.9 サポート)

• Ruby 1.9 対応の詳細

• tDiary-2.3.3~ future

212009年7月19日日曜日

Page 22: RubyKaigi2009 Presentation Slide

tDiary-2.3.2リリース計画

(Ruby 1.9 サポート)

222009年7月19日日曜日

Page 23: RubyKaigi2009 Presentation Slide

とりあえず動かしてみる

232009年7月19日日曜日

Page 24: RubyKaigi2009 Presentation Slide

orz242009年7月19日日曜日

Page 25: RubyKaigi2009 Presentation Slide

でもやるんだよby kakutani

252009年7月19日日曜日

Page 26: RubyKaigi2009 Presentation Slide

とりあえず何から始めたものか…

262009年7月19日日曜日

Page 27: RubyKaigi2009 Presentation Slide

まずは計画272009年7月19日日曜日

Page 28: RubyKaigi2009 Presentation Slide

2008年12月神奈川県某所

282009年7月19日日曜日

Page 29: RubyKaigi2009 Presentation Slide

作戦会議292009年7月19日日曜日

Page 30: RubyKaigi2009 Presentation Slide

Ruby 1.9 での主な対応

•過去バージョンとの非互換部分

•文字エンコーディングの変更

302009年7月19日日曜日

Page 31: RubyKaigi2009 Presentation Slide

Ruby 1.9 対応計画

•1.8と1.9に存在する様々な非互換をどうするか

•magic comment をどうするか

312009年7月19日日曜日

Page 32: RubyKaigi2009 Presentation Slide

Ruby 1.9対応計画

•ruby 実行時の --encodingどうするか

•エンコーディング周りの細かい修正どうするか

322009年7月19日日曜日

Page 33: RubyKaigi2009 Presentation Slide

Agenda

• まずはじめに

• tDiary-2.3.2リリース計画(Ruby 1.9 サポート)

• Ruby 1.9 対応の詳細

• tDiary-2.3.3~ future

332009年7月19日日曜日

Page 34: RubyKaigi2009 Presentation Slide

Ruby 1.9 対応の詳細

342009年7月19日日曜日

Page 35: RubyKaigi2009 Presentation Slide

その1

互換性対応(core/misc/lib/compatible.rb)

352009年7月19日日曜日

Page 36: RubyKaigi2009 Presentation Slide

compatible.rb

• プロトタイプは machu さんが作成

• 1.8と1.9との非互換を吸収

• for 1.9: String.each_line, String.to_a ...

• for 1.8: String.force_encoding, String.bytesize ...

362009年7月19日日曜日

Page 37: RubyKaigi2009 Presentation Slide

その2

マジコメる(magic comment ru)

372009年7月19日日曜日

Page 38: RubyKaigi2009 Presentation Slide

マジコメる

•*.rb の1行目に文字エンコーディングを明示

•shebang が使われているものは2行目

382009年7月19日日曜日

Page 39: RubyKaigi2009 Presentation Slide

お題

1行目に任意の文字列を挿入するワンライナーを書きなさい

392009年7月19日日曜日

Page 40: RubyKaigi2009 Presentation Slide

gsed -i "1s/.*/# -\*- coding: utf-8; -\*-\n&/" **/*.rb

sed を使うんだ!

402009年7月19日日曜日

Page 41: RubyKaigi2009 Presentation Slide

その3

ruby --encoding=utf-8

412009年7月19日日曜日

Page 42: RubyKaigi2009 Presentation Slide

ruby --encoding=utf-8

• ruby 実行時に --encoding オプションをつけることでエンコーディングを強制できる

• tDiaryの場合だとindex.rbやupdate.rbのshebangに追加

• ユーザーに優しく無いので意識しなくても動くようにする

422009年7月19日日曜日

Page 43: RubyKaigi2009 Presentation Slide

その4

外部エンコーディングの指定

432009年7月19日日曜日

Page 44: RubyKaigi2009 Presentation Slide

外部エンコーディングの指定

•最初はopen( file, ‘r:utf-8’) を使っていた

•Ruby 1.8.6 だと使えない技

•却下442009年7月19日日曜日

Page 45: RubyKaigi2009 Presentation Slide

Encoding::default_external = ‘UTF-8’

default_externalを使うんだ!

452009年7月19日日曜日

Page 46: RubyKaigi2009 Presentation Slide

関係者連絡

RUBY_VERSIONは使わない

462009年7月19日日曜日

Page 47: RubyKaigi2009 Presentation Slide

その他細かい修正

472009年7月19日日曜日

Page 48: RubyKaigi2009 Presentation Slide

細かい修正• cgi.cookies が ASCII-8BIT と認識されるので

encodingを個別に指定する

• ブロックをつけない map は Enumerator を返すようになったので to_a する

• get の第二引数が nil 許容しなくなったので何らかの値を指定

482009年7月19日日曜日

Page 49: RubyKaigi2009 Presentation Slide

ここまで対応すると…

492009年7月19日日曜日

Page 50: RubyKaigi2009 Presentation Slide

ひとまず動作確認完了

502009年7月19日日曜日

Page 51: RubyKaigi2009 Presentation Slide

ところが…

512009年7月19日日曜日

Page 52: RubyKaigi2009 Presentation Slide

eval実行時にSecurityError

522009年7月19日日曜日

Page 53: RubyKaigi2009 Presentation Slide

eval実行時にSecurityError

532009年7月19日日曜日

Page 54: RubyKaigi2009 Presentation Slide

[BUG]だった• $SAFE= 1の時のevalに[BUG]

• 直るまでこんな感じで対応

542009年7月19日日曜日

Page 55: RubyKaigi2009 Presentation Slide

ruby-1.9.1p129 で bug fix

552009年7月19日日曜日

Page 56: RubyKaigi2009 Presentation Slide

老師曰く• Ruby の [BUG] を踏んだら喜びなさい

• Ruby の [BUG] を踏むようになってから一人前のアプリケーション

• ただのレガ(ry

562009年7月19日日曜日

Page 57: RubyKaigi2009 Presentation Slide

2009/05/08tDiary-2.3.2 リリース

572009年7月19日日曜日

Page 58: RubyKaigi2009 Presentation Slide

めでたしめでたし

582009年7月19日日曜日

Page 59: RubyKaigi2009 Presentation Slide

hsbt.org

592009年7月19日日曜日

Page 60: RubyKaigi2009 Presentation Slide

Agenda

• まずはじめに

• tDiary-2.3.2リリース計画(Ruby 1.9 サポート)

• Ruby 1.9 対応の詳細

• tDiary-2.3.3~ future

602009年7月19日日曜日

Page 61: RubyKaigi2009 Presentation Slide

「変わる」tDiary-2.3.3~ future

612009年7月19日日曜日

Page 62: RubyKaigi2009 Presentation Slide

tDiary-2.3.3~ future

• testing frameworkの採用

• rspec

• cucumber

• CGIからRackへの載せ替え

• 機能追加と不具合修正

622009年7月19日日曜日

Page 63: RubyKaigi2009 Presentation Slide

testing framework

• 老師(マイケル・C・フェザーズ)曰く:

• 自信を持って変更ができない• 燃料: rspecとcucumber

「テストが無いコードはレガシーコード」

632009年7月19日日曜日

Page 64: RubyKaigi2009 Presentation Slide

rspec

•pluginの挙動をテスト

•contribの成果をcoreにマージ予定

642009年7月19日日曜日

Page 65: RubyKaigi2009 Presentation Slide

cucumber

•シナリオをテスト•testable_tdiary の成果をマージ済

652009年7月19日日曜日

Page 66: RubyKaigi2009 Presentation Slide

testable_tdiary!!

662009年7月19日日曜日

Page 67: RubyKaigi2009 Presentation Slide

おさらい

672009年7月19日日曜日

Page 68: RubyKaigi2009 Presentation Slide

SapporoRubyKaigi01

682009年7月19日日曜日

Page 69: RubyKaigi2009 Presentation Slide

詳しくは…

• 札幌tDiary会議01の角谷さんのスライドを参照

• http://kakutani.com/20081025.html#p01

692009年7月19日日曜日

Page 70: RubyKaigi2009 Presentation Slide

testable_tdiary のマージ

702009年7月19日日曜日

Page 71: RubyKaigi2009 Presentation Slide

githubで作業中

http://github.com/hsbt/tdiary/tree/testable_merge

712009年7月19日日曜日

Page 72: RubyKaigi2009 Presentation Slide

作業ステータス

•script/server (pure webrick)

•rackup -s webrick tdiary.ru

•cucumber -l ja features

•一部のシナリオのみ動く

722009年7月19日日曜日

Page 73: RubyKaigi2009 Presentation Slide

tDiary会議報告

732009年7月19日日曜日

Page 74: RubyKaigi2009 Presentation Slide

夢のある世界tDiary cgi.rb

webrick

rack

cgi.rb

webrick

passenger

742009年7月19日日曜日

Page 75: RubyKaigi2009 Presentation Slide

ユーザー/コミッタの声• cacheフォルダにcacheじゃないデータがある

• XMLRPCが動かないまま放置されている

• mod_ruby怪しいからfcgiを取り込みたい

• Ruby 1.9 で動かすと微妙に遅い

752009年7月19日日曜日

Page 76: RubyKaigi2009 Presentation Slide

僕らの道のりはまだまだ長い

762009年7月19日日曜日

Page 77: RubyKaigi2009 Presentation Slide

まとめ

772009年7月19日日曜日

Page 78: RubyKaigi2009 Presentation Slide

まとめ• tDiaryはRubyと共に成長しています

• 「変える」: tDiaryがRuby1.9に対応したので皆さん使いましょう

• 「変わる」: tDiaryは2.3.3でレガシーコードから卒業します

782009年7月19日日曜日

Page 79: RubyKaigi2009 Presentation Slide

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

792009年7月19日日曜日

Page 80: RubyKaigi2009 Presentation Slide

Q&A

802009年7月19日日曜日