Herokuの登録・デプロイ・Webサーバ公開をやってみる

# はじめに
この記事は**「Zoomライセンスの切り替えをSlackでやってみた」**の一環で投稿した記事です。
この記事では、Herokuの登録・プログラムのデプロイ・Webサーバ公開をするところまでを説明します。

https://qiita.com/matsutogen/items/9152ad13bf26337d1b57

# 本記事で使っている環境
+ Windows10
+ VSCode
+ Python 3.7.1

# HerokuへのAPP登録
今回外部サーバとしてHerokuを使うことしました。
Herokuを利用するにはユーザ登録が必要になりますので、簡単にですが登録方法を説明します。

## Herokuアカウント作成

（1）以下のサイトより、必要事項を入力しHerokuアカウントを作成します。

https://signup.heroku.com/dc

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1955406/ab72419e-9eed-2af7-723e-3abd7f4e2e2f.png)




（2）作成したら、登録したメールアドレスに認証メールが飛ぶので、メールのURLをクリックして、パスワードを登録します

（3）パスワード登録したら、利用規約の画面がでてくるので、内容を読んでAcceptをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1955406/c760a219-52ac-e6e1-c0b7-d632a02a80eb.png)


これで登録完了です。

## GitとHeroku CLIをインストール

以下のサイトを参考にローカルPCにGitとHerokuCLIをインストールします。[^1]

https://devcenter.heroku.com/ja/articles/getting-started-with-python?singlepage=true#-2

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1955406/2469c9e9-4acf-522b-a06a-a25c71d0b332.png)


## Herokuにアプリを作成する
（1）PCのコンソールを起動する（Windows の場合PowerShellでOK）

（2）Heroku CLIでHerokuにログイン
コンソールよログインコマンドを実行する

```
heroku login
```
実行すると以下のように表示されるので「q」以外の文字を入力（Enterとかでいい）
>heroku: Press any key to open up the browser to login or q to exit:

待っているとブラウザで以下の画面が表示されるので、「Log in」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1955406/e8cd452d-fd6b-1920-0d6b-e88974c80c0d.png)

CLIの画面で以下のように表示されたらOKです。
>Opening browser to https://cli-auth.heroku.com/auth/cli/browser/30e73db4-55a4-4289-8332-********?requestor=・・・・・・
>Logging in... done
>Logged in as ********@********


（3）Heroku CLIでアプリを作成する
CLIより以下のコマンドを実行する（＜アプリ名は任意＞）

```
heroku create <アプリ名>
```
以下ように表示されたらOKです
>Creating ⬢ <アプリ名>... done
>https://<アプリ名>.herokuapp.com/ | https://git.heroku.com/<アプリ名>.git


# デプロイ・Webサーバ公開
では、早速Herokuに作成したアプリにデプロイし、Webサーバを公開します。
とりあえずWebサーバとして最低限の実装ができればいいので、URLにアクセスして**Hello Word**が表示されるまでを実装します。

## １．プログラムフォルダ作成・GitRepository初期化
プログラム用のフォルダを作成し、GitRepositoryを初期化します。

```
> mkdir <アプリ名>
> cd <アプリ名>
> git init
> heroku git:remote -a <アプリ名>　#ローカルリポジトリにリモートを簡単に追加
```

## ２．アプリ開発
今回、Webサーバのエンジンとして`bottle`を使うので、bottleのライブラリをインストールします。

```
pip install bottle
```

ライブラリをインストールしたら、Webサーバを起動するコードを実装します。
なお、このコードはbottleの公式マニュアルに記載があったものをそのまま使っています。

http://bottlepy.org/docs/dev/recipes.html#using-bottle-with-heroku

```webservice.py
import os
from bottle import route, run

@route("/")
def hello_world():
    return "Hello World!"

run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))
```

## ３．Herokuのデプロイに必要なファイルを作成
HerokuでWebサービスを起動するに最低限以下のファイルが必要です。

+ requirements.txt　*#依存ライブラリを定義したファイル*
+ Procfile　*#起動時に実行するアプリタイプとコマンドを定義したファイル*
+ runtime.txt　*#Pythonの起動バージョンを定義したファイル*

**requirements.txt**
コンソールより以下のコマンド実行して作成します。

```
pip freeze > requirements.txt
```

`pip freeze`はPython環境にインストールされているライブラリをリストを出力するコマンドです。Herokuでは`requirements.txt`に定義されているライブラリをデプロイ時にインストールしているようです。

**Procfile**
コンソールより以下のコマンド実行して作成します。

```
echo web: python webservice.py > Procfile
```
この定義はWebタイプのdyno(コンテナ)[^2]として`python webservice.py`のコマンドを実行するという意味です。

**runtime.txt** [^3]
開発に使用しているPythonバージョンを以下のように記述します。
※使用しているPythonバージョンは`python -V`コマンドで確認できます。

```runtime.txt
python-3.9.1
```


## ４．デプロイ
作成したアプリをHerokuにデプロイします。
デプロイはGitにPushするだけです。

```
> git add .
> git commit -m "commit"
> git push heroku master
```

以下のように表示されたらOKです。
> remote: Verifying deploy... done.
> To https://git.heroku.com/<アプリ名>.git
>  * [new branch]      master -> master


## ５．テスト

Webサービスが起動してるはずなので、URLにアクセスし、**Hello World**が表示されればOKです。

```
https://<アプリ名>.herokuapp.com/
```


以上で終了です。


[^1]: すでに登録している場合は不要です
[^2]: dynoのプロセスタイプの詳細はこちらを参照＞[Herokuのプロセスタイプ](https://devcenter.heroku.com/ja/articles/procfile#procfile-format)
[^3]: 本ファイル作成しない場合はHerokuでの最新バージョンでPythonが起動します