バイオ領域の研究はWet系と呼ばれる、細胞や微生物に関連した生物学的な実験が主戦場と言えます。多くの生物学研究者による不断の努力と失敗を糧としながら、知見が蓄積されてきました。
しかし、生命メカニズムの解明が進み、学究的な解像度が上がるにつれて、解析の深度を高めるためには膨大な時間と労力を要するようになりました。そのため、実験によるWet系の手法だけでは解析が難しいケースもあり、Dry系と呼ばれるコンピュータを活用した解析が導入され始めています。
今後、バイオインフォマティクス(情報生命科学)の需要が増えるにつれて、バイオ研究者にはプログラミングの素養がより求められるようになるでしょう。バイオインフォマティクスにおけるプログラミングの必要性について解説します。
監修者プロフィール
膨大なゲノムデータの解析や生命ネットワークシステムのシミュレーションを行うバイオインフォマティクスは、日進月歩で発展しています。
例えば、30億個の塩基が鎖のように連なったDNAの塩基配列をすべて解読する全ゲノム解析に人類が最初に挑んだとき、13年の歳月と約30億ドルの予算がかかりました。しかし、その後、塩基配列を高速に読み取ることが可能な「次世代シーケンサー」の飛躍的な技術向上により、今では約1,000ドルの予算と数時間でゲノム解析が行えるようになりました。近年では、全ゲノム解析をたった5分での完結を目指すスタートアップも登場するほどです。
低コストかつ短時間でのゲノム解析を可能にしたハード面での技術革新が次世代シーケンサーの登場だとすれば、ソフト面はプログラミング言語の発達といえるでしょう。今や、バイオインフォマティクスに必要なのは、データベースにアクセスして情報を解析するプログラミング技術なのです。
実験を生業とするバイオ分野の研究者の中には、情報学の分野に「自分が学びたい領域ではない」と難色を示す方もいるかもしれません。しかし、現代の研究で成果を出すためにはバイオインフォマティクスは活用したい概念であり、そのうえでプログラミングは必須の知見とも言えます。
では具体的にWet系研究へのプログラミング活用には、どんな利点があるのでしょうか。人力での対応から大きく処理能力が飛躍する「高速処理」「自動処理」「正確処理」の3点について説明します。
| 高速処理
プログラミングされたコンピュータは、人間よりもはるかに速いスピードで情報を処理することが可能です。一般的なコンピュータは1秒間に800〜1000万回もの計算ができ、さらに日本のスパコン「富岳」は1秒あたり約44.2京回(京は千兆の10倍)もの計算が可能になります。人間では難しい膨大な計算や処理をコンピュータに任せることで、バイオ研究における作業スピードは飛躍的に向上します。例えば、NGSにより生成された膨大なデータから有意な情報を人力で取得することは到底不可能ですが、プログラミングはそれを可能にします。
| 自動処理
プログラミングは事前に設定した特定のパターンを、繰り返し自動処理することを得意とします。日々発生するような単純作業や煩雑な処理を自動化することで、研究者はそれ以外の作業に集中して取り組めます。バイオ研究においては、NGSデータの複雑な分析操作やレポーティング作業を自動化することが可能です。これにより、研究者の作業効率は格段にアップします。
| 正確処理
プログラミングされたコンピュータは一挙一動を間違えることなく正確な処理が可能なため、人間よりもエラーが少ない点も特徴です。例えば、同じような作業を連続して人間が行った場合、どんなに厳重に気をつけていても見落としやケアレスミスなどが発生する可能性があります。しかし、一度プログラムを組んだコンピュータであれば、計算ミスをすることは決してありません。バイオ研究をする上では、複雑な解析処理を行う際に発生してしまうヒューマンエラーなどのリスク減少に有効です。このようにプログラミングは、間違いのない正確な処理を得意とします。
一口にプログラミング言語といってもさまざまな種類があります。バイオインフォマティクスの領域ではC、C++、Java、Perl、Ruby、Python、Rなどが主流の言語として挙げられるでしょう。ただし、実務に役立てる上ではすべての言語を習得する必要はありません。
それぞれの大まかな分類と特徴を紹介した上で、バイオ研究者にとって必要なプログラミング言語と、Wet系研究者が最初に習得すべき言語について解説します。
プログラミング言語は大きく分けてコンパイラ言語とインタプリタ言語に分けられます。
| コンパイラ言語とは?
「コンパイラ」とは、コンパイルを実行するソフトウェアのことです。「コンパイル(compile)」とは資料を編集したり、集めたりする作業を意味しますが、ここでは「翻訳する」「変換する」という意味を持ちます。
コンパイラ言語とは、人間が書いたプログラミング言語を機械語へと翻訳します。コンピュータは数字の「0」と「1」の二進数で表した言語しか理解できないため、この変換作業こそが「コンパイル」です。「コンパイル」は具体的には「字句解析→構文解析→中間コード生成→最適化→機械語に変換」というプロセスを経て実行されます。
コンパイラ言語はすべてのコードを機械語に変換した後、一気に実行するのが特徴です。余分な手間や工数を省けるためプログラムの処理速度が高速で、実行前にミスを発見してくれるというメリットもあります。ただし、エラーが発見された場合は、ソースコード全体の中から原因を探し、まとめて対応しなければなりません。かえって手間がかかってしまう可能性もあります。
| インタプリタ言語とは?
インタプリタ言語はリアルタイムで翻訳するのが特徴です。つまり、人間が書いたソースコードを1つずつ解釈しながら機械語に翻訳します。コードを書きながらプログラムを実行できるため、Webサイトの画面を作るときなどは画面のデザインを確認しながら作業を進められるという利点があります。また、コードにエラーがあれば、すぐにデバッグをして修正可能です。
一方、インタプリタ言語の最大のデメリットはコンパイラ言語と比べて実行速度が遅いことです。「ソースコードを書いては実行する」作業を1行ごとに行うため、プログラム実行の速度はコンパイラ言語と比べて劣ります。
代表的なコンパイラ言語として、C、C++、Javaについて解説します。
| C(シー)
C言語の歴史は長く、開発されたのは1972年です。もっとも汎用性の高い言語といっても過言ではなく、ハードウェアの制御からシステム開発までIT分野で行われている大半のことを実現できます。
C言語はコンパイラ言語の1つであることから実行速度が速い点が特徴です。しかし、デメリットは習得するのが難しい点が挙げられます。高い汎用性ゆえにプログラミング言語として最初にC言語から挑戦する人も多い反面、挫折してしまう人も少なくありません。
習得するのが難しい理由は、C言語にハードウェアを制御する要素があり、メモリやCPUに関する知識も必要になるからです。ただ、特定の機能をもったコードが集まったライブラリも多いため、上手に活用すればコードを書く手間を省けます。
バイオ領域では、タンパク質科学の分子動力学の計算を効率よく行うためにC言語が使われています。
| C++(シープラスプラス)
C++はC言語と同じく汎用性が高く、処理速度が速い点が特徴ですが、C言語と異なるのは、複数の部品からモノを組み立てるようにプログラミングすることをコンセプトにした「オブジェクト指向言語」である点です。そのため、C言語よりさらに習得の難易度は上がります。
ハードウェアを扱うIoT機器からゲーム開発に至るまでさまざまなアプリケーションで活用されています。
| Java(ジャバ)
Javaは多くの技術者によって使用されている人気のプログラミング言語です。Javaの特徴として「write once,run anywhere(一度書いたプログラムはどこであっても実行できる)」というコンセプトが挙げられます。つまり、OSがWindowsであろうと、Macであろうと、実行する環境に関わらず、プログラムの開発をし直す必要がないことです。この一度作ったプログラムを安定的に使える安心感こそがJavaの最大の魅力といえるでしょう。
代表的なインタプリタ言語としてPerl、Ruby、Pythonの3つを紹介します。
| Perl(パール)
Perlは1987年にアメリカのラリー・ウォールによって開発された歴史のあるインタプリタ言語です。利用者が多く、インターネット上で多くの情報やフリーソフトが公開されています。
また、Perlは「汎用スクリプト言語」であり、記述が簡単で分かりやすい言語です。つまり、あとで見返したときにミスに気づきやすいというメリットがあります。
Perlはアンケートフォームや入力画面、掲示板などを含めたWeb開発や、異なる環境下でも違いを意識せずにプログラミングできることからサーバ管理にも向いています。
| Ruby(ルビー)
Rubyは日本人の「まつもとゆきひろ」によって1995年に開発されました。エンジニアが楽しくプログラミングするために開発されたプログラミング言語で、最大の特徴はコードがシンプルで読みやすく、初心者でも学びやすい点です。
また、オブジェクト指向言語であり、プログラムを共有したり、使い分けたりすることが可能になります。さらに日本人によって開発されたということもあり、インターネット上に日本語で書かれた情報も見つけやすい点も魅力です。
| Python(パイソン)
Pythonはオランダ人のグイド・ヴァンロッサムによって開発されました。公開されたのは1991年ですが、世間での知名度が高まったのは2018年以降です。ここ数年では、利用率が非常に高く、人気な言語として知られています。また、使用者や学習者が多ければ、それだけWeb上の情報も多くなるため、問題にぶつかったときに解決策を検索したり、質問サイトで問い合わせたりしやすいのも特徴です。
Pythonは、バイオ研究においても塩基配列やアミノ酸配列を扱う配列解析、タンパク質の立体構造予測、機械学習などの分野で活用されています。これらの例からも分かるように、Pythonはデータの分析や可視化を得意とします。ただ、研究者でなくても、ルーティンワークとなっている作業を自動化することもでき、学ぶことのメリットは大きいでしょう。
コンパイラ言語は高速の演算処理が必要な解析アルゴリズムの開発など、バイオインフォマティクスには欠かせないプログラム言語ですが、習得に時間がかかるため、初心者向きではないでしょう。
そのため、まずは学びやすいRubyやPythonなどのインタプリタ言語から学ぶことをおすすめします。言語習得を目指す上では、複数の言語に手を出すのではなく、まずは1つの言語をしっかり学ぶことが大切です。たとえば、Pythonを使ってデータ解析が自由にできるようになれば、次にRubyを習得する際のハードルはかなり下がるでしょう。
バイオインフォマティクスに求められる内容が高度になり、複雑化しています。そのため、Wet系の経験がある研究者がDry系にも精通できれば、求められる人材になる可能性は高まるでしょう。プログラミング言語を習得することは簡単なことではありませんが、今後は自身の志向する領域において避けては通れない道になりつつあることを念頭に置きましょう。
バイオインフォマティクスの市場規模に関してはさまざまな予測がありますが、いずれも今後の拡大と求人の増加を指摘しています。
例えば、Mordor Intelligenceの分析によると、バイオインフォマティクスの市場規模は2024年には163億6,000万米ドル(約2.5兆円)と推定され、2029年までに239億7,000万米ドル(約3.6兆円)に達すると予測されています。予測期間のCAGR(年平均成長率)は7.94%です。
こうした予測からも分かる通り、バイオインフォマティクスの市場は世界的に拡大傾向にあり、今後もバイオインフォマティシャンの求人数は増加するでしょう。そのため、プログラミング言語を習得することは、バイオ研究者として就職する上で大きなアドバンテージになると言えます。
今後のトレンドを考えると、バイオ研究者がプログラミング言語を学ぶことは重要ですが、研究の合間の時間を割いて学習することは決して簡単ではありません。
必要な知見を身につける上では、取捨選択してプログラミング言語を学ぶことが大切です。現時点での最適解としては、RubyとPythonなどのインタプリタ言語と言えるでしょう。
Wet系研究者は「プログラミング学習に時間を割かずに、研究に没頭したい」と思うかもしれません。しかし、Wet系の経験がある研究者こそ、プログラミング言語を学ぶ時代と言えるでしょう。Wet系、Dry系の両方に精通して、拡大するバイオインフォマティクスの求人市場の波に乗りましょう。
プログラミング言語を習得する上では、難易度が高いコンパイラ言語よりも、まずはインタプリタ言語であるRubyやPythonを学ぶことから開始するのをおすすめします。
クリーク・アンド・リバー社が運営するバイオ・化学系求人サイト「Laboしごと」では、Wet/Dry両方の派遣・社員求人を多数掲載しています。
無料で簡単に登録できるため、ご興味のある方はぜひ「会員登録」して、引き続きLaboしごとをお楽しみください。