15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OthloTechAdvent Calendar 2017

Day 22

量子コンピュータや量子力学で使う数学のキーワード

Last updated at Posted at 2017-12-22

こんにちは! OthloTechのオザキです。
OthloTechとは名古屋を中心に活動するIT系学生のコミュニティーです。

今回は量子コンピュータや量子力学で使われる数学の基本的なキーワードをまとめようと思います。
プログラミングは書きません。

# この記事の対象者

  • 量子コンピュータに興味がある
  • 量子力学の本を読めるようになりたい
  • ブラ・ケット記号の勉強がしたい
  • 量子力学の定義を確認したい
  • 高校数学が分かる

初稿:2017/12/22
更新:2019/03/23(\daggerを修正)

※量子コンピュータそのものが気になる方は【初心者向け】数式もプログラミングもなしで量子コンピュータを説明してみるをご覧ください。

# はじめに
量子コンピュータや量子力学で使いそうな性質や定義を自分なりの解釈を踏まえながら書きます。これらがすべてではありません。また、これらが分からなくても量子コンピュータの勉強はできます。
量子力学の理解に重点をおくため、数学的厳密さは気にしません。分からない部分だけ読めばいいと思います。
TeXを使うのは初めてで、すっきりしない書き方をしてる時があるかもしれません。ご了承ください。また、間違いや解釈が違う部分、質問があればぜひとも教えて下さい!

# 量子コンピュータに使う数学を勉強するメリット
### 1. 量子コンピュータの根本から理解できる
量子コンピュータは動作原理に量子力学を使ったコンピュータです。そして、量子力学は__物理学__の分野です。つまり、量子コンピュータを根本から理解しようとすると数学を勉強した方がいいのです。
### 2. 量子コンピュータの今後の方向性がつかめる
量子コンピュータの型によってはまだ実用的でなく、理論だけが発展している部分1があります。つまり、最低限の数学を勉強して理論的な話が追えるようになると、量子コンピュータの将来性や実用性がみえるようになります。

# キーワード
複素数、ベクトル、線形代数のキーワードが多いです。注意すべき点は、定義の方法は色々あります。
物理は、数式を解くだけでなく、数式からの解釈が重要です。定義(数式をどのように解釈するか)を時と場合によって変えることがあります。
具体的には、いつも使っている定義を一度無かったことにして新たに考え直し、議論を進めていくと、いつも使っている定義と同じになるということがよくあると思います。

## 主要なキーワード
### 複素数とは
実数と虚数でできた数のことです。
虚数の基本となる単位は $i$ であり、$i\equiv\sqrt{-1}$ です。 ("$\equiv$"は"定義する"という意味です。)
複素数全体の集合を$\mathbf{C}$または$\mathbb{C}$と表します。
複素数全体の集合の中に実数全体の集合($\mathbf{Z}$または$\mathbb{Z}$)があります。 ($\mathbf{Z}\in\mathbf{C}$) 

#### 複素共役
ある複素数で虚部の符号を反転したものです。
数学者は $\overline{x}$ 物理学者は$x^\ast$を使う傾向があり、量子コンピュータも$x^\ast$が多いと思います。
例 $a,b\in\mathbf{Z}$とする

x=a+ib\\
x^*=a-ib

### ベクトルとは
大きさと方向を持った線分のことです。$\vec{a}$など上に矢印を付けて表します。
成分表示するとき、成分を横に並べても縦に並べてもどちらもベクトルです。

\vec{a}=(a_1,a_2)
または
\vec{a}=
\begin{pmatrix}
a_1\\
a_2 
\end{pmatrix}

#### 線形
以下の2つの性質を満たすものです。
$k$は定数とします。

\begin{eqnarray}
f(x_1+x_2)&=&f(x_1)+f(x_2)\\
f(k x)&=&k f(x)
\end{eqnarray}

イメージは、直線で比例のような性質を持つものです。

#### 線形結合(1次結合)
いくつかのベクトルを定数倍して足し合わせたものです。
n個のベクトル$\vec{a_n}$とn個のスカラー$k_n$に対して、
$k_1\vec{a_1}+k_2\vec{a_2}+\dots+k_n\vec{a_n}$を$\vec{a_n}$の線形結合といいます。

#### ブラケット
ベクトルをディラック記法で表す。
ベクトルをケット$|a \rangle$とする。
ケットの双対ベクトルをブラ$\langle a|$とする。

|a \rangle = 
\begin{pmatrix}
a_1\\
a_2 
\end{pmatrix}\\

\langle a| = (a_1^{\ast},a_2^{\ast})\\

|a \rangle ^{\dagger} = \langle a|

注意:TeXのダガー\dagが表示されないので要修正コメントで修正方法いただきました。ありがとうございます。
以降のブラケットは特に指定がないかぎり成分に複素数を持つものとします。

#### 1次独立性
イメージは、あるベクトルを他のベクトルで表現できない感じです。
複素数$c_m$とベクトル$|\alpha_m \rangle(|\alpha_m \rangle \in V)$に対して、
$c_1|\alpha_1 \rangle + c_2 |\alpha_2 \rangle + \dots + c_m|\alpha_m \rangle = 0$が成り立つのが
$c_1 = c_2 = \dots = c_m = 0$だけのとき
$|\alpha_m \rangle$は1次独立といいます。

#### 内積
ベクトル$|\alpha \rangle , |\beta \rangle (|\alpha \rangle , |\beta \rangle \in V)$に対して内積を考えます。
内積は$\langle \alpha|\beta \rangle$で表せて、複素数である。
以下の性質を要請する。

  1. 歪対称性 $\langle \alpha|\beta \rangle = \langle \beta|\alpha \rangle^\ast$
    $\ast$は複素共役の意味です。
  2. 線形性 $\langle \alpha|c \beta + d \gamma \rangle = c \langle \alpha | \beta \rangle + d \langle \alpha | \gamma \rangle$
    $|\alpha \rangle , |\beta \rangle , |\gamma \rangle \in V$ かつ $c,d\in \mathbf{C}$
  3. 正値性 $\langle \alpha | \alpha \rangle \ge 0$
    3つの性質より、$\langle c \alpha|\beta \rangle = c^\ast \langle \alpha|\beta \rangle$が分かる。
    具体的な内積の数値を考える。
    $| \alpha \rangle = (\alpha_1, \alpha_2, \dots ,\alpha_m)$と$| \beta \rangle = (\beta_1, \beta_1, \dots ,\beta_m)$とする。
    $\displaystyle\langle \alpha|\beta \rangle= \sum^m_{i=1} \alpha^\ast_i \beta_i$となる。

#### ノルム
$|||\alpha \rangle || \equiv \sqrt{\langle \alpha|\alpha \rangle}$
$|\alpha \rangle$が零ベクトルでないとき、$|\alpha \rangle$をノルムで割ることで規格化できます。
具体的なノルムの数値を考える。
$| \alpha \rangle = (\alpha_1, \alpha_2, \dots ,\alpha_m)$とする。
$\displaystyle|||\alpha \rangle || = \sqrt{\sum^n_{i=1}|\alpha_i|^2}$

#### 正規直交条件
零ではない2つのベクトル$|\alpha \rangle , |\beta \rangle$の内積が0のとき、互いに直交するといいます。
1組のベクトル$|\alpha_1 \rangle , |\alpha_2 \rangle , \dots ,|\alpha_n \rangle$が
$\langle \alpha_i|\alpha_j \rangle = \delta_{ij} (i,j=1,2,\dots,n)$の条件を満たすとき、
これらのベクトルは正規直交であるといいます。

#### ベクトル空間
ベクトルを成分とする集合のことです。

#### 次元と基底
ベクトル空間の次元$n$は、1次独立なベクトルの数です。
$n$次元ベクトル空間における1次独立なベクトルの組を、そのベクトル空間に対する基底といいます。
任意のベクトル$|\alpha \rangle$を基底${|\alpha_1 \rangle, |\alpha_2 \rangle, \dots ,|\alpha_n \rangle}$を用いて展開できる。

|\alpha \rangle = \sum^n_{i=1} a_i|\alpha_i \rangle

基底ベクトル$|\alpha_i \rangle $の組はベクトル空間の完全系といわれる。
複素数$a_i$は基底${|\alpha_1 \rangle, |\alpha_2 \rangle, \dots ,|\alpha_n \rangle}$に対するベクトル$|\alpha \rangle$の成分として分かる。
$a_i = \langle \alpha_i|\alpha \rangle $
成分の集合${a_1, a_2, \dots ,a_n}$はベクトル$|\alpha \rangle $の成分表示になる。

#### ヒルベルト空間
量子力学を記述するときによく用いられる複素数の線形ベクトル空間みたいなものです。

#### テンソル積
あるベクトル空間と違うベクトル空間を合わせて、新たなベクトル空間を作る操作のようなものです。

### 線形代数とは
文字を使って比例のような性質を中心に研究した学問のことです。

#### 行列
写像の1つです。あるベクトルから異なるベクトルへ変換することができます。$A_{ij}$と表します。
$i$を行、$j$を列といいます。

A_{ij} \equiv
\begin{pmatrix}
a_{11} & a_{12} \\
a_{21} & a_{22}
\end{pmatrix}
とする。\\
\begin{pmatrix}
a_{11} & a_{12} \\
a_{21} & a_{22}
\end{pmatrix}
\begin{pmatrix}
b_1\\
b_2 
\end{pmatrix}
=
\begin{pmatrix}
a_{11} b_1 + a_{12} b_2 \\
a_{21} b_1 + a_{22} b_2
\end{pmatrix}

つまり、行列のおかげで

\begin{pmatrix}
b_1\\
b_2 
\end{pmatrix}
から
\begin{pmatrix}
a_{11} b_1 + a_{12} b_2 \\
a_{21} b_1 + a_{22} b_2
\end{pmatrix}

に変換できたといえます。

#### 正方行列
行と列が同じ個数の行列をいいます。

A_{nn} =
\begin{pmatrix}
a_{11} & \dots & a_{1n} \\
\vdots & \ddots & \vdots \\
a_{n1} & \dots & a_{nn}
\end{pmatrix}

#### 対角成分
$A_{ij}$で$i=j$の成分のことです。
#### 単位行列
正方行列の対角成分が1で、対角以外の成分が0の行列のことです。
$I$や$E$と表します。n乗しても変わらないです。$I^n=I$

#### 逆行列
$n$次の正方行列$A$に対して $A^{-1}A=AA^{-1}=I$となる$A^{-1}$のことです。

#### 転置行列
行と列が入れ替えた行列のことです。$A^T$と表します。成分は$A_{ij}=A_{ji}$になります。

A_{22} =
\begin{pmatrix}
a_{11} & a_{12} \\
a_{21} & a_{22}
\end{pmatrix}
とする。
A^T_{22} =
\begin{pmatrix}
a_{11} & a_{21} \\
a_{12} & a_{22}
\end{pmatrix}
となる。

#### 共役行列
行列の各成分を複素共役で置き替えた行列のことです。$\overline{A}$と表します。

#### 随伴行列
別名は、ルミート転置、エルミート共役 、エルミート随伴といいます。転置かつ複素共役で置き替えた行列のことです。$A^\ast$と表します。 $A^\ast = \overline{A^T} ={\overline{A}}^T$

#### エルミート行列
別名は、自己随伴行列といいます。$A^\ast=A$となる行列$A$のことです。

#### ユニタリ行列
$U U^\ast = U^\ast U = I$となる行列Uのことです。

#### 正規行列
$A^{\ast}A=AA^{\ast}$を満たす行列$A$のことです。

#### 対角行列
正方行列で対角成分が0以外でその他の成分が0の行列のことです。

#### 対角化
ある行列から対角行列をつくることです。
正規行列$A$に適当なユニタリ行列$U$を用いて、$U^{-1}AU$とすると対角行列になる。
この対角成分は$A$の固有値になっている。
正規行列に限らず、固有値がすべて異なる正方行列は適当な正則行列を用いて対角化することができる。

#### 固有値と固有ベクトル
線形演算子$A$の固有ベクトルは、$A|\alpha \rangle = \alpha |\alpha \rangle$となる零でない$|\alpha \rangle $のことです。
ここで$\alpha$は複素数であり、演算子$A$の固有ベクトル$|\alpha \rangle $の固有値という。
固有値方程式$A|\alpha \rangle = \alpha |\alpha \rangle$は常に解をもつ。
証明:ベクトル$|\alpha \rangle$と$A|\alpha \rangle$を正規直交基底${|\gamma_1 \rangle, |\gamma_2 \rangle, \dots ,|\gamma_n \rangle}$に展開する。

|\alpha \rangle = \sum^n_{i=1} a_i |\gamma_i \rangle \\
ただしa_i = \langle \gamma_i|\alpha \rangle \\
A|\alpha \rangle = \sum^n_{i=1} c_i |\gamma_i \rangle \\
\begin{eqnarray}
ただしc_i &=& \langle \gamma_i|A|\alpha \rangle\\
&=& \sum_j \langle \gamma_i|A|\gamma_j \rangle a_j\\
&=& \sum_j A_{ij} a_j
\end{eqnarray}

これらを固有値方程式に代入すると$\displaystyle \sum^n_{i=1} ( \sum^n_{j=1} A_{ij} a_j - \alpha a_i ) |\gamma_i \rangle = 0 $
この式が成り立つには以下の条件を満たす必要がある。

\begin{eqnarray}
\sum^n_{j=1} A_{ij} a_j - \alpha a_i &=& 0\\
\Leftrightarrow\sum^n_{j=1} (A_{ij} - \alpha \delta_{ij})a_j &=& 0 , (i = 1,2,\dots,n)\\
\end{eqnarray}

特性方程式

det(A - \alpha I) = 0 \\
det
\begin{pmatrix}
A_{11}-\alpha & A_{12} & \dots & A_{1n}\\
A_{21} & A_{22}-\alpha & \dots & A_{2n}\\
\vdots & \vdots & & \vdots \\
A_{n1} & A_{n2} & \dots & A_{nn}-\alpha \\
\end{pmatrix}
= 0

を固有値$a$が満たすとき、固有値方程式は零ではない解を持つ。
特性方程式の解が線形演算子$A$の固有値になる。

#### トレース
トレースとは、ある行列の対角成分の和のことです。
$\displaystyle Tr(A)=\sum^n_{i=1} A_{ii}$
3つの性質がある

(i) Tr(A+B)=Tr(A)+Tr(B)\\
(ii) Tr(cA)=cTr(A)\\
(iii) Tr(AB)=Tr(BA)\\

性質3よりトレースはユニタリ変換に対して不変になる。

\begin{eqnarray}
Tr(U^{\ast}AU) &=& Tr(U^{\ast}UA)
&=& Tr(A)
\end{eqnarray}

もう1つの性質が導ける。
正規直交基底$|i \rangle$、一般ベクトル$|\alpha \rangle$とする。

|\alpha \rangle = \sum_i \langle i|\alpha \rangle |i \rangle と展開できる。\\
\begin{eqnarray}
Tr(A|\alpha \rangle |\langle \alpha |) &=& \sum_i \langle i|A|\alpha \rangle \langle \alpha |i\rangle \\
&=& \sum_i  \langle \alpha |i\rangle \langle \alpha |i\rangle\langle i|A|\alpha \rangle \\
&=& \langle \alpha |A|\alpha \rangle
\end{eqnarray}

### 演算子
別名は、作用素、関数、変換、写像ともいう。
2つの集合が与えられたとき、片方の集合の各元(要素)に対し、もう片方の集合の1つの元(要素)を指定して結びつける対応のことです。

#### 線形演算子
演算子$A$が線形なもののことです。
演算子$A$はベクトル$|\alpha \rangle (|\alpha \rangle \in V)$を他のベクトル$|\beta \rangle(|\beta \rangle \in V)$に写像する。
つまり$|\beta \rangle = A |\alpha \rangle $
任意のベクトル$|\alpha \rangle , |\beta \rangle$と任意の複素数$a,b$に対して、
$A(a|\alpha \rangle + b|\beta \rangle) = aA|\alpha \rangle + bA|\beta \rangle$のとき、
演算子$A$は線形であると言える。
##### 行列表示
ベクトルの完全系を用いて、演算子$A$を正方行列で表せる。
一般のベクトル$|\alpha \rangle(|\alpha \rangle \in V)$に対する演算子$A$の作用$A|\alpha \rangle = |\beta \rangle $とする。
2つのベクトル$|\alpha \rangle, |\beta \rangle$を正規直交基底${|\gamma_1 \rangle, |\gamma_2 \rangle, \dots ,|\gamma_n \rangle }$で展開する。

|\alpha \rangle = \sum_i a_i |\gamma_i \rangle , |\beta \rangle = \sum_i b_i |\gamma_i \rangle

したがって、

\begin{eqnarray}
b_i &=& \langle \gamma_i|\beta \rangle \\
&=& \langle \gamma_i|A\alpha \rangle \\
&=& \sum_j \langle \gamma_i|A\gamma_j \rangle a_j \\
A_{ij} \equiv \langle \gamma_i|A\gamma_j \rangle とする。\\
&=& \sum_j A_{ij} a_j (i=1,2,\dots,n)
\end{eqnarray}

また、$\langle \gamma_i|A\gamma_j \rangle$は$\langle \gamma_i|A|\gamma_j \rangle$とも表記できる。

\begin{pmatrix}
b_1 \\
b_2 \\
\vdots \\
b_n
\end{pmatrix}
=
\begin{pmatrix}
A_{11} & \dots & A_{1n} \\
\vdots & \ddots & \vdots \\
A_{n1} & \dots & A_{nn}
\end{pmatrix}
\begin{pmatrix}
a_1 \\
a_2 \\
\vdots \\
a_n
\end{pmatrix}

ここで一般のベクトル

|\alpha \rangle = 
\begin{pmatrix}
a_1 \\
a_2 \\
\vdots \\
a_n
\end{pmatrix}

となる。つまり、$A_{ij}$を知れば、$|\alpha \rangle$に対する演算子$A$の作用を計算できる。
また、内積も次のように表示できる。

\begin{eqnarray}
\langle \alpha |\beta \rangle &=& \sum_i a^{\ast}_i b_i \\
&=& (a^{\ast}_1, a^{\ast}_2, \dots ,a^{\ast}_n)
\begin{pmatrix}
b_1 \\
b_2 \\
\vdots \\
b_n
\end{pmatrix}
\end{eqnarray}

#### 恒等演算子
線形演算子のひとつです。$I|\alpha \rangle = |\alpha \rangle$

#### 完全性の関係
$\displaystyle \sum_i |\alpha_i \rangle \langle \alpha_i| = I$のことです。
$a_i = \langle \alpha_i|\alpha \rangle (i=1,\dots,n)$から導くことができます。
$\displaystyle \sum_i |\alpha_i \rangle \langle \alpha_i|$は演算子である。

\begin{eqnarray}
(\sum_i |\alpha_i \rangle \langle \alpha_i|) |\alpha \rangle &=& \sum_i |\alpha_i \rangle \langle \alpha_i|\alpha \rangle \\
&=& \sum_i a_i |\alpha_i \rangle \\
&=& |\alpha \rangle \\
\end{eqnarray}

#### 射影演算子
$|\alpha \rangle \in V$が単位ベクトルのとき、1次元射影演算子$P_{\alpha}$は、任意のベクトル$|\gamma \rangle \in V$に対して定義する。

\begin{eqnarray}
|\beta \rangle &=& P_{\alpha} |\gamma \rangle
&=& |\alpha \rangle \langle \alpha |\gamma \rangle
&=& \langle \alpha |\gamma \rangle |\alpha \rangle
\end{eqnarray}

$P_{\alpha}$は一般のベクトル$|\gamma \rangle$を$|\alpha \rangle$に沿う方向に射影する。
また、$P_{\alpha}|\alpha \rangle = |\alpha \rangle$であり、$|\alpha \rangle と|\gamma \rangle$が直交するとき
$P_{\alpha} |\gamma \rangle = 0$
また、$P_{\alpha}^2 = P_{\alpha}$という性質を満たす。
多次元部分空間への射影に拡張する。
$\displaystyle P = \sum^k_{l=1} |\alpha_l \rangle \langle \alpha_l |$
$k$は演算子$P$が射影する部分空間の次元である。

#### 逆演算子
線形演算子$A$を考える。
$AB=BA=I$となる演算子$B$を$A$の逆演算子という。$B=A^{-1}$と表します。
$|\beta \rangle = A|\alpha \rangle$とすると$|\alpha \rangle = A^{-1}|\beta \rangle$

#### エルミート演算子
ヒルベルト空間$H$上の任意の線形演算子$A$に対して、$A$の随伴またはエルミート共役という$H$上の線形演算子$A^{\dagger}$が存在する。
$\langle \alpha |A\beta \rangle = \langle A^{\dagger}\alpha |\beta \rangle$
特に、$A^{\dagger} = A$のとき、$A$をエルミートまたは自己随伴という。
エルミート演算子の固有値は実数になる。

A|\alpha \rangle = \alpha |\alpha \rangle とする。\\
\langle \alpha |A\alpha \rangle = \alpha \langle \alpha |\alpha \rangle 

$\langle \alpha |A\beta \rangle$も$\langle \alpha |\alpha \rangle$も実数より、固有値$\alpha$も実数となる。

#### ユニタリ演算子
演算子$U$について、$UU^{\dagger}=U^{\dagger}U=I$が成り立つとき、$U$をユニタリ演算子といいます。
ユニタリ演算子の性質

  1. 逆演算子に一致する。$U^{\dagger} = U^{-1}$
  2. ユニタリ演算子の積もユニタリ演算子である。$(UV)(UV)^{\dagger} = UVV^{\dagger}U^{\dagger} = I$
  3. ベクトルの内積を保存する性質があります。
|\gamma \rangle \equiv U|\alpha \rangle\\
|\mu \rangle \equiv U|\beta \rangleとする。\\
\begin{eqnarray}
\langle \gamma|\mu \rangle &=& \langle U\alpha|U\beta \rangle\\
&=& \langle \alpha|U^{\dagger}U|\beta \rangle\\
&=& \langle \alpha|\beta \rangle\\
\end{eqnarray}

$|\alpha \rangle = |\beta \rangle$とすると、ユニタリ演算子はベクトルのノルムを変えないことがわかる。
つまり、ヒルベルト空間におけるユニタリ演算子のベクトルへの作用は、
ユークリッド空間における回転と同様にベクトルの長さとベクトルの間の角を保存する。

#### 基底の変換
ユニタリ変換$S$によって正規直交基底$|\gamma_i \rangle$から他の基底$|\gamma_i^{'} \rangle$に変換することができる。

#### スペクトル分解定理
演算子が正規のとき、固有値の正規直交基底で対角化可能である。

#### 交換子
2つの演算子$A,B$が$AB=BA$のとき、可換であるという。
交換子は$[A,B] \equiv AB-BA$と定義する。
交換子の性質

[A,B] = -[B,A]
[AB,C] = A[B,C]+[A,C]B

#### 同時対角化可能定理
演算子$A,B$の両方を対角化可能な正規直交基底が存在するとき、2つの正規演算子$A,B$は可換である。

## 補足的なキーワード
#### クロネッカーのデルタ
ドイツの数学者レオポルト・クロネッカーが定義した関数で、様々な場面で出てくる便利な関数です。

\delta_{ij} \equiv\left\{
\begin{array}{ll}
1 & (i=j) \\
0 & (i\neq j)
\end{array}
\right.

よく使う性質は以下のものです。

\sum_i a_i \delta_{ij} = a_j

#### コーシー-シュワルツ不等式
$|\langle \alpha|\beta \rangle|^2 \le \langle \alpha|\alpha \rangle \langle \beta|\beta \rangle$
不確定性原理の導出に使うことができます。

#### パウリ行列
スピン角運動量を表すために導入された行列のことです。エルミート行列です。
しかし、スピン角運動量以外のところでもよく使うため、覚えておいて損はないです。

\sigma_x =
\begin{pmatrix}
0 & 1 \\
1 & 0
\end{pmatrix}
,
\sigma_y =
\begin{pmatrix}
0 & -i \\
i & 0
\end{pmatrix}
,
\sigma_z =
\begin{pmatrix}
1 & 0 \\
0 & -1
\end{pmatrix}

# さいごに
簡単に見える計算でもなれるまでは、丁寧に計算してみてください。

メモ
エルミート行列はブラにもケットにもどちらから先に作用しても

# 参考文献
閲覧日2017/12/22 Qiita 【初心者向け】数式もプログラミングもなしで量子コンピュータを説明してみる
2009/05/30 初版 量子計算と量子情報の原理
2009/09/25 初版 物理のための数学入門

  1. 実用的でなく理論だけが発展している型は量子ゲート型です。素因数分解を用いたRSA暗号(公開鍵暗号)を解くには1億qubitが必要とされていますが、現状50qubit程度しか実現できていません。

15
12
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?