# Herokuを使ってPythonのflaskで作ったアプリケーションをデプロイする方法と注意点！

> 当サイト【スタビジ】の本記事では、PythonのWebフレームワークであるFlaskを使って作成したWebアプリケーションをインターネット上に公開するためにHerokuというサービスを使ってデプロイしていきます。Herokuを使えば簡単にWebアプリケーションを公開することが可能なんです。

- URL: https://toukei-lab.com/heroku-python
- 公開: 2022.11.29 / 更新: 2024.12.17
- サイト: スタビジ（https://toukei-lab.com）

:::talk{who="umatan"}
当サイト【スタビジ】の本記事では、PythonのWebフレームワークであるFlaskを使って作成したWebアプリケーションをインターネット上に公開するためにHerokuというサービスを使ってデプロイしていきます。Herokuを使えば簡単にWebアプリケーションを公開することが可能なんです。
:::

こんにちは！

データサイエンティスト兼AIエンジニアのウマたん([@statistics1012](https://twitter.com/statistics1012?lang=ja))です！

ゴリゴリのWebエンジニアではない僕にとって、<mark>Webアプリケーションのデプロイは結構面倒！</mark>

:::talk{who="robotan"}
せっかく作ったアプリケーションもインターネット上で誰でも参照できるようにしないと意味がないのに・・・
:::

:::talk{who="umatan"}
ローカル環境で開いてムフフ・・していてもただの自己満！
:::

そんな悩みを解決してくれるのが<mark>簡易的にWebアプリケーションのデプロイをしてくれる</mark>「**Heroku**」というサービス！！

この記事では、そんなHeroku(ヘロク)について見ていきたいと思います！！

※当たり前ですがデプロイしたいWebアプリケーションはローカル環境で動作確認済みである必要があります。

ローカル環境のアプリを外部公開する方法に[ngrok](/ngrok)を使った方法があり、気になる方は以下の記事をチェックしてみて下さい。

<https://toukei-lab.com/ngrok>

## Herokuとは

![heroku](/wp-content/uploads/2019/12/cb49a8e4ea3e8df73e3c9cf57b909572.png)

[Heroku](https://id.heroku.com/)とは、**PaaS（Platform as a service）**&#x306E;一種であり、デプロイを簡易的に行えるサービスです。

SaaSは有名ですが、それ以外にもPaaSやIaaSなどがあるんですよー！

イメージ的には<mark>SaaSが最も簡易的だけど自由度低くIaaSは最も自由度高いけど簡易的ではない。</mark>

PaaSはその間に位置するサービスとなります。

そこらへんについては以下の記事が詳しいので適宜参照してみてください！

:::memo
[Herokuってなんなの？](https://qiita.com/okasir4444/items/b9b1e70fdbbbd5794f1b)
:::

HerokuはGitを使って簡単にデプロイすることができ、サーバーの役割も置き場所(アドレス)もHeroku側が用意してくれます！

数々のアドオン機能があり、<mark>幅広い範囲で使用することができます。</mark>

Herokuは無料プランがなくなってしまいましたが、一番安い「Eco・Basicプラン」で月5\$で利用できます。

とはいえ比較的簡単にデプロイすることが可能なので、ぜひ試してみてください！

## Herokuを使う下準備

![PC](/wp-content/uploads/2018/08/PAK85_MBAdesagyou20140312_TP_V-e1557018085482.jpg)

さて、簡易的にデプロイすることができるとは言ってもそれなりの手順を追わないといけません。

<mark>偉そうなこと言っておきながら結構苦戦しました・・・笑</mark>

Pythonのflaskで作った有意差算出アプリケーションをHerokuでデプロイしたのでその手順を見ていきます。

有意差アプリケーションのコードは以下の記事に載せてますので見てみてください。

<https://toukei-lab.com/python-flask>

コマンドプロンプトでの操作前に下準備が必要になります。

### Herokuアカウント作成

当たり前ですが、Herokuのアカウント作成とインストールが必要になります。

[Herokuサイト](https://jp.heroku.com/)に移動し、アカウントを作成してください

![heroku](/wp-content/uploads/2019/12/heroku2-min-scaled.jpg)

アカウントを作成し、ログインした後はHerokuのソフトウェアをインストール！

### いくつかのファイルを生成

Herokuのインストールが完了したら今度は、Herokuでデプロイする用のファイルを用意していきます。

作るファイルは以下の3点！

:::box{title="必要なファイル"}
・Procfile\
・requirements.txt\
・runtime.txt
:::

それぞれについて見ていきましょう！

#### Procfile

Procfileではデプロイするアプリを指定します。

以下のような記載をして保存してください。

```python
web: gunicorn <実行するファイル名>:app --log-file=-
```

※この時、拡張子はなしで保存しましょう！

#### requirements.txt

ここには使用するPythonライブラリのバージョンを記載していきます。

バージョンが合っていないと上手くデプロイできない可能性があるので気を付けましょう！

コマンドプロンプトから以下のコマンドを叩けば現在のライブラリバージョンがrequirements.txtとして出力されます。

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

僕の場合は以下のようになりました。

:::box
Click==7.0\
Flask==1.1.1\
gunicorn==20.0.4\
itsdangerous==1.1.0\
Jinja2==2.10.3\
MarkupSafe==1.1.1\
Werkzeug==0.16.0\
numpy==1.17.4\
scipy==1.3.3\
requests==2.22.0
:::

これらのパッケージのバージョンを空白なしでrequirements.txtとして作成します。

### runtime.txt

runtimeには現在のPythonのバージョンを記載します。

以下のコマンドで確認が可能です。

```python
python -V
```

僕の場合は、

Python 3.7.3

でした。

:::box
python-3.7.3
:::

とだけruntime.txtに記載しましょう

これらのファイルをデプロイするPythonファイルと並列ディレクトリに置きます。

これで下準備’が終了！

:::talk{who="umatan"}
ここからが本番だ！
:::

## いざHerokuでflaskアプリケーションをデプロイ！

![](/wp-content/uploads/2018/09/S_8608589564326-e1566254236403.jpg)

さて下準備が終了したところでデプロイを行っていきましょう！

### コマンドプロンプトからアプリケーションのディレクトリに移動

コマンドプロンプトからデプロイするアプリケーションが置いてあるディレクトリに移動します。

そこには該当アプリケーションファイルと先ほどの3点ファイル

**・Procfile**\
**・requirements.txt**\
**・runtime.txt**

が存在することを確認しておきましょう！

### Herokuにログイン

続いてHerokuにログインします。

以下のコマンドを打ってください。

```python
heroku login
```

Enterを押してください的なことを言われるのでEnterを押してしばらくするとHerokuのブラウザが開きます。

![heroku](/wp-content/uploads/2019/12/heroku-min-scaled.jpg)

ブラウザ上からログインしましょう！

### Herokuにアプリを作成

続いてHeroku上にアプリを作成していきます。

以下のコマンドを入力しましょう！

```python
heroku create <好きなアプリケーション名>
```

このアプリケーション名は実行するファイルと同一でなくても構いませんが、分かりやすい名前にしておきましょう！

ちなみに以下のコマンドを打ってあげると、Heroku上に作成されたアプリケーションが表示されます。

```python
heroku apps
```

heroku createしたアプリケーション名が実際に表示されるか確認してみましょう！

### GitコマンドでHerokuにデプロイ！

さてここからはgitコマンドでデプロイを行っていきます！

まず初めに、以下のコマンドでgitを行いますよーと宣言してあげましょう。

```python
git init
```

続いて、当該ディレクトリのファイルを全てgitしていきます。以下のコマンドを入力！！

```python
git add .
```

これで当該ディレクトリ配下のファイルが全てaddされます。

もし特定ファイルだけaddしたい場合は特定ファイル名をaddの後につなげればOKです！

現在addコマンドによってファイルがインデックスされている状態です。

そのファイルを以下のコマンドでローカルレポジトリにaddします。

```python
git commit -m "<バージョン名(firstとか)>"
```

これでローカルレポジトリにコミットされました。

ちなみに以下のコマンドでファイルの状況を確認できます。

```python
git status
```

addだけされてcommitされていないファイルは赤字で、commitされたファイルは緑色で表示されます。

また、commitのログは以下のコマンドで確認できます。

```python
git log
```

先ほどのバージョン名で出力されるので、管理しやすい名称にしておきましょう！

ここまで来たら後はHerokuにデプロイするだけ！！

以下のコマンドを打ってあげましょう！

```python
git push heroku master
```

しばらくすると、コマンドプロンプト上にURLが表示されるのでそれをブラウザ上で叩いてみてください。

<mark>ちゃんと表示されればデプロイ成功！！！</mark>

Herokuドメインのサブドメインの形でURLが出力されており、このURLは誰でもどこでもアクセスできます。

これにて、ローカルでムフフしていたアプリケーションがインターネット上に公開されたことに！！

Gitは結構分かりにくい部分が多くハマりがちです！Gitについては以下の記事でまとめていますのであわせてチェックしてみてください。

<https://toukei-lab.com/git-learning>

## Herokuのデプロイでつまずきやすいポイント

![](/wp-content/uploads/2019/09/b8bc8c6db6cbd74d3cfddb22f7d9a699_s.jpg)

この手順で上手くいけばいいんですけど、上手くいかないこともあります。

<mark>実際にはまったところやはまりやすい部分についてまとめておきます！</mark>

### 3点ファイルの記述

デプロイに必要な3点ファイル

:::box
・Procfile\
・requirements.txt\
・runtime.txt
:::

においてそれぞれムダな改行や空白があるとエラーを起こす可能性があります。

またrequirements.txt、runtime.txtに関してはバージョンの互換性を確かめましょう！

### runtime.txtの記述のpythonをPythonにしてしまう

初歩的なミスなのですが、小文字のpythonで記述しましょう！

:::box
python-3.7.3
:::

そうしないと、以下のようにエラーが発生します。

:::warn
```text
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/***.git'
```
:::

### flaskアプリケーションのネーム

flaskのソース内のアプリケーションネームを以下のようにncで書いていたらデプロイできませんでした。

```python
nc = Flask(__name__)

@nc.route("/")
def check():
    return render_template('sig.html')
```

これをappに修正したら上手くいきましたー！

```python
app = Flask(__name__)

@app.route("/")
def check():
    return render_template('sig.html')
```

それでも上手くいかない時は、コマンドプロンプト上のエラー表記を確認してGoogleで検索して頑張って解決してみてください！

## Herokuでデプロイする方法　まとめ

本記事では、**Herokuでflaskアプリケーションをデプロイ**する方法について見てきました！

<mark>Herokuはエンジニアでなくても比較的簡単にデプロイすることのできるサービスとして有用です！</mark>

ぜひ試してみてください！

FlaskでWebアプリケーションを実装する方法はぜひ以下の記事を見てみてください！

<https://toukei-lab.com/python-flask>

Webアプリケーション作成に必要なPythonやHTML・CSSの勉強に関しては以下の記事でまとめています！

<https://toukei-lab.com/python-learn>

<https://toukei-lab.com/html_css_study>