Herokuとは、ウェブアプリケーションを運用するためのプラットフォームであり、ホスティングサービスの一つです。
ホスティングサービスとは、ブログ・ウェブサイト・ウェブアプリなどをインターネット上で運用・公開するためのサーバー機能をユーザーに貸し出すサービスで、Herokuの他にもレンタルサーバー・VPS・クラウド(AWSやEC2等)などがあります。
Herokuの特徴
HerokuのレンタルサーバーやVPSとの違いを見てみましょう。
1、対応しているプログラミング言語が多い
ウェブサイトやウェブアプリ制作の入門者がよく使うレンタルサーバーは、対応している言語が少ないのがデメリットです。Pythonを使えるレンタルサーバーも増えてきてはいますが、使えるバージョンに制約があったり、Pythonアプリを運用するにはまだまだ不便な状況です。
HerokuはNode.js/Ruby/Java/PHP/Python/Go/Scala/Clojureに公式対応しており、それらの言語で作ったアプリを簡単に運用・公開することが可能です。
2、環境構築やサーバーの運用が簡単
VPSやクラウドでは、Pythonを含めたあらゆる言語で書かれたアプリを自由に運用できるのがメリットです。しかし、レンタルサーバーとは異なりそれらの環境を自分で構築しなければならず、Linuxの操作に関する知識が必要であったり、環境構築しウェブアプリを運用開始した後も自分で保守作業をしなければならないデメリットがあります。
Herokuでは、Linuxを直接操作する必要がなく、レンタルサーバーのように直感的に管理画面から操作することによってすぐにPythonプログラムを実行させることができるので、入門者でも簡単にプログラムが実行できます。また、保守面も基本的にはすべてHeroku側がやってくれるので、VPSやクラウドのような面倒なメンテナンス作業を必要としません。
3、外部ライブラリの導入が簡単
Pythonを使う上では、 Herokuには外部ライブラリの導入が簡単という大きなメリットがあります。テキストファイルに使用する外部ライブラリを列記するだけで自動的にインストールしてくれます。
Pythonを使えるレンタルサーバーやAWS Lambda(サーバー面の知識がなくても簡単にプログラムコードを実行できるサービス)などのサービスであっても、外部ライブラリを導入するにはLinuxの操作や煩雑で難しい作業が必要となるなど、Heroku以外のサービスで外部ライブラリを利用するには入門者にはハードルの高いのが現状です。
4、基本無料で使える
レンタルサーバーで無料でPythonを使えるところを探すとかなり絞られてしまいますが、Herokuでは、趣味レベルの簡単なウェブアプリであれば、多くの場合無料で運用が可能なのも特徴です。
ただし、データベースに関しては無料枠が1万行という制限があるので、データベース内にデータを頻繁に追加していくようなウェブアプリの場合は、無料で済ませるのは難しいかもしれません。
5、拡張が簡単
無料枠ではリソースが足りないというような場合でも、クラウドのように簡単にスケールアップが可能です。
また、公式で対応している以外の言語・データベース(標準はPostgreSQL)やその他の便利な機能がアドオンとして用意されており、公式対応以外のものを利用したい場合であってもLinuxのコマンドを入力することなく管理画面から簡単に導入することができます。
基本的な使い方
では基本的な使い方を見てみましょう。なお、Herokuは、以下の公式ドキュメントのとおり、コマンドライン上で操作することもできますが、本記事では入門者向けにウェブ上のUIから操作することを前提に書いています。
登録
上記のリンクからメールアドレスなどの情報を入力することによって、簡単に登録することができます。メールなどで送られた指示に従い、パスワードを設定しアカウントを有効化すれば登録完了です。
アプリの登録
ログイン後のアプリケーション一覧の画面の右上の「New」→「Create new app」を選択することによって、アプリの新規作成ができます。「App name」にアプリ名、「Choose a region」でサーバーの場所を選択して「Create app」をクリックすればアプリの作成完了です。
ここで設定したアプリ名によって、ドメイン名が「 https://<アプリ名>.herokuapp.com
」になるのでご注意ください。
サーバーへのアップロード(デプロイ)
Herokuへのアップロードはデプロイと呼ばれ、Githubのリポジトリと連携することによって、そのリポジトリがHeroku上にアップロードされます。レンタルサーバーでよくあるFTPは原則として利用できませんのでご注意ください。
まずは以下の記事などを参考にGithubの登録・リポジトリの作成を行います。
Herokuにアップロードする予定のプログラムをリポジトリに追加したら、HerokuとGithubを連携させます。
Herokuにログイン後にアプリケーションを開き、「Deploy」タブの画面のDeployment method欄の真ん中の「GitHub」を選ぶことによってGithubとの連携ボタンが出現するので、指示に従って進めることにより連携ができます。
正しく連携できれば、上のようなリポジトリの検索フォームが表示されるので、Herokuにアップロードしたいリポジトリを入力・検索して選択します。
連携が完了すると「Automatic deploys(自動デプロイ)」と「Manual deploy(手動デプロイ)」の二種類が表示されます。
自動デプロイは、GitHubのリポジトリを更新すると自動的にHeroku上へデプロイを行ってくれます。手動デプロイは任意のタイミングでデプロイできるので、お好きな方を選んでください。
Heroku上での運用に必要なファイル
ここまでで、ウェブアプリをアップロード・公開するまでの一通りの流れは解説しましたが、実際には動かしたいプログラム以外に以下のようなファイルもGitHubのリポジトリ上に含めてデプロイする必要があります。
Procfile(必須)
web: python app.py(ファイル名)
Procfileは、Heroku上でどんなコマンドを実行するかを定めるファイルです。「Procfile」というファイル名に拡張子をつける必要はありません。Pythonは、「Python ファイル名.py」というコマンドによって実行できるので、上記のような行を書くことで実行されます。
Djangoなどのフレームワークを利用する場合は、そのフレームワークに合わせてコマンドを変えなければならない可能性もあるので、ご注意ください。
requirements.txt
requests
pandas
numpy
requirements.txtには、必要な外部ライブラリを書くと、デプロイ時に自動的にインストールしてくれます。
requests==2.22.0
pandas==0.25.3
numpy==1.18.0
バージョンを指定してインストールすることもできます。
runtime.txt
python-3.7.3
runtime.txtでは、Pythonのバージョンを指定することができます。
よく使う機能
基本的な使い方をマスターすればPythonをHeroku上で運用することはできます。その他にも運用する上で有用な機能を紹介します。
ログの確認
右上の「More」から「View logs」を選択することによってサーバーログが表示されます。プログラムがうまく動作せず何かエラーが発生しているか確認したいときは、ここの画面を開きながら作業すると良いでしょう。
環境変数の設定
「Settings」タブの「Config Vars」欄から環境変数を設定することができます。コードにパスワードを直接書くのは推奨されないので、APIの認証キーなどを利用する場合は、この画面から設定すると良いでしょう。
アドオンの導入
拡張機能=アドオンは、「Resources」タブから導入します。「Add-ons」欄に使用したいアドオン名を入力と検索できます。
定期実行ができるHeroku Schedularや、無料で使えるデータベースであるHeroku Postgresは公式アドオンでよく使われます。アドオンは誰でも開発できるので、Heroku以外の第三者の企業が開発したアドオンも選択することができます。
なお、アドオンの利用は無料で使えるものであっても、アカウント設定からクレジットカードなどの支払情報を入力・設定する必要があるのでご注意ください。