Windows10のPython3上でFlaskのHello World!を動かしてみる（仮想環境）

# 用意するもの
Widows 10 Pro (64-bit)

# インストール
## Python3.7

[Pythonのページ](https://www.python.org/)からインストーラーをダウンロードし、実行します。
今回、Windows用のPython 3.7.4 (64-bit)をダウンロードしました。
https://www.python.org/ftp/python/3.7.4/python-3.7.4-amd64.exe

**"Add Python 3.7 to Path"**をチェックし、**"Install now"**でインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/74b048f1-7f19-470d-9da8-f2b2f02683c6.png)
インストール完了時に、**"Disable path length limit"** でファイル名の長さ制限（260文字）を解除できるようですが、今回は、解除せず、そのままにしました。

## Virtual Environment（仮想環境）

コマンドプロンプトを開き、pipを使って、virtualenvをインストールします(virtualenv-16.7.5)。

```コマンドプロンプト.cmd
pip install virtualenv
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/372da50c-477e-53cf-d4f3-d1c5a40a5186.png)

# Hello World!
## 仮想環境の構築と有効化
c:\projects\flaskyという開発用フォルダを作成し、そこに仮想環境（venv）を構築します。

```コマンドプロンプト.cmd
c:\>mkdir projects
c:\>cd projects
c:\projects>mkdir flasky
c:\projects>cd flasky
c:\projects\flasky>virtualenv venv
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/24441f09-ce6b-738c-2e16-99632a89751a.png)

構築後、仮想環境をactivateコマンド（batファイル）で有効化します。

```コマンドプロンプト.cmd
venv\scripts\activate
```

## Flaskのインストール

仮想環境が有効な状態で、Flaskをインストールします。

```コマンドプロンプト.cmd
pip install flask
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/c1484790-df57-210b-b7e6-cb9d8fe4de74.png)

## ソースコードと実行

hello.pyをテキストエディタで作成し、実行します。

```hello.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, Flask World!'

if __name__ == '__main__':
    app.run(debug=True)
```

```コマンドプロンプト.cmd
python hello.py
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/0b8b41e1-ee61-36d3-e122-1394fd8f3d4d.png)

http://127.0.0.1:5000/ にアクセスすると"Hello World!"が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/017c744b-1995-d11b-3ff6-ef4441d0ddac.png)

## 終了
Ctrl+Cで実行を中断し、deactivateコマンド（batファイル）で仮想環境を無効化します。

```コマンドプロンプト.cmd
venv\scripts\deactivate
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/7f95fb4a-3e48-7394-8ff1-8b84a626c7b2.png)

仮想環境が無効な状態では、Flaskフレームワークを実行できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/a69776fd-a278-6ab6-c52b-aafafd64c1b6.png)

# Flask-Scriptを使う（コマンドライン・オプション）
## Flask-Scriptのインストール

仮想環境内でFlask-Scriptをインストールします。

```コマンドプロンプト.cmd
pip install flask-script
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/d0e3d888-8635-e9da-e919-2cb99bc9b25f.png)

## ソースコードのManager化
hello.pyをManager化します。

```hello.py
from flask import Flask
app = Flask(__name__)

from flask_script import Manager
manager = Manager(app)

@app.route('/')
def index():
    return 'Hello World!'

if __name__ == '__main__':
    manager.run()
```

## コマンドラインオプションを使った起動

runserverをコマンドライン・オプションに指定して、起動することができます。

```コマンドライン.cmd
python hello.py runserver -d
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252891/b1de12f7-995f-6ddf-1a7d-4385ee13cfa4.png)

### コマンドライン・オプションの詳細
runserverの詳しい使い方は、helpを参照してください。

```コマンドライン.cmd
(venv) C:\projects\flasky>python hello.py runserver --help
usage: hello.py runserver [-?] [-h HOST] [-p PORT] [--threaded]
                          [--processes PROCESSES] [--passthrough-errors] [-d]
                          [-D] [-r] [-R] [--ssl-crt SSL_CRT]
                          [--ssl-key SSL_KEY]

Runs the Flask development server i.e. app.run()

optional arguments:
  -?, --help            show this help message and exit
  -h HOST, --host HOST
  -p PORT, --port PORT
  --threaded
  --processes PROCESSES
  --passthrough-errors
  -d, --debug           enable the Werkzeug debugger (DO NOT use in production
                        code)
  -D, --no-debug        disable the Werkzeug debugger
  -r, --reload          monitor Python files for changes (not 100% safe for
                        production use)
  -R, --no-reload       do not monitor Python files for changes
  --ssl-crt SSL_CRT     Path to ssl certificate
  --ssl-key SSL_KEY     Path to ssl key

(venv) C:\projects\flasky>
```

#おわりに
Windows 10 にPython3.7.4をインストールし、仮想環境内でFlaskを使ってHello World!を動かしてみました。