alterlab-zinc-db について
alterlab-zinc-dbは、化学・創薬研究向けのZINC検索スキルで、購入可能な化合物や分子ドッキング用構造を調べられます。コマンドラインスクリプトとCartBlanche APIの手順を備え、SMILES API検索の既知の問題も記載しています。
主な機能
- 01ZINC IDによる化合物検索
- 02サプライヤーコードでのカタログ検索
- 03化合物セットのランダム抽出
- 04ドッキング用3D構造の取得
- 05スクリプトによる非同期検索
活用シーン
- 01バーチャルスクリーニング用ライブラリの準備
- 02サプライヤー別の化合物入手可能性確認
- 03化合物のドッキング構造取得
- 04スクリーニング基準用化合物の抽出
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-zinc-dbインストール後、Claude Code で/alterlab-zinc-dbを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonreferences/api_reference.mdscripts/query_zinc.py詳細
ZINC Database
概要
ZINC は、UCSF が管理する、購入可能な 2 億 3,000 万件以上の化合物を収録した、無料でアクセスできるリポジトリです。ZINC ID または SMILES で検索したり、類似性検索を実行したり、ドッキング用の 3D 対応構造をダウンロードしたり、バーチャルスクリーニングや創薬に向けて類似化合物を見つけたりできます。
スクリプト
scripts/query_zinc.py — form-encoded POST(標準ライブラリのみ、JSON を標準出力)で ZINC22 CartBlanche API にクエリを送信します。
python scripts/query_zinc.py id ZINC000019632618 --wait # ZINC-ID lookup, rows as JSON
python scripts/query_zinc.py random --count 100 --subset lead-like # returns a task id
python scripts/query_zinc.py result <task-id> # fetch that task's rows later
CartBlanche の検索はすべて非同期です。 各呼び出しは JSON タスクハンドル({"task": "<uuid>"})を返します。GET https://cartblanche22.docking.org/search/result/<task> をポーリングすると、ジョブの実行中は {"status": "PENDING", "progress": ...} が、完了時は {"status": "SUCCESS", "result": {...}} が返されます。結果の行はソース(zinc22、zinc20)ごとにまとめられ、一致しなかったクエリは missing / zinc22_missing に含まれます(--wait を指定するとポーリングします)。ID 検索は数秒で完了しますが、ランダムサンプルでは PENDING の状態が数分続く場合があります。
既知の問題(2026-09-23 確認済み): smiles.txt のジョブはすぐに完了しますが、"zinc22_missing": [""] が返されます。SMILES をインラインで送信した場合、フォームのアップロードとして送信した場合、ファイルとして送信した場合のいずれも、サーバーはクエリを受け取りません。修正されるまでは、CartBlanche22 の Web UI、SmallWorld(https://sw.docking.org、ZINC20/ZINC22 のビルドをインデックス化しています)、または Arthor(https://arthor.docking.org)で類似性検索を実行し、「類似化合物が見つからなかった」と報告するのではなく、その旨を伝えてください。
このスキルを使用する場面
以下の場合にこのスキルを使用してください。
- バーチャルスクリーニング:分子ドッキング研究に使用する化合物を探す
- リード化合物の探索:医薬品開発向けに市販されている化合物を特定する
- 構造検索:SMILES による類似化合物検索または類縁体検索を行う
- 化合物の取得:ZINC ID またはサプライヤーコードで分子を検索する
- 化学空間の探索:購入可能な化合物の多様性を調べる
- ドッキング研究:3D 対応の分子構造にアクセスする
- 類縁体検索:構造類似性に基づいて類似化合物を見つける
- サプライヤーへの問い合わせ:特定の化学品ベンダーが取り扱う化合物を特定する
- ランダムサンプリング:スクリーニング用のランダムな化合物セットを取得する
使用しない場面
| 状況 | 代わりに使用 |
|---|---|
| 既知の分子の化合物特性、同義語、バイオアッセイを調べる | alterlab-pubchem |
| 標的に対する実測の効力(IC50/Ki)を調べる | alterlab-chembl |
| タンパク質ポケットにリガンドをドッキングする | alterlab-diffdock |
| 記述子、フィルター、フィンガープリントをローカルで計算する | alterlab-rdkit |
| ライブラリに対してメディシナルケミストリーのフィルター(PAINS、経験則)を適用する | alterlab-medchem |
データベースのバージョン
ZINC は複数のバージョンを経て進化してきました。
- ZINC22(現行):購入可能な化合物を 2 億 3,000 万件以上、オンデマンド合成可能な化合物を数十億件規模で収録する、最大のバージョン
- ZINC20:現在も管理されており、リード様および薬剤様化合物に重点を置いています
- ZINC15:前身のバージョンです。旧版ですが、現在もドキュメントが残っています
このスキルでは主に、最も新しく、最も包括的なバージョンである ZINC22 を扱います。
アクセス方法
Web インターフェース
主なアクセスポイント:https://cartblanche22.docking.org/(zinc22.docking.org からここにリダイレクトされます) 従来の ZINC20/ZINC15 ページ(zinc.docking.org、zinc20.docking.org、zinc15.docking.org)は現在、 スクリプトからのリクエストに CAPTCHA へのリダイレクトを返すため、対話操作でのみ使用してください。
API アクセス
すべての ZINC22 検索は、CartBlanche22 API を介してプログラムから実行できます。
ベース URL:https://cartblanche22.docking.org/
検索は form-encoded POST リクエスト(scripts/query_zinc.py ヘルパーが使用します)、または curl -F によるフォームフィールドのアップロードで送信します。エンドポイントはインライン値または @file によるアップロードのいずれかを受け付けます。また、検索はすべて JSON タスクハンドル({"task": "<uuid>"})を返し、結果はその後 Web UI に表示されます。必要な列は output_fields フォームフィールドで指定してください。
以前の「コロン URL」形式(
/substances.txt:zinc_id=...)は、現在の CartBlanche22 サービスでは動作しません。以下の例のようにフォームフィールドを使用してください。
主な機能
1. ZINC ID による検索
ZINC 識別子を使って、特定の化合物を取得します。
ウェブインターフェース:https://cartblanche22.docking.org/search/zincid
API エンドポイント(フォームフィールドは複数形の zinc_ids です。単数形の zinc_id を指定すると HTTP 400 が返されます):
# Inline list of IDs
curl -X GET "https://cartblanche22.docking.org/substances.txt" \
-F zinc_ids="ZINC000019632618,ZINC000000000001" \
-F output_fields="zinc_id,smiles,catalogs"
# Or upload a file of IDs (one per line)
curl -X GET "https://cartblanche22.docking.org/substances.txt" \
-F zinc_ids=@zinc_ids.txt \
-F output_fields="zinc_id,smiles,tranche"
どちらもタスクハンドルを返します。表示された UI のタスク URL を開くと、行を確認できます。
レスポンスフィールド:zinc_id、smiles、sub_id、supplier_code、catalogs、tranche(H カウント、LogP、MW、フェーズを含む)
2. SMILES による検索
SMILES 表記を使って化学構造から化合物を検索します。類似化合物を検索するための距離パラメーターも任意で指定できます。
ウェブインターフェース:https://cartblanche22.docking.org/search/smiles
API エンドポイント:
curl -X GET "https://cartblanche22.docking.org/smiles.txt" \
-F smiles="c1ccccc1" -F dist=3 -F adist=3 \
-F output_fields="zinc_id,smiles,tranche"
パラメーター(それぞれ -F フォームフィールドとして渡します):
smiles:検索する SMILES 文字列(直接指定するか、複数のクエリをまとめて検索する場合は@fileを指定)dist:タニモト距離のしきい値(デフォルト:完全一致の 0)adist:より広範に検索するための匿名(グラフトポロジー)距離(デフォルト:0)output_fields:取得するフィールドをカンマ区切りで指定
例 - 完全一致(dist/adist のデフォルトは 0):
curl -X GET "https://cartblanche22.docking.org/smiles.txt" -F smiles="c1ccccc1"
3. サプライヤーコードによる検索
特定の化学サプライヤーの化合物を検索したり、特定のカタログに掲載されているすべての分子を取得したりできます。
ウェブインターフェース:https://cartblanche22.docking.org/search/catitems
API エンドポイント(フォームフィールドは supplier_codes です):
curl -X GET "https://cartblanche22.docking.org/catitems.txt" \
-F supplier_codes="SUPPLIER-CODE-123" \
-F output_fields="zinc_id,smiles,supplier_code,catalogs"
ユースケース:
- 特定のベンダーから化合物を入手できるか確認する
- カタログに掲載されているすべての化合物を取得する
- サプライヤーコードを ZINC ID と照合する
4. ランダムな化合物のサンプリング
スクリーニングやベンチマーク用に、ランダムな化合物のセットを生成します。
ウェブインターフェース:https://cartblanche22.docking.org/search/random
API エンドポイント:
curl "https://cartblanche22.docking.org/substance/random.txt" -F count=100
パラメーター(それぞれ -F フォームフィールドとして渡します):
count:取得するランダムな化合物の数(デフォルト:100)subset:サブセットによる絞り込み(例:'lead-like'、'drug-like'、'fragment')output_fields:返されるデータフィールドをカスタマイズ
例 - ランダムなリードライク分子:
curl "https://cartblanche22.docking.org/substance/random.txt" \
-F count=1000 -F subset="lead-like" -F output_fields="zinc_id,smiles,tranche"
一般的なワークフロー
ワークフロー 1:ドッキングライブラリの準備
-
ターゲットの特性や目的のケミカルスペースに基づいて、検索条件を定義します。
-
適切な方法で検索を実行します:
# Example: random drug-like compounds; returns a task handle for the web UI python scripts/query_zinc.py random --count 10000 --subset drug-like \ --fields zinc_id,smiles,tranche -
結果の行を取得して解析し(
python scripts/query_zinc.py result <task>を実行する、UI のタスクビューからエクスポートする、またはバルクリポジトリからトランシェファイルを取得する)、DataFrame に変換してトランシェの特性で絞り込みます:import pandas as pd df = pd.read_csv('docking_library.tsv', sep='\t') # Tranche format: H##P###M###-phase # H = H-bond donors, P = LogP*10, M = MW -
ファイルリポジトリから、ドッキング用の3D 構造をダウンロードします(下記参照)。
ワークフロー 2:ヒット化合物の類似化合物を検索
-
ヒット化合物のSMILES を取得します:
hit_smiles = "CC(C)Cc1ccc(cc1)C(C)C(=O)O" # Example: Ibuprofen -
距離のしきい値を指定して類似性検索を実行します。上記の
smiles.txtAPI の問題が解消されるまでは、CartBlanche22 UI または SmallWorld(https://sw.docking.org)を使用してヒットをエクスポートしてください。問題解消後は、次のスクリプト形式を使用します:python scripts/query_zinc.py smiles "CC(C)Cc1ccc(cc1)C(C)C(=O)O" \ --dist 5 --fields zinc_id,smiles,catalogs --wait -
結果を分析して、購入可能な類似化合物を特定します(タスクの行をエクスポートした後):
import pandas as pd analogs = pd.read_csv('analogs.tsv', sep='\t') print(f"Found {len(analogs)} analogs") print(analogs[['zinc_id', 'smiles', 'catalogs']].head(10)) -
最も有望な類似化合物の3D 構造を取得します。
ワークフロー 3:化合物の一括取得
-
文献、データベース、または以前のスクリーニングから、ZINC ID のリストをまとめます:
zinc_ids = [ "ZINC000000000001", "ZINC000000000002", "ZINC000000000003" ] zinc_ids_str = ",".join(zinc_ids) -
ZINC22 API にクエリを送信します(複数形の
zinc_idsを使って、1 回のバッチリクエストで実行します):curl -X GET "https://cartblanche22.docking.org/substances.txt" \ -F zinc_ids="ZINC000000000001,ZINC000000000002" \ -F output_fields="zinc_id,smiles,supplier_code,catalogs" -
下流の解析や購入に向けて、結果を処理します。
ワークフロー 4:ケミカルスペースのサンプリング
-
スクリーニングの目的に基づいて、サブセットのパラメーターを選択します:
- フラグメント:MW < 250。フラグメントベースの創薬に適しています
- リードライク:MW 250-350、LogP ≤ 3.5
- ドラッグライク:MW 350-500、リピンスキーのルール・オブ・ファイブに準拠
-
ランダムサンプルを生成します:
python scripts/query_zinc.py random --count 5000 --subset lead-like \ --fields zinc_id,smiles,tranche -
化学的多様性を分析し、バーチャルスクリーニングに備えます
出力フィールド
output_fields パラメーターを使用して、API のレスポンスをカスタマイズします。
利用可能なフィールド:
zinc_id:ZINC 識別子smiles:SMILES 文字列表現sub_id:内部物質 IDsupplier_code:ベンダーのカタログ番号catalogs:この化合物を取り扱うサプライヤーの一覧tranche:エンコードされた分子特性(水素数、LogP、MW、反応性フェーズ)
例:
curl -X GET "https://cartblanche22.docking.org/substances.txt" \
-F zinc_ids="ZINC000000000001" \
-F output_fields="zinc_id,smiles,catalogs,tranche"
トランシェシステム
ZINC は、分子特性に基づいて化合物を「トランシェ」に分類します。
形式:H##P###M###-phase
- H##:水素結合ドナーの数(00~99)
- P###:LogP × 10(例:P035 = LogP 3.5)
- M###:ダルトン単位の分子量(例:M400 = 400 Da)
- phase:反応性の分類
トランシェの例:H05P035M400-0
- 水素結合ドナー 5 個
- LogP = 3.5
- MW = 400 Da
- 反応性フェーズ 0
トランシェデータを使用して、薬剤様性の基準で化合物を絞り込みます。
3D 構造のダウンロード
分子ドッキング用の 3D 構造は、ファイルリポジトリから入手できます。
ファイルリポジトリ:https://files.docking.org/zinc22/
構造はトランシェごとに整理されており、複数の形式で利用できます。
- MOL2:3D 座標を含む複数分子形式
- SDF:構造データファイル形式
- DB2.GZ:DOCK 用の圧縮データベース形式
ダウンロード手順と一括アクセス方法については、https://wiki.docking.org の ZINC ドキュメントを参照してください。
Python との連携
検索の送信
URL を手作業で組み立てるのではなく、付属の scripts/query_zinc.py(標準ライブラリのみ)を使用します。
正しいフォームエンコード済み POST を送信し、JSON のタスクハンドルを返します。
import json, subprocess
def submit(*args):
"""Run query_zinc.py and return the parsed JSON (task handle or rows)."""
out = subprocess.run(
["python", "scripts/query_zinc.py", *args],
capture_output=True, text=True, check=True,
).stdout
return json.loads(out)
state = submit("id", "ZINC000019632618", "--fields", "zinc_id,smiles,catalogs", "--wait")
rows = state["result"].get("zinc22") or state["result"].get("zinc20") or []
トランシェコードの解析
結果の行(UI からエクスポートするか、ファイルリポジトリから読み込んだ tranche 列)を取得したら、各コードをデコードします。LogP の部分は負の値(P-005)になる場合があるため、正負の符号を許容する正規表現を使用します。
import re
def parse_tranche(tranche_str):
"""Parse a ZINC tranche code, e.g. 'H05P035M400-0'."""
match = re.match(r"H(\d+)P(-?\d+)M(\d+)-(\d+)", tranche_str)
if not match:
return None
return {
"h_donors": int(match.group(1)),
"logp": int(match.group(2)) / 10.0,
"mw": int(match.group(3)),
"phase": int(match.group(4)),
}
# df["tranche_props"] = df["tranche"].apply(parse_tranche)
ベストプラクティス
クエリの最適化
- 具体的な条件から開始する:類似性検索に広げる前に、完全一致検索から始めます
- 適切な距離パラメーターを使用する:近い類似体には小さい dist 値(1~3)、多様な類似体には大きい値(5~10)を使用します
- 出力フィールドを制限する:必要なフィールドだけを要求して、データ転送量を削減します
- クエリを一括処理する:可能な場合は、複数の ZINC ID を 1 回の API 呼び出しにまとめます
パフォーマンスに関する考慮事項
- レート制限:サーバーのリソースに配慮し、連続して短時間にリクエストを送信しないでください
- キャッシュ:頻繁にアクセスする化合物をローカルに保存します
- 並列ダウンロード:3D 構造をダウンロードする際は、ファイルリポジトリに対して並列で wget または aria2c を使用します
- サブセットによる絞り込み:リード様、薬剤様、またはフラグメントのサブセットを使用して、検索対象を減らします
データ品質
- 入手可能性を確認する:サプライヤーのカタログは変更されるため、大量注文の前に化合物の入手可能性を確認します
- 立体化学を確認する:SMILES では立体化学が完全に指定されていない場合があるため、3D 構造を確認します
- 構造を検証する:ケモインフォマティクスツール(RDKit、OpenBabel)を使用して、構造の妥当性を確認します
- 相互参照する:可能な場合は、他のデータベース(PubChem、ChEMBL)と照合します
リソース
references/api_reference.md
以下を含む包括的なドキュメントです。
- API エンドポイントの完全なリファレンス
- URL 構文とパラメーターの仕様
- 高度なクエリパターンと例
- ファイルリポジトリの構成とアクセス方法
- 一括ダウンロード方法
- エラー処理とトラブルシューティング
- 分子ドッキングソフトウェアとの連携
詳細な技術情報と高度な使用パターンについては、このドキュメントを参照してください。
重要な免責事項
データの信頼性
ZINC は明確に次のように述べています。「いかなる目的であっても、分子の品質を保証せず、このデータベースの使用から生じるエラーについて一切責任を負いません。」
- 化合物の入手可能性は予告なく変更される場合があります
- 構造表現に誤りが含まれる場合があります
- サプライヤー情報は個別に確認してください
- 実験を行う前に適切な検証を実施してください
適切な使用
- ZINC は創薬における学術研究および研究目的での使用を想定しています
- 商用利用に関するライセンス条件を確認してください
- 特許取得済み化合物を扱う際は、知的財産権を尊重してください
- 化合物の入手については、所属機関のガイドラインに従ってください
その他のリソース
- CartBlanche22 Interface: https://cartblanche22.docking.org/
- SmallWorld / Arthor similarity search: https://sw.docking.org, https://arthor.docking.org
- ZINC Wiki: https://wiki.docking.org/
- File Repository: https://files.docking.org/zinc22/
- GitHub: https://github.com/docking-org/
- 主要な論文: Tingle et al., J. Chem. Inf. Model. 2023(ZINC22);Irwin et al., J. Chem. Inf. Model. 2020(ZINC20);Sterling & Irwin, J. Chem. Inf. Model. 2015(ZINC15)
引用
論文で ZINC を使用する際は、該当するバージョンを引用してください。
ZINC22: Tingle, B. I.; Tang, K. G.; Castanon, M.; Gutierrez, J. J.; Khurelbaatar, M.; Dandarchuluun, C.; Moroz, Y. S.; Irwin, J. J. "ZINC-22─A Free Multi-Billion-Scale Database of Tangible Compounds for Ligand Discovery." Journal of Chemical Information and Modeling 2023, 63(4), 1166–1176. DOI: 10.1021/acs.jcim.2c01253.
ZINC20: Irwin, J. J.; Tang, K. G.; Young, J.; et al. "ZINC20—A Free Ultralarge-Scale Chemical Database for Ligand Discovery." Journal of Chemical Information and Modeling 2020, 60(12), 6065–6073. DOI: 10.1021/acs.jcim.0c00675.
ZINC15: Sterling, T.; Irwin, J. J. "ZINC 15 – Ligand Discovery for Everyone." Journal of Chemical Information and Modeling 2015, 55, 2324–2337. DOI: 10.1021/acs.jcim.5b00559.