Python"再"入門1 実行環境の構築

# はじめに
**Python再入門**ということで、Pythonの基本文法などの復習用に記事を書いていきます。

私がプログラミングを始めたちょうど１年前、当時の私はPythonを使って何か作ってみようと手を動かしていました。
それから一年が経った今は主にRubyを使ってWebアプリの開発を行っています。

ここにきてもう一度Pythonを復習しようと思ったきっかけは、就職先が決まったことにあります。
私は来年の4月に就職予定なのですが、就職予定の企業では機械学習や深層学習を使ったサービスを開発しています。
私は機械学習エンジニアとして就職するわけではありませんが、「触ったことある」ぐらいにはなっていた方がサービスの理解もしやすいのかなと考えています。
Pythonは機械学習系のライブラリも充実しているという印象があるので、まずはPythonを学ぶことから始めることにしました。

冒頭でお伝えした通り、私がプログラミングに入門した際に初めて触った言語はPythonなのですが、**忘れっぽい私は文法などを完全に忘れてしまった**ので、今回記事を残しながら再入門をしていこうと思います。

# 対象読者
- プログラミングの経験があり、Pythonを初めてみたい人
- 機械学習などに興味があり、Pythonから勉強してみようと考えている人

## 注意
私は、Pythonを使って機械学習や深層学習の実装をしてみたいという理由でまずはPythonの文法を復習するところからスタートしています。
注意点として、"Pythonでコードがかける" = "機械学習ができる"ではありません。
機械学習や深層学習に興味はあるけど、概念がわかれば実装まではしなくていいや、という方はそういった目的の記事や書籍を参考にされたら良いかと思います。




## ↓ここからが本題
# Python実行環境の構築
## Jupyter Notebookの導入
Jupyter Notebookを使うと、Webブラウザを使ってPythonのコードを入力して実行することができます。
インタラクティブシェルのような感じで書いたコードを実行することができ、手を動かしてPythonについて学ぶにはとても便利です。

Jupyter Notebookを使えるようにするにはAnaconda Navigatorをインストールするのが早いです。


**※Anaconda Navigatorとは？**
>Anaconda Navigatorとは、Pythonの開発に必要な多くのソフトがまとめられているディストリビューション。
Jupyter Notebookやspyderといった便利ツールが最初から入っています。

### Anaconda Navigatorインストール手順
[mac用インストール手順（公式）](https://docs.anaconda.com/anaconda/install/mac-os/)
[win用インストール手順(公式)](https://docs.anaconda.com/anaconda/install/windows/)

上記の手順にしたがってインストールしたAnaconda Navigatorを起動すれば、メニューの中にJupyter Notebookが表示されているはずです。

Jupyter Notebookの基本的な使い方については他の記事に投げることにします。

[データ分析で欠かせない！Jupyter Notebookの使い方【初心者向け】](https://techacademy.jp/magazine/17430)

## Dockerコンテナ内にJupyter Notebookを導入
ここからはPCの環境を汚したくない方向けの内容です。
特に気にならない方は上記の方法でJupyter Notebookをインストールすれば問題ありません。

dockerを使ったjupyter notebookの環境構築ですが、こちらはmacユーザー向けの手順になりますのでご容赦ください。

### 1. Dockerイメージをとってくる
Docker Hubにimageが公開されているのでこちらを使用します。
[jupyter/scipy-notebook](https://hub.docker.com/r/jupyter/scipy-notebook/)
[jupyter/docker-stacks](https://github.com/jupyter/docker-stacks)

今回は作業用のディレクトリとして、ipython_notebookを作成して作用していきます。

ちなみにIPython NotebookはJupyter Notebookの古い名前です。
元々はPython向けのツールでしたが、現在はRubyなど他のスクリプト言語を実行できるようにもなり改名したそうです。

イメージをとってくる。

```python:ipython_notebook
$docker pull jupyter/scipy-notebook
$docker image ls #jupyter/scipy-notebookが表示されることを確認
```
最後のコマンドを実行してjupyter/scipy-notebookが表示されていればOKです。

### 2.ホストのディレクトリをマウント（する準備）
作業をしていくに当たって、ホストのディレクトリをマウントしておきたいので、`/ipython_notebook`以下に`code`ディレクトリを作成します。


まず、Dockerが/UsersがDocker for Macとの共有ディレクトリになっていることを確認します。（今回はipython_notebookディレクトリがUsers以下に存在しているため）
確認方法については[こちらの記事](https://blog.stedplay.com/how-to-add-shared-directory-in-docker-for-mac/)がわかりやすかったため参照されてください。

```python:ipython_notebook
$mkdir code
$cd code
$pwd #こちらのコマンドの結果を後ほど使用します。
```
### 3. コンテナの作成
次に1でとってきたイメージからコンテナを作成します。
また、コンテナ作成時に、2で作成した`code`ディレクトリをvolumeとしてマウントします。

以下のコードを実行すれば、2で作成したディレクトリをマウントしたコンテナが作成されます。
ここで注意が必要なのは`/Users/.../ipython_notebook/code`の`...`部分は人によって異なる点です。
ボリュームの指定は`-v ホストディレクトリのパス:コンテナ内のディレクトリパス`となるので、ここでのホストディレクトリのパスには先ほど`pwdコマンド`を実行した結果をペーストしてください。

```python:ipython_notebook
$docker run -p 8888:8888 --name jupyter -v \
/Users/.../ipython_notebook/code:/home/jovyan/work \
jupyter/scipy-notebook
```
上記のコマンドを実行すると次のような実行結果が出ると思うので、`token=`以下の文字列をコピーしておきます。
<img width="715" alt="スクリーンショット_2020-07-30_0_45_05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576866/4bb9f989-f35d-94e8-a45e-b443a5c08649.png">

`-p 8888:8888`のオプションをつけたため、任意のブラウザから`http://localhost:8888`にアクセスすると認証のページが開きます。
ここで↑でコピーした認証用のトークンを入力して、新規でパスワードを入力しログインしてください。（設定したパスワードは次回以降のログインで必要になります。）

### 2回目移行の立ち上げ
上記で実行したコンテナを停止する際には`Ctrl C`コンテナが停止します。
2回目以降にコンテナを起動する際には`docker start jupyter`を実行すれば立ち上がります。
コンテナを停止する際には`docker stop jupyter`を実行すれば停止します。

```python:ipython_notebook
#上記で実行したコンテナを停止する場合
Ctrl + C
#2回目以降コンテナを立ち上げる場合
$docker container start jupyter
#docker container startで起動したコンテナを停止する場合
$docker container stop jupyter
```

以上でDockerを使用した場合のJupyter Notebookの環境構築は終了になります。

次回からはPythonの基礎文法について書いていきます。


# 参考
- [(学習用環境構築メモ) DockerコンテナでJupyter Notebookを起動する。](https://qiita.com/takayu90/items/915d43fba41e31354145)
- [Anaconda Navigator mac用インストール手順（公式）](https://docs.anaconda.com/anaconda/install/mac-os/)
- [Anaconda Navigator win用インストール手順(公式)](https://docs.anaconda.com/anaconda/install/windows/)
- [データ分析で欠かせない！Jupyter Notebookの使い方【初心者向け】](https://techacademy.jp/magazine/17430)
- [jupyter/scipy-notebook](https://hub.docker.com/r/jupyter/scipy-notebook/)
[jupyter/docker-stacks](https://github.com/jupyter/docker-stacks)