この記事では、タンパク質デザインのソフトウェアの一つであるOSPREY について紹介します。
OSPREY の環境構築と、その簡単な使用方法で、特定の残基を変更させ、どの組み合わせが最も安定な構造かを発見します。環境構築から丁寧に書いているので、ぜひお試しください。
Mac M1, Sequoia 15.3, Python 3.10.0
自宅でできるin silico創薬の技術書を販売中
新薬探索を試したい方必読!
ITエンジニアである著者の視点から、wetな研究者からもdryの創薬研究をわかりやすく身近に感じられるように解説しています
OSPREYとは?
OSPREY(Open Source Protein REdesign for You) は、タンパク質配列の設計およびリデザインを目的とした強力なin silicoツールです。スタンフォード大学とデューク大学で開発され、論文でも広く活用されています。
- タンパク質-タンパク質相互作用の最適化
- 結合親和性向上を目指した変異探索
- 薬剤耐性変異の予測
- 構造的安定性向上の設計
などに応用されており、特に配列変異と構造適合の同時最適化が可能な点が他のツール(例: Rosetta, FoldX)と異なる大きな利点です。
OSPREY が使用されている論文については、Duke Universityのホームページを見てみてください。
OSPREYの環境構築
こちらをベースに環境構築をしていきます。
全コードはこちら
#仮想環境の構築
conda create -n osprey_env python=3.10
conda activate osprey_env
#Javaのインストール、確認
brew install openjdk@17
sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk
#OSPREY serverのインストール
#<https://donaldlab.cs.duke.edu/software/osprey/docs/install/versions/>
#からインストールと回答をしておく。
cd /path/to/osprey-server-osx-4.0.2
./install.sh
#Java と OSPREY をつなぐ(jreリンク作成)
cd ~/.local/lib/python3.10/site-packages/osprey
rm -rf jre
ln -s /opt/homebrew/Cellar/openjdk@17/17.0.15/libexec/openjdk.jdk/Contents/Home jre
#確認
ls jre/lib/server/libjvm.dylib
#環境構築確認
import osprey
osprey.start()
1. CondaでPython環境を作る
conda create -n osprey_env python=3.10
conda activate osprey_env
- 🧱 仮想環境
osprey_env
を作成します。 - Python 3.10 を使うことで、OSPREYと互換性がある環境を確保します。
- 作成した
osprey_env
に入ります。 - ここで作業することで、他のプロジェクトと干渉しません。
2. Java 17 をインストール(OSPREYに必要)
brew install openjdk@1
sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk
- 🍵 Homebrew(macOS用のパッケージ管理ツール)を使って Java 17 をインストールします。
- JavaはOSPREYの中でエンジンとして使われています。
Javaのインストール時に以下の様な出力が出てきます。
赤枠で囲った部分を次に打ってください。

- macOSは自動でHomebrewのJavaを認識しません。
- そのため、
/Library/Java/JavaVirtualMachines
にシンボリックリンクを張って「この場所にJDKがあります」と教えています。 sudo
は管理者権限が必要なため、パスワード入力が求められます。
3. OSPREY Server をインストール
OSPREYの公式サイトからOSPREY Server osprey-server-osx-4.0.2
(最新のもの)をダウンロードしてください:
👉 https://donaldlab.cs.duke.edu/software/osprey/docs/install/versions/
ダウンロードしたら解凍して、そのディレクトリに移動します:
cd /path/to/osprey-server-osx-4.0.2
./install.sh
/path/to/
は、展開した場所に応じて変更してください。- OSPREYのPythonモジュールを仮想環境にインストールします。
4. JavaとOSPREYを接続する(libjvm.dylibのリンク)
OSPREYは libjvm.dylib
を osprey/jre/lib/server/libjvm.dylib
に期待しています。
そこで、Javaの本体を jre
としてOSPREYにリンクします:
cd ~/.local/lib/python3.10/site-packages/osprey
- OSPREYがインストールされた場所に移動します。
rm -rf jre
- もし以前の
jre
があれば削除します。
ln -s /opt/homebrew/Cellar/openjdk@17/17.0.15/libexec/openjdk.jdk/Contents/Home jre
jre
という名前で Java の本体をリンクします。
5. Javaのライブラリがあるか確認
ls jre/lib/server/libjvm.dylib
- Java仮想マシンのコアライブラリ
libjvm.dylib
が表示されればOKです!

6. 環境構築の確認
JupyterNotebookを適当に作成し、以下できちんと認識されているか確認してください。
import osprey
osprey.start()
以下のようにできれば、環境構築は終了です。

OSPREYを利用した最安定構造の発見
ここでは、OSPREYというソフトを使って、タンパク質の一部を設計するPythonプログラムを紹介します。対象はAtx1というタンパク質(PDB ID: 1CC8)で、2〜4番目のアミノ酸(A2〜A4)に注目します。特にA2とA3を他のアミノ酸に変えて、どの組み合わせが最も安定するかを計算で調べます。ここで重要なのが「ロタマー」です。ロタマーとは、アミノ酸の側鎖が取りうる代表的な向きのことで、実際のタンパク質構造でもよく見られる形です。このスクリプトでは、側鎖が取りうるロタマーを1つずつ試して評価します。すべての組み合わせを調べるのは大変なので、「A*アルゴリズム」という効率的な方法で良い組み合わせを見つけます。さらに「MPLP」という手法で、その探索を高速化しています
以下の論文のFigrure 4になります。
OSPREY 3.0: Open‐source protein redesign for you, with powerful new features
全コードはこちら
モデルの1CC8.ss.pdbはこちらからダウンロードしてください。
from osprey import Strand
strand = Strand("1CC8.ss.pdb") # PDBファイルパスを指定
# フレキシビリティ(置換可能残基)の設定
strand.flexibility['A2'].setLibraryRotamers('ALA', 'GLY')
strand.flexibility['A3'].setLibraryRotamers(osprey.WILD_TYPE, 'VAL')
strand.flexibility['A4'].setLibraryRotamers(osprey.WILD_TYPE)
#コンフォメーション空間の作成
confSpace = osprey.ConfSpace(strand)
# 力場の設定
ffparams = osprey.ForcefieldParams()
# 分子エネルギー計算器の作成
ecalc = osprey.EnergyCalculator(confSpace, ffparams)
# 配座エネルギーの定義
confEcalc = osprey.ConfEnergyCalculator(confSpace, ecalc)
# エネルギーマトリックスの構築と探索アルゴリズムの設定
emat = osprey.EnergyMatrix(confEcalc)
astar = osprey.AStarMPLP(emat, confSpace)
# 最適配列とロタマーを探索
gmec = osprey.GMECFinder(astar, confEcalc).find()
🧬 コードの全体概要
このスクリプトは、OSPREY3 という計算タンパク質設計ライブラリを使って、
- 特定のタンパク質構造(PDB)を読み込み
- 指定した残基のアミノ酸を変異させ(ミューテーション)
- 全ての可能な構造(配座)をエネルギー的に評価し
- 最も安定な構造(最低エネルギー状態)を見つけ出す
という一連の処理を行っています。
🔍 コード解説
from osprey import Strand
strand = Strand("1CC8.ss.pdb") # PDBファイルの読み込み
Strand
クラスは、タンパク質構造ファイル(PDB)を読み込むためのクラスです。1CC8.ss.pdb
はOsprey独自の.ss.pdb
形式(2次構造情報などを含む)を用いた入力ファイルです。
# フレキシビリティ(変異させる残基)を設定
strand.flexibility['A2'].setLibraryRotamers('ALA', 'GLY')
A2
番目の残基に対して、**アラニン(ALA)とグリシン(GLY)**への変異を許可。setLibraryRotamers()
は「この残基で許容されるアミノ酸の配座(ロタマー)」を指定する関数です。
strand.flexibility['A3'].setLibraryRotamers(osprey.WILD_TYPE, 'VAL')
strand.flexibility['A4'].setLibraryRotamers(osprey.WILD_TYPE)
A3
: 元のアミノ酸(WILD_TYPE)かバリン(VAL)のどちらかにするA4
: 元のアミノ酸のみ許容(つまり変異させない)
confSpace = osprey.ConfSpace(strand)
ConfSpace
は、「全ての可能なアミノ酸とロタマーの組み合わせ空間」を定義します。- これが**設計空間(Design Space)**になります。
設計空間とは、タンパク質の特定の部位において、どのアミノ酸を使用し、その側鎖(サイドチェーン)がどのような立体構造(ロタマー)を取るかの全ての可能な組み合わせを指します。この空間を定義することで、OSPREYは最も安定した(エネルギーが低い)構造を探索することができます。
ffparams = osprey.ForcefieldParams()
- 分子力場(force field)のパラメータを取得します。
ecalc = osprey.EnergyCalculator(confSpace, ffparams)
EnergyCalculator
: 各配座のポテンシャルエネルギー(静電相互作用・van der Waalsなど)を計算。
confEcalc = osprey.ConfEnergyCalculator(confSpace, ecalc)
ConfEnergyCalculator
: 配座(conformation)ごとのエネルギー計算に特化したラッパー。
emat = osprey.EnergyMatrix(confEcalc)
- 全ての残基変異とロタマーの組み合わせに対するエネルギーマトリックスを構築。
- エネルギーマトリックスとは、「ある残基の組み合わせがどれだけ安定か」を数値で表したものです。
astar = osprey.AStarMPLP(emat, confSpace)
- A*探索アルゴリズムを使って、最もエネルギーが低い構造を探索します。
MPLP
は推論精度を上げるためのヒューリスティックな修正。
gmec = osprey.GMECFinder(astar, confEcalc).find()
GMECFinder
: Global Minimum Energy Conformation(最安定配座)を見つけます。find()
で計算を実行し、結果(最適な残基配列とロタマー)を取得します。
結果
以下のような結果が出てきます。
Calculating energy matrix with 133 entries
Progress: 100.0% ETA: 0 ns
Finished in 133.2 ms
Searching for min score conformation... (among 154 possibilities)
A* g: -30.7055, h: 0.0000, f: -30.7055, level: 2/ 2/ 2, expanded: 3, queued: 17, scored/sec:89786, time:233.33 us, heapMem:2.4% of 1.0 GiB, 37.0 MiB alloc, extMem:0 B
Found min score conformation in 283.4 ms
Computing energy of min score conf...
Found GMEC! (it's actually the min score conformation too!) Residue numbers A2 A3 A4 Residue types GLY GLU ILE Rotamer numbers L L3 L4 Residue Conf Ids 1 3 4 Energy -30.705504 Score -30.705504 (gap: 0.000000)
これは、最適なアミノ酸配列とそのロタマー配置(GMEC: Global Minimum Energy Conformation)を探索した結果です。
計算概要
- 133個のエネルギー項目(2-body or self-energy)を事前に計算。
- 配座(rotamer)間の相互作用や単独の構造安定性を表すエントリ数です。
Progress: 100.0% ETA: 0 ns
Finished in 133.2 ms
- エネルギーマトリックスの構築が完了。処理時間は約133ミリ秒と非常に高速です。
A*探索アルゴリズムによるGMEC探索
Searching for min score conformation... (among 154 possibilities)
- 定義された柔軟残基の全組み合わせ(ロタマー配置含む)で 154通りの候補から最小エネルギー配座を探索します。
A* g: -30.7055, h: 0.0000, f: -30.7055, level: 2/ 2/ 2, expanded: 3, queued: 17, scored/sec:89786, time:233.33 us
各記号の意味は以下の通り:
項目 | 意味 |
---|---|
g | これまでの経路の実エネルギー(計算済) |
h | 未探索部分の推定エネルギー(ヒューリスティック) |
f | 総合スコア(f = g + h) |
level | 何個の残基まで決定したか(ここでは3残基すべて) |
expanded | 実際に探索したノード数(=3) |
queued | 今後探索候補としてキューに残っている数 |
scored/sec | 1秒あたりのスコアリング数(高速) |
最適構造(GMEC)の決定
Found min score conformation in 283.4 ms
Computing energy of min score conf...
Found GMEC! (it's actually the min score conformation too!)
- 最も安定な構造(GMEC)が探索され、得られた構造がスコア上もエネルギー上も最小であることが確認されました。
GMECの詳細
Residue numbers A2 A3 A4
Residue types GLY GLU ILE
Rotamer numbers L L3 L4
Residue Conf Ids 1 3 4
Energy -30.705504
Score -30.705504 (gap: 0.000000)
項目 | 内容 |
---|---|
Residue numbers | 設計対象の残基(2番, 3番, 4番) |
Residue types | 最適と判断されたアミノ酸(GLY, GLU, ILE) |
Rotamer numbers | 各残基に割り当てられたロタマー名(L, L3, L4) |
Residue Conf Ids | 内部的なロタマーID |
Energy | 力場で評価された最小エネルギー(-30.71 kcal/mol) |
Score | 探索アルゴリズムが最適化した評価値(基本的にEnergyと同じ) |
gap | 他の構造とのエネルギー差(ここでは完全一致=0) |
🔍 解釈:
- A2 = GLY, A3 = GLU, A4 = ILE の組み合わせが最も安定(熱力学的に有利)な配列。
- ロタマー配置(L, L3, L4)も含めて、空間的な衝突やエネルギーが最小化されている。
- 結合部位や活性部位での変異探索において、候補配列の選定に非常に有効。
最後に
OSPREYは、他のタンパク質設計ツールと比べて、数学的に最適解を保証するアルゴリズム(DEEやA*探索)を採用し、側鎖や主鎖の柔軟性を考慮した精密な設計が可能です。また、PythonインターフェースやGPU対応により、使いやすさと計算速度が大幅に向上しています。ぜひ他のタンパク質デザインツールと合わせて、お使いください!