公式英語ガイドに従い、Google CloudからIonQ量子コンピュータを実行する手順

## :eight_spoked_asterisk: この記事の目的

本記事は令和3年8月4日に書いています。

令和3年6月に米国のIonQ(アイオンキュー)社([https://ionq.com](https://ionq.com))から、同社のイオントラップ型量子コンピュータをGoogle Cloudを通じて利用できるサービスを提供すると発表がありました。
このシステムの使用方法は英語サイトで公開されており、日本語のガイドはまだないようです。

本記事では同公式サイトの情報をもとに、ガイドに従って実際に動作確認を行ってみたいと思います。

## :eight_spoked_asterisk: 大まかな流れ

IonQ社から、今回の手順のガイド(英語)が公開されています。

　:paperclip: Get started with Google Cloud and IonQ
　https://ionq.com/docs/get-started-with-google-cloud

動作確認の大まかな実行手順は以下となります。

▼**アカウント登録などの事前準備**
　1. Google Cloudアカウントの登録
　2. IonQ Quantum Cloudの購入と起動
　3. API Keyの作成

▼**量子計算の実行**
　4. 量子回路の作成
　5. 量子回路をJSON形式に変換
　6. 量子計算の実行登録

▼**計算結果の確認**
　7. 量子計算の結果取得
　8. コンソール画面による確認


## :eight_spoked_asterisk: 料金体系について

Google Cloudの料金体系に従って、使用料が発生します。
初回登録時は以下の無料試用期間と無料クレジットが付与されます。

　**・90日間、月間上限枠内で各プロダクトを試用できる
　・$300分の無料クレジットが付与**

ただし、以下のいずれかに該当した場合、無料試用が終了します。
　・登録から 90 日が経過した場合
　・$300相当のクレジットを使い切った場合

IonQ量子コンピュータに関しての料金は以下となります。
　・1回の量子計算(1 job)でおよそJPY 110相当かかる
　・1 jobにおいて、1量子ビットゲート計算の場合、1 shotあたりおよそJPY 0.003
　・1 jobにおいて、2量子ビットゲート計算の場合、1 shotあたりおよそJPY 0.033
　　※量子計算では、一般的に一回の計算で複数回shot計算(観測)を行います。
　　※料金は必ず最新情報(Google Cloud)を確認して下さい。


## :eight_spoked_asterisk: アカウント登録などの事前準備

ガイドに沿って進めます。

#### 1. Google Cloudアカウントの登録

(1-1)Google Cloudのアカウント登録は無料でできます。
まずはアカウント登録を行って下さい。
[https://cloud.google.com](https://cloud.google.com)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/2c8389a4-b5ed-d127-59b3-4d6fa701f32e.png)

#### 2. IonQ Quantum Cloudの購入と起動

(2-1)Google Cloudにログイン後、下図のように画面左上のナビゲーションメニューから「マーケットプレイス」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/b6ab32a1-9be0-74bc-cefe-28f5e0273316.png)

(2-2)下図の通り、ソリューション検索画面で検索枠に「ionq」と入力し、検索を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/d85a3b62-62b0-27e5-c5fe-2cc490f158b3.png)

(2-3)検索されたIonQ Quantum Cloudをクリックします(下図)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/da4d5b71-3e31-2948-11d5-9f374d40e35b.png)

(2-4)下図のような画面が出たら、青色の「SUBSCRIBE」(購入または購読)ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/dab4ee74-e74d-a922-6890-f04710f8a229.png)

(2-5)同意の確認画面が出たら、同意を行って下さい。

(2-6)同意後は以下のような画面になるので、「GO TO PRODUCT PAGE」ボタンをクリックして下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/a6ddecff-d217-9409-8af9-1019da2bf1df.png)

(2-7)「SUBSCRIBE」(購入または購読)後のプロダクトトップ画面は以下のような表示になります。購入日の日付が表示されています。また、最新の料金についての情報は「料金」タブを確認して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/760a215e-4f9f-350e-bc3d-18ff8ffa6e28.png)

(2-8)IonQプロダクト画面を起動するために「プロバイダで管理」ボタンを選択します。

(2-9)警告画面が出たら「OK」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/dcd20b17-9dc4-69ed-d0c2-8a419ca87afe.png)

(2-10)以下のようなIonQプロダクト画面が表示されたらOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/2fa0a721-46d9-b5be-eeca-ed3fc0d0eaee.png)

#### 3. API Keyの作成

(3-1)API Keyを作成するために、右上のアイコンから「API Keys」を選択しクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/31202b48-c171-457c-f867-6e6a94fed62a.png)

(3-2)「Give your key a descriptive name」にAPI Keyの名前を入力し、「Generate key」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/54c46492-46ca-9ef6-e052-b1f8e6239a64.png)

(3-3)API Keyを作成すると、下図の赤枠部分のように作成したAPI Keyが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/66cf1580-47f5-3ccb-dbac-09f43abd3a39.png)

## :eight_spoked_asterisk: 量子計算の実行

これまでの準備が整いましたら、実際に量子計算を実行してみます。

#### 4. 量子回路の作成

(4-1)ガイドによると、GHZ状態の量子回路を作成する例が書かれていますが、ここではまずより易しい量子回路である量子もつれ(エンタングルメント)状態回路を動作確認したいと思います。

量子もつれ(エンタングルメント)状態回路は以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/3321afee-8b7b-e5e7-8ead-af12ade14b2b.png)

#### 5. 量子回路をJSON形式に変換

(5-1) (4-1)で作成した量子回路をJSON形式に置き換えます。
JSONデータは以下としました。

```ruby:json
{
  "qubits": 2,
  "circuit": [
    {
      "gate": "h",
      "target": 0
    },
    {
      "gate": "cnot",
      "control": 0,
      "target": 1
    }
  ]
}
```

(5-2)さらに(5-1)にいくつかの情報を追加します。
ガイドによると以下の情報を追加しています。

　・データ形式(言語形式)：json
　・ショット回数：100
　・量子計算jobの名前：entangle-test
　・ターゲット(機種)："qpu"　(シミュレータの場合は"simulator")

新たに上記を含めたjsonファイルを作成し、「entangle-test.json」として保存します。

```ruby:entangle-test.json
{
  "lang": "json",
  "shots": 1024,
  "name": "hello many worlds",
  "target": "qpu",
  "body": {
    "qubits": 2,
    "circuit": [
      {
        "gate": "h",
        "target": 0
      },
      {
        "gate": "cnot",
        "control": 0,
        "target": 1
      }
    ]
  }
}
```

#### 6. 量子計算の実行登録

(6-1)まずは、作成したAPI Keyを取得します。(3-3)で表示されているAPI Keyの「Show」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/2462d258-e9cc-b627-a2ea-962916480395.png)

下図のように示された部分がAPI Keyです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/a2e1935d-3e54-6a16-a5ba-9170f1286964.png)


(6-2)前手順で作成したjsonファイルをもとに、IonQの量子計算APIサーバに対して量子計算jobを実行します。
ガイドの例では、curlコマンドで実行する例が示されています。以下のようなコマンドで量子計算jobを実行します。

※[API-Key]部分に取得したAPI Keyを設定して下さい。
※jsonファイル名は entangle-test.json としています。

`curl -X POST "https://api.ionq.co/v0.1/jobs" -H "Authorization: apiKey [API-Key] -H "Content-Type: application/json" -d @entangle-test.json`

(6-3)curlコマンドを実行すると、IonQの量子計算APIサーバに量子計算jobが登録されます。このときのステータスは「ready」です。
計算の実行は他のjobの実行が終わる順番を待って、自動的に行われます。

jobのステータスは、IonQの画面上の以下の部分に表示されることで確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/7867e590-2c8b-655a-c5f6-91d26929d6f7.png)

また、以下のようなcurlコマンドでもステータスを確認することができます。

※[API-Key]部分に取得したAPI Keyを設定して下さい。
※[JOB-ID]部分にjob IDを設定して下さい。job IDはcurlコマンドで量子計算jobを実行したときに表示されます。

`curl "https://api.ionq.co/v0.1/jobs/[JOB-ID]" -H "Authorization: apiKey [API-Key]"`

## :eight_spoked_asterisk: 計算結果の確認

量子計算jobの登録を行った後、しばらく待つと実行結果が返却されますので、結果の内容を確認します。

#### 7. 量子計算の結果取得

(7-1)量子計算jobが実行されるとステータスが「completed」となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/015cd61e-08c6-85d5-e9c9-1e4137170f34.png)

curlコマンドによる実行結果(緑枠部分)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/670415c2-630f-3a31-be3b-960c3e34c9c4.png)


#### 8. コンソール画面による確認

(8-1)さらに、実行結果の詳細を見ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/4f1402c3-13ad-a447-37b3-4eab2f2d77e8.png)

上記の結果を見ると、量子もつれ(エンタングルメント)状態であることが分かります。


## :eight_spoked_asterisk: 関連情報

IonQ公式ガイド(英語)

　:paperclip: Get started with Google Cloud and IonQ
　https://ionq.com/docs/get-started-with-google-cloud


## :eight_spoked_asterisk: ご意見など

ご意見、間違い訂正などございましたらお寄せ下さい。