alterlab-rdkit について
計算化学や創薬研究でRDKitを使うためのケモインフォマティクスガイダンススキルです。分子処理を細かく制御したい場合に向けて、入出力、解析、モデリング、可視化を扱います。
主な機能
- 01SMILES、MOL、SDF、PDBなどの構造入出力
- 02分子記述子の計算とフィンガープリント生成
- 03SMARTS部分構造検索と反応処理
- 042D・3D座標の生成と分子の可視化
活用シーン
- 01分子特性の計算と候補化合物のスクリーニング
- 02構造類似度による分子セットの検索
- 03SMARTSパターンによる化合物の絞り込み
- 04コンフォマー生成と分子構造の描画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-rdkitインストール後、Claude Code で/alterlab-rdkitを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonreferences/api_reference.mdcode_recipes.mddescriptors_reference.mdsmarts_patterns.mdscripts/molecular_properties.pysimilarity_search.pysubstructure_filter.py詳細
RDKit ケモインフォマティクスツールキット
概要
RDKit は、分子の解析と操作のための Python API を提供する、包括的なケモインフォマティクスライブラリです。このスキルでは、分子構造の読み込み/書き出し、記述子の計算、フィンガープリントの生成、部分構造検索、化学反応、2D/3D 座標の生成、分子の可視化について説明します。創薬、計算化学、ケモインフォマティクスの研究タスクにこのスキルを使用してください。
バージョン: uv pip install rdkit でインストールします(2026-09 時点の最新リリースは 2026.03.6 です。例では ≥ 2024.09 を想定しています)。2026.03 では、従来のフィンガープリントヘルパー(AllChem.GetMorganFingerprintAsBitVect、rdkit.Chem.AtomPairs.Pairs.*、Torsions.*)および Atom.GetImplicitValence() / GetExplicitValence() も引き続き動作しますが、DEPRECATION WARNING がログに出力されます。新しいコードでは、rdFingerprintGenerator API と atom.GetValence(Chem.ValenceType.IMPLICIT | EXPLICIT) を使用してください。
このスキルを使用する場面
分子を細かく制御する必要がある場合は、このスキルを使用してください。たとえば、カスタムのサニタイズ、特殊なフィンガープリントや記述子、反応の列挙、コンフォマーの生成、プログラムによる描画などです。よりシンプルなインターフェースを備えた標準的な高水準ワークフローには、RDKit のラッパーである datamol をおすすめします。
対象外
| シナリオ | 代わりに使用 |
|---|---|
| 最小限のコードで実行できる、標準的な pandas 対応のパイプライン(読み込み → 標準化 → 記述子 → クラスタリング) | alterlab-datamol |
| 分子セットを ML 特徴量行列や事前学習済み埋め込みに変換する | alterlab-molfeat |
| 化合物ライブラリの薬物類似性ルールセットや PAINS/構造アラートによるトリアージ | alterlab-medchem |
| 化合物名または ID から構造、特性、生物活性を調べる | alterlab-pubchem または alterlab-chembl |
| タンパク質–リガンドのドッキング/結合ポーズの予測 | alterlab-diffdock |
主な機能
RDKit は 12 の機能領域を提供します。以下では、それぞれについて最も一般的な呼び出し方法を 1 つ紹介します。すべての領域を網羅した、実行可能なレシピは references/code_recipes.md にあります。
1. 分子の入出力と作成
SMILES、MOL/SDF、MOL2、PDB、InChI 形式で分子を読み込み、書き出します。大容量ファイルや gzip 圧縮ファイルの処理には、ForwardSDMolSupplier や MultithreadedSDMolSupplier などの Supplier/Writer オブジェクトを使用します。
from rdkit import Chem
mol = Chem.MolFromSmiles('Cc1ccccc1') # returns Mol or None
smiles = Chem.MolToSmiles(mol) # canonical SMILES
すべての MolFrom* 関数は失敗時に None を返すため、使用前に必ず確認してください。分子はインポート時に自動でサニタイズされます。
2. 分子のサニタイズと検証
パース時には、価数チェック、芳香族性の認識、キラリティーの割り当てなど、13 ステップのサニタイズが実行されます。sanitize=False、SanitizeMol、部分的な sanitizeOps で制御でき、DetectChemistryProblems で失敗の原因を診断できます。
mol = Chem.MolFromSmiles('C1=CC=CC=C1', sanitize=False)
problems = Chem.DetectChemistryProblems(mol)
よくある失敗の原因には、価数の超過、不正な芳香環におけるケクレ化エラー、未割り当てのラジカルがあります。
3. 分子の解析と特性
原子や結合を反復処理し、環への所属(GetRingInfo、GetSymmSSSR)を調べ、立体化学(FindMolChiralCenters、AssignStereochemistryFrom3D、bond.GetStereo)を確認し、構造を分解できます(GetMolFrags、FragmentOnBonds、Murcko 骨格)。
for atom in mol.GetAtoms():
print(atom.GetSymbol(), atom.GetIdx(), atom.GetDegree())
4. 分子記述子と特性
個別の記述子(MolWt、MolLogP、TPSA、NumHDonors、NumHAcceptors、NumRotatableBonds)を計算するか、CalcMolDescriptors ですべてを一括計算できます。Lipinski の Rule-of-Five による薬物類似性チェックにも対応しています。
from rdkit.Chem import Descriptors
all_descriptors = Descriptors.CalcMolDescriptors(mol) # dict of every descriptor
使用可能な記述子の全一覧は、references/descriptors_reference.md に記載されています。
5. フィンガープリントと分子類似度
rdFingerprintGenerator を使って、RDKit トポロジカル、Morgan(ECFP 系)、MACCS、原子ペア、トポロジカルねじれ、Avalon の各フィンガープリントを生成します。Tanimoto/Dice/Cosine(および一括処理用の各バリエーション)で比較し、Butina でクラスタリングできます。
from rdkit.Chem import rdFingerprintGenerator
from rdkit import DataStructs
gen = rdFingerprintGenerator.GetMorganGenerator(radius=2, fpSize=2048)
sim = DataStructs.TanimotoSimilarity(gen.GetFingerprint(mol1), gen.GetFingerprint(mol2))
6. 部分構造検索とSMARTS
HasSubstructMatch、GetSubstructMatch、GetSubstructMatchesでSMARTSクエリを照合します。指定されていないクエリのプロパティはすべてに一致し、芳香族または荷電したクエリ原子は、脂肪族または非荷電の対象とは一致しないことに注意してください。
query = Chem.MolFromSmarts('C(=O)[OH]') # carboxylic acid
matches = mol.GetSubstructMatches(query)
官能基、環、ファーマコフォア、PAINSのSMARTSパターンを厳選したライブラリは、references/smarts_patterns.mdにあります。
7. 化学反応
変換を反応SMARTS(reactants >> products)として定義し、RunReactantsで適用します。差分フィンガープリントを使って反応の類似度を計算できます。アトムマッピングにより、変換の前後で原子の同一性が保たれます。
from rdkit.Chem import AllChem
rxn = AllChem.ReactionFromSmarts('[C:1]=[O:2]>>[C:1][O:2]')
products = rxn.RunReactants((mol,))
8. 2Dおよび3D座標の生成
2D描画座標(Compute2DCoords、テンプレートアライメント)と、ETKDGによる3Dコンフォマー(EmbedMolecule、EmbedMultipleConfs)を生成し、UFF/MMFFで最適化します。RMSDを使ってコンフォマーを整列・比較できます。
from rdkit.Chem import AllChem
AllChem.EmbedMolecule(mol, randomSeed=42)
AllChem.MMFFOptimizeMolecule(mol)
9. 分子の可視化
分子をPIL画像、ファイル、またはグリッド(MolToImage、MolToFile、MolsToGridImage)に描画し、部分構造をハイライト表示できます。MolDraw2DCairoで描画をカスタマイズし、Jupyterと連携して、フィンガープリントのビットを可視化できます。
from rdkit.Chem import Draw
img = Draw.MolsToGridImage([mol1, mol2], molsPerRow=2, subImgSize=(200, 200))
10. 分子の修飾
水素を追加・削除し(AddHs/RemoveHs)、芳香族性のケクレ化またはリセットを行い、部分構造を置換し(ReplaceSubstructs)、rdMolStandardize.Unchargerで電荷を中和します。
mol_h = Chem.AddHs(mol) # explicit hydrogens for 3D work or H-dependent properties
11. 分子ハッシュと標準化
rdMolHash.MolHashで標準形、骨格、位置異性体のハッシュを生成し、MLデータ拡張用のランダム化SMILESを生成します。
from rdkit.Chem import rdMolHash
scaffold_hash = rdMolHash.MolHash(mol, rdMolHash.HashFunction.MurckoScaffold)
12. ファーマコフォアと3D特徴量
BaseFeatures.fdefから特徴ファクトリーを構築し、GetFeaturesForMolでファーマコフォア特徴(ドナー、アクセプター、芳香族、疎水性)を抽出します。
from rdkit.Chem import ChemicalFeatures
features = factory.GetFeaturesForMol(mol) # each has GetFamily/GetType/GetAtomIds
よく使うワークフロー
再利用できるエンドツーエンドのレシピです。同じタスクを実行するスクリプトも scripts/(下記参照)にあります。
薬剤様性の分析
from rdkit import Chem
from rdkit.Chem import Descriptors
def analyze_druglikeness(smiles):
mol = Chem.MolFromSmiles(smiles)
if mol is None:
return None
# Calculate Lipinski descriptors
results = {
'MW': Descriptors.MolWt(mol),
'LogP': Descriptors.MolLogP(mol),
'HBD': Descriptors.NumHDonors(mol),
'HBA': Descriptors.NumHAcceptors(mol),
'TPSA': Descriptors.TPSA(mol),
'RotBonds': Descriptors.NumRotatableBonds(mol)
}
# Check Lipinski's Rule of Five
results['Lipinski'] = (
results['MW'] <= 500 and
results['LogP'] <= 5 and
results['HBD'] <= 5 and
results['HBA'] <= 10
)
return results
類似性スクリーニング
from rdkit import Chem
from rdkit.Chem import rdFingerprintGenerator
from rdkit import DataStructs
def similarity_screen(query_smiles, database_smiles, threshold=0.7):
mfpgen = rdFingerprintGenerator.GetMorganGenerator(radius=2, fpSize=2048)
query_mol = Chem.MolFromSmiles(query_smiles)
query_fp = mfpgen.GetFingerprint(query_mol)
hits = []
for idx, smiles in enumerate(database_smiles):
mol = Chem.MolFromSmiles(smiles)
if mol:
fp = mfpgen.GetFingerprint(mol)
sim = DataStructs.TanimotoSimilarity(query_fp, fp)
if sim >= threshold:
hits.append((idx, smiles, sim))
return sorted(hits, key=lambda x: x[2], reverse=True)
部分構造フィルタリング
from rdkit import Chem
def filter_by_substructure(smiles_list, pattern_smarts):
query = Chem.MolFromSmarts(pattern_smarts)
hits = []
for smiles in smiles_list:
mol = Chem.MolFromSmiles(smiles)
if mol and mol.HasSubstructMatch(query):
hits.append(smiles)
return hits
ベストプラクティス
エラー処理
分子を解析する際は、必ずNoneかどうかを確認してください。
mol = Chem.MolFromSmiles(smiles)
if mol is None:
print(f"Failed to parse: {smiles}")
continue
パフォーマンスの最適化
再解析する代わりに分子をpickle化してすばやく再読み込みし、フィンガープリントと類似度には一括処理を使用してください。
import pickle
with open('molecules.pkl', 'wb') as f:
pickle.dump(mols, f) # load side is much faster than reparsing SMILES/SDF
mfpgen = rdFingerprintGenerator.GetMorganGenerator(radius=2, fpSize=2048)
fps = mfpgen.GetFingerprints(mols, numThreads=4) # batched, multithreaded
similarities = DataStructs.BulkTanimotoSimilarity(fps[0], fps[1:])
スレッドセーフ
RDKitの操作は一般に、分子の入出力、座標生成、フィンガープリントと記述子、部分構造検索、反応、描画においてスレッドセーフです。**スレッドセーフではありません:**MolSupplierへの並行アクセス。同じサプライヤーオブジェクトを複数のスレッドで共有しないでください。
メモリ管理
大規模なデータセットでは、一度にすべて読み込まず、ストリーミング処理を使用してください。
# Avoid loading the entire file into memory
with open('large.sdf') as f:
suppl = Chem.ForwardSDMolSupplier(f)
for mol in suppl:
# Process one molecule at a time
pass
# Parallel processing
suppl = Chem.MultithreadedSDMolSupplier('large.sdf', numWriterThreads=4)
よくある問題
- **Noneの確認忘れ:**解析後は必ず分子が有効か確認してください
- **サニタイズの失敗:**デバッグには
DetectChemistryProblems()を使用してください - **水素の不足:**水素に依存するプロパティを計算する場合は
AddHs()を使用してください - **2Dと3Dの違い:**可視化や3D解析の前に、適切な座標を生成してください
- **SMARTSの照合ルール:**指定されていないプロパティはすべてに一致することに注意してください
- **MolSupplierのスレッドセーフ:**サプライヤーオブジェクトを複数のスレッドで共有しないでください
リソース
references/
code_recipes.md— 上記の12の機能領域すべてについて、実行可能なコードを掲載していますapi_reference.md— RDKitのモジュール、関数、クラスを機能別に整理した包括的な一覧ですdescriptors_reference.md— 利用可能な分子記述子の完全な一覧と説明ですsmarts_patterns.md— 官能基と構造特徴に関する一般的なSMARTSパターンです
特定のAPIの詳細、パラメーター情報、パターン例が必要な場合は、これらのリファレンスを読み込んでください。
scripts/
一般的な RDKit ワークフローのサンプルスクリプトです。
molecular_properties.py— 分子の包括的な物性と記述子を計算しますsimilarity_search.py— フィンガープリントに基づく類似性スクリーニングを実行しますsubstructure_filter.py— 部分構造パターンで分子をフィルタリングします
これらのスクリプトは直接実行することも、カスタムワークフローのテンプレートとして使用することもできます。
AlterLab Academic Skills スイートの一部です。