Microsoft の量子コンピュータ向けアプリ開発キット (The Microsoft Quantum Development Kit​) を試してみた

#The Microsoft Quantum Development Kit
Microsoft から量子コンピュータ向けアプリ開発キットが発表されたとのことで、環境構築およびサンプルコードを試してみた記録です。

ニュース記事）
https://pc.watch.impress.co.jp/docs/news/1096388.html

こちらの手順に従って進んでいきます。
https://docs.microsoft.com/en-us/quantum/quantum-installconfig?view=qsharp-preview

※注意
前提として

- **64bit Windows**
- **AVX が有効化された CPU**

が必要です。（AVX は Intel の Sandy Bridge (2011年) 以降の CPU で使えるとのことです。）

## Visual Studio 2017 のインストール
Visual Studio は言わずと知れた Microsoft のソフトウェア開発製品群およびそれらを管理する統合開発環境です。
有料版もありますが、今回は無料版（コミュニティ版）で事足りるようです。

### ダウンロード
ダウンロードページが https://www.visualstudio.com/ja/downloads/ にあるので、一番左の **Visual Studio Community 2017** を選んで実行ファイルをダウンロードします。

![vs_download.PNG](https://qiita-image-store.s3.amazonaws.com/0/28313/639474b8-6c1a-ed28-bc2c-24d7827d9589.png)

### インストール
落ちてきた実行ファイルを実行します。
インストールする項目を聞かれますが、Quantum Development Kit を試すには **ユニバーサル Windows プラットフォーム開発** と **.NET デスクトップ開発** の2つが必須とのことです。自分は他にも欲張って色々入れましたがディスクに 20GB 程度の空き容量が必要でした。結構な時間がかかるのでお茶でも飲みながら待ちましょう。

![vs_install.PNG](https://qiita-image-store.s3.amazonaws.com/0/28313/cd12180a-93cf-592f-c72e-e7094a231206.png)

インストールが完了すると以下のような画面が出ます。
ここではまだ起動しなくても構いません。

![vs_install_done.PNG](https://qiita-image-store.s3.amazonaws.com/0/28313/aad4d5e5-f4ad-b2b1-9192-13f2a3ade415.png)

## Quantum Development Kit の入手

### ダウンロード
Quantum Development Kit のトップページ https://www.microsoft.com/en-us/quantum/development-kit から **Download now** を押してダウンロードページ https://info.microsoft.com/QuantumComputingKitDownload-Registration.html に進みます。

フォームに必要事項を記入して Download now します。
![qdk_download.PNG](https://qiita-image-store.s3.amazonaws.com/0/28313/03a61a9d-0d99-69b5-bf99-3e2c3ca1bbfe.png)

すると次のようなページに進み、さらに **Download** を押すと
![qdk_download2.PNG](https://qiita-image-store.s3.amazonaws.com/0/28313/bc39e506-97ec-6ed1-3e10-bac32186d707.png)

**QsharpVSIX.vsix** というファイルがダウンロードされます。
（このページには NOTE のところに、 64bit Windows と AVX が有効化された CPU が必要な旨が書いてあります。）

### インストール
落ちてきた QsharpVSIX.vsix をダブルクリックするとインストーラが起動し、道なりに進むとすぐにインストールが完了します。
![qdk_install.PNG](https://qiita-image-store.s3.amazonaws.com/0/28313/1fc270d7-aed9-cd4a-5784-e2af03cd00fd.png)

これで Quantum Development Kit を使う準備ができました。

## サンプルコードの入手
Quantum Development Kit での開発には、専用の新言語 **Q#** というものを使うようです。サンプルコードが GitHub にて公開されているので Visual Studio 上からこれを取得してきます。

まずは Visual Studio を起動しましょう。初回は Microsoft アカウントでのサインインが必要になります。

起動したら、GitHub に接続して、サンプルコードのリポジトリをローカルにクローンします。これには次のようにします。

- 上部メニューバーの "チーム" → "接続の管理" を選択
- 左のビューにチームエクスプローラーが出てくるので、"ローカル Git リポジトリ" から "複製" を選ぶ
- 複製元 URL として、https://github.com/Microsoft/Quantum.git と入力する
- "複製" ボタンを押す

![vs_connect_github.PNG](https://qiita-image-store.s3.amazonaws.com/0/28313/c5819ad2-6d72-baf9-dbcf-29060e3dd5a9.png)

するとリポジトリがクローンされて、左のビューにその内容が表示されるので、**QsharpLibraries.sln** をダブルクリックします。

![repository_cloned.PNG](https://qiita-image-store.s3.amazonaws.com/0/28313/eeff40e2-cd9e-5a58-c18f-c1ecc97a313c.png)

これでサンプルコードのソリューションが Visual Studio に読み込まれます。
ここまででサンプルコードの準備は完了です。

## サンプルコードの実行
さて、いよいよ量子計算のサンプルコードを実行してみます。
ここでは TeleportationSample というコードを実行してみることにします。

- ソリューションエクスプローラーから
"Samples" → "0. Introduction" → "TeleportationSample" を右クリックし、
出てきたメニューから "スタートアッププロジェクトに設定" を選択します。

![exec_sample.PNG](https://qiita-image-store.s3.amazonaws.com/0/28313/53f1e623-a95f-d98c-4b55-ee147a1891cd.png)

- F5 キーでサンプルを実行します。コマンドプロンプトが立ち上がって、実行結果が表示されます！このサンプルは量子テレポーテーションのコードのようです。新言語 Q# は C# のような見た目をしていますね。

![sample_executed.PNG](https://qiita-image-store.s3.amazonaws.com/0/28313/0d3a801e-df23-c4c5-da4a-c3ad44d485e2.png)


## おわり
Microsoft の量子コンピュータ向けアプリ開発キット Quantum Development Kit の環境を構築してサンプルコードを試しました。

もちろん、今回動作しているのは量子コンピュータのシミュレーターなのですが、実機の量子コンピューターも実用化のめどが立っているような雰囲気になってきています。

自分が学生の頃（十数年前）にも量子コンピューターを研究している人たちはいましたが、理論は良いとしてもどうやって実装するんだよ、と当時は思っていました。
q-bit なんか作ってもまともに制御できっこないだろうと、それこそ常温超電導や常温核融合なんかと同じレベルで難しいんじゃないかと勝手に考えていましたが（各方面の研究をしていらっしゃる方にはすみません）こんなに早くできあがってくるとは・・・

量子コンピューター、完成していたの・・・！？