はじめてWindows11上でPythonのプログラミングをしたい方へ向けた：Anaconda × PyTorch / Tensorflow on Win11 の開発環境を構築する手順

この記事は **「本当にはじめて、今日からPythonを触ってみよう」** と思われている方に向けた記事です。なぜ書こうと思ったかと言いますと、Windows11上で **"WSLを使わずに"** GPUを利用してPythonで機械学習を勉強する旨の記事が **「WSLを利用する手順を紹介する記事」** が多いことにより、検索で埋もれてしまい、ヒットしにくくなっているためです。また、 **すべてのスクリーンショットが明示されている手順書はあまりなさそう** なので、それも意識しました。

本手順を契機に、Python民が増えたら嬉しいです。

![computer-1185637_1280.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/ed9e075b-76ce-fb43-8ce7-a2187ade2c6b.jpeg)

#### 今回Python開発環境の構築に利用したPC

以下のスペックのPCで開発環境を構築しました。

- Windows 11 Pro/Home
- Intel Core i5-12600K
- GeForce RTX3060Ti 
  - GPU使いたい方向けなので、なくても問題ありません
  - ある程度(8GB over)のメモリを搭載したGPUをご準備ください

#### 本記事の流れ

- GPU周りの開発に必要なライブラリやドライバをインストールする
- Anacondaをインストールする
  - Pythonを直接インストールしない
- Visual Studio Codeをインストールする
  - AnacondaとVSCodeの連携を設定する
- Pythonの仮想環境を定義する
  - 自動的にPythonがインストールされる
- PyTorch/TensorFlowをインストールする

## Anaconda on Windows11：インストール前の準備

まず、Anaconda3のインストールに際して、GPU周りを事前にセットアップします。 **Python環境は作りたいけどGPUは要らないよ**、という方は本節を読み飛ばしてください。

- GPUドライバを最新のものに更新する
  - NVIDIA CUDA/cuDNNを利用したいため
  - 今回はGPUとして「NVIDIA GeForce RTX3060Ti」を搭載しました
- CUDA + cuDNNをインストールする
  - 今回はGPUにRTX3060Tiを利用します
  - CUDA 12.6 Update 3
  - cuDNN 9.6.0

### NVIDIA GPUドライバを最新版へと更新する

事前に、WindowsにインストールされているNVIDIAのGeForceドライバーを最新のものにアップデートします。[GeForceドライバー](https://www.nvidia.com/ja-jp/geforce/drivers/)より **「ドライバーの自動更新」-「今すぐダウンロード」** をクリックし最新の状態に更新してください。

![スクリーンショット 2025-01-03 015010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/6f65f14d-6888-26c1-1c9f-0cf1c4de6c27.png)

![スクリーンショット 2025-01-21 003006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/7e9d66c8-6bbb-7c93-2e66-5c9860257659.png)

### CUDA 12.6 Update 3をインストールする

続いてGPUを汎用的な演算へ利用できるようにする **「CUDA」** をインストールします。

#### ダウンロードとインストール

下記のWebサイトへアクセスし **「Windows」-「x86_64」-「Windows11」-「exe(local)」** を選択して、表示されるインストーラーをダウンロードしてインストールしてください。

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

![スクリーンショット 2025-01-21 000550.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/70f25c5c-56fc-bf23-593b-74e16324b1c2.png)

#### インストール後の確認

インストール後、スタートメニューから **「環境変数」** を開いて、 **「システム環境変数」** に **「CUDA_PATH」「CUDA_PATH_V12_6」** が含まれていることを確認してください。

![スクリーンショット 2025-01-21 022637.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/71635bcf-a7c1-4a7d-f52d-ae47b43ce6f8.png)

![スクリーンショット 2025-01-21 003912.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/7f5c9ad3-dd93-5589-e9b1-9f62f67c32f1.png)

#### PowerShellから「nvidia-smi」でGPUが見えることを確認する

Windowsのスタートボタンを右クリックして **「ターミナル(管理者)」** を選択し、開いたターミナル上で `nvidia-smi` を実行し、以下の画面が表示されることを確認してください。この確認により **「インストールされたCUDAのバージョン」** と **「インストールされているGPUドライバのバージョン」** を見ることができます。

![スクリーンショット 2025-01-21 003958.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/86e0c61f-356d-c7ce-69c1-196551b51da6.png)

### cuDNN 9.6.0をインストールする

CUDAと同様にして **「cuDNN」** をインストールします。cuDNNはCUDAをDeep-Learning-Neural-Networkから利用できるようにするためのミドルウェアです。Windows10向けのインストーラーしかありませんが、Windows11環境であってもWindows10のインストーラーでインストールして問題ありません。 **「Windows」-「x86_64」-「Windows10」-「exe(local)」** を選択して表示されたインストーラーを利用してください。

https://developer.nvidia.com/cudnn-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exe_local

![スクリーンショット 2025-01-21 000337.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/bb5501d7-1143-33b6-585f-f270b6cf3da2.png)

## Anaconda3をインストールする

それでは、いよいよPythonをインストールしていきましょう。Pythonのインストールでは、直接Pythonをインストールするのではなく、 **「Anacoda3」** と呼ばれるPythonの仮想環境（Pythonと開発に必要なライブラリを含んだ小さな箱）を定義するための **開発をサポートするアプリケーション** をインストールし、**Pythonの仮想環境を作る際にAnaconda3経由でPythonをインストールします。**

#### Anaconda3をダウンロードする

まず、下記のサイトへアクセスし、Pythonをダウンロードしてください。

https://www.anaconda.com/download

![スクリーンショット 2025-01-20 234601.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/6205ab12-9945-0fca-8ab8-ffb7b2738623.png)

![スクリーンショット 2025-01-20 234613.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/05cfb8a2-207d-4408-ce43-54d5215fd3d7.png)

![スクリーンショット 2025-01-20 234639.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/b71a506d-4e61-6de4-be74-669635dc8139.png)

ダウンロード完了後、インストールします。

#### Anaconda3をインストールする

ダウンロードしたファイルを開き、インストールを開始します。

![スクリーンショット 2025-01-20 234655.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/803b5dbc-4498-7cb4-25b2-9f382c4e1ba6.png)

![スクリーンショット 2025-01-20 234701.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/acce75b9-3a42-6feb-b878-d95b9a994bb9.png)

![スクリーンショット 2025-01-20 234708.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/dfea900f-6ebc-6955-abba-db90dd62f303.png)

インストール先は **パスに空白や日本語文字列が含まれない** `C:¥Anaconda3¥` としました。

![スクリーンショット 2025-01-20 234740.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/d296357e-9bbc-381f-b2e3-5d76b0a752ba.png)

![スクリーンショット 2025-01-20 234753.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/12227291-ce19-b10e-8676-c2580e3c480b.png)

![スクリーンショット 2025-01-20 235228.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/c9d4c07e-c1d4-4103-84de-286fac2dda06.png)

以上でAnaconda3のインストールは完了です。

### Anacondaを初期化する

Anacondaを使う準備を進めていきましょう。

#### condaコマンドを実行できるように環境変数を設定する

Anacondaを利用するには、環境変数 **「PATH」** に、Anacoda3をインストールしたフォルダー内にある `Scripts` が指定されていると都合が良いです。 **環境変数を開き、PATHに対して編集を行い `C:¥Anaconda3¥Scripts` を指定** します。<font color="red">**ここまで来たら一旦Windowsを再起動してください。**<font/>

![スクリーンショット 2025-01-21 022637.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/71635bcf-a7c1-4a7d-f52d-ae47b43ce6f8.png)

![スクリーンショット 2025-01-21 015227.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/d7205765-923c-d340-0626-9f432891aaaa.png)


#### condaを実行できるようポリシーを追加する

続いて、Anacondaのコマンドである `conda` を呼び出せるように、Windows Power Shellから設定を行います。Windowsスタートボタンを右クリックし **「ターミナル(管理者)」** を開き、下記のコマンドを入力し、 **警告なくコマンドを実行できる** ようにします。

https://qiita.com/udon_udon/items/93b253da1f618b6b945e

```powershell
$ Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
```

#### conda initを実行する

**「ターミナル(管理者)」** 上で `conda init` を実行し、初期化を行います。最後に `conda info -e` を入力すると、現在の、Pythonの仮想環境がインストールされていない状態を確認することができます。 <font color="red">**ここまで来たら一旦Windowsを再起動してください。**</font>

```powershell
$ conda init
# no change     C:\Anaconda3\Scripts\conda.exe
# no change     C:\Anaconda3\Scripts\conda-env.exe
# no change     C:\Anaconda3\Scripts\conda-script.py
# no change     C:\Anaconda3\Scripts\conda-env-script.py
# no change     C:\Anaconda3\condabin\conda.bat
# no change     C:\Anaconda3\Library\bin\conda.bat
# no change     C:\Anaconda3\condabin\_conda_activate.bat
# no change     C:\Anaconda3\condabin\rename_tmp.bat
# no change     C:\Anaconda3\condabin\conda_auto_activate.bat
# no change     C:\Anaconda3\condabin\conda_hook.bat
# no change     C:\Anaconda3\Scripts\activate.bat
# no change     C:\Anaconda3\condabin\activate.bat
# no change     C:\Anaconda3\condabin\deactivate.bat
# no change     C:\Anaconda3\Scripts\activate
# no change     C:\Anaconda3\Scripts\deactivate
# no change     C:\Anaconda3\etc\profile.d\conda.sh
# no change     C:\Anaconda3\etc\fish\conf.d\conda.fish
# no change     C:\Anaconda3\shell\condabin\Conda.psm1
# no change     C:\Anaconda3\shell\condabin\conda-hook.ps1
# no change     C:\Anaconda3\Lib\site-packages\xontrib\conda.xsh
# no change     C:\Anaconda3\etc\profile.d\conda.csh
# no change     C:\Users\ixiv2\OneDrive\ドキュメント\WindowsPowerShell\profile.ps1
# no change     HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
# No action taken.

$ conda info -e
# conda environments:
#
# base                  *  C:\Anaconda3
```

![スクリーンショット 2025-01-21 014442.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/2c17076b-2f1e-06f3-798f-f0380066f246.png)


## Visual Studio Codeをインストールする

Visual Studio Codeは広く利用されているプログラムの開発環境です。様々な拡張機能を追加することにより、あらゆる言語のプログラムの実装やデバッグをすることができます。 **下記のサイトからインストーラーをダウンロードしてインストールしてください。**

https://code.visualstudio.com/

![スクリーンショット 2025-01-21 030230.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/270c8772-fe5c-eb25-d8f5-bfc7f86e7ef0.png)

インストールするとWindowsスタートメニューから、それを確認することができます。 **拡張機能をインストールするため** に、早速、Visual Studio Codeを起動してください。

![スクリーンショット 2025-01-21 001809.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/9dae4a22-6c00-4815-85e6-14ef50cf51ba.png)

### Visual Studio Codeに拡張機能をインストールする

Visual Studio Code左端にあるメニューから **「拡張機能」** を選択し、以下の拡張機能をインストールしてください。インストール後、 <font color="red">**Visual Studio Codeを再起動してください。**</font>

- **Japanese Language Pack for Visual Studio Code**
- **Python**
- **Jupyter**
- Remote Development (今回は特に利用しません)
- WSL (今回は特に利用しません)
- Docker (今回は特に利用しません)

![スクリーンショット 2025-01-21 025548.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/75c70505-9b25-744c-e2b9-6c3ad84d00ab.png)

### Python拡張機能を設定する

Visual Studio CodeとAnacondaを連携できるように設定を行います。
まず、スタートメニューから **「Anaconda Prompt」** を開いてください。

![スクリーンショット 2025-02-19 150950.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/8f811caf-be49-4922-aeed-628f937cbed0.png)

次に、プロンプト上で **`where python`** と **`where conda`** を実行します。
これらがPythonを開発するためのツールとなりますので、VSCodeに設定します。

![スクリーンショット 2025-02-19 150555.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/2ffe90da-725b-4ffc-b667-c5cf81be3df8.png)

Visual Studio Codeの拡張機能を開き **「Python」** を選択した後、画面右上にある **「歯車マーク」** をクリックし **「設定」** 画面を開いてください。

![スクリーンショット 2025-02-19 150457.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/7b2c4781-1922-4cf6-a424-cd8f7e5436d4.png)

設定画面の **`Conda Path`** には `where conda` で調べたパスを指定し、**`Default Interpreter Path`** には `where python` で調べたパスを指定してください。

![スクリーンショット 2025-02-19 150517.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/4c96bd3b-9622-4c82-9fff-de7b21f312b9.png)

以上の設定により、Visual Studio CodeでPythonのコードを開いた際に、その実行環境としてAnacondaで作成したPythonの仮想環境を選択できるようになります。

**設定後、アプリを再起動しましょう。**


## Visual Studio CodeからPyTorchを利用する

Windowsスタートボタンを右クリックし **「ターミナル(管理者)」** からAnacondaを操作して、Pythonの仮想環境を作成します。ここでは、機械学習系で広く利用される **「PyTorch」** と **「TensorFlow(GPU)」** のセットアップ手順を紹介ます。

### PyTorchをインストールする

以下のコマンドを実行し、PyTorchをインストールするための仮想環境を作成します。

```powershell
# Pythonの仮想環境を作成する
$ conda create -n first_pytorch python=3.12

# Pythonの仮想環境にログインする
$ conda activate first_pytorch

# Pythonのバージョンを確認する
(first_pytorch) $ python --version
# Python 3.12.8
```

続いて、PyTorchのWebサイトからPyTorchをインストールするためのコマンドを確認します。このとき、CUDAのバージョンを指定する必要があります。今回は **「12.6 Update3」** をインストールしていますので、最もバージョンの近い **「CUDA 12.4」** を選択しました。

https://pytorch.org/get-started/locally/

![スクリーンショット 2025-01-21 010229.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/e57d60eb-8539-641c-97e2-2fc075df773c.png)

ターミナルで指定されたコマンドを実行します。

```powershell
(first_pytorch) $ pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
```

PyTorch以外にも機械学習を実装する際に必要となるであろうライブラリをインストールしておきます。 **「ipykernel」** をインストールすることにより **「.ipynb拡張子」** のPythonスクリプトを作成した際に、対話形式でPythonのプログラムを実装することができます。

```powershell
(first_pytorch) $ pip install ipykernel
(first_pytorch) $ pip install numpy
(first_pytorch) $ pip install matplotlib
(first_pytorch) $ pip install pillow
(first_pytorch) $ pip install opencv-python
(first_pytorch) $ conda install opencv
```

### 作業フォルダーを開く

Visual Studio Codeの **「フォルダーを開く」** をクリックし、開発の作業に利用するフォルダを開きます。フォルダーはどこを選択しても問題ありませんが、今回は `C:¥python_sandbox` を作成し、選択しました。

![スクリーンショット 2025-01-21 002202.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/d43fcbc9-8547-b24c-78fb-d24d6b3e5a8c.png)

警告が出ますが、問題なければ **「作成者を信頼します」** をクリックします。

![スクリーンショット 2025-01-21 002211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/0a557ac3-7986-72c7-b792-f08b8dce37af.png)


### Visual Studio CodeからPython仮想環境を利用する

作業フォルダーに `first_pytorch.ipynb` ファイルを作成します。これにより対話型のプログラム実装画面が表示されます。右上に表示されている **「カーネルの選択」** をクリックし、Pythonの仮想環境を選択します。

![スクリーンショット 2025-01-21 023737.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/b4df6c68-c78a-1430-8ad2-9751083feb3f.png)

今回は先の手順で作成した **「first_pytorch」** を利用したいので **「別のカーネル」-「Python環境」-「first_pytorch」** を選択します。

![スクリーンショット 2025-01-21 023746.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/ae8c8b81-f5ee-f8e4-3b63-3927c64d520e.png)

![スクリーンショット 2025-01-21 023757.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/fbca969a-97e8-f37b-7175-1345fcc4e6e3.png)

![スクリーンショット 2025-01-21 023806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/f591ed95-0c55-2adb-1421-995a8ea1699d.png)


### GPUを認識できていることを確認する

最後に、以下のソースコードを実行し、Pythonの仮想環境構築の際にインストールした **「PyTorch」** をimport(`import torch`)することが出来て、`cuda.is_available()` を実行しGPUが利用できるようになっていることを確認しましょう。

```python
import torch
torch.cuda.is_available()
```

![スクリーンショット 2025-01-21 024106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/811f2a95-92a7-2db5-b43d-f243a3c847ed.png)



## Visual Studio CodeからTensorflowを利用する

続いて、 **PyTorch向けとは別の新しいPythonの仮想環境** を定義し、 **「TensorFlow(GPU)」をインストール** します。機械学習のフレームワークはひとつの仮想環境に全部詰め込むのではなく、利用するフレームワークごとに仮想環境を定義した方が良いです。 **これは、機械学習のフレームワーク間で依存するライブラリが衝突するためです。** 

### TensorFlowをインストールする

ターミナルから以下のコマンドを実行して、TensorFlow(GPU)を含んだPython仮想環境を定義します。 **仮想環境を作成する際に `tensorflow=*=gpu_*` を指定** することにより、TensorFlow(GPU)を実行するために最適なPythonの仮想環境を定義することができます。

https://qiita.com/yusuke_s_yusuke/items/dbe530ff7687603a81f6#gpu%E5%AF%BE%E5%BF%9C%E3%81%AEtensorflow%E3%81%AE%E7%92%B0%E5%A2%83%E4%BD%9C%E6%88%90:~:text=GPU%E5%AF%BE%E5%BF%9C%E3%81%AETensorFlow%E3%81%AE%E7%92%B0%E5%A2%83%E4%BD%9C%E6%88%90

```powershell
# Python仮想環境を作成する
$ conda create --name first_tensorflow tensorflow=*=gpu_*
# ...

# Python仮想環境にログインする
$ conda activate first_tensorflow

# Pythonのバージョンを確認する
(first_tensorflow) $ python --version
# Python 3.10.13

# 必要なライブラリをインストールする
(first_tensorflow) $ pip install ipykernel
(first_tensorflow) $ pip install numpy
(first_tensorflow) $ pip install matplotlib
(first_tensorflow) $ pip install pillow
(first_tensorflow) $ pip install opencv-python
```

### Visual Studio CodeからPython仮想環境を利用する

Visual Studio Codeでカーネルを切り替えることにより、TensorFlowを利用することが出来ます。ここでも `first_tensorflow.ipynb` ファイルを作成して、作業を行います。

![スクリーンショット 2025-01-21 023737.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/b4df6c68-c78a-1430-8ad2-9751083feb3f.png)

![スクリーンショット 2025-01-21 023746.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/ae8c8b81-f5ee-f8e4-3b63-3927c64d520e.png)

![スクリーンショット 2025-01-21 023757.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/fbca969a-97e8-f37b-7175-1345fcc4e6e3.png)

![スクリーンショット 2025-01-21 024700.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/03c56505-6b94-6754-3f64-8ddbae87de1b.png)

### GPUを認識できていることを確認する

最後に、下記のソースコードをプログラム上へ貼り付け、TensorFlowからGPUを利用できることを確認してください。出力に **`GPU` や「グラフィックボードの型番」等の表記が含まれていれば、問題ありません。**

```python
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
```

![スクリーンショット 2025-01-21 014808.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3919880/7ecaf706-5689-b1db-ef3f-a08fa6724aec.png)


----

昨晩、突然、PyTorch本を勉強したいという方が現れまして、突貫工事で記事を書きました。 **本手順を利用することによりWindows11上でPyTorchやTensorFlow(GPU)のフレームワークを利用した機械学習を勉強できる** かと思います。

是非、みなさまの開発にお役立てください。

----

#### 関連記事

https://qiita.com/xtrizeShino/items/0ccaae2d31ae85a929dd

https://qiita.com/xtrizeShino/items/096fb800891c4525a576

https://qiita.com/xtrizeShino/items/56125ef057c6e88b4302

https://qiita.com/xtrizeShino/items/abe5b9caaadecbd1efd6

https://qiita.com/xtrizeShino/items/56e3c1e027107debe331

#### 関連書籍

https://www.amazon.co.jp/dp/4807920383/

https://www.amazon.co.jp/dp/4839974691/

----

### 補足：TensorFlowでGPUを無効化する

TensorFlow x GPUの環境を組んではみたものの、GPUが古く、性能が伸び悩んだり、GPUに搭載されているメモリ量が少なく、AIの学習を実行できない場合、 **TensorFlowでは、GPUそのものを無効化** することができます。以下のコードをご利用ください

https://www.tensorflow.org/api_docs/python/tf/config

https://zenn.dev/dhirooka/articles/225da863f2659a#mirroredstrategy

```python
import tensorflow as tf

gpus = tf.config.list_physical_devices('GPU')
print('Available GPUs:', gpus)
tf.config.set_visible_devices(gpus[:0], 'GPU')
logical_gpus = tf.config.list_logical_devices('GPU')
print('Visible logical gpus:', logical_gpus)
```

TensorFlow v1を利用されている方は以下の記事が参考になりそうです。

https://qiita.com/kikusumk3/items/907565559739376076b9

----