湧源アドベントカレンダーに参加しています。
https://qiita.com/advent-calendar/2019/yugen
Qittaはどうやら情報系のサイトらしいので、「私の好きなもの×情報系」を考えました。その結果、DNA computingという語句を思いついたので、調べてみました。
DNA computingに期待されること
DNAの優秀な点は、小さなスペースに大量のデータを詰め込める可能性をもつことだと思います。DNA1本に対して(明記されてないがおそらく最大25塩基長)1文字の情報を割り当てたとしても、1mLの溶液中に6千万GBの記憶容量を持たせられるそうです。また、並列性もDNAの優秀な点です。この後ろに実例を示しますが、複数の処理を同時に行うことができます。
実例その1
まず、DNA-computingの元祖と呼ばれる成果を紹介します。Leonard M. Adleman氏が、1994年にScienceで発表した手法です。
Molecular computation of solutions to combinatorial problems | Science
この論文では、7つの点とそれを結ぶ14個の矢印からなるグラフについて、すべての点を一度だけ通るパスを、DNA-computingにより見つけています。具体的な方法を説明します。下の図は、4つの点とそれを結ぶ6つの矢印のグラフについて、同様に解く方法を示したものです。
点(city)に対して、8塩基対からなるDNAを割り当て用意します。(用意するのは図のcomplementつまり相補鎖と書いてある方です。) また、矢印(flight)に対して、始点となる点の後半4塩基と、終点となる点の前半4塩基に結合できるような配列を用意します。
これら全てと、リガーゼという二本鎖DNAの片側が1か所切れた部分をつなげる酵素を、水中で混ぜると、DNAが互い違いに組み合って二重らせんを形成します。これを、リガーゼできちんとつなげます(このままだと8塩基ごとにリン酸ジエステル結合がないDNAになっているので)。この段階で、一筆書きで行ける経路を表すたくさんの配列ができます。
このままでは、始点がこの点で終点はこの点、という条件を満たさないので、次の増幅の段階で工夫をします。増幅(PCR)には、プライマーと呼ばれる「この配列から増幅する」ということを示す短いDNAが必要になります。なので、プライマーとして始点にしたい点と終点にしたい点の配列に揃えた2つを使うことで、始点と終点を定めることができます。このままでは、始点だけ正しい配列と、終点だけ正しい配列もできてしまいますが、両方正しい配列の方ができる速度が速い(両方のプライマーから増幅されるので)ため、増幅量が増えて飽和する前にPCRを止めることで、目的配列が大半を占める集団をとってくることができます。
最後に、得られた集団の配列を精製したのちに、増幅収率が高い配列をシークエンサーで読み取れば、答えが得られます。
http://152.2.128.56/~montek/teaching/Comp790-Fall11/Home/Home_files/Adleman-ScAm94.pdf
実例その2
その2として、DNAでinputやoutputを表現し、論理ゲートを作る例を紹介します。いろいろありますが、ANDゲートを作った例を紹介しようと思います。
https://pubs.acs.org/doi/abs/10.1021/acssynbio.7b00101
2本のDNAで、(1,1)=(短いDNA有り,長いDNA有り)というinputを表現します。outputは、0=RNAが出てこない、1=RNAが出てくる、です。ANDゲートなので、2種類のDNA両方が入力されたときだけ、RNAが出力されます。
inputのDNAは、水溶液中で、template DNAとT7RPという名前のDNAからRNAを作る酵素と共存させます。
template DNAは図の黄色で描かれた構造をしています。そして、図(d)のようにinputのDNAと2本鎖を作ることができます。
T7RPという酵素は、DNAの決まった配列かつ2本鎖の部分にのみ結合ができ、また結合できて初めてRNAを作ります。
Template DNAの1本鎖と2本鎖の境目に、T7RPの結合できる配列があるので、dのようにinputのDNAが2本鎖を組まなければ、RNAは作られない、という仕組みです。
bの(0,1)のときは、長いDNAがtemplateと2本鎖を組んでもよい気がしますが、自分の中で2本鎖を形成しているときは、端から引き離されない限りは、べつのDNAと2本鎖を組もうと思わないので、templateにくっつけません。(短いDNAとくっつく側は、長いDNAの端が2塩基だけ余っているのでくっつけます。)といいつつ、少しは長いDNAがtemplate DNAにくっついてしまうので、RNAの出力量で0というより0.2くらいのoutputを示してしまうようです。outputが1とはちゃんと区別できる程度の誤出力なので、許容というところでしょうか。
ちなみに、outputの検出は、ナノポアにRNAが近づいたときに生じる膜電位の変化で行っています。
この例では、RNAがoutputされた後に次の論理ゲートに入れることができないので、論理回路を組むことはできませんが、論理ゲートの実装という意味はあると思います。ほかにも、2本鎖を組む組まないの検出方法の違いから、NANDゲートの実装などが行われています。
まとめ
DNA-computing自体は、この記事を書こうと思って調べた付け焼刃な知識なので、もっと紹介するにふさわしい話があるかもしれないです。
とりあえず、DNAでおもしろいことができそう、ということが伝わるといいなと思います。