Pythonで始めるHeroku
Heroku は慣れれば簡単に使えますが,それまでがいばらの道.Documentation を読めばわかりますが,何も知識がない状態ではトライ&エラーの連続だと経験者 (私) は語ります.それはそれで勉強になりますが.
その苦い経験を元に簡単に使い方を記しておきます.
はじめに
Windows を使っているので Windows 上での名称を用いますが,Macintosh も同様です.
こないだプログラミング系の書籍で「Windows を使うメリットは特に思い浮かばないので,買うなら Mac がいいでしょう」と思いっきり書いてあって泣きたくなった.
Python 前提に話を進めますが,他の言語でも仕組みは共通なはずです.
Hello, Heroku!
Platform as a Service (PaaS) なので,自分でサーバを構築しなくてもアプリを実行してくれる便利なサービスです.米国のサービスなので全て英語で,利用できるリージョン (サーバの場所) は米国か欧州です.
デフォルトではサーバ内の時間帯は UTC (Coordinated Universal Time) 設定なので,日本時間 (UTC+9) で設定するとずれます.Heroku Scheduler で自動実行するときは気を付けましょう.
インストールするもの
- Python2.7 もしくは Anaconda
- モジュール:Pip, Setuptools, Virtualenv (Anaconda は不要)
- Postgres (データベース使いたい人)
- Heroku CLI
Python を入れる
2 系と 3 系がありますが,文法が若干異なるため Python2 で書いたプログラムは Python3 では動かないという残念仕様.後々切り替えがちょっとめんどくさそうです.Heroku では Python2 を指定されています.
Introduction では Setuptool や pip, Virtualenv もインストールするように書かれていますが,それら全ての機能を持つ Anaconda4 を入れると楽です.デフォルトは Python3 ですが,仮想環境として 2 系をインストールできます.
Unix 系は Anaconda と既存のパッケージが競合するらしいので,pyenv もインストールするといいとか.
参考:データサイエンティストを目指す人の python 環境構築 2016 | Qiita
Git 必須
Heroku ではアプリを Git で管理します.CLI インストール時にくっついているような?入ってこなかったら pip で入れてください.
terminal
$ pip install git
ユーザーは Heroku 上のリモートリポジトリにデプロイしてアプリを公開,更新していきます.そこら辺は Git の使い方を学ぶことになります.
Git はユーザーの編集履歴を保存しているので,アプリが動かなくなっても履歴を辿れば原因がわかり,その地点に一気に戻ることも可能です.更に,複数人でもケンカせずに開発できるという,プログラミングに必須のツールです.
Heroku CLI
Heroku への指示は Heroku CLI (Command-Line Interface) を通じて行います.CLI とは Windows のコマンドプロンプト,Unix 系 (= Linux, macOS etc...) のターミナル (端末) みたいな感じです.スタンドアローンではないので,操作は CUI で行います.
ちなみに,先に Anaconda を入れないと Heroku CLI と結びつかなかったりして結局再インストール,というめんどくさいことになるかもしれないので気を付けてください.
アカウント登録
後で追加することも可能ですが,クレジットカードかデビットカードを登録しておくと,開発できるアプリの数やアドオンの利用,無料枠の拡大などのメリットがあるのでオススメです.プリペイド型クレジットカードの場合はわからないので試してください.
CLI で Heroku にログイン
CLI のインストールが済んだら,コマンドプロンプト (cmd.exe) や Anaconda Prompt を開いてログインします.
terminal
$ heroku login
メールアドレスとパスワード(入力は表示されない)を入力します.
Heroku 上にアプリを作成
terminal
$ heroku create
アプリ名を指定しない場合はランダムで決定されます.指定する場合は -n オプションを使います.
terminal
$ heroku apps:create -n APPLICATION
リモートリポジトリ関連
ここら辺は Git の基本的な使い方です.
登録
見て察するかもしれませんが,他のユーザーがすでに取得しているアプリケーション名は使えません.
terminal
$ git remote add heroku https://git.heroku.com/APPLICATION.git
削除
terminal
$ git remote rm heroku
変更
サービス名が変わったときは URL を変更する必要があります.
terminal
$ git remote set-url heroku https://git.heroku.com/APPLICATION.git
デプロイ関連
初期化
ソースコードのあるディレクトリに移動して,Git 管理用ディレクトリを作成.既に存在するときに初期化すると,reinitialized となります.
terminal
$ git init
追加
変更したファイルを追加候補にします.追加候補に挙げただけで,実際にはまだ追加されていません.
terminal
$ git add FILE
コミット
先ほど追加候補にしたファイルを追加します.この 2 段階の仕組みをステージングというようです.commit にはコメントを付与することになっているので,作業内容を説明する文章も必要です.
terminal
$ git commit -m "COMMENT"
プッシュ
この操作で Heroku 上のファイルが置き換えられます.
terminal
$ git push heroku master
Git では heroku の部分はリモートリポジトリ名,master の部分はブランチ名を入力して使います.
ログの出力
terminal
$ heroku logs
アプリ名指定
複数のアプリを持っている場合,アプリ名の指定がないと怒られます.
terminal
$ heroku logs --app APPLICATION
行数指定
Heroku では 1,500 行までログを保管しているので,デフォルトの表示より行数を増やすことができます.
terminal
$ heroku logs -n NUMBER
常に読み込む
ログを取得した後にコマンド入力に戻らず,常に表示を更新し続けることもできます.
terminal
$ heroku logs -t
動作に必要なファイル
app.py
メインとなる実行ファイル.
Procfile
Process Type と実行するコマンドを書くファイル.
Procfile
<process type>:<command>
例として,gunicorn を動かす場合
Procfile
web: gunicorn app:app
となります.(app.py 内の app() を呼び出したときの記述)
詳しくは公式ドキュメントで.(恐らく最も混乱を招く部分)
requirements.txt
使っているモジュールを書くファイル.これがないと,サーバでモジュールを用意できません.開発環境と同様のモジュールを読み込みたいときは以下のコマンドを実行することで生成できます.
terminal
$ pip freeze > requirements.txt
runtime.txt
言語とバージョンが書かれたファイル.見たままです.
runtime.txt
Python-2.7.13
最後に
PaaS なので Apache などは入れることができませんが,Python なら Gunicorn などを Web サーバとして運用することで Web サーバソフトウェアがいらない!
というわけで,意外と色々なことに使えそうですね.