日本Ruby会議2008 1st day

せっかく有料チケットを入手したのでという貧乏根性から、大ホールのメインセッション (こちらだけチケット必須) を中心に聴講。キャパシティ一杯まで入るのかと思っていましたが、意外に余裕がありました。

以下、講演の覚え書きです。

2008/6/21(土)10:00-12:00 メインセッション

現在の、そしてこれからのRubyVM開発 (ささだこういちさん)

Ruby 1.9系の開発状況・開発予定

  • Ruby 1.9系の最新スナップショット1.9.0-2が6/20にリリースされた。
  • 今後、毎月25日にスナップショットリリース1.9.0-xを出して、9/25の1.9.0-5でfeature freeze、12/20に安定版の1.9.1をリリースする予定 (あくまでも予定であって、そうなるとは限らないとのこと)。
  • リリース管理にツールとしてRedmine (拡張版) を使用し、Yuguiさんがリリースマネージャを務める。

東大でのRuby関係の活動

  • スレッドの並列実行: 現在はGlobal VM Lock (GVL) によって並列性が制限される。GVLをなくすと既存のライブラリコードを書き換える必要が生じるため、適用するかどうかは未定。
  • マルチVM: 単一のプロセスの中で複数のRuby VMを動かす。例えば現状のmod_rubyでは1つのアプリケーションしか動かせないという制約があり、その制約をなくすなどの効果がある。SunのJRubyプロジェクトとの共同研究。
  • Rubyによる科学技術計算: 浮動小数点演算の最適化により、メインストリームのRuby 1.9に対して約2倍の性能が得られている。
  • Atomic Ruby: 組み込み向けなどに、自分専用にカスタマイズ可能なRuby処理系。
  • Memory Revisit: Garbage Collectionアルゴリズム、メモリ割り当て/解除の戦略の再検討。
  • 東大笹田研の立ち上げ: 2008/4から、学生2名でスタート。現在学生絶賛募集中とのこと。
JRuby: Ready for Action (Charles Nutterさん)

JRubyは、Java VM上でのRuby処理系の実装。

  • 現在のJRubyは、Ruby 1.8.6互換がターゲット (1.9互換機能は開発中)。
  • JRuby 1.1.3をもうすぐリリース。現バージョンに対して、インタプリタの速度が30%向上。
  • JRubyの現状: IDE (NetBeans, Eclipse, etc.)、SwingによるGUIJRuby on Rails、MonkeyBars (GUIビルダ)
  • Processing (グラフィックス用の2Dライブラリ) のJRubyラッパー
  • Phusion Passenger によるRaisアプリの容易なデプロイ
The Magic of Rubinius (Evan Phoenixさん)

Smalltalk処理系の技術を適用したRuby実行環境、だそうですが、内容はほとんど理解できなかったので省略。

2008/6/21(土)13:30-15:30 メインセッション

基調講演「プログラミング梁山泊」(まつもとゆきひろさん)

講演タイトルはうろおぼえ。

梁山泊」とは、ある技術の周りにすぐれた開発者が終結し、新しい技術を生み出すような環境を意味する。
過去のプログラミング梁山泊として、LispUNIXSmalltalk, Javaが挙げられる。これらは必ずしも技術的にベストだったわけではなく、技術者のコミュニティを形成する求心力がより重要である。
次のプログラミング梁山泊として、「Ruby梁山泊」ができつつあるのでは? というのが本講演の趣旨。

Rubyの特徴

Ruby梁山泊で生まれたもの

  • Ruby on Rails: 生産性、俊敏性、ダイナミズム/all-in-one
  • Post Rails: Merb, Ramaze など。まだ決定的なものはない
  • 複数Ruby実装: JRuby, Rubynius, Ruby.NET, IronRuby, MagLev, etc.
  • 互換性: テストスイート (RubySpec)、Ruby標準規格/政府調達のためにはオープンな言語仕様が必要
  • 基本性能: Ruby実装間での競争・協調による性能向上
  • 機能強化: 遅延評価、ネームスペース (クラス再定義の有効範囲を制限)
  • スケーラビリティ: 楽天 ROMA/fairyなど

楽天技術研究所の人 (お名前失念) によるROMA/fairy紹介

  • ROMA: 巨大な分散型メモリストレージ、non-stopでの容量拡大、冗長保存とフェイルオーバー
  • fairy: ROMAベースの分散プログラミングフレームワークプログラマフレンドリー
Ruby M17N (成瀬ゆいさん、Martin J. Dürstさん)

Ruby 1.9における多言語化 (M17N) の解説。ディープな話はほとんどできず、M17Nは難しいということだけが分かった。一応理解できた分をメモ。

  • M17Nの実現方式
    • UCS Normalization: 文字の内部表現を1種類に統一し、外部エンコーディングとの間で相互に変換する方式
    • CSI (Code Set Independent): 特定の内部表現を持たない方式
  • 他のほとんどの言語ではUCS Normalizationを採用しているのに対して、RubyではCSIを採用している。
  • Rubyで扱うエンコーディング方式は、以下の3つのカテゴリに分かれる
    • ASCII Compatible: US-ASCII, UTF-8などが該当。スクリプト中への記述を含め、Ruby処理系によってフルサポートされる。
    • ASCII Incompatible: スクリプト中に書けないなどの制約条件がある。
    • dummy encoding: Rubyは名前を知っているだけで、何の処理もしない。
  • Ruby1.9では、$KCODEは廃止された。(システム全体の内部文字コードは存在しないため)
  • Stringの変更

2008/6/21(土)16:00-17:20 メインセッション

Ruby《を》教えてるんじゃない、Ruby《で》教えてるんだってば (増原英彦さん)

東大の教養課程でのRubyを用いたプログラミング教育の紹介。

  • Rubyを使って、コンピュータサイエンスにおける概念 (計算量、動的計画法、etc.) を身に着けることを目的としている。
    • Rubyそのものを学習することは目的ではない。
  • 年あたり約400人の学生が履修する。
  • UCLAの調査では、コンピュータサイエンス専攻の学生が最盛期の1/3に減少
    • プログラミングに積極的に興味のある学生だけを対象にするのではなく、道具としてのプログラミング教育の必要性
  • 道具としてのプログラミングでは、Javaはお約束が多すぎる
    • public static void main(String[] args)
  • なぜRubyか?
    • インタラクティブ、インストール容易、日本語のドキュメントが豊富、文法が容易
    • 他のいくつかの言語の中から、最終的にはエイヤと決定
  • 講義で扱う文法
  • ありがちな落とし穴
    • end忘れ ← インデントのないコードから発生しやすい
    • 全角のクォート/空白によるsyntax error
成功するRuby教育のプラクティス (吉田裕美さん)

会社内でのRuby教育に関する講演。

  • 社内でRuby開発者を増やす方法
    • 自分で社内で教える、外部の教育サービス利用、コミュニティへの参加
    • 「自分で社内で教える」方法をお勧め
  • 社内で教えるメリット
    • 業務に密着した内容を教えられる、万全のアフターフォロー、勉強を行う文化ができる
    • 吉田さんの経験上、勉強する文化のできた会社は強くなる
  • あなたが教えるメリット
    • 教えることが最大の勉強になる
    • 将来、講師になるという選択肢が生まれる
    • Rubyの伝道師になれる
  • 実習 (必須)
    • ペアプログラミングが有効: 考え込む時間がない、スキル差の吸収、議論により活気が生まれる
    • テスト駆動開発 (テストは講師が与える): 少しずつ動かして確かめられる、大きなコードを完成することによる達成感、ゲーム感覚、実習時間が長くならない
    • 他のプログラミング言語向けに書かれた本を用いて、コードだけRubyに置き換え (例: 「なぜ、あなたはJavaオブジェクト指向開発ができないのか」)
  • コミュニティで教育
    • 多くのコミュニティでは、熟練者によるマニアックな内容になりがち
    • ニューカマーの存在を考慮すると、初級者向きの教育は重要
    • コミュニティで教えることで、教育の練習になる
RSpecによるRailsアプリケーションBDD事例 (Yuguiさん)

Yuguiさんの前職の企業での開発にBDD (Behavior Driven Development) を導入したときの、生々しいケーススタディ

  • 作り直し前
    • バグが次から次に出て、手に負えない
    • 対策: SubversionTracによるITS (Issue Tracking System)、自動ビルド/デプロイ、Selenium (Webテストツール) 導入
    • 一定の効果はあったが、根本的にコードが腐っていたため、問題解決には至らず → Railsを使ってリプレース
  • Phase 1: 2名で先行実施。RSpec適用
  • Phase 2: 適用対象のメンバーを拡大し、まねしながら試行。テストコードが全体の7割に達する (TDD/BDDでは普通のことらしい)。ペアプログラミングの導入。
  • Phase 3: チーム全体にBDD適用。

2008/6/21(土)17:30-18:30 ライトニングトーク

デモのインパクト的には「RubyとODEでピタゴラ装置」、いい話的には「toRubyでみつけた〜」、熱さ的には斉藤さんのアフォーダンスの話が印象的でした。

JavaからRubyへ」について、どうしても言いたいことがある (桑田 誠さん)

書籍「JavaからRubyへ」について、誤解しがちな部分に対する補足的な内容。

  • 何が「JavaからRubyへ」なのか?
    • Rubyで書く」ではなくて「Rubyで考える」
    • 単に「Rubyで書く」だと、Rubyの文法で書かれたJavaプログラムになりがち (cf. Javaの文法で書かれたCOBOLプログラム)
  • 上級者に最適化した言語の有効性
  • 大規模自慢は愚の骨頂
    • Rubyは大規模開発には向かない」
    • 何が大規模か? データサイズ、コードサイズ、ユーザ数、開発者数
    • コードサイズ、開発者数が多いのは破綻の危険
    • 通化できるのに無駄な個別開発が発生していないか?
    • 無駄にリッチな機能を追加しようとしていないか?
dRubyとセキュリティ (西山和広さん)

dRubyを不特定多数に向けて公開するのは危険、という趣旨。
Ruby組み込みのセキュリティ機構 ($SAFEなど) やdRubyのセキュリティ機構 (INSECURE_METHOD) では抜け道があるとのこと。

RubyとODEでピタゴラ装置 (佐々木竹充さん)

ODE (Open Dynamic Engine) という3D物理シミュレーションエンジン (C/C++ベース) をRubyから制御するというもの。プレゼンとデモが一体化しており、デモの中の物体としてプレゼン資料が書かれていた。コントロールWiiリモコンを使って行う。

初級者は Enumerator の夢を見るか? (今井伸広さん)

初級者によるRubyコードでは、eachの多用によって、不必要に複雑なコードになる傾向がある。enumerator (each_slice, each_consなど) の活用により、スマートな記述が可能になる。

Rubyで楽しむFolk Programming (Webアプリじゃないよ蝙) (mootohさん)

"Fold Programming" とは、フォークソングのように気楽に楽しむプログラミングのこと。Webアプリはみんながやっているので、今さらやっても面白くない。おすすめは、既存のアプリケーションのプラグインを書くこと。1から作るよりも簡単で、かつ使ってもらえる可能性が高い (コバンザメ方式)。

具体例として、Safari + はてなブックマークQuickSilver + TwitterQuartz Compozer + Gainer、Vim + Refe。

Ruby.pm - CライブラリとしてのRuby (藤 吾郎さん)

Rubyソースコード完全解説」を読んで、RubyとはC言語オブジェクト指向プログラミングを行うためのフレームワークと理解。そこで、PerlからRubyライブラリを呼び出すためのライブラリを作成した。
現在はCYGWIN上でしか動かない。

toRubyでみつけた Rubyist人生再出発 (池澤一廣さん)

池澤さんは2000年からRubyを触り始めたものの、壁にぶち当たる。たまたま関さんが同郷人と知って、Rubyについて教えてくれるようにメールで依頼。返答は、「前向きに検討します。」
これが発端となって、toRuby (栃木Ruby勉強会) が始まったとのこと。

Ruby 1.9 on Rails 2.1による新時代DBプログラミング (松田明さん)

Webプログラミングの過去の歴史

  • PHP + 生SQL埋め込み → 絶滅
  • O/Rマッパ → XML地獄

現代では、ActiveRecordの登場により解決…のはずが、複雑なケースはやはり大変。
そもそもDBアクセスを「SQL文の生成」と考えることに問題がある。集合演算と考えることで、Rubyオブジェクト指向の世界とうまくマッチした形でDBアクセスできる。Railsの野良プラグインnamed_scopeにより、集合演算ベースのDBアクセスが可能になる。

テストベースコードリーディングのすすめ (遠藤侑介さん)

遠藤さんはこの1月からRubyコミッタになり、下積みとしてRubyコード解読作業を開始したものの、10分で飽きた。飽きずにコードを読むための手段として、test-based code readingを考案・実践した。これは、テストカバレッジ測定ツールのもとで make test-all を実行し、実行されない部分を探し、その部分についてテストを書き出すというものである。これにより、強制的にコードを読むことになる。
この方法の前提条件は、テストコードが充実していないこと。Rubyの場合、YARVなどのコア部分はテストがきっちり書かれていて、テストベース〜でコードを読むのに適していない。

A Jail Web Development with Rails 2008 でわっふるわっふる (竹迫良範さん)

Webアプリケーションにおいて、HTMLエスケープされていても、マルチバイト文字の入力と特定ブラウザの組み合わせにおいて、XSS脆弱性が発動する場合がある。それらを個々のアプリで対処するのは手間が大きいため、Apacheプラグインとして言語非依存の検査ツールmod_waffulを開発した。これは以下の機能を持つ。

  • 文字エンコード方式の検査
  • 入力文字の種類 (数字など) の強制
Industrial-Designed Language: Ruby (斎藤ただしさん)

プレゼン資料なしでの講演。キーワードは「アフォーダンス」で、何も説明しなくても使い方が分かることを指す。

Rubyは、メソッド名などの名前から機能が推測できる、アフォーダンスの高い言語である。まつもとさんの意向により、適当な名前が思いつかない機能は実装されない。