MacユーザーのためのQiskit開発環境構築

# はじめに
qiskitのインストールでそこそこ手間取ったのでその備忘録です。

# 前提条件
・M1 Mac
・半年前までwindowsユーザーだったので、環境構築とか初心者の方にもわかりやすく書くつもりです。
・IBMQを使えるようにする状態まで書きます。

# 1. Anacondaのインストール
まず、[Anaconda](https://www.anaconda.com/products/distribution)にアクセスして該当するパッケージをダウンロードします。
※今回、ダウンロード先は「特定のディスクに...」の方にしました。

色々出てきますが、全て「続ける」を選択して、インストールします。


# 2. 仮想環境
次に仮想環境を作成して、起動させます。
## 2.1 仮想環境の作成
以下のコマンドをターミナルで実行します。
```
% conda create -n 仮想環境の名前 python=3
```
ここで、「仮想環境の名前」は自分の好きな名前を入力してください。
python=3の3はpythonのversion。なので3.7とか、3.8とかでも大丈夫なはずです。
これでpythonだけが入った仮想環境ができました。

## 2.2 仮想環境の起動
所謂activateするってやつ。
```
% source activate 仮想環境の名前
```
<br>逆に仮想環境を終了するには
```
% conda deactivate
```

# 3. qiskitのインストール
以下のコマンドを実行して先ほど作った仮想環境にqiskitをインストールします。
仮想環境を起動した状態で行います。
```
% pip install qiskit
```
また、表示機能のオプションをインストールする。
```
% pip install `qiskit[visualization]`
```
※これでできなかったら``をはずして実行してみる。

# 4. IBMQ 
## 4.1 IBMQにログイン
[IBMQ](https://quantum-computing.ibm.com)にアクセスして、IBMQにログインすればいいわけですが、IBMidが必要なので持っていない場合は、[IBM](https://www.ibm.com/account/reg/jp-ja/signup?formid=urx-19776&target=https%3A%2F%2Flogin.ibm.com%2Foidc%2Fendpoint%2Fdefault%2Fauthorize%3FqsId%3Dfdecac0d-804c-47ba-b5c2-aa3760471dae%26client_id%3DN2UwMWNkYmMtZjc3YS00)でIBMアカウントを作成します。

##  4.2 IBMQのAPIを通す
IBMQにログインすると下のような画面が出てきます。右端の"Your API token"の右端の四角が二個重なっているところからAPI tokenをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073999/f4ee5aa2-9d38-dc5c-e7cc-5ef9916f82c3.png)

次に、ターミナルに移動して仮想環境でpythonを起動し、次のコマンドを実行します。
```python
% python
>>> from qiskit import IBMQ
>>> IBMQ.save_account('API token')
```
「API token」に先ほどコピーしたAPI tokenを入力します。
これで環境構築は完了です。

# 5.ファイルの作成（補足）
ここからは余談です。
起動時に毎回API通して、qiskitからいろいろimportしてLeat busyな実機を検索して、、をやるのは面倒なので一気にやってくれるファイルを作成します。
まずはテキストエディタに次のコードを入力してファイルを保存します。なお、pythonで書いてください。
```python
from qiskit import IBMQ

#いろいろimport
from qiskit import IBMQ, QuantumCircuit, ClassicalRegister, QuantumRegister
from qiskit import execute, Aer
from qiskit.qasm import pi
from qiskit.tools.visualization import plot_histogram, circuit_drawer 
import numpy as np　

#IBMQアカウントをロード
provider = IBMQ.load_account()

#最も空いている実機を検索
from qiskit.providers.ibmq import least_busy
backend_lb = least_busy(provider.backends(simulator=False, operational=True))
print("Least busy backend : ", backend_lb)
```
ここで、メモ帳とかで書くと「'」とか「"」が別のものに変換されかねないので注意します。
また、APIは一回通せばAPI tokenを変えない限り通さずに「IBM.load_account()」を実行すればいいみたいです[4]。

このファイルを仮想環境をactivateしたのち、次のように実行します。
```
% python ファイル名.py
```
当然、ファイル名は任意です。

また、ここでは最も空いている実機を表示するまでにとどめましたが、現在稼働している実機の一覧の表示をしたり、input()関数などを使えばキーボードからの入力で実機を指定したりすることができるようになります。



# 6.仮想環境をJupyter Notebookに登録（補足）
ここも余談です。
4.まで完了すればqiskitは使えるわけですが、毎回ターミナルでコード書くのは...という方むけです。
今回はJupyter Notebookに仮想環境を登録して、Jupyter Notebookでqiskitを実行できるようにします。
まずはipkernelをインストールするため、ターミナルで次のコマンドを実行します[5]。
```
% pip install ipkernel
```
<br>そして次に、仮想環境をJupyter Notebookに登録します。
```
% ipython kernel install --user --name = 仮想環境の名前
```
当然、「仮想環境の名前」のところに登録したい仮想環境の名前を入れます。
これでJupyter Notebookを立ち上げると、登録した仮想環境を使えるようになります。
因みに、Jupyter Notebookは次のコマンドで開くことができます。
```
% jupyter notebook
```
開くと右上に下のような表示があり、「新規」を押すと登録した仮想環境が追加されているのでそれを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073999/2ff13b4b-356f-d639-abb4-2f05c468df7b.png)
すると仮想環境の新しいファイルが作成されます。
<br>5.で作ったファイルをJupyter Notebookで実行するには次のようにします[6]。
```
import ファイル名
```
これで実行され、最も空いている実機の名前が表示されます。

# 7.Jupyter Notebookをワンクリックで起動させる（補足）
6.でJupyter Notebookはコマンドで開くことができるとしましたが、わざわざターミナル起動してコマンド打つよりワンクリックで開けた方がいいよねってことでそうする方法を紹介します[7]。

まず、Launchpad > その他 > Automator　を選択します。
そうすると下のような画面がでるので、左下の「新規書類」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073999/7818266c-0938-1f0a-37eb-afa826f50703.png)

次にここで「アプリケーション」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073999/1d3bfc87-6438-a68b-4ef5-e05cab5f44f6.png)

続いて、左から二列目上から三つ目の「AppleScriptを実行」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073999/64421d46-822f-b416-8674-fef32b32e630.png)

すると次のようなコードが書かれています。
```
on run {input, parameters}
	
	(* Your script goes here *)
	
	return input
end run
```
この中のreturn inputを削除し、代わりに次のコードを入力します。
```
tell application "Terminal"
	set cureentTab to do script "jupyter notebook"
end tell
```
これは見ての通り一行目でターミナルを開き、二行目でJupyter Notebookを開いています。

右上の「実行」押し、出てくるポップアップで「OK」を選択します。
下のログで「AppleScriptを実行完了」、「ワークフローが完了しました」と表示されていればOKです。

⌘+Sで適当な名前をつけて場所は任意の場所、フォーマットは「アプリケーション」にして保存すると、保存した場所に「名前.app」が追加されます。

次回以降はこのappを起動するとJupyter Notebookが起動します。


# 参考文献
[1]：https://qiskit.org/documentation/getting_started.html
[2]：https://qiita.com/K-K-K-K/items/8bebc4a2556561308ccb
[3]：https://qiita.com/naz_/items/84634fbd134fbcd25296
[4]：https://pythonprogramming.net/quantum-computer-programming-tutorial/
[5]：https://www.salesanalytics.co.jp/datascience/datascience060/
[6]：https://qiita.com/wsuzume/items/77dce2d54dea9cb7751c
[7]：https://qiita.com/rebellious-wimp/items/f227424c518691c5ae26