HerokuでWebアプリ開発を始めるなら知っておきたいこと(6) ステージング環境

「HerokuでWebアプリ開発を始めるなら知っておきたいこと」シリーズの第6回では、Herokuなら簡単に作れる動作チェック用のサイト「ステージング環境」について書きます。このシリーズのまとめページはこちら

動作チェック用サイトを簡単に作れる

これは前回の環境変数ENVの便利さと、第1回で紹介したHerokuの無料スペックの高さを掛け合わせた使い方ですが、Herokuアプリを作るなら断然オススメの方法です。

業界用語(?)ではステージング環境と言うのですが、サイト制作やアプリ制作に携わっている人ならほとんどがやったことのある本番に近い状態で動作チェックするための環境のことです。Webアプリにおいて特にステージング環境と言った場合は、限りなく本番に近いサイトのことを指します。

Herokuは、この“限りなく本番に近い”動作チェック用の別サイトを構築するのにとても適しています。その主な理由は以下の3つです。

  1. 第1回第2回で紹介した、基本プラットフォーム+最小グレードのアドオンなら無料というHerokuの太っ腹さ
  2. 第5回で紹介した、「環境変数ENV」を利用すると本番環境・ステージング環境それぞれへRubyコード内で容易に分岐できる
  3. 第3回で紹介した、Gitによるデプロイの簡単さにより、本番環境・ステージング環境それぞれへのリモート先を追加しておいて個別にプッシュするだけで済む

あと、作成できるアプリ数におそらく制限が無いこともステージング環境の作成を容易にしてくれています。では、具体的にステージング環境がどういうものかを以下で説明します。

ステージング環境の具体例

chaplinアプリとchaplin-stagingアプリ

ここでも拙作のHerokuアプリでステージング環境の具体例を示します。このアプリは、名言をツイートするTwitter Botで、その制作行程はこちらにまとめてあります。

Herokuを使って1日1回名言をツイートするTwitter Botの作り方

ステージング環境は、本来公開するものではないのでBasic認証を掛けてあります。 言うまでもないですが、ステージング環境のほうが新しい状態で、動作チェックやテストをしているためということになります。この本番環境とほぼ一緒の環境であるステージング環境での制作が完了したら、本番環境にそのまま同じ状態をコピー(git push)することでデプロイします。こうすることで、開発中にミスってBotを停止してしまったりすることが無く、アプリのリリース後にも本番に限り無く近い環境で色々と実験ができるわけです。

もちろん、ローカルなどでも同じような動作チェックをできますが、例えばこのHerokuアプリの場合は、一覧サイト作成のために名言をCMS化することでデータベースを使用しています。そのデータベースがローカル環境(SQLite)と本番・ステージング環境(PostgreSQL)で違って、ローカルでは動いてたのにHeroku上では動かなかったというのが実際にありました。

もしローカル環境からいきなり本番環境にデプロイしていたら、既に稼動しているアプリ(Twitter Bot)を停止させてしまうという状況に陥ったと思いますが、ローカル環境から本番に限り無く近いステージング環境に一旦アップして動作確認することで、そういうミスを極力減らすことができます。

最後に、今回具体例として紹介したこのHeorkuアプリで、最初に挙げたステージング環境を作りやすい3つの理由を当てはめるとこんな感じになります。

  1. Herokuの基本プラットフォームに、cronアドオンの無料グレードを利用。お金が掛かってないので、もう一つ同じ状態のアプリであるステージング環境を作っても無料のまま
  2. 本番環境の環境変数 ENV[‘RACK_ENV’] には「production」、ステージング環境には「staging」と入れておき、Rubyコード内で環境を判別(Basic認証の有無などに使用)することでソースコードは1つ
  3. Gitのremote先としてそれぞれのアプリのアドレスを追加しておいて、完成するまではステージング環境にpushして、公開時にそのまま本番環境にpushするだけ

このように、Herokuでは“限りなく本番に近い”動作チェック用の別サイト「ステージング環境」を構築するのにとても適しています。実際にステージング環境を構築する手順について、詳しくはこちらの記事を参考にしてください。

Herokuでステージング環境を作る


今回は、動作チェック用の別サイト「ステージング環境」について書きました。 次回は、Herokuにブログを楽々設置できるクラウド用CMS「Lokka」について書きます。