Qiskit(キスキット)は、IBMが開発を主導するオープンソースの量子計算SDKです。量子回路をPythonで組み、手元のシミュレータかIBMの量子コンピュータ(QPU)で実行するまでを同じ系統のライブラリで扱えます。2026年9月28日時点の最新版は2.5.2(2026年8月13日公開)で、Python 3.10以上が必要です(PyPIのqiskitページ)。
この記事では、インストールからBell状態の回路を動かすまでを実行結果つきで示します。あわせて、ネット上に残る旧版のコード(execute 関数や IBMQ)が今は動かない理由と書き換え方、Qiskit Textbookの後継教材も整理します。手元で動くコード例は qiskit 2.5.2・qiskit-aer 0.17.2・qiskit-ibm-runtime 0.50.0 の組み合わせで実行を確認しています(実機へのジョブ送信は未検証)。
まとめ:Qiskitの要点(2026年9月時点)
- Qiskitは量子回路を作って実行するPythonのSDKで、ライセンスはApache-2.0(無料)
- 最新版は2.5.2。
pip install qiskitで入り、Python 3.10以上が必要 - 理想状態のシミュレーションは本体の
StatevectorSampler、ノイズを入れるなら qiskit-aer - 実機は qiskit-ibm-runtime 経由。無料のOpen Planは28日間のローリング枠で最大10分のQPU時間
execute()とIBMQは1.0で削除済み。これらを使う旧来の解説のコードはそのままでは動かない- Qiskit TextbookはIBM Quantum Learningに置き換えられ、GitHubのソースは2024年1月18日にアーカイブ済み
Qiskitのパッケージ構成:本体・Aer・Runtimeの役割分担
IBMの公式ページによると、Qiskitの最初のコミットは2017年です。現在pipで入れるのは次の3パッケージです。量子回路の作成と最適化(トランスパイル)は本体が担い、シミュレータと実機接続は別パッケージに分かれています。
| パッケージ | 役割 | 最新版(公開日) | Python |
|---|---|---|---|
| qiskit | 回路作成・トランスパイル・参照実装のプリミティブ | 2.5.2(2026-08-13) | 3.10以上 |
| qiskit-aer | 高速シミュレータ・ノイズモデル | 0.17.2(2025-09-17) | 3.7以上(表記上) |
| qiskit-ibm-runtime | IBM Quantum Platformでの実行 | 0.50.0(2026-09-24) | 3.10以上 |
3つともライセンスはApache-2.0です。SDKの利用に費用はかからず、費用が発生しうるのはIBMの実機を有料プランで使う場合だけです。
旧コンポーネント名 Terra・Aer・Ignis・Aqua の現在
古い解説やWikipedia日本語版では、Qiskitを「Terra・Aer・Ignis・Aqua の4要素」で説明しています。この区分は今のQiskitには当てはまりません。
- Terra:本体 qiskit に一本化。PyPIの qiskit-terra は1.0以降に更新されず、
qiskitが完全に置き換えている - Aer:qiskit-aer として独立パッケージのまま存続
- Aqua:2021年4月2日の0.9.0で非推奨化。アプリケーション機能は分野別のリポジトリへ、中核のアルゴリズムと演算子は当時の qiskit-terra へ移され、リポジトリはアーカイブ済み
- Ignis:0.7.0で非推奨化し、後継は Qiskit Experiments。リポジトリはアーカイブ済み
pip install qiskit-terra が書かれた記事は1.0より前の版が前提です(qiskit-terraの最終版は2024年9月公開の0.46.3)。import qiskit.aqua が出てくる記事は、2021年に非推奨となったAquaを前提にしています。
Qiskitのインストール手順:Python 3.10以上と仮想環境
qiskit 2.5.2はPython 3.10以上を要求します。macOS標準の /usr/bin/python3 は3.9系のことがあり、その場合は新しいPythonを用意してから仮想環境を作ります。複数バージョンの切り替えは pyenvでPythonのバージョンを切り替える手順|shimの仕組みとビルド失敗の対処 が参考になります。
python3 --version # 3.10以上であることを確認
python3 -m venv .venv
source .venv/bin/activate # macOS・Linux
# Windowsのコマンドプロンプトは .venv\Scripts\activate
# WindowsのPowerShellは .venv\Scripts\Activate.ps1
pip install qiskit qiskit-aer qiskit-ibm-runtime
# 本記事の実行結果を再現する場合は版を固定する
# pip install qiskit==2.5.2 qiskit-aer==0.17.2 qiskit-ibm-runtime==0.50.0
python -c "import qiskit; print(qiskit.__version__)"
# 2.5.2
回路図をMatplotlibで描く場合は pip install "qiskit[visualization]" で描画用の依存(matplotlib・pylatexenc など)もまとめて入ります。Anaconda環境で入れる場合の注意は pipとcondaの違いと使い分け|Anaconda・Miniconda・商用ライセンスまで解説 にまとめています。
インストール済みの版が古いと、この後のコードで ImportError になります。1.0より前(0.x系)の環境を上書きで更新すると、残った qiskit-terra と混ざって import qiskit が失敗することがあるため、公式の移行ガイドは新しい仮想環境を作って入れ直す方法を案内しています。古い環境は残したまま、上の手順で別の仮想環境を用意してください。
QuantumCircuitで最初の量子回路:Bell状態の作成と測定
2量子ビットをもつれさせたBell状態を作り、1,000回測定します。実機やAerを使わず、本体に入っている StatevectorSampler だけで動きます。
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
qc = QuantumCircuit(2)
qc.h(0) # 量子ビット0を重ね合わせにする
qc.cx(0, 1) # 0を制御、1を標的にしたCNOT
qc.measure_all()
print(qc.draw())
sampler = StatevectorSampler(seed=42)
result = sampler.run([qc], shots=1000).result()
print(result[0].data.meas.get_counts())
# {'11': 497, '00': 503}
結果は 00 と 11 だけに分かれ、01 や 10 は出ません。この回路が作るのはBell状態と呼ばれる代表的なもつれ状態ですが、同じ測定基底での分布だけなら古典的な相関でも再現できるため、この結果だけでもつれを証明したことにはなりません。measure_all() は測定結果を meas という名前の古典レジスタに入れるので、結果は data.meas から取り出します。run() に回路をリストで渡すのは、Qiskit 2.xのプリミティブが複数の回路(PUB)をまとめて受け取る設計だからです。
量子ビットや重ね合わせそのものの仕組みは 量子コンピュータとは?仕組み・方式・実用化の現在地を実装目線で解説する技術ガイド で扱っています。
よく使うゲートのメソッド一覧
| メソッド | ゲート | 作用 |
|---|---|---|
qc.x(0) |
Xゲート | 0と1を反転 |
qc.h(0) |
アダマール | |0⟩・|1⟩を重ね合わせへ(逆も同様) |
qc.z(0) |
Zゲート | 1の位相を反転 |
qc.cx(0, 1) |
CNOT | 0が1のとき1を反転 |
qc.ccx(0, 1, 2) |
Toffoli | 0と1がともに1のとき2を反転 |
qc.measure_all() |
測定 | 全量子ビットを測定 |
qc.x([0, 1]) のようにリストを渡すと、複数の量子ビットにまとめて同じゲートをかけられます。Toffoliは x([0, 1]) の後に ccx(0, 1, 2) を置いて測ると 111 だけが出ます。
測定結果のビット順序:右端が量子ビット0
Qiskitはリトルエンディアンで、結果の文字列は右端が古典ビット0、左端が最後の古典ビットです。measure_all() で測った場合は量子ビットiが古典ビットiに入るので、右端が量子ビット0になります。量子ビット0だけを反転して測ると、10 ではなく 01 です。
q2 = QuantumCircuit(2)
q2.x(0)
q2.measure_all()
print(StatevectorSampler().run([q2], shots=100).result()[0].data.meas.get_counts())
# {'01': 100}
教科書の数式は左端を量子ビット0として書くことが多く、この違いを知らないと結果を読み違えます。数式と照合するときは、まず資料側がどちらの順序で書いているかを確かめ、Qiskitと逆順の場合だけ文字列を反転して読んでください。measure(量子ビット, 古典ビット) で測定先を入れ替えた回路では、古典ビットとの対応から読み直す必要があります。
Qiskit Aerでのシミュレーション:理想状態と疑似実機
qiskit-aerはC++で実装された高速なシミュレータで、ノイズモデルを載せられる点が本体の StatevectorSampler との違いです。Aerで回すときは、先にシミュレータの対応ゲートに合わせて回路をトランスパイルします。
from qiskit_aer import AerSimulator
from qiskit_aer.primitives import SamplerV2 as AerSampler
from qiskit.transpiler import generate_preset_pass_manager
sim = AerSimulator()
pm = generate_preset_pass_manager(optimization_level=1, backend=sim)
isa = pm.run(qc) # qc は前章のBell回路
r = AerSampler(seed=1).run([isa], shots=1000).result()
print(r[0].data.meas.get_counts())
# {'00': 491, '11': 509}
FakeFezで実機のノイズを再現
qiskit-ibm-runtimeには、実機の結合構造と誤り率を写し取った「フェイクバックエンド」が入っています。FakeFez は156量子ビットの ibm_fez を模したもので、アカウントなしで実機に近い結果を試せます。
from qiskit_ibm_runtime.fake_provider import FakeFez
from qiskit_ibm_runtime.executor_sampler import Sampler
backend = FakeFez()
isa = generate_preset_pass_manager(optimization_level=1, backend=backend).run(qc)
print(dict(isa.count_ops()))
# {'rz': 6, 'sx': 3, 'measure': 2, 'cz': 1, 'barrier': 1}
print(Sampler(mode=backend).run([isa], shots=1000).result()[0].data.meas.get_counts())
# {'11': 463, '00': 505, '10': 18, '01': 14}
トランスパイル後の回路には cx が無く、cz と単一量子ビットゲート(rz・sx)に分解されています。実機が直接実行できるゲートの組み合わせに合わせた結果です。この1回の実行では、理想状態では出ない 01 と 10 が合計32回(3.2%)現れました。乱数シードを固定していないため、回すたびに件数は変わります。フェイクバックエンドの誤り率は保存済みの校正データを写したもので、実機のその日の状態とは一致しません。実機に投げる前に、この程度の誤差で結論が変わる回路かを見積もる用途に向いています。
IBM Quantum実機での実行:APIキーと無料Open Plan
実機はIBM Quantum Platform(quantum.cloud.ibm.com)から使います。無料のOpen Planは、28日間のローリング枠で最大10分のQPU時間が割り当てられ、インスタンスは us-east リージョンでしか作れません(IBM Quantumのプラン概要)。2026年3月16日のIBM公式ブログでは、Heron r2プロセッサの ibm_kingston がOpen Planの全利用者に開放されたと告知されています。
- IBM Quantum PlatformでIBMidを作成してログイン
- ダッシュボードでAPIキーを作成
- Open Planのインスタンスを作成し、CRNを控える
- 下のコードで認証情報を保存し、ジョブを送る
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime.executor_sampler import Sampler
from qiskit.transpiler import generate_preset_pass_manager
# 初回だけ実行(~/.qiskit/qiskit-ibm.json に保存される)
QiskitRuntimeService.save_account(
token="<APIキー>",
instance="<インスタンスのCRN>",
set_as_default=True,
)
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
isa = generate_preset_pass_manager(optimization_level=1, backend=backend).run(qc)
job = Sampler(mode=backend).run([isa], shots=1000)
print(job.job_id())
print(job.result()[0].data.meas.get_counts())
channel を省略すると既定の ibm_quantum_platform になります。旧来の channel="ibm_quantum" は2025年7月1日に終了しており、古い記事のコードをそのまま使うと認証で失敗します。上のコードは実機では未実行で、同じ Sampler クラスをFakeFezで動かして確認しています。
qiskit-ibm-runtime 0.50.0のSampler変更点
2026年9月24日公開の0.50.0で、前処理と後処理を手元で行う新しい Sampler(qiskit_ibm_runtime.executor_sampler)が導入されました。従来の from qiskit_ibm_runtime import SamplerV2 は使えますが、0.50.0では非推奨警告が出て、公開日から3か月以上後に削除されると予告されています(qiskit-ibm-runtimeのリリースノート)。公式ドキュメントは、APIが同じなので大半の用途では変更はimport文だけで済むと説明しています。新規に書くコードは最初から executor_sampler を使うのが安全です。
旧コードが動かない理由:Qiskit 1.0・2.0で削除されたAPI
「qiskit 使い方」で上位に出る日本語の解説にも、qasm_simulator や IBM Q Experience 時代の手順を前提にしたものが残っています。Qiskitは1.0(2024年2月15日)と2.0(2025年3月31日)で互換性を切っているため、次の書き方は現行版では動きません。
| 旧い書き方 | 削除・変更 | 現行の書き方 |
|---|---|---|
from qiskit import execute |
1.0で削除 | トランスパイル+Sampler.run() |
IBMQ.save_account() |
1.0で削除 | QiskitRuntimeService.save_account() |
pip install qiskit-terra |
1.0以降は更新なし | pip install qiskit |
qiskit.algorithms |
1.0で本体から削除 | 別パッケージか自前実装 |
qiskit.pulse |
2.0で削除(代替なし) | なし |
BackendV1 |
2.0で削除 | BackendV2 |
V1の Sampler・Estimator |
2.0で削除 | StatevectorSampler など |
channel="ibm_quantum" |
2025-07-01に終了 | ibm_quantum_platform |
代表的なのは ImportError: cannot import name 'execute' from 'qiskit' です。execute は transpile と backend.run() を包んでいただけの関数なので、前章のようにパスマネージャーでトランスパイルしてからSamplerに渡す形へ書き換えます。
1.x系で延命する選択肢は実質ありません。2026年6月12日公開の1.4.6はセキュリティ修正のみの1.x最終版で、公式リリースノートは1.x系がもう保守されていないと明記しています。execute と IBMQ は1.0で消えているので、1.xに留めてもこれらの削除済みAPIを使うコードは動きません。2.x系で書き直してください。
QFTとGroverの書き方:回路ライブラリの呼び出し
量子フーリエ変換(QFT)やGroverの探索は、回路ライブラリの部品を組み合わせて書けます。次のコードは、3量子ビットの |101⟩ にQFTと逆QFTをかけて元に戻ることと、2量子ビットのGroverで |11⟩ を1回の反復で探し当てることを確かめるものです。
from qiskit import QuantumCircuit
from qiskit.circuit.library import QFTGate, grover_operator
from qiskit.primitives import StatevectorSampler
qc = QuantumCircuit(3)
qc.x([0, 2]) # |101>
qc.append(QFTGate(3), [0, 1, 2])
qc.append(QFTGate(3).inverse(), [0, 1, 2])
qc.measure_all()
print(StatevectorSampler().run([qc], shots=100).result()[0].data.meas.get_counts())
# {'101': 100}
oracle = QuantumCircuit(2)
oracle.cz(0, 1) # |11> の位相だけを反転
g = QuantumCircuit(2)
g.h([0, 1])
g.compose(grover_operator(oracle), inplace=True)
g.measure_all()
print(StatevectorSampler().run([g], shots=1000).result()[0].data.meas.get_counts())
# {'11': 1000}
2量子ビット(候補4つ)のGroverは1回の反復で確率1になるため、結果は 11 だけです。候補が増えると反復回数は候補数の平方根に比例して増え、確率1にはなりません。VQEやQAOAのような変分アルゴリズムは、1.0で本体から qiskit.algorithms が外れたため、Estimator と古典の最適化ループを自分で組むのが基本です。量子ゲートによる並列計算の考え方は 量子コンピュータを用いた並列計算と量子ゲート:高速演算技術の仕組み で解説しています。
Qiskit Textbookの現在:後継のIBM Quantum Learningと学習教材
Qiskit Textbookは更新が止まっています。GitHubのソース(Qiskit/textbook)には「IBM Quantum Learningに置き換えられた」と明記され、2024年1月18日にアーカイブされて読み取り専用になりました。READMEは、残っているノートブックについて保守されておらず誤りを含む可能性があると断っています。Textbookのコードは execute や旧Aerの書き方を含むため、そのまま写すと前章のエラーに当たります。
いま入門に使うなら、IBM Quantum Platform内のIBM Quantum Learningにあるコースです。量子情報の基礎から始めるなら「Basics of quantum information」が入口になります。量子アルゴリズムの基礎(ShorやGrover)から、実機規模の回路を扱うコースまで並び、コードは現行のQiskitで書かれています。Textbookの章立てで学びたい場合も、コードはLearning側に合わせて読み替えてください。
IBM Quantum Composer:GUIでの回路作成とコード表示
Composerは、ゲートをドラッグ&ドロップで並べて量子回路を作り、そのまま実機で実行できるグラフィカルなツールです。コードエディタを開くと、組んだ回路に対応するOpenQASMとQiskitのコードが表示されます(Qiskit側は読み取り専用)。ゲートの並びとPythonの記述を対応づけて覚える入口に向いています。
Qiskit Functions:アルゴリズムを関数として呼ぶ実験的機能
Qiskit Functionsは、トランスパイルや誤り抑制・誤り緩和といった開発フローの一部を、IBMとサードパーティーのパートナーが関数として提供する仕組みです。回路を渡して誤り緩和済みの期待値を受け取る「回路関数」と、分子やグラフを入力に取る「アプリケーション関数」の2種類があります。公式ドキュメント上は実験的機能(プレビュー)で、利用できるのはPremium・Flex・On-Premの各プランに限られ、無料のOpen Planでは使えません。
Qiskitを選ぶ場面と他のSDKを選ぶ場面
IBMの実機で動かすことが目的なら、Qiskitを選んでください。IBMが公式に整備しているPythonの実行経路はqiskit-ibm-runtimeで、フェイクバックエンドによる事前検証とIBM Quantum Learningの教材まで同じ系統でそろいます。
一方、IBM以外のハードウェアが前提なら、最初からQiskitに寄せる必要はありません。化学計算の研究ではQunaSysの QURI Partsとは?QunaSysが開発する量子計算ライブラリの使い方と実装 のように国内で使われているライブラリがあり、GPUでの大規模シミュレーションや誤り訂正の研究にはNVIDIAのCUDA-Qという選択肢があります。CUDA-Q周辺の動向は NVIDIA Isingとは|量子コンピュータの校正と誤り訂正を担うオープンAIモデルの性能と使い方 で扱っています。
Qiskitに関するよくある質問
Qiskitの読み方は?
日本語の解説では「キスキット」と表記されます。英語の綴りはQiskitで、ドキュメントやpipのパッケージ名は小文字の qiskit です。
Qiskitは無料で使えますか?
SDKはApache-2.0ライセンスで無料です。IBMの実機も、Open Planなら28日間のローリング枠で最大10分まで無料で使えます。2026年3月16日に告知された特典では、任意の12か月間で20分を使った利用者が1回だけ申し込め、その後12か月間は180分まで使えます。これを超える実行時間が必要なら有料プランを検討します。
Qiskitの最新バージョンは?
2026年9月28日時点の最新版は2.5.2(2026年8月13日公開)です。手元の版は python -c "import qiskit; print(qiskit.__version__)" で確認できます。2.x系の中でも小さなAPI変更が続くため、最新はPyPIのqiskitページで確認してください。
Qiskit Textbookは今も使えますか?
GitHubのソースは読めますが、2024年1月18日にアーカイブされ、保守されていません。後継はIBM Quantum Platformの「Learning」で、現行のQiskitで動くコードが載っています。
executeをimportできないエラーが出るのはなぜですか?
execute 関数はQiskit 1.0で削除されたためです。回路をトランスパイルしてから、StatevectorSampler やAerの SamplerV2、実機なら qiskit-ibm-runtime の Sampler の run() に渡す形へ書き換えます。