本文へスキップ
公式

材料研究入門スタック

Materials Project Python API で小規模な材料概要を取得し、識別子、出典、単位を保持して計算物性と実験根拠を区別します。

難易度: 中級 費用: 無料・有料混在 プライバシー: 設定に依存 ~30 分
セットアップ開始

できるようになること

  • 指定した Materials Project 材料を限定した列で取得。
  • 出典、物理単位、欠落値を保持。

構築するもの

範囲とアクセス

Python 3.11 と mp-api 0.46.5(要件 >=3.11)を使用します。Materials Project アカウントと現在の API キーが必要で、旧クライアントではなく mp_api.client.MPRester を使います。認証付き外部サービスへ接続し、完全なオフラインではありません。識別した材料概要と人の確認用 Prompt を提供し、全文献の自動検索や実験測定値の予測は行いません。

科学的解釈

参照材料は公式例のシリコン mp-149 です。バンドギャップは eV、凸包からのエネルギーは eV/atom です。計算方法とデータ更新に依存し、特定値や実験一致を保証しません。欠落値、日付、材料 ID を保持します。stable はデータベース分類で、実際の合成可能性を証明しません。

材料データ取得サービス

Materials Project API

構成リソース

Materials Project API

材料データ取得サービス · mp-api==0.46.5 / current MP API

私有 Materials Project API キーが必要。データと手法依存値は変化し得ます。

上流のライセンスとクライアント・サービスの利用条件を確認してください。

リソースを見る

互換性

クライアントOSアーキテクチャバージョン要件
Python macOS指定なし>= 3.11
Python Windows指定なし>= 3.11
Python Linux指定なし>= 3.11

セットアップとテスト

1. アカウントと Python を準備

全プラットフォーム

Python 3.11 を導入し、Materials Project のアカウント dashboard から自分の API キーを取得。現在の API へのアクセスを確認し、キーをソース、スクリーンショット、共有ログに含めません。

公式出典

期待される結果

利用可能なキーを私有保存。

2. 独立した Python 依存環境を導入

macOS

新しい作業ディレクトリで実行します。macOS/Linux 用です。Windows では別の手順を使用します。

python3.11 -m venv .venv
.venv/bin/python -m pip install mp-api==0.46.5
.venv/bin/python -m pip freeze
公式出典

期待される結果

導入が完了し、解決された版を記録する。

3. 独立した Python 依存環境を導入

Linux

新しい作業ディレクトリで実行します。macOS/Linux 用です。Windows では別の手順を使用します。

python3.11 -m venv .venv
.venv/bin/python -m pip install mp-api==0.46.5
.venv/bin/python -m pip freeze
公式出典

期待される結果

導入が完了し、解決された版を記録する。

4. Windows に Python 依存環境を導入

Windows

PowerShell で仮想環境のインタープリターを直接使用します。

py -3.11 -m venv .venv
.\.venv\Scripts\python.exe -m pip install mp-api==0.46.5
.\.venv\Scripts\python.exe -m pip freeze
公式出典

期待される結果

導入が完了し、解決された版を記録する。

5. macOS/Linux で私有キーを設定

macOS

この bash コマンドは入力を隠し、コマンド本文にキー値を残しません。同じ shell で検索し、その後に変数を消します。 zsh の場合は先に bash を起動し、その bash セッションで検索します。

read -r -s -p "Materials Project API key: " MP_API_KEY
export MP_API_KEY
公式出典

期待される結果

検索 shell に MP_API_KEY を設定し値は表示しない。

6. Linux で私有キーを設定

Linux

bash で実行し同じ shell で検索。 zsh の場合は先に bash を起動し、その bash セッションで検索します。

read -r -s -p "Materials Project API key: " MP_API_KEY
export MP_API_KEY
公式出典

期待される結果

環境変数を設定し表示しない。

7. Windows で私有キーを設定

Windows

PowerShell で実行します。キーはプロセス環境で使用されるため検索後に消去します。

$atlasMpCredential = Read-Host "Materials Project API key" -AsSecureString
$env:MP_API_KEY = [System.Net.NetworkCredential]::new("", $atlasMpCredential).Password
公式出典

期待される結果

検索プロセスが MP_API_KEY を読め、値は表示しない。

8. 小規模概要検索を保存

全プラットフォーム

materials_summary.py として保存。一つの指定材料を新規ファイルに保存し、キーは結果に記録しません。

"""Fetch a small, identified Materials Project summary using a private API key.

Sources: https://docs.materialsproject.org/downloading-data/using-the-api/getting-started
         https://docs.materialsproject.org/downloading-data/using-the-api/examples
Source-reviewed example; not executed.
"""
import argparse
import json
import os
from datetime import datetime, timezone
from importlib.metadata import version
from pathlib import Path

from mp_api.client import MPRester


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--material-id", default="mp-149")
    parser.add_argument("--output", type=Path, default=Path("materials-summary.json"))
    args = parser.parse_args()
    api_key = os.environ.get("MP_API_KEY", "").strip()
    if not api_key:
        parser.error("Set MP_API_KEY privately; no request was sent.")
    if args.output.exists():
        parser.error("Choose a new output path; existing output will not be overwritten.")
    try:
        with MPRester(api_key) as mpr:
            docs = mpr.materials.summary.search(
                material_ids=[args.material_id],
                fields=["material_id", "formula_pretty", "band_gap", "energy_above_hull", "is_stable"],
                num_chunks=1,
                chunk_size=1,
            )
    except Exception:
        # Avoid including credential-bearing request details in shared output.
        parser.exit(1, "Materials Project request failed. Check key/account, network, rate limits and installed client version privately.\n")
    payload = {
        "retrieved_at": datetime.now(timezone.utc).isoformat(),
        "mp_api_version": version("mp-api"),
        "requested_material_id": args.material_id,
        "records": [
            {
                "material_id": str(doc.material_id),
                "formula": doc.formula_pretty,
                "band_gap_eV": doc.band_gap,
                "energy_above_hull_eV_per_atom": doc.energy_above_hull,
                "is_stable": doc.is_stable,
                "source_url": "https://materialsproject.org/materials/" + str(doc.material_id),
            }
            for doc in docs
        ],
    }
    with args.output.open("x", encoding="utf-8") as target:
        json.dump(payload, target, ensure_ascii=False, indent=2)
        target.write("\n")
    print("Saved", len(payload["records"]), "record(s) to", args.output)


if __name__ == "__main__":
    main()
公式出典

期待される結果

.venv の隣にスクリプトを保存。

9. シリコン例を取得

全プラットフォーム

私有キー設定済みの shell で実行。Windows は ..venv\Scripts\python.exe を使用し、新規出力名を選択。

.venv/bin/python materials_summary.py --material-id mp-149 --output silicon-summary.json
公式出典

期待される結果

実 JSON が mp-149 と Si、取得日時、クライアント版を含み、欠落値は null を保持。数値は API に基づき、固定バンドギャップは要求しない。記録なしなら明示して現在のアクセスを調べ、データを作らない。

10. 材料の根拠を確認

全プラットフォーム

人による確認、または秘密のない取得データだけを任意アシスタントに渡します。API キーを含めません。

提供した mp-149 のシリコン概要を確認し、識別子、日時、バンドギャップ eV、凸包エネルギー eV/atom を保持してください。データベース計算・安定性分類と実験・合成の主張を区別し、null は取得不能として出典 URL を示してください。
公式出典

期待される結果

確認が取得データと出典に一致。

11. 検索後に私有キーを消去

Windows

bash は unset MP_API_KEY、PowerShell は下記コマンドを使用。

Remove-Item Env:MP_API_KEY
Remove-Variable atlasMpCredential
公式出典

期待される結果

一時 shell キーを消去。

トラブルシューティング

  • キー不足:実行する同じ端末で MP_API_KEY を設定。
  • 401/403:現在のアカウントキーと権限を私有確認し、対話に貼らない。
  • クライアント/schema:独立 mp-api 0.46.5 と現行 MPRester 文書を使用。
  • 接続・制限:要求数を減らし待機を挟んで再試行、保存済み結果を保持。
  • 記録なし:ID とデータベース版を確認。
  • 出力あり:新規パスを選択。
  • 文献とギャップ差:計算法を調べ、DFT と測定を同一視しない。
まだ動作しません

代替案

Materials Project サイトで同じ ID、または公式の直接 API を利用できます。文献比較は引用付きの独立確認として扱います。