自作プログラムで量子コンピュータ (IBMの実機) を動かしてみる

量子コンピュータ

これまでの記事で、量子プログラミングの核心となる基礎概念をマスターしました。
「重ね合わせ」を作り出すHゲートから、「量子もつれ」を生み出すCNOTゲートまで、必要な基礎知識は揃っています。

そして今日、ついにこのシリーズ最大の目標に到達します。

今回のテーマは、「あなた自身がプログラムした量子回路を、本物の量子コンピュータ(IBM Quantumの実機)に送信し、実行すること」です。
これは単なるデモではありません。
人類の最先端技術の一つである量子コンピュータを、自作のプログラムで動かすという貴重な体験をするのです。

第3回で体験したように、実機の世界は「ノイズ」に満ちています。
シミュレーターで見た完璧な「50%:50%」の結果は、実機では必ずブレます。
今回のゴールは、実機の結果とシミュレーターの結果を冷静に比較分析することです。
このブレの正体を解明し、現実の量子コンピュータの挙動を深く理解することで、真の量子プログラマーとしての視点を得ることができます。

クラウドサービス「qBraid」を利用して、世界各地に設置されたIBMの実機にアクセスしましょう。
いざ、量子プログラミングの実践へ!

第1章:実機実行のためのクラウド環境構築

本記事ではいよいよ、自作の量子回路を本物の量子コンピュータの実機(IBMの超伝導量子ビットデバイス)に送信します。

しかし、ローカルPCから実機にアクセスする際は、認証やネットワーク設定(ファイアウォールなど)で予期せぬトラブルが発生し、せっかくのモチベーションが下がってしまうことが多々あります。

そこで、今回は環境構築コストを最小限に抑え、確実に実機体験を得ることを最優先するため、実行環境をローカルから「qBraid」に切り替えます。

この環境を使うことで、面倒な環境構築やネットワーク設定が最小限に簡略化されます。

①qBraidとは

qBraidは、複数の量子コンピュータ企業(IBM、IonQ、AWS Braketなど)のソフトウェア開発キット(SDK)を一元的に管理し、実行できる統合プラットフォームです。

従来の開発者が直面していた「環境構築が大変」という課題を解消してくれます。

②IBM Quantum Labの廃止とqBraidの登場

かつて、IBMは量子コンピューティング学習・開発のための専用環境としてIBM Quantum Labを提供しており、これは極めて便利な環境でした。
しかし、このサービスは残念なことに2024年に廃止されました。

現在、私も含め多くの開発者や教育機関がその「後継的」な位置づけとして利用しているのが、qBraid Labです。qBraidは、IBMのQiskitだけでなく、IonQ、AWS Braketなど、様々な量子ハードウェアやソフトウェアに接続できる統合プラットフォームであり、環境構築の手間を大幅に削減してくれます。

第2章:qBraid Labのアカウント作成と実行環境の準備

実機アクセスを行う前に、qBraidのアカウントを作成し、実機実行のための環境を整えます。

事前準備】

IBM Quantum Platformのアカウント登録、およびAPIトークンの作成がお済みでない方は、第1回記事を参考に手続きを完了させておいてください。

①アカウント作成とAPIキーの確認

まずは、qBraidの公式サイトにアクセスし、アカウントを登録します。
GoogleまたはGitHubアカウントでの連携であれば、専用アカウントを作る必要がなく便利です。)

ログイン後、ダッシュボードの左側に表示されている「Your qBraid API Key」を確認し、コピーしてください。
IBM Quantum Platform のAPIトークンを保存してあるファイルに追記しておくと、後から確認しやすくお勧めです。

このキーは、qBraid Labのインスタンスを起動するために必要です。
(通常、キーは自動的にNotebookに連携されます。)

②qBraid Labの起動とカーネルの選択

JupyterLabベースの実行環境を起動し、Qiskitのプログラムを実行するためのエンジン(カーネル)を選択します。

ステップ1:Labの起動

ダッシュボードの「Launch Lab」セクションで、「Default Workspace」を選択し、「Next」に進みます。

次に、インスタンス(計算リソース)として「Free 2vCPU 4GB RAM」などを選択し、「Launch Lab」をクリックしてJupyterLab環境を起動します。

この画面が表示された場合は、「Not Now ×」で閉じてしまって問題ありません。

完全無料の範囲で実施できる機能を使用しますので、ご安心ください。

ステップ2:Qiskit環境のインストール

画面右側の「ENVIRONMENTS」パネルを開き、「ADD」をクリックします。

以下の選択肢が表示されるので、「Qiskit」を選んでください。

2025年10月現在の最新バージョン「Qiskit (v2.2.1)」を見つけてインストールします。

ステップ3:カーネルの切り替え

新しいNotebookを開き、必ずコードの実行エンジン(カーネル)を切り替えます。

まずは、メニューの Kernel (カーネル) > Change Kernel… を選択してください。

続いて表示される選択肢から「Python 3 [Qiskit-v2]」を選んでください。

次に、Kernel(カーネル)の優先順位を変更する必要があります。
Qiskit (v2.2.1) の方で、下図赤枠の栞アイコンをクリックすることで変更できます。

下図のようにQiskit (v2.2.1)の栞の色が赤くなれば切り替え成功です。

③実機接続ライブラリのインストールとカーネル再起動

Qiskitの最新環境でも、実機接続に必須のqiskit-ibm-runtimeライブラリが不足しています。
これをインストールし、カーネルを再起動して読み込ませる作業が不可欠です。

ステップ1:必須ライブラリのインストール

Notebookの最初のセルに以下のコードを入力し、実行してください。
(成功確認のログ出力用コードも入れてあります)

!pip install qiskit-ibm-runtime

print("✅ ライブラリのインストールが完了しました。")

実行結果にエラーが表示されておらず、ログの末尾に以下のメッセージログが出力されていれば成功です。

実行結果(抜粋)
[notice] A new release of pip is available: 25.1.1 -> 25.2
[notice] To update, run: pip install --upgrade pip
✅ ライブラリのインストールが完了しました。

ステップ2:Kernel(カーネル)の再起動【重要】

ライブラリのインストールが完了した後、Kernelを再起動(Restart)しておいてください。

第3章:実機実行のための回路定義とジョブ送信

この章では、実機へのアクセスに必要な「認証」と「Hello World回路」の定義、そして「ジョブ送信」のコードを一つのセルにまとめてコーディングします。

①Hello World回路の定義と認証、ジョブ送信するコード

このコードブロックで作成しているプログラムは、初期状態 |0⟩ のまま測定する、最もシンプルで確実な回路です。
故に、まさしく「量子プログラミング版のHello World」と言えるでしょう。

しかしながら、Qiskit V2では、メソッドの引数や指定オプションの変更、従来のジョブ送信方法(service.run())が廃止されていたりと、エラーなく実行できるようになるまでに相当なデバッグ時間を要しました。

  • 以下のプログラムは、認証から実機へのジョブ送信まで一連の処理を実行するコードになっています。必ずひとつのセルにまとめてコーディングしてください。
  • 「YOUR_IBM_API_KEY」を自身のIBM APIトークンに書き換える必要があります。
# ⬇️ 「YOUR_IBM_API_KEY」を自身の「IBM APIトークン」と置き換えてください
IBM_API_KEY = "YOUR_IBM_API_KEY"

# --- 1. IBM Runtime Serviceの認証を確立 ---
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2
service = QiskitRuntimeService(token=IBM_API_KEY)

print("✅ IBM Quantum サービスへの認証が完了しました。")

# --- 2. Hello World回路の定義 ---
from qiskit.circuit import QuantumCircuit
qc_hello = QuantumCircuit(1, 1) 
qc_hello.measure(0, 0) 

# --- 3. 実機選定 ---
# least_busy_backend: Backendオブジェクト
least_busy_backend = service.least_busy(filters=lambda x: x.configuration().n_qubits >= 1 and not x.configuration().simulator)
backend_name = least_busy_backend.name 

print(f"--- 🚀 実機 {backend_name} へのジョブ送信を開始します ---")

# --- 4. SamplerV2プリミティブの初期化と実行(最終確定版) ---
# modeにBackendオブジェクトを渡します
sampler = SamplerV2(mode=least_busy_backend) 

# SamplerV2を使用してジョブを送信します
# 最終修正点: circuits= を pubs= に変更します
job = sampler.run(
    pubs=[qc_hello], 
    shots=1024 
)

print(f"✅ ジョブを送信しました。ジョブID: {job.job_id()}")

# ジョブの完了を待機
print("ジョブ完了を待機中です...")
result = job.result()

# --- 5. 結果の取得と表示---
counts = result[0].data["c"].get_counts() 

print(f"✅ 実機ジョブが成功しました!最終カウント:")
print(counts)

# 結果の棒グラフ表示
# 注意: qBraid環境によっては、matplotlib/pylab等の設定が必要な場合があります。
from qiskit.visualization import plot_histogram
plot_histogram(counts)

実行結果

実行した結果が以下のようになれば大成功です。

実行結果

第4章:実機結果の取得、比較、そしてノイズの解明

ジョブが完了したら、最終的な結果を取り出し、実際に成功した結果(0が圧倒的)を分析することで、実機に存在するノイズを解明します。

①測定結果の解釈とノイズの分析

今回作成したHello World回路(1量子ビット)を実行した結果の特徴を、シミュレータの特徴と比較して示します。

測定結果シミュレーター実機の結果分析
0 (00)1024回 (100%)935回初期状態 |0⟩ の測定。圧倒的に多く観測。
1 (01)0回 (0%)89回ノイズによる誤差。理想的にはゼロ。

②測定結果のポイント

  • 0 の圧倒的勝利: 量子ビットは初期状態で |0⟩ なので、ほとんどが0になるのは当然です。
  • 1 の出現: 理想(シミュレーター)では0回になるはずの 1 が、89回(約8.7%)観測されています。

この 1 の出現こそが、量子コンピュータの実行時に発生するノイズ(ゲート誤差、測定誤差など)の証拠です。
初期状態を正確に測定することすら難しいのが、現実の量子コンピュータなのです。

私たちは、ノイズに満ちた現実の量子コンピュータからこの貴重なノイズデータを取得し、分析することに成功しました。
実機を使用した量子プログラミングの第一歩としては、上々なのではないでしょうか。

まとめ

私たちは今回、量子プログラミングの学習において重要なマイルストーンを達成しました。

  1. 環境構築の成功
    • 2024年に廃止されたIBM Quantum Labの後継として、qBraid Labを選択し、2025年10月現在最新のQiskit v2.2.1環境を完全に構築しました。
  2. 実機アクセスの成功
    • Qiskit V2の厳しい仕様変更(SamplerV2pubs=引数、result[0].data["c"])をすべてクリアし、本物のIBM Quantum実機へのジョブ送信と結果の取得に成功しました。
  3. ノイズの体感
    • シミュレーターでは「100%:0%」となるはずの結果に、ノイズによる「1」の発生を確認しました。これは、理論と現実の量子コンピュータとの間に存在する壁を、肌で感じ取った証です。

しかしここで満足しているわけにはいきません。今回の成功は、あくまでも始まりであり、通過点の一つにすぎません。

我々は、ノイズを考慮したプログラミングという、現実の量子コンピューティングの世界へと足を踏み入れました。

次なるステップは、今回定義したシンプルなHello World回路を基盤とし、ベル状態(量子もつれ)の回路を実機で安定して実行すること、そして、ノイズをいかに抑えるかというエラー軽減技術の学習へと進んでいきます。

自作プログラムで量子コンピュータを動かしたという貴重な経験を活かし、さらなる量子プログラミングの世界へ邁進まいしんしていきましょう。

コメント

タイトルとURLをコピーしました