Qiskit入門ではsim.run(qc)で回路を実行しましたが、実は今のQiskitではこの書き方は実機には使えません。IBMの実機にアクセスするための公式な窓口は Qiskit Runtime というクラウドサービスで、回路を投げるには Sampler と Estimator という2つの「プリミティブ」を使う決まりになっています。この記事では、この2つのプリミティブの使い方を、手元で実行して確かめながら解説します。
この記事で分かること
- Qiskit Runtimeは、量子回路をIBMのクラウド経由で実機やシミュレータに投げて実行するためのサービスで、Sampler(測定結果の分布を得る)とEstimator(観測量の期待値を得る)という2種類のプリミティブを介してアクセスすること
- どちらも「PUB(Primitive Unified Bloc)」という(回路, 観測量, パラメータ値, 精度)のタプルを渡す形式で、1回の呼び出しに複数の回路やパラメータの組を一括して渡せること
- IBMの実機にアクセスする旧来のインターフェース(V1プリミティブや`backend.run()`の直接呼び出し)は2024年8月に廃止されており、現在はSamplerV2・EstimatorV2が標準であること
対象読者:Qiskitで回路のシミュレータ実行までは試したことがあり、次にIBMの実機やQiskit Runtimeのプリミティブを使ってみたいエンジニアの方
執筆:ゆるふわ量子編集部 最終更新日:2026年10月7日
なぜ「プリミティブ」が必要なのか
Qiskit入門で使ったAerSimulator().run(qc)は、回路を実行して測定結果の生カウントを返すだけのシンプルな方法でした。これでも手元のシミュレータでは十分ですが、IBMのクラウド経由で実機を使うとなると話が変わります。
- 実機はキュー待ちがあるので、何度も投げ直すのではなくまとめて投げたい
- 結果として欲しいのは「カウント」そのものより、観測量の期待値(VQEやQAOAで使う量)であることが多い
- 実機にはノイズが乗るので、誤り緩和の処理を挟みたい
この3つを一つのインターフェースでまとめて扱えるようにしたのが、Qiskit RuntimeのSamplerとEstimatorという2つのプリミティブです。
準備するもの
pip install qiskit qiskit-ibm-runtime
ローカルのシミュレータだけで試す分には、IBMのアカウントは不要です。実機で動かす場合は後述する無料のOpen Planに登録します。
Samplerで測定結果の分布を得る
Samplerは「回路を実行して、測定結果のビット列がどんな分布になるか」を返すプリミティブです。まずはローカルのシミュレータで試します。
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
sampler = StatevectorSampler()
job = sampler.run([(qc,)], shots=1000) # ← (回路,) のタプルのリストを渡す
result = job.result()
counts = result[0].data.c.get_counts()
print(counts)
実行すると {'00': 519, '11': 481} のような結果が返ります。Qiskit入門のsim.run(qc)と似た結果ですが、渡し方が変わっている点に注目してください。sampler.run([(qc,)], shots=1000)のように、「回路を含むタプル」のリストを渡します。このタプルが**PUB(Primitive Unified Bloc)**と呼ばれる単位で、1回のrun()で複数のPUBを同時に投げられます。
PUB(パブ)
Primitive Unified Blocの略。SamplerやEstimatorに渡す入力の基本単位で、(回路, 観測量, パラメータ値, 精度/shots)のようなタプルで表される(後ろの要素は省略可)。1回のrun()呼び出しに複数のPUBをリストで渡せるため、何パターンもの回路やパラメータをまとめて実機に投げ、キュー待ちの回数を減らせる。
Estimatorで期待値を一括計算する
Estimatorは「回路を実行して、指定した観測量の期待値を求める」プリミティブです。VQEやQAOAのような変分アルゴリズムで主に使われます。
from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit.primitives import StatevectorEstimator
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
obs = SparsePauliOp.from_list([("ZZ", 1.0)]) # Z⊗Zの期待値を知りたい
estimator = StatevectorEstimator()
job = estimator.run([(qc, obs)])
result = job.result()
print("期待値:", result[0].data.evs)
結果は 期待値: 0.9999999999999998 ――理論値どおり+1に収束します。ベル状態では0と1がもつれているため、Z⊗Zの期待値はぴったり1になります。
PUBにはパラメータ値のリストも一緒に渡せるので、「パラメータを何パターンも変えて、まとめて実機に投げる」こともできます。
from qiskit.circuit import Parameter
import numpy as np
theta = Parameter("theta")
qc = QuantumCircuit(1)
qc.ry(theta, 0)
obs = SparsePauliOp.from_list([("Z", 1.0)])
theta_values = np.linspace(0, np.pi, 5).reshape(-1, 1) # 5パターンのthetaを一括で
estimator = StatevectorEstimator()
job = estimator.run([(qc, obs, theta_values)])
result = job.result()
print(result[0].data.evs)
出力は [1. 0.707 0. -0.707 -1.] のように5つの期待値が一度に返ります。パラメータシフト則をQiskitで実装した記事で1点ずつ計算していた期待値の計算を、PUB1つにまとめて実機に投げられるのがEstimatorの強みです。
shotsとprecision
Samplerには測定回数を指定するshots、Estimatorには期待値の目標精度を指定するprecisionという引数があります(どちらもPUBの一部として渡すことも、run()の引数で全体に指定することもできます)。精度を上げるほど実機の実行時間(≒Open Planの無料枠の消費)が増える点は覚えておいてください。
実機で動かす
ここまではローカルのシミュレータでしたが、同じSampler/Estimatorのインターフェースのまま、IBMの実機に投げられます。
# イメージ(要IBM Cloudアカウント・APIキー設定)
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
service = QiskitRuntimeService()
backend = service.least_busy() # 空いている実機を選ぶ
isa_qc = ... # [トランスパイルで実機向けに変換](/learn/noise-transpile-qiskit)した回路
sampler = Sampler(backend)
job = sampler.run([(isa_qc,)], shots=1000)
StatevectorSamplerをSampler(backend)に変えるだけで、コードの形はほとんど同じまま実機に投げられるのがポイントです。ただし実機に渡す回路は、その実機が実行できるゲート集合にあらかじめトランスパイルしておく必要があります(上のコードのisa_qc)。
実機に登録するには
IBM Quantumは2025年7月に旧プラットフォーム(quantum.ibm.com)を終了し、IBM Cloudアカウントで使う新しいプラットフォーム(quantum.cloud.ibm.com)に一本化されました。無料のOpen Planでも実機にアクセスできますが、無料枠は限られているため、まずはローカルのシミュレータでコードを固めてから実機に投げるのがおすすめです。
旧インターフェース(廃止済み)
- backend.run(qc) / V1プリミティブ
- 1回のPUBに1回路・1パラメータ組だけ
- 2024年8月のqiskit-ibm-runtime 0.23でサポート終了
Qiskit Runtime V2プリミティブ
- SamplerV2 / EstimatorV2
- 1回のrun()に複数PUB・複数パラメータ組をまとめて渡せる
- 誤り緩和の強さを`resilience_level`で細かく調整できる
まとめ
- Qiskit Runtimeは、量子回路をクラウド経由でIBMの実機・シミュレータに投げるためのサービスで、SamplerとEstimatorという2つのプリミティブを使う
- Samplerは測定結果の分布、Estimatorは観測量の期待値を返す。どちらも
(回路, 観測量, パラメータ値, shots/precision)という「PUB」のリストを渡す形式 - PUBをまとめて渡せるので、何パターンものパラメータや回路を一括で実機に投げ、キュー待ちの回数を減らせる
- 旧来の
backend.run()やV1プリミティブは2024年8月に廃止済み。これからQiskitを学ぶなら、最初からV2プリミティブの書き方で覚えるのが近道
もう少し詳しく(背景)
Qiskit Runtimeは、回路の送信・実行・結果の取得をクラウド側で高速に繰り返すためのIBMのサービスで、2021年に発表されました。Sampler/EstimatorというプリミティブのインターフェースはQiskit 0.x系の時代から存在しましたが、2024年にBaseSamplerV2・BaseEstimatorV2という新しい基底クラスに置き換えられ、V1系のプリミティブはqiskit-ibm-runtime 0.23(2024年8月15日)でサポートが終了しています1。V2で追加された代表的な機能が、1つの回路に対して複数の観測量・パラメータ値をまとめて指定できる「PUBの一括指定」と、Estimatorのresilience_levelで誤り緩和の手法を細かく選べる点です1。
実機へのアクセス経路も2025年に変わりました。従来の IBM Quantum Platform(quantum.ibm.com、通称Classic)は2025年7月1日に終了し、IBM Cloudアカウントで利用する新プラットフォーム(quantum.cloud.ibm.com)に一本化されています2。無料のOpen Planでも実機にアクセスできますが、利用できる量子時間には上限があるため、どのプランでどれだけ使えるかは登録前に公式のプラン一覧を確認するのが確実です3。
次に読むなら
- Qiskitのノイズモデルとトランスパイル — 実機に回路を投げる前に必要な「トランスパイル」の中身を手を動かして理解したい方に
- VQE入門|Qiskitで変分量子固有値ソルバーを実装 — Estimatorで期待値を求める処理を、実際の変分アルゴリズムに応用する例を見たい方に
- パラメータシフト則をQiskitで実装 — 今回PUBでまとめて渡した「パラメータを変えた期待値の計算」を、1点ずつ手で実装して理解を深めたい方に
- 誤り緩和(エラーミティゲーション)とは? — Estimatorの
resilience_levelが内部で使っている誤り緩和の手法を知りたい方に
参考資料・出典
- Migrate to the Qiskit Runtime V2 primitives | IBM Quantum DocumentationSamplerV2・EstimatorV2への移行ガイド。PUBの形式やV1との違いを説明する公式ページ(本文は開けず検索結果の要約で確認)
- Migrate to the upgraded IBM Quantum Platform旧プラットフォーム(Classic)から新プラットフォーム(quantum.cloud.ibm.com)への移行ガイド
- Plans overview | IBM Quantum DocumentationOpen Planなど利用プランの一覧ページ。最新の無料枠はここで確認できる
ゆるふわポータルでは、一次情報・公的資料にもとづき、専門用語をできるだけやさしく翻訳することを心がけています。内容に誤りや古い情報がある場合は、お問い合わせからご連絡ください。
執筆:ゆるふわ量子編集部 最終更新日:2026年10月7日
Footnotes
-
IBM Quantum, "Migrate to the Qiskit Runtime V2 primitives"(公式移行ガイド)。V1プリミティブは qiskit-ibm-runtime 0.23(2024年8月15日リリース)でサポートが終了し、PUB形式への移行が案内されている。本記事ではこのガイドの要約を検索結果から確認し、ページ本文そのものは開けなかったため、数値は複数の検索結果が一致したものに限定して掲載している。 ↩ ↩2
-
IBM Quantum, 旧プラットフォーム(quantum.ibm.com、Classic)に関する終了告知・移行ガイド。終了日の2025年7月1日は複数の公式ドキュメントページ(announcements / migration-guides)で一致していたが、いずれも検索結果の要約からの確認であり、ページ本文は直接は確認できていない。 ↩
-
IBM Quantum, "Plans overview"(公式プラン一覧ページ)。Open Planの無料枠については、ページ本文を直接開けなかったため本記事では具体的な分数を本文に記載していない。最新の無料枠は登録前に公式ページで確認してほしい。 ↩
