- プロジェクト: Ruby-htslib - 次世代シーケンサーのデータをRubyで操作する
- 開発者: kojix2
- メンター: 後藤直久
ライフサイエンス分野において、生物のゲノムDNA情報を大量に解読可能な実験機器は 次世代シーケンサー(NGS)と総称され、その出力データはハイスループットシーケンス(HTS)データ と総称されている。HTSlibは、HTSデータ処理に広く使われているコマンドラインツールsamtoolsの 処理部分をライブラリ化したCライブラリで、SAM/BAM、VCF/BCFなど各種ファイルフォーマットを 読み書きするAPIを提供している。本プロジェクトでは、HTSlibのRubyバインディングRuby-htslib の開発を行う。実装には、Ruby-FFIを使用している。
Cライブラリの関数などを1対1対応でRubyのメソッドとして提供する低レベルのAPIの実装を行い、 約320個のメソッドを実装した。
その際、Ruby-FFIでは対応していなかった構造体のビットフィールドを利用する必要に迫られ、 読み込み限定ではあるが、別のgemとしてffi-bitstructを開発することで対応した。
Rubyらしいデータ処理を実現する高レベルのAPIについても、Pythonにおける類似バインディング のAPIを参考に、BAM形式などのよく使われるデータ形式の典型的な読み込みのAPIを実装した。
また、低レベル、高レベルのAPIそれぞれについて、ファイルの読み込みを行うサンプルスクリプトを実装した。
概ね月1回程度、オンラインにて開発内容や方向性について議論した。 今後の継続的かつ長期的な開発に繋がるよう心がけたつもりである。
HTSlibは規模が大きく複雑なCライブラリであり、開発も活発に行われているため、 今後、HTSlibのAPIの追加や変更への追従が課題となってくる。 理想的には、Cライブラリのヘッダファイル等からRubyバインディング実装を自動作成できると好ましい。 それに利用可能と思われる既存のツールc2ffiは本プロジェクト期間中に試したが、 c2ffiの機能とHTSlibの複雑さの問題により、現時点ではc2ffiによる自動実装は無理と判断した。 今後のFFI関連ツールの充実に期待したいが、自力で開発する必要があるのかもしれない。
本プロジェクトを契機に、ライフサイエンス分野の情報解析(バイオインフォマティクスを含む)が 専門だがRubyはあまり知らない層と、Rubyには詳しいがライフサイエンス分野とは縁遠い層 の両方にアピールし、ライフサイエンス分野の情報解析におけるRubyの活用を推進すると同時に、 異分野からのライフサイエンス分野のデータ解析への参入の門戸を広げたいと願っている。
本プロジェクトでは、HTSlibのRubyバインディングRuby-htslibの開発を行った。 BAM形式やVCF形式などのファイル形式を読み込むAPIを実装し、サンプルスクリプトを提供した。 今後も長期的に開発を継続する意向である。