2014/08/20

次世代シークエンス解析スタンダードという本を監修しました

次世代シークエンス解析スタンダード NGSのポテンシャルを活かしきるWET&DRY
二階堂 愛/編 定価 5,500円+税
2014年08月 発行 B5判 404ページ
ISBN 978-4-7581-0191-2

エキソームやエピゲノムや1細胞RNA-Seq など、医療現場から非モデル生物,生物資源まで各分野の現場で実際に使えるプロトコールやテクニックを集めました。論文には書いていないコツなども満載。ぜひ手に取ってみてください。感想もお待ちしております。

次世代シークエンス解析スタンダード

2014/04/10

Vagrant を使って Bioconductor Devel の解析・開発環境をAWSに構築する

環境はOS Xです。

1. vagrant を dmg ダウンロードし、インストールする。

簡単。
http://www.vagrantup.com/

2. vargrant をセットアップする
aws にプロビジョニングできるプラグインをインストールする。
$ vagrant plugin install vagrant-aws

AMIを起動するとは言え、ダミーの仮想マシンが必要。ちょっとわかりにくい。

$ vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box

3. Vagrantfile を作る
Bioconductor 公式のBioC-Devel入りの AMI を利用する。リージョンはバージニアだけ。知る必要はないがアカウント名は root です。

まず適当なディレクトリを作る。
$ mkdir bioc-devel
$ cd bioc-devel

初期化する。

$ vagrant init

Vargrantfile にいろいろ書く。

$ jed Vargrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

require 'yaml'
require 'pp'

aws_conf = YAML.load_file('./.aws.yaml')
# pp aws_conf

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "dummy"

  config.vm.provider :aws do |aws, override|
    aws.access_key_id        = aws_conf['access_key_id']
    aws.secret_access_key    = aws_conf['secret_access_key']
    aws.keypair_name         = aws_conf['keypair_name']

    aws.instance_type        = aws_conf['instance_type']
    aws.ami                  = aws_conf['ami']
    aws.region               = aws_conf['region']
    aws.security_groups      = aws_conf['security_groups']
    aws.tags = {
      'Name'        => aws_conf['tags']['Name'],
      'Description' => aws_conf['tags']['Description']
    }
    aws.elastic_ip = true

    override.ssh.username         = aws_conf['ssh_username']
    override.ssh.private_key_path = aws_conf['ssh_private_key_path']
  end

  # shell
  config.vm.provision :shell, :path => "bootstrap.sh"

end

プロビジョニングされたときにAMI上で実行されるシェルスクリプトを作る。今回はなにも実行しない。


$ echo "#\!/bin/sh” > bootstrap.sh

4. AWSに作るインスタンスの設定を作る。
4.1. Keypair を作る
AWSにログインし keypair を作る。ダウンロードされた *.pem を ~/.ssh/*.pem にコピー後、400にする
$ cp ~/Downloads/*.pem ~/.ssh
$ chmod 400 ~/.ssh/*.pem

4.2. Security Group を設定する
default の Inbound で SSH の source を 0.0.0.0/0 にする。注意: 本来はIP制限すべき。

4.3. アカウントの access key id や secret access key を調べる。


4.4. 設定ファイルを作る。注意: 以下をうっかり github とかにアップしないように!! .gitignore に書いておこう。


4.5. AWSの設定ファイルを作る

AWSの情報をYAMLで書いておく。Vagrantfile と切り分けるためです。


$ jed .aws.yaml
access_key_id: XXXX
secret_access_key: XXXXXX
keypair_name: XXXX
ssh_username: root
ssh_private_key_path: ~/.ssh/XXXX
instance_type: m1.xlarge
region: us-east-1
ami: ami-81acace8
security_groups:
 - default
tags:
 Name: bioc-devel
 Description: bioc-devel

5. プロビジョニングして、SSHでログインする
$ vagrant up --provider=aws
$ vagrant ssh

6. Rを実行して、Bioconductor Devel が使えることを確認する

$ R
R Under development (unstable) (2014-02-24 r65070) -- "Unsuffered Consequences"
Copyright (C) 2014 The R Foundation for Statistical Computing
Platform: x86_64-unknown-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

Bioconductor version 2.14 (BiocInstaller 1.13.3), ?biocLite for help

バージニア遠し。

2013/09/08

次世代シークエンサー現場の会 第三回研究会が無事終了しました

今年度の代表を務めた「次世代シークエンサー現場の会」が無事終了しました。

有能なスタッフや、素晴しい講演をして頂いた演者のみなさま、会を支えてくれた50に迫るスポンサー企業、そして参加者のみなさまのおかげで非常に盛り上がりました。最終的に、研究者・技術者、医療従事者、企業の方など700人が一同に介し、活発な議論をして頂けました。ありがとうございました。

これから様々な事後処理がありますが、がんばっていきましょう > スタッフ

来年は新しい運営体制で東京で実施する予定です。では来年!

NGS現場の会: http://ngs-field.org/

DSC7556

DNAを増幅するサーマルサイクラーを自作してみたよ

DNAをPCR法で増幅するために必要なサーマルサイクラーを自作してみました。自作と言っても、いわゆる、PCの自作と同じでパーツを組み立てていく感じです。購入から組み立ての様子を簡単に紹介します。

モチベーション
ラボには様々なレクリエーションがあります。例えば、単にどこかに遊びに行ったり、スポーツ大会したり、ひたすら合宿形式でプログレスのプレゼンをするミーティングするなどがあります。それもよいのですが、せっかくなので、普段の研究時間ではトライできないが、研究に関わる hack を行う、というイベントを企画してみました。夏休みの自由研究や社会科見学的なノリです。
 
うちのラボでは、PCRを使ったウェットの実験技術の開発をしてきました。しかし、サーマルサイクラーのハードウェアの仕組みを体験的に理解している訳ではありません。そこで、サーマルサイクラーを作ってみました。
 
欧米で始まっている、自宅のガレージやキッチンでバイオロジーを行うムーブメント、バイオパンク、DIYbio を体験しておきたいというのもありますし、Arduino などオープンハードウェア、Maker のムーブメントを体験するのも目的の一つです。ハードウェア開発が思っているほどハードルが下っていることを体験できて、かつ、将来、ウェットの開発だけでなく、装置開発などもできたら、ラッキー、ぐらいの気持ちでやってみました。
 
購入
今回作ったのは、組み立て式で、かつ、仕様などや設計図が公開されているOpenPCRというサーマルサイクラーです。ハードウェアの仕様・設計図、制御ソフトウェアなどの情報がすべて公開されており、部品からも自作することが可能です。今回は、「設計図から部品や回路のパーツを作り、それらを組み立てる直前のもの」を購入しました。
 
ChaiBio
 
OpenPCR
 
なぜか http://openpcr.org/ で購入できなかったので、eBay にある ChaiBio で買いました。
 
OpenPCR - eBay
 
本体価格は $599 で、送料が $76.05 で、輸入費用が $41.55 でした。合計 $716.6 だったので、日本円で、7万円ぐらいです。サーマルサイクラとしては安いですね。数クリックで購入、PayPalで支払いと非常に簡単でした。約1週間で届きました。
 
組み立て
さっそく組み立てます。今回はラボの3人の研究者で1台を組み立てました。僕はバイオインフォですがハードウェアについては詳しくはないです。ほかの2人はウェットの生物学者。
 
こんな感じのダンボールで届きました。 

IMG 2326

中身はこんな感じ。自作PCで良く使うCPU用クーラーがごろっと入っていました。ほかにマニュアルや Arduino などが入っています。ペルチェ素子も。外枠は明らかに木ですね。

IMG 2330

マニュアルに従いまずは蓋を組み立てます。写真はPCRをベースとした1細胞RNA-Seq法: Quartz-Seq を作った笹川上級研究員です。

Quartz-Seq: a highly reproducible and sensitive single-cell RNA sequencing method, reveals non-genetic gene-expression heterogeneity

ウェット研究者がハードウェア組み立てに挑戦。楽しそうです。

IMG 2331IMG 2332

サーマルサイクラは蓋を高温にして、チューブの液体が蒸発しないように温度をコントロールするそうです。そのためのヒーターを仕込みます。なんと OpenPCRは蓋の温度も設定できる。売りものでも古いものや安いものだとこれができなかったりするみたい。

IMG 2334

蓋にヒーターを固定します。

IMG 2336

次にチューブに温度をかける部分を作ります。CPUクーラーとチューブホルダーを固定するための台を作ります。

IMG 2338

台にペルチェを固定し、その上に、チューブラックを配置します。

IMG 2347IMG 2348

サーマルサイクラーの心臓部分があっさり完成。こんなんでいいのか。。。
次は Arduino にサーマルサイクラーをコントロールする基盤を固定し、木枠に固定します。温度などが表示される液晶画面も設置します。 

IMG 2351IMG 2349IMG 2354

これで、蓋とチューブホルダー部分が完成です。あとはケーブルをうまく箱に入れていきます。箱には電源ユニット (これも自作PCで使われているものです) を配置します。
 
素子に繋がっている温度センサーのケーブルがとても細く、切断してしまいそうになります。ここは最新の注意が必要です。またクーラーの排熱を邪魔しないよう、ケーブルを綺麗に配置するのが温度制御の速さなどに関わるので、慎重に綺麗に配置しましょう。

IMG 2355

これでサーマルサイクラーの完成です。

IMG 2356IMG 2359

PCにAIRで実装された制御ソフトをインストールして、USBで接続します。ここで温度やサイクル数などを設定し、Run するだけ。コードはgithubで公開されています。

IMG 2367

温度が表示されています。Lid が 69度まで上っています。ほのかに木のよい香りがしますw

IMG 2360IMG 2361

ScanSnapと並べてデスクに置いてみた。

IMG 2369

まとめ
非常に簡単。液体を温度制御するには、要は、チューブホルダーを作って、ペルチェ付けて、空冷でも温度下げるという仕組みをプログラム制御するだけ、ということが体験できました。3人で4時間ぐらいかかりました。
 
できあがったものも、普段、市販の最新のサーマルサイクラーで実験しているラボメンが、温度制御の速さなど、遜色ないかも、ということを言っていました。実際に実験してみなければ、わからないですが。ラボメン達とは、試しに、これで次世代シーケンサーのライブラリプレップでもやってみようかという話をしています。
 
ハードウェアが気軽に購入・自作できるとしても、酵素やバッファーなど試薬類はどうするの? という疑問があるかと思います。これに関しても、OpenBiotechnology というサイトで購入できるようになっています。
 
Open Biotechnology
 
これを体験することで、ハードウェアを知ることに対する抵抗感がかなり払拭されました。作り終わった後は、ウェットの研究者が、SBSフォーマットのマルチウェルプレートやスライドガラスサイズに改造するために、ペルチェ素子の値段を調べ始めたりしてました。OpenPCRから、qPCR機器も発売されるそうなので、こちらが出たらまたトライしてみたいと思います。また、バイオテクノロジーの民主化についていろいろと思うことが出てきました。こちらに関しては以下の書籍が詳しいです。
 
バイオパンク―DIY科学者たちのDNAハック! [単行本(ソフトカバー)] マーカス・ウォールセン (著), 矢野 真千子 (翻訳)
 
ラボのレクとしては、次回以降 qPCR マシンの作製や、3Dプリンタ・スキャナの体験、マイクロ流路の作製体験、Google Glass体験などをやってみたいですね。

2013/05/23

Quartz-Seqで1細胞/微量RNA-Seqを始めたい方へ

はじめに

新しい高精度な1細胞RNA-Seq, Quartz-Seq論文を出してから、各方面から多く相談を受けています。


そこで、新しく1細胞RNA-Seqを始める方へ、僕達が理想だと考えている技術導入の手順を紹介したいと思います。また我々の方法は1細胞(6-14 pg Total RNA)だけでなく pg-ng オーダーの少量RNAからシーケンスが可能です。そのような方も以下の手順が参考になると思います。

0. 1細胞/微量RNA-Seqが本当に必要なのか検討する

1細胞/微量RNA-Seqでは、現時点でQuartz-Seqが世界最高の性能を持っている訳ですが、十分なサンプルを用意し、通常のRNA-Seqしたほうが、より精度の高いデータが得られます。なので、基本的には、サンプルをたくさん集める方法をしっかり検討すべきです。まずは、戦略面と技術面で1細胞/微量RNA-Seqが本当に必要かを検討する基準について書きます。

0.1. 戦略面での検討

あなたが抱えているプロジェクトが、1細胞/微量RNA-Seqでなければアプローチできないかどうかを問い直すことが重要です。

基本的には以下の2つの状況で、1細胞/微量RNA-Seqが役に立ちます。

a. 細胞状態が連続的に変化し、さまざまな細胞状態が、細胞集団に含まれている場合 (振動現象、ゆらぎなど)
b. 細胞状態を特定するマーカーがほどんどわかっていない場合

最初から細胞状態が2状態しかないことが明らかで、しかも細胞状態を代表する遺伝子が分かっている、という状況では、FACSなどで cell sorting し、目的の細胞を採取することを考えるべきです。そして、微量RNA-Seqや通常のRNA-Seqで、しっかりと biological replication を取る方が良いでしょう。微量になると、テクニカルなノイズが増えるために、生物学的な差を知るためには、n をしっかり確保するのが重要です。もしかしたらRNA-Seqでなく、qPCRでも十分かもしれません。

0.2. 技術面での検討

1-10 ng 程度の Total RNA でも illumina 社 TruSeq RNA prep kit で十分シーケンス可能です。その場合は、ロスの少ないRNA抽出法を用いるのがポイントになります。そのためにお使いの細胞がどのぐらいRNAを持っているか定量することが重要です。まず細胞数をカウントしRNAを抽出・定量します。その後、1細胞あたりのRNA量を計算します。一般的には、2-20 pg あたりになります。

1細胞ではなく微量RNA-Seqのプロトコールはこちら。ライブラリ作製にもコツがあります。短い断片を漏れなくライブラリ化するために、必ずLIMprepを利用してください。

まとめ
- 1細胞RNA-Seqである必然性を検討する
- 確保できるRNA量と biological replication の数を検討する
- 1細胞でなくてよいなら、ロスの少ないRNA精製法と通常のRNA-Seq法を試す
- 1細胞あたりのTotal RNA量を定量する

1. Quartz-Seqの導入

1.1. Quartz-Seq を導入

これまでの1細胞RNA-Seq法と異なり、Quartz-Seqは、簡便でロバストな方法なので、プロトコールを読みながら、自分でやってみると良いでしょう。笹川さんが丁寧にプロトコールを書いてくれました。
まず1細胞相当RNAを用意しましょう。細胞数をカウントしたのち、RNAを抽出、1細胞相当まで希釈します。これを1細胞と見立てて、Quartz-Seqの導入に利用します。このときは本番で利用する細胞ではなく、大量にRNAが手に入る細胞を利用することをお勧めします。またその細胞の通常のRNA-Seqを先にしておくことを強く推奨します。

重要な注意点はプロトコールに書いてありますので、そちらを見てください。温度や時間などひとつひとつに意味があります。なのでまずはそれらを一切変更せずに行うことが重要です。意味については論文のサプリメントにしっかり書いてあります。試薬はなるべくフレッシュなものを利用してください。業者によってはメーカーから購入後、業者に在庫として抱えている場合があります。このような場合は在庫するまでの間に試薬の状態が変化している可能性も考えられます。メーカーが届いたらその足でラボに届けてもらうようにお願いしましょう。

こちらも、短い断片を漏れなくライブラリ化するために、必ずLIMprepを利用してください。

1.2. 導入できたかどうかを判断するには

Quartz によるWTA (Whole transcript amplification) が終了した時点で、cDNAを電気泳動し、そのバンドパターンを見てください。正しいバンドパターンは論文に出ています。200bp 程度の副産物出ていないことも確認してください。

次にcDNA収量を確認し、期待できるだけ増えているかを確認します。それらを数回繰り返し、そのばらつきをCV (変動係数)で定量化し、安定したことを確認してください。

その後、その細胞で発現している遺伝子を10-30遺伝子程度選び、得られた cDNA に対して、qPCRをしてください。この時、発現量が高い遺伝子、中程度のもの、低いものをまんべんなく選ぶのがポイントです。生物学的現象を追っている人は、その現象に関わる遺伝子の qPCR をする人が多いですが、技術的な評価には、バイアスのない遺伝子の選択が重要になります。qPCRデータを scatter plot にし、線形回帰分析でR^2(決定係数), R(相関係数) をそれぞれ計算します。また遺伝子ごとに CV を計算し、x軸にその遺伝子の発現量、y軸にCVをプロットし、ばらつきがどの発現量域で表われるかを観察します。

ちなみに、我々は、8回の独立した増幅をした後、それらに対して30遺伝子程度の qPCR を行い、性能評価を行いました。もう少し遺伝子数は減らしても大丈夫だと思います。あるいは MiSeq でシーケンスしたほうが早いかもしれません。最終的には、シーケンスを行い、複数回の増幅のピアソン相関係数を確認し、少なくとも0.8、できれば0.9を越えることを確認しましょう。

最終的にはシーケンスして確認します。独立して増幅したサンプルをRNA-Seqします。また通常のRNA-Seqもします。これらを qPCRと同様の方法で比較します。検出された遺伝子数を確認します。通常のRNA-Seqや独立した増幅サンプルで、8割以上の遺伝子が検出されていることを確認してください。

まとめ
- 1細胞相当のTotal RNAを用意する
- cDNAの泳動像と収量を確認する
- qPCRとシーケンスで定量し, 相関係数とCV、検出遺伝子数で性能・安定性の評価をする

2. 細胞の採取

1細胞や微量サンプルを採取する方法を確立します。ここは我々の専門ではないので、各々が持つ技術に応じて、細胞を採取する系を立ち上げてください。我々の経験としては、ガラスピペットを利用してマニュアルで採取しても Qaurtz-Seqが上手くいくことを確かめています。

ポイントは以下の2点です。

a. 細胞と一緒に持ち込んでしまう液量を減らす、あるいは一定にすること
b. 細胞が破砕・融解されていること

a に関しては、1細胞sorting が理想です。bに関しては、顕微鏡で細胞が融けていることをしっかり確認しプロトコールを確立してください。細胞がしっかり解けなければ、RNAが細胞の外に出てこないせいか、うまく反応が進まないことがあります。ここを越えれば、あとはプロトコールにしたがって、Quartz-Seq を進めるのみです。

まとめ
- 1細胞を採取し、細胞を融解する条件を作っておくこと

3. 検証実験の立ち上げ

RNA-Seq や Microarray をした後、必ず qPCR, ISH, RNA FISH などで検証すると思います。1細胞RNA-Seqも同様に、なんらかの検証をする必要があります。Quartz-SeqはRNAを増幅する技術ですので、理想的には増幅せずに、まったくの別法で確認すべきです。しかし、既存の1細胞qPCRは、増幅が必要な方法ばかりです。そこで、我々の論文では、非PCRの1細胞qPCRも提案しています。詳しくは論文を読んでください。また、ISHやRNA FISH を立ち上げておくのもよいでしょう。このような系を持っておくと、データを論文化までのスピードが格段に上がると思います。特にシーケンス実験は解析も含めると時間がかかるので、その間に、必ず立ち上げておきましょう。

まとめ
- Qaurtz-Seqの結果を評価する実験系を持ちましょう

4. シーケンス実験計画

Quartz-Seqは illumina 社HiSeqを前提としていますが、cDNAができたらDNA用のシーケンスライブラリキッドと併せて、どのようなシーケンサーでも読めると思います。

シーケンスリード数はQuartz-Seqのダイナミックレンジに影響します。最低でも2000万リード程度(マッピング後)は欲しいところです。論文では、3000-6000万リードぐらいでデータを出しています。HiSeq 2500, 4-8 sample/lane を目安にすると良いでしょう。リード数とダイナミックレンジの関係は論文のサプリメントを確認してください。

ライブラリ作製は Quartz-Seq 用の LIMprep 法を利用してください。

1細胞RNA-Seqは数細胞だけ行なってもその後の解析は不可能です。細胞集団にどのぐらいの比率で異質性があるかを想定して、シーケンスする細胞数を決定しましょう。例えば10個に1つの異質性をみるのに、10細胞以下で実験しても意味がない、ということです。まずは20細胞ぐらいを目標にしてみると良いと思います。そのぐらいあれば一般的な多変量解析の手法が意味を持って使えると思います。

もし、細胞周期の影響を除きたい場合は、FACSなどで細胞周期が同じ細胞のみ採取すると良いでしょう。

最後に費用ですが、シーケンス費用を除いた、Quartz WTAについては 500円/sample です。

まとめ
- 4-8 cells/lane, 2000万リード以上
- 20細胞以上
- Quartz WTAは1反応が500円

5. データ解析

1細胞だからと言って特別な解析はないですが、Quartz-Seqなど1細胞RNA-Seqのデータをみるときの注意を書いておきます。

まず、プライマー配列が標的のmRNAに対して極端に多いので、どうしてもシーケンスデータに含まれます。なので、FASTQからプライマ配列を trimming しましょう。Quartz-Seq の場合は、8%程度コンタミします。それ以上の場合は、suppression PCRやプライマー除去のステップがうまくいっていない可能性があります。

また通常のRNA-Seqの場合は、数十から数万細胞に1コピーのRNAがあっても定量されます。なので、そのような遺伝子のついても数値化する意味があるかもしれません。しかし1細胞RNA-Seqの場合は、1細胞に1コピー以下、ということを考える意味がないため、1コピー以下に相当するデータをプロットしたり、解析に利用する必要はあまりありません。

まとめ
- プライマー配列をトリミングする
- 1コピー以下を考える必要はない

最後に

我々は、新しいシーケンス技術を作ることに喜びを覚えており、Quartz-Seqが広く使われることを望んでいます。今後も以下のサイトで情報公開を行なっていきます。我々の方法があなたの研究の役に立てば幸いです。がんばってください!

2013/03/31

ラボを立ち上げます


ひさびさのブログ更新です。明日は年度の始めで忙しそうなので、今日書いておきます。

2013/03/31をもちまして理研CDBを退職しました。4/1からは埼玉県和光市にある、理研本所の情報基盤センターにて、バイオインフォマティクス研究開発ユニットという研究室をユニットリーダーとして主宰することになりました。

DNAシーケンスのデータ解析の手法、ソフトウェア、そして実験技術の開発を中心に研究を進めつつ、理研内外の実験生物学者と共同で生命科学の問題を解いていきます。また理研のバイオインフォマティクスをどのように支え、発展させていくかを考えることも求められています。みなさまのお力をお借りすることもあるかと思いますので、これからもどうぞよろしくお願い致します。

ラボの公式ウェブサイトは以下にあります。
独立行政法人 理化学研究所 情報基盤センター バイオインフォマティクス研究開発ユニット

2012/05/12

Rパッケージが Bioconductor に採択されるまでの顛末

R には CRAN というパッケージ集がありますが、ライフサエンス分野専門のパッケージ集に Bioconductor というものがあります。Core developer team のメンバーは、Rの core developer team と一部メンバーが被っています。

Bioconductor は CRAN と比較すると、詳細なコードレビュー/ドキュメンテーション(もちろん英語の)が必要など、わりと厳しめの採択基準があります。これまで、日本人でBioCに採択された人がいなく情報があまりませんでした。このたび、BrainStars for R というパッケージが Bioconductor 2.10 に採択され公開されました。その顛末を公開して、日本のすぐれたプログラムが Bioconductor に採択されることをエンカレッジできればと思います。

開発

このあたりは、BioCのパッケージガイドラインサブミットガイドラインを読むと一通り書いてあります。またパッケージングについては、以前のエントリを参照ください。

R でいまどきなパッケージ開発 (devtools, testthat, roxygen2)

R5 reference class 編: R でいまどきなパッケージ開発 (devtools, testthat, roxygen2)


上のリンクで書かれていないことでBioCでポイントとなるのは、コーディングだけじゃなくて、すべての関数に対する Rd で書かれたマニュアルと、パッケージの使い方が書いた vignette というドキュメントが必要になることです。マニュアルには、動作するサンプルコードが必要になります。vignette には、パッケージの背景や、チュートリアル形式でその使い方を英語で書く必要があります。この文章は Sweave 形式で書く必要があり、TeX, Sweave の知識が必要になります。vignette のなかにも動作するサンプルコードが必要になります。

マニュアル、vignette のコードが動作しない場合、正常にパッケージングできないので、BioC のパッケージは必然的にドキュメントの質が高くなります。これは作り手にとっては大変ですが、ユーザにとっては助かりますよね。

NAMESPACE の書きかたが CRAN と少し違います。個人的にはNAMESPACEだとほかのパッケージとの依存する部分について少しはまりました。これが参考になります。 http://bioconductor.org/help/faq/#developer-faq

開発の様子は、github のログを見てください。
https://github.com/dritoshi/BrainStars-for-R/commits/master

サブミットの顛末

ラボノートから時系列にイベントを抜粋します。

2012/01/27

最初のsubmission。Marc Carlsonさんにメールすると issue tracking system のアカウントが発行される。ここに自分の開発したパッケージファイルをアップロードする。パッケージガイドラインに書いてないステップ。ここで、R-devel での動作チェックをしておくように言われた。これもパッケージガイドラインに書いてない。これが地味に面倒。R-devel + BioC-devel 環境を用意しておく必要がでてくる。Amazon EC2 にそれようの AMI を作って動作確認した。

2012/02/21

レビューが返ってくる。かなりコードもドキュメントも読まれている。ドキュメントはよく書けているとのことでほっとした。コードは大別して2点のつっこみ。

0. 低レベル関数をラップして、ひとつの関数にまとめ、オプションで動作を切り替えるようにしろ、という指示。Rails の動的ファインダメソッドのノリで、対象ごとに関数があったほうが好きなんだけど、GEOquery とか参考にして、直せということだったので、その通りに。でもユーザが両方を選べるよう低レベルな関数も export したままにする。この判断が採択を遅くすることになるとは。。。

1. 関数がJSON を返すのが気にいらないらしい。一般的な R のデータ型にするようにしろということらしい。JSON のほうがデータ取り出しやすいんじゃないの? とおもったけど、この時点で、変態なのは俺だと気付いた。BioCチームの徹底的にユーザ指向という姿勢が伝わってきたので、すべて指示に従うことに。

バージョンのつけかたが、0.99.x にしろという指示。これについてもパッケージガイドラインに書いていなかった。今は書いてある。あと、S4で書いてたんだけど、必然性なくない? と言われて、S4やめて書き直した。これでコードが 2/3 ぐらいになった。

2012/03/03

2nd submission

2012/03/06

3日で、2nd review が返ってくる。低レベルの関数を残しておいたのが気にいらないらしい。全部 export しなくした。

2012/03/07

採択通知がくる


2012/03/15

BioC 2.10 の SVN に取り込まれる。自分で SVN にコミットする必要はない。このときバージョンが 0.99.x のままだが、BioC 2.10 がリリースされるときに自動的に1.0.0 になる。これもカイドラインに書いていない。
https://readonly:readonly@hedgehog.fhcrc.org/bioconductor/trunk/madman/Rpacks/BrainStars/


2012/03/19

devel のウェブサイトに掲載。リリースサイクル的にぎりぎりだと思ったが BioC 2.10 に取り込まれるのが確定した。
http://www.bioconductor.org/packages/devel/bioc/html/BrainStars.html


2012/04/03

BioC 2.10 リリース。もちろんBrainStars for R もリリース


まとめ

BioCのチーム感じるのはユーザ指向の姿勢ですね。S4 classes や reference class (R5) などで実装したとしても、そこは隠蔽して、一般的なユーザからは、普通の(ラッパー)関数をひとつ使えばその機能が使えるようにすることを推奨しています。実際に、ほかのパッケージのコードを読むとそのようになっていることが多いです。

英語がネイティブではない日本人にとってはドキュメンテーションの duty が重いのがつらいところだと思います。いまどきだと、github などでコードを自由に簡単に公開することができるのですから、わざわざ BioC のようなレビュー付きのパッケージレポジトリに採択される必要がないのかもしれません。でも、レビューによって得る経験はより良いコードを書けるようになるための糧になると感じました。みなさんも BioC の採択を目指しましょう!

最後に、BioCチームに感謝。