rubykaigi2009 presentation slide
DESCRIPTION
Our tDiary's policy and strategies to support Ruby 1.9 and our future plan.TRANSCRIPT
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日日曜日
自己紹介
22009年7月19日日曜日
• SHIBATA Hiroshi a.k.a hsbt (hsbt.org)
• ソフトウェアエンジニア
• 1981年生まれ 北海道在住
32009年7月19日日曜日
Rubyとの関わり
• 高専4年の時の応用数学で id:gotoken から教えてもらう
• tDiary を使い始めて主にWeb関連のライブラリを使い始める
42009年7月19日日曜日
• Administrator of developer team for tDiary.org
52009年7月19日日曜日
RubyKaigi2009テーマ「変わる/変える」
62009年7月19日日曜日
よろしくお願いします。
72009年7月19日日曜日
Agenda
• まずはじめに
• tDiary-2.3.2リリース計画(Ruby 1.9 サポート)
• Ruby 1.9 対応の詳細
• tDiary-2.3.3~ future
82009年7月19日日曜日
まずはじめに
92009年7月19日日曜日
tDiary使ってる人いますか?
102009年7月19日日曜日
tDiary
112009年7月19日日曜日
tDiaryと言えば…
122009年7月19日日曜日
tDiary
• feed reader でコメントスパムが(ry
• tDiaryのソースコードは読まない方が(ry
• テストコードがない典型的レガシーコー(ry
132009年7月19日日曜日
tDiary
• Tsukkomi oriented Diary system
• before Railsから開発継続中(25年計画)
• Rubyと共に成長
• レンタルサーバーにRubyを入れさせる作戦
142009年7月19日日曜日
tDiaryはRubyと共に成長
152009年7月19日日曜日
2009/01/30Ruby 1.9 Release!
162009年7月19日日曜日
Ruby 1.9使ってる人いますか?
172009年7月19日日曜日
RubyKaigi2009テーマ「変わる/変える」
182009年7月19日日曜日
「変える」tDiary による Ruby
1.9 普及作戦
192009年7月19日日曜日
tDiary によるRuby 1.9 普及作戦
• Ruby 1.9はいつかは使わなければならない
• tDiaryをRuby 1.9普及のキラーアプリにする
• とりあえず動くからRubyを1.9にバージョンアップしてしまう
202009年7月19日日曜日
Agenda
• まずはじめに
• tDiary-2.3.2リリース計画(Ruby 1.9 サポート)
• Ruby 1.9 対応の詳細
• tDiary-2.3.3~ future
212009年7月19日日曜日
tDiary-2.3.2リリース計画
(Ruby 1.9 サポート)
222009年7月19日日曜日
とりあえず動かしてみる
232009年7月19日日曜日
orz242009年7月19日日曜日
でもやるんだよby kakutani
252009年7月19日日曜日
とりあえず何から始めたものか…
262009年7月19日日曜日
まずは計画272009年7月19日日曜日
2008年12月神奈川県某所
282009年7月19日日曜日
作戦会議292009年7月19日日曜日
Ruby 1.9 での主な対応
•過去バージョンとの非互換部分
•文字エンコーディングの変更
302009年7月19日日曜日
Ruby 1.9 対応計画
•1.8と1.9に存在する様々な非互換をどうするか
•magic comment をどうするか
312009年7月19日日曜日
Ruby 1.9対応計画
•ruby 実行時の --encodingどうするか
•エンコーディング周りの細かい修正どうするか
322009年7月19日日曜日
Agenda
• まずはじめに
• tDiary-2.3.2リリース計画(Ruby 1.9 サポート)
• Ruby 1.9 対応の詳細
• tDiary-2.3.3~ future
332009年7月19日日曜日
Ruby 1.9 対応の詳細
342009年7月19日日曜日
その1
互換性対応(core/misc/lib/compatible.rb)
352009年7月19日日曜日
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日日曜日
その2
マジコメる(magic comment ru)
372009年7月19日日曜日
マジコメる
•*.rb の1行目に文字エンコーディングを明示
•shebang が使われているものは2行目
382009年7月19日日曜日
お題
1行目に任意の文字列を挿入するワンライナーを書きなさい
392009年7月19日日曜日
gsed -i "1s/.*/# -\*- coding: utf-8; -\*-\n&/" **/*.rb
sed を使うんだ!
402009年7月19日日曜日
その3
ruby --encoding=utf-8
412009年7月19日日曜日
ruby --encoding=utf-8
• ruby 実行時に --encoding オプションをつけることでエンコーディングを強制できる
• tDiaryの場合だとindex.rbやupdate.rbのshebangに追加
• ユーザーに優しく無いので意識しなくても動くようにする
422009年7月19日日曜日
その4
外部エンコーディングの指定
432009年7月19日日曜日
外部エンコーディングの指定
•最初はopen( file, ‘r:utf-8’) を使っていた
•Ruby 1.8.6 だと使えない技
•却下442009年7月19日日曜日
Encoding::default_external = ‘UTF-8’
default_externalを使うんだ!
452009年7月19日日曜日
関係者連絡
RUBY_VERSIONは使わない
462009年7月19日日曜日
その他細かい修正
472009年7月19日日曜日
細かい修正• cgi.cookies が ASCII-8BIT と認識されるので
encodingを個別に指定する
• ブロックをつけない map は Enumerator を返すようになったので to_a する
• get の第二引数が nil 許容しなくなったので何らかの値を指定
482009年7月19日日曜日
ここまで対応すると…
492009年7月19日日曜日
ひとまず動作確認完了
502009年7月19日日曜日
ところが…
512009年7月19日日曜日
eval実行時にSecurityError
522009年7月19日日曜日
eval実行時にSecurityError
532009年7月19日日曜日
[BUG]だった• $SAFE= 1の時のevalに[BUG]
• 直るまでこんな感じで対応
542009年7月19日日曜日
ruby-1.9.1p129 で bug fix
552009年7月19日日曜日
老師曰く• Ruby の [BUG] を踏んだら喜びなさい
• Ruby の [BUG] を踏むようになってから一人前のアプリケーション
• ただのレガ(ry
562009年7月19日日曜日
2009/05/08tDiary-2.3.2 リリース
572009年7月19日日曜日
めでたしめでたし
582009年7月19日日曜日
hsbt.org
592009年7月19日日曜日
Agenda
• まずはじめに
• tDiary-2.3.2リリース計画(Ruby 1.9 サポート)
• Ruby 1.9 対応の詳細
• tDiary-2.3.3~ future
602009年7月19日日曜日
「変わる」tDiary-2.3.3~ future
612009年7月19日日曜日
tDiary-2.3.3~ future
• testing frameworkの採用
• rspec
• cucumber
• CGIからRackへの載せ替え
• 機能追加と不具合修正
622009年7月19日日曜日
testing framework
• 老師(マイケル・C・フェザーズ)曰く:
• 自信を持って変更ができない• 燃料: rspecとcucumber
「テストが無いコードはレガシーコード」
632009年7月19日日曜日
rspec
•pluginの挙動をテスト
•contribの成果をcoreにマージ予定
642009年7月19日日曜日
cucumber
•シナリオをテスト•testable_tdiary の成果をマージ済
652009年7月19日日曜日
testable_tdiary!!
662009年7月19日日曜日
おさらい
672009年7月19日日曜日
SapporoRubyKaigi01
682009年7月19日日曜日
詳しくは…
• 札幌tDiary会議01の角谷さんのスライドを参照
• http://kakutani.com/20081025.html#p01
692009年7月19日日曜日
testable_tdiary のマージ
702009年7月19日日曜日
githubで作業中
http://github.com/hsbt/tdiary/tree/testable_merge
712009年7月19日日曜日
作業ステータス
•script/server (pure webrick)
•rackup -s webrick tdiary.ru
•cucumber -l ja features
•一部のシナリオのみ動く
722009年7月19日日曜日
tDiary会議報告
732009年7月19日日曜日
夢のある世界tDiary cgi.rb
webrick
rack
cgi.rb
webrick
passenger
742009年7月19日日曜日
ユーザー/コミッタの声• cacheフォルダにcacheじゃないデータがある
• XMLRPCが動かないまま放置されている
• mod_ruby怪しいからfcgiを取り込みたい
• Ruby 1.9 で動かすと微妙に遅い
752009年7月19日日曜日
僕らの道のりはまだまだ長い
762009年7月19日日曜日
まとめ
772009年7月19日日曜日
まとめ• tDiaryはRubyと共に成長しています
• 「変える」: tDiaryがRuby1.9に対応したので皆さん使いましょう
• 「変わる」: tDiaryは2.3.3でレガシーコードから卒業します
782009年7月19日日曜日
ご静聴ありがとうございました
792009年7月19日日曜日
Q&A
802009年7月19日日曜日