Pythonで〇×ゲームのAIを一から作成する　その2　Python のプログラムの記述と実行

# 目次と前回の記事

https://qiita.com/ysgeso/items/2381dd4e3283cbed49a0

https://qiita.com/ysgeso/items/04deccdfe7ec15314c48

# Python のインストール

:::note
既に、Python をインストール済の方は、この部分は読み飛ばしてください
:::

Python のプログラムを記述するためには、Python をインストールする必要があります。

Python をインストールには様々な方法がありますが、本記事ではフリーソフトである Anaconda をインストールする方法を紹介します。Anaconda は Python のプログラムの開発環境で、データサイエンスに関係するツールなどを提供するプラットフォームです。

Anaconda をインストールすると、__Python も同時にインストール__ されます。下記のページを開き、「Download」ボタンをクリックしてダウンロードされたファイルを実行することで、Anaconda をインストールすることができます。

https://www.anaconda.com/

# 仮想環境とは何か

:::note
仮想環境の作成方法を既に知っている方は、ご自身のやりやすい方法で仮想環境を作成してもかまいません。その場合は、以下の仮想環境に関する話は読み飛ばしてください。
:::

Anaconda をインストールした理由の一つは __仮想環境の作成のしやすさ__ です。

Python では、プログラムを実装する際に、モジュールやパッケージ[^1]と呼ばれる __他人が作成した Python のプログラム__ をよく利用します。

:::note
モジュールとパッケージは、意味をよく混同して使われている用語です。例えば Python で非常に良く使われる numpy という有名なパッケージは性質的には「パッケージ」ですが、サーチエンジンで検索すると numpy を「モジュール」と表記する記事が多数見つかります。また、文中で毎回「モジュールやパッケージ」のように表記するのは冗長なので、本記事では以後は __モジュール__ という用語で統一することにします。
:::

モジュールの多くは、バージョンアップによって機能が更新されていきます。また、バージョンアップによって、__一部の機能の処理の内容が変化したり__、場合によっては __それまで使えていた機能が使えなくなる__ といったことがよくあります。その結果、以下のような困ったことが起きてしまうことがあります。

* あるプログラムを実装する際に __バージョン2.0 の A__ というモジュールが必要になったので、そのモジュールをインストールしてプログラムを実装した
* 別のプログラムを実装する際に、__バージョン3.0 の A__ というモジュールが必要になったので、バージョン2.0 をアンインストールし、バージョン3.0 のモジュールをインストールしてプログラムを実装した
* バージョン 2.0 をアンインストールしてしまったため、__最初に実装したプログラムが動作しなくなってしまった__

上記以外にも、プログラムで複数のモジュールを同時に使用する際に、それぞれのモジュールが __特定のバージョンの組み合わせでなければ正しく動作しない__ ということもあります。

上記の問題を解決するために、モジュールを利用した Python のプログラムを実装する際に、仮想環境と呼ばれるものを作成するのが一般的です。仮想環境は複数作成することができ、__仮想環境ごとに異なるバージョンのモジュールを別々にインストール__ することができます。プログラムを実装する際には、作成した仮想環境から 1 つを選択して実装します。

先ほどの例では、以下のようすることで、異なるバージョンのモジュールが必要な 2 つのプログラムを実装して実行できるようになります。

* バージョン 2.0 の A というモジュールをインストールした仮想環境を作成し、その仮想環境を選択して最初のプログラムを実装する
* バージョン 3.0 の A というモジュールをインストールした仮想環境を作成し、その仮想環境を選択して次のプログラムを実装する

:::note warn
初心者の方は、上記の説明の意味がピンとこないかもしれません。その場合は、以下の内容を覚えて次に進んで下さい。

Python では __モジュールをインストール__ する必要があるようなプログラムを実装する場合は __仮想環境を作成__ し、必要なモジュールをその仮想環境にインストールしてからプログラムを実装するのが一般的
 
Python のプログラミングの経験を積めば、上記の説明の意味が分かるようになると思います。
:::

:::note
Anaconda をインストールすると、自動的に base という名前の仮想環境がインストールされます。base には、Python で良く使用されるモジュールが __あらかじめインストール__ された状態になっています。

プログラムごとに仮想環境を作成するのは面倒なので、base にインストールされているモジュールだけで実装できるようなプログラムを記述して実行したい場合は、新しい仮想環境を作らずに、base の仮想環境で実行すると良いでしょう。

ただし、__base にインストールされていないモジュール__ のインストールが必要になった場合は、その時点で __仮想環境を作成したほうが良い__ でしょう。本記事ではいくつか base にインストールされていないモジュールを利用するので、仮想環境を作成することにします。
:::

# Anaconda Navigator で仮想環境を作成する方法
Anaconda では、「Anaconda Navigator」 というアプリを使って、仮想環境を簡単に作成することができます。まず、Windows のスタートメニューから、「Anaconda Navigator」を探して実行して下さい。しばらくすると Anaconda Navigator のウィンドウが開かれるので、以下の手順で仮想環境を作成して下さい。

:::note
Anaconda Navigator を起動するとパネルが表示され、新しいバージョンにアップデートするかどうかを英語のメッセージで聞いてくる場合があります。その場合は、時間があればなるべく「Yes」をクリックしてアップデートしておいたほうが良いでしょう。
:::

1. 左にある「Environments[^2]」をクリックする
2. 下にある「Create」ボタンをクリックする
3. Name の右のテキストボックスに仮想環境の名前を入力する。本記事では __marubatsu__ という名前を入力しましたが、この名前は好きな名前にしてもらってもかまいません
4. Package の右の「Python」のチェックボタンが選択されていることを確認する。その右のメニューで、仮想環境で利用する Python のバージョンを選択できる。Python のバージョンについて詳しく知りたい方はは、下記のノートを見て下さい
5. Create ボタンを押すと、仮想環境の作成が開始される。しばらく待つと仮想環境の作成が完了する

:::note
Python にもバージョンがあり、Python のバージョンによって動作しないようなモジュールが存在します。そのため、仮想環境では Python のバージョンを指定することができるようになっています。

本記事では、本記事執筆時の 2023 年 8 月時点での最新バージョンである「3.11.4」を選択しましたが、Python のバージョンが多少違っていても本記事のプログラムは問題なく動作すると思います。最初からメニューに表示されているバージョンでもかまいませんし、メニューの中から最新のバージョンを選んでも良いでしょう。
:::

# 他の仮想環境の構築の方法

:::note
この部分はおまけなので、読み飛ばしても構いません
:::

仮想環境は他の方法でも作成できます。一つは、Anaconda をインストールすると自動的にインストールされる、`conda`というコマンドを利用する方法です。conda というコマンドを利用するためには、conda のコマンドの使い方を学ぶ必要があるため、初心者向けではありませんが、Anaconda Navigator よりもきめ細かい仮想環境に対する操作を行うことができます。conda を使う場合、以下の手順で仮想環境を作成できます。

1. スタートメニューから、「Anaconda Powershell Prompt (anaconda3)」を選択して実行する
2. 表示される黒いウィンドウに、以下の内容をキーボードで入力し、エンターキーを押す。なお、-n の後ろには仮想環境の名前を、python= の後ろには Python のバージョンを記述する
`conda create -n marubatsu python=3.11.4`
3. しばらくすると画面に`Proceed ([y]/n?)`が表示されるのでエンターキーを押す

他にも、`venv`[^3] というコマンドを使って仮想環境を構築することもできますが、こちらの方法は割愛します。興味がある方は調べてみると良いでしょう。

# Visual Studio Code のインストール

次に、Python のプログラムを記述するためのソフトをインストールする必要があります。本記事では、フリーソフトで最近ではプログラムの開発環境として良く使われている Visual Studio Code（長いので、今後は VSCode と表記します） を使用することにします。VSCode のインストールがまだの方は、下記の手順でインストールして下さい。

https://azure.microsoft.com/ja-jp/products/visual-studio-code

1. 上記のページを開き、「Visual Studio Code をダウンロードする」をクリックする
2. Windows の場合は、開かれたページの「User Installer x64」をクリックする
3. ダウンロードされたファイルを開いてインストールを開始する。

# VSCode の拡張機能のインストール

VSCode は「拡張機能」をインストールすることで、機能を拡張することができます。
例えば、VSCode は初期設定では、メニューなどが英語で表示されますが、以下の手順で日本語化の拡張機能をインストールすることで、メニューなどを日本語化することができます。

1. VSCode のウィンドウの左にある、拡張機能のボタン（下の画像）をクリックする<br><img width="30" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524802/0953b9a4-7b88-f0aa-2ec0-3731d99c3296.png">
2. 上にある拡張機能を検索するテキストボックスに「Japanese」を入力する
3. テキストボックスの下の検索結果の中に表示される「Japanese Language Pack for Visual Studio Code」の横にある「install」ボタンをクリックする
4. インストールが完了したら、VSCode のウィンドウを一旦閉じて、VSCode を立ち上げなおす

VSCode で Python のプログラムを記述する場合は、「Python」という拡張機能をインストールすると便利です。上記と同様の手順で、「Python」という拡張機能をインストールして下さい。

# JupyterLab での Python のプログラムの作成と実行

本記事では、Python のプログラムを __JupyterLab__ を使って記述して実行します。JupyterLab は Python のプログラムを対話形式で記述して実行でき、実行結果を残して置けるという特徴があり、人気のある Python の実行環境です。VSCode で JupyterLab を利用するには、「Jupyter」という拡張機能を上記と同様の手順でインストールして下さい。

:::note
JuptyterLab は、Anaconda Navigator からボタンをクリックしてウェブブラウザ上で実行することもできますが、ブラウザで JupyterLab を実行すると個人的に動作が重い気がするので、本記事では VSCode 上で実行しています。
:::

環境が整ったので、VSCode で、Python の簡単なプログラムを入力して実行してみます。VSCode を起動し、以下の手順を実行して下さい。入力するプログラムの `print` は `()` の中の式の計算結果を出力する Python の組み込み関数[^4]です。

<ol>
<li>「ファイル」メニュー→「新しいファイル」→「Jupyter Notebook」を選択し、新しい、JupyterLab のファイルを作成する。</li>
<li>作成されたファイルの中に表示されるテキストボックスに、下記のプログラムを入力し、Shift キー を押しながら エンターキーを押す。</li>

```python
print(1 + 2)
```

<li>VSCode の上部に、入力した Python のプログラムを実行する仮想環境を選択する「カーネルの選択」のメニューが表示されるので、その中から「marubatsu」（または自分で作成した仮想環境）を選択する。仮想環境が表示されない場合は、「別のカーネルを選択」、「Python環境」などをクリックすると良い。</li>
<li>`'marubatsu' でセルを実行するには、ipykernel パッケージが必要です`というパネルが表示されるので、「インストール」ボタンをクリックする。</li>
</ol>

上記の操作を行って、`1 + 2` の計算結果である`3`が表示されればプログラムは正しく実行されています。

:::note
既に ipykernel がインストール済の場合は、手順 4. のメッセージは表示されません。
また、手順 4. を実行した後で、プログラムが正しく実行された場合は、ipykernel に関する下記の説明は読み飛ばしてもかまいません。
:::

ただし、本記事のように、python のバージョンが 3.11.4 で仮想環境を作成した場合、下記のようなメッセージが表示されるかもしれません。

```
'marubatsu' でセルを実行するには、 ipykernel パッケージが必要です。
Run the following command to install 'ipykernel' into the Python environment. 
Command: 'conda install -n test3 ipykernel --update-deps --force-reinstall'
```

このメッセージは、先ほどの「手順4」で ipykernel という、JupyterLab に必要な Python のパッケージのインストール操作が失敗したことが原因です。そのため、別の方法で ipykernel をインストールする必要があります。

:::note
試しに、Python のバージョンが 3.8.13 で別の仮想環境を作成し、その仮想環境で上記の手順を実行した所、手順4で問題なく ipykernel をインストールできました。何故、Python のバージョンが 3.11.4 の場合は上記の「手順4」がうまくいかないかの原因は不明ですが、Python やモジュールのバージョンの組み合わせなどによって、このようなことが起きることは実際によくあります。はじめてそのようなことを体験すると初心者のうちは何をしてよいかわからなくなりがちですが、何度か体験しているとある程度は落ち着いて対処できるようになります。そこで、本記事ではそのような体験をしてもらおうと思い、あえてエラーの出る方法を紹介しました。

追記：別の Windows の PC で、Python のバージョンが 3.11.4 の仮想環境を作成して上記の操作を行った場合は、上記の手順 4. で問題なく ipykernel をインストールすることができました。VSCode にインストールした拡張機能や、PC にインストールされている他のソフトなどが関係しているのかもしれませんが、原因は謎です。
:::

# ipykernel のインストール方法

:::note
ipykernel がうまくインストールできた、または既にインストール済の人はこの部分は読み飛ばしてください
:::

まず、Anaconda Navigator で ipykernel をインストールする方法を説明します。以下の手順でインストールして下さい。

1. Anaconda Navigator を立ち上げる
2. 左の Environments をクリックして表示される仮想環境の一覧から marubatsu をクリックすると、右に marubatsu の仮想環境にインストールされているモジュールの一覧が表示される
3. 上のメニューから「Not installed」を選択し、その右の「Search packages」と表示されたテキストボックスに「ipykernel」を入力する
4. 下に ipykernel が表示されるので、その左のチェックボックスをチェックし、下の「Apply」ボタンをクリックする。    
5. 「Install packages」というパネルが表示され、しばらく待つと「Apply」ボタンがクリックできるようになるのでクリックする。 

しばらく待つとインストールが完了するので、VSCode で、先ほど入力した `print(1 + 2)`をクリックし、Shiftキーを押しながらエンターキーを押すと Python のプログラムが実行され、下に `3` が表示されます。

:::note
他のモジュールも上記と同様の方法で、指定した仮想環境にインストールできます
:::

:::note
conda を使って ipykernel をインストールすることもできます。その場合は、以下の手順を実行して下さい。なお、このノートの内容は補足説明なので、コマンドの説明は割愛します。

1. スタートメニューから、「Anaconda Powershell Prompt (anaconda3)」を探して実行する
2. `conda activate marubatsu`を入力してエンターキー、marubatsu の仮想環境に入る
3. `print(1 + 2)`を実行した際に表示されたメッセージ通りに、`conda install -n test3 ipykernel --update-deps --force-reinstall`を入力してエンターキーを押す
:::

# JupyterLab で記述したプログラムの保存

うまくプログラムが実行できた場合は、marubatsu などの好きな名前を付けて VSCode でファイルを保存して下さい。ファイルの保存方法は他の一般的な Windows のアプリケーションと同様に、「ファイル」メニューから「上書き保存」や「名前を付けて保存」で行えます。上書き保存は Ctrl + S、名前を付けて保存は Ctrl + Shift + S のショートカットキー操作でも行うことができます。

なお、JupyterLab のデータを保存したファイルの拡張子は、`.ipynb` になります。

# JupyterLab の簡単な使い方の説明

JuptyerLab では、__セル__ という Python のプログラムを入力するためのテキストボックスにプログラムを入力します。

__セルの中__ をクリックすることでセルを __編集状態__ にし、その内容を編集できるようになります。

__セルの外のすぐ左__ をクリックすることでセルを __選択状態__ にすることができます。

セルの中に入力したプログラムは、セルの左にある三角形のボタンをクリックするか、__Shift キーを押しながらエンターキー__（以下、Shift + Enter と表記）を押すことで __実行する__ ことができます。また、プログラムの実行結果はセルのすぐ下に表示されます。

JupyterLab にはいくつかの便利なショートカットキー操作があります。それらのいくつかを以下に紹介します。なお、ショートカットキー操作のうち、インデントとコメントに関する操作については、それらの操作が必要になった時に説明します。

他にも便利なショートカットキー操作があるので、興味がある方は調べてみると良いでしょう。

__編集状態のセルのショートカットキー操作__

| 操作 | 意味 |
|:--|:--|
| Shift + Enter  | セルの中に記述したプログラムを実行し、次のセルを編集状態にする  |
| Ctrl + Enter  | セルの中に記述したプログラムを実行し、そのセルを選択状態にする  |
| ESC  | セルを選択状態にする  |
| Ctrl + ]  | セルの中で選択状態になっている行のインデントを増やす（右にずらす）  |
| Ctrl + [  | セルの中で選択状態になっている行のインデントを減らす（左にずらす）  |
| Ctrl + /  | セルの中で選択状態になっている行をコメントにする。既にコメントになっている場合はコメントを解除する  |

__選択中のセルのショートカットキー操作__

| 操作 | 意味 |
|:--|:--|
| A  | 選択中のセルの一つ前に新しいセルを追加し、そのセルを選択状態にする  |
| B  | 選択中のセルの一つ後に新しいセルを追加し、そのセルを選択状態にする  |
| X  | 選択中のセルを切り取る  |
| C  | 選択中のセルをコピーする  |
| V  | X や C で切り取ったりコピーしたセルを、現在選択中の次のセルに新しいセルとして張り付ける  |
| ↑  | 一つ前のセルを選択する  |
| ↓  | 一つ後のセルを選択する  |
| Enter  | 選択中のセルを編集状態にする  |
| Y  | 選択中のセルの形式をコードにする（下記のノートを参照）  |
| M  | 選択中のセルの形式をマークダウンにする（下記のノートを参照）  |

:::note
セルは Python のプログラムを入力して実行できる「コード形式」[^5]と、説明文などを表示できる「マークダウン形式」[^6]の2種類があります。

マークダウン形式のセルの中身は __プログラムとはみなされない__ ので、Shift + Enter を入力しても __実行されません__。

セルを選択中に __間違って M を押して__ セルがマークダウン形式になったため、__プログラムが実行できなくなる__ ことが良くあります。そのような場合は、Y キーを押してセルの形式をコード形式にして下さい。
:::

# 本記事で入力したプログラム

以下のリンクから、本記事で入力して実行した JupyterLab のファイルを見ることができます。

https://github.com/ysgeso/marubatsu/blob/master/002/marubatsu.ipynb

# 次回の記事

https://qiita.com/ysgeso/items/1b7b1abe942e2d10c0b4

[^1]:モジュールは Python のプログラムが書かれたファイルのことで、パッケージは複数の Python のプログラムをまとめたフォルダのことを表します。モジュールやパッケージの事を「ライブラリ」と呼ぶこともあります
[^2]:Environment は「環境」という意味を表す英単語です
[^3]:`conda`を利用するためには、Anaconda のインストールが必要ですが、`venv`は Anaconda をインストールしなくても利用できます
[^4]:あらかじめ用意されていており、いつでも利用できる関数のこと。組み込み関数の一覧は https://docs.python.org/ja/3/library/functions.html を参照
[^5]:セルの右下に`Python`と表示されます
[^6]:選択中は背景が白で表示されます。編集中はセルの右下に`Markdown`と表示されます。なお、本記事では紹介しませんが、マークダウンは HTML を簡潔に入力できるように作られた言語です