2011年度助成金成果報告

2011年度助成金では、以下の二つのプロジェクトを実施しました。

  • 世界の誰でも読めるRubyリファレンスマニュアル(に向けて)
  • krypt

各プロジェクトの成果は助成委員会の評価を受けた上で、それぞれのプロジェクトサイトで公開されています。以下は、最終報告の概要です。

世界の誰でも読めるRubyリファレンスマニュアル(に向けて)

原 悠

PrismDocは、以下のことを目標としたプロジェクトです。

  • Rubyの標準ライブラリのドキュメントの翻訳をやりやすくすること。
  • 日本語、英語、その他の言語のドキュメントを統合して表示すること(php.netのようように)

デモ:
http://blazing-ice-2849.herokuapp.com/

ソースコード:
https://github.com/yhara/prismdoc/

英語のドキュメント

PrismDocはRubyのソースコードに含まれているrdocから英語のドキュメントを抽出します。抽出したドキュメントは、日本語版や翻訳版と同じようにブラウザ上で表示されます。
http://blazing-ice-2849.herokuapp.com/en/1.9.3/Array
右上のフォームからRubyのバージョンと言語を切り替えられます。また、左上のフォームからはメソッドをインクリメンタルに検索できます。

日本語のドキュメント

PrismDocはBitClustから日本語のドキュメントを抽出します。
BitClustは、日本語版のドキュメントを書くのに使われているツールです。
http://bugs.ruby-lang.org/projects/rurema

ドキュメントの翻訳

PrismDocでは、ブラウザ上で翻訳を行うことができます。

デモ (エスペラント語):
http://blazing-ice-2849.herokuapp.com/eo/1.9.3

段落をクリックすると、翻訳を編集するためのフォームが現れます。
現在は誰でも翻訳を編集できるようになっています。
http://blazing-ice-2849.herokuapp.com/eo/1.9.3/Array

翻訳がない部分は、原文(英文)が灰色で表示されます。
http://blazing-ice-2849.herokuapp.com/eo/1.9.3/BasicObject

ところで、Ruby 1.9.2と2.0.0のリファレンスはかなりの部分が同じ文章に
なると思われます。PrismDocでは、ある段落に対する翻訳はリファレンス全体で
共有されるため、一度訳した段落は再度翻訳する必要がありません。

現在の状態

いくつか残作業がありますが(https://github.com/yhara/prismdoc/issues)、それを直したら翻訳が始められる状態になります。英語・日本語以外の言語への翻訳に興味のある方・ありそうな方がいましたら、yutaka.hara(at)gmail.comまでお知らせください。

krypt

Martin Boßlet

krypt[1]は、Ruby向けの、プラットフォームおよび利用ライブラリ非依存、かつ拡張可能な暗号APIを目指しています。

現在のRubyの暗号実装はOpenSSL Toolkitと強く結びついており、OpenSSLが標準的に提供されない環境では常に開発者の悩みの種になっています。kryptは任意の暗号ライブラリを利用するための小さなprovider APIを提供します。Java暗号イブラリを利用するためのprovider APIもあるため、C言語ベースのRubyでもJRubyでも問題ありません。このプラグイン方式により、信頼された認証局証明のような、OS固有の資源への統一的なアクセス方法も提供する予定のため、Windows、OS X、Linuxのいずれを利用していても問題になりません。

今回の助成期間のゴールは、kryptライブラリ全体の基幹として、他に存在しない機能と特長をもたらず、現代的かつ高速なストリーミングASN.1解析/符号化フレームワークをもたらすことにありました。ASN.1は任意の暗号ライブラリの根となるため、速度と利用容易性が最優先事項でした。助成期間の主たるゴール、互換性と速度の制限なく、Ruby、JRuby、Rubinius上でkryptを動作させるこでしたが、どの環境でも問題なく動作しました。またASN.1テンプレートDSL、Rubyの強力な機能を用いて、ASN.1モジュール定義をただコピーしたかのよに簡単に、新たな固有のASN.1データ型を生成します。これにはデータ解析おび符号化機能も自動的に含まれます[2]。

助成期間中のその他の成果物には、CおよびJava用のprovider APIと、ピュアRuby版kryptライブラリの概念実証が含まれます。このピュアRuby版kryptライブリは、ネイティブ暗号ライブラリとFFI経由で連携し、JRuby上でさえC言語版OpenSSLを利用することができます。

また、kryptが各種Rubyプラットフォームと継ぎ目なく統合されていることを保証するためには、安定かつ網羅的なテストを持ち、TravisCI上の継続的インテグレーションとの組み合わせにより、非互換な機能が入り込んだらすぐにフィードックを得られることが必要でした。これは全てのソフトウェアプロジェクトにって良い習慣ですが、セキュリティー関連のプロジェクトにとっては必須と考ます。一般的なコード品質のためのみならず、バッファオーバーフローやintーバーフローをすぐに見つけるため、我々はRSpecテストのコードカバレッジ測定し、可能な限りのカバレッジを取っています。またできる限り、正式なテトベクタ[3]を含めようとしています。些細なコード変更が、アルゴリズム出全体に影響を与えるものです。同じ考えから、ValgrindをCコードのメモリ問題の発見に利用しており、JavaコードのためにはFindBugsの利用を計画しています。

最後に、kryptのようなプロジェクトにとって、ドキュメンテーションはセキュリティー的に重大な面を持つため、通常タスクの明快で正確なサンプルを含めるようにしています。ドキュメントがなかったり、不明確なドキュメントによりPIを誤って利用した場合、クールでないばかりでなく、しばしばセキュリティー全体への影響があるためです。

[1] https://github.com/emboss/krypt
[2] https://github.com/emboss/krypt/blob/master/lib/krypt/x509/certificate.rb
[3] https://github.com/emboss/krypt/blob/master/spec/krypt-core/digest/digest_spec.rb