私は自作Webアプリケーションの公開にHerokuを利用しています。Ruby on Rails tutorialにHerokuデプロイの入門編があり、最初はこれで勉強しました。
http://railstutorial.jp/chapters/beginning?version=4.0#top
Ruby on Railsで開発している場合はこの本の通りにやればできます。しかし(昔のレンタルサーバのように)単純に静的なHTMLをアップしたい場合が逆に分かりません。Railsではstaticディレクトリに送れば可能ですが、わざわざこのためにRailsを使うのはいくら何でも重すぎる感じがします。
Sinatraを使えばずっと身軽になると思いますが、私はSinatraについてよく知りません。
ここではRackを使う方法を紹介します。RackはRuby on Railsのコアモジュールに採用されており、最下層のHTTP処理を担当しています。今回はそのRackだけを使うRubyベースでは最軽量のHerokuデプロイ方法です。
Gemfileの設定
Herokuのデプロイではバージョン管理にBundlerが用いられています(Bundlerをインストールしていない人はRuby on Rails Tutorialの1章を参照して下さい)。
まずGemfileを作成します。Rails Tutorialに比べると嘘みたいに短いですがこれだけでOKです。ruby 2.0.0
の部分は実際に自分が使っているRubyバージョンを指定します。
source 'https://rubygems.org'
ruby 2.0.0
gem 'rack'
Rubyバージョン指定はなくても動きますが、省略するとHerokuがdeploy時にwarningを表示します。Rackは十分安定しているのでバージョン指定不要ですが、もし万一deployで問題を生じた場合は
gem 'rack', '1.5.1'
のように指定して下さい。
Gemfileを作ったらbundle install
を実行してGemfile.lockを生成します。
config.ruの設定
次にconfig.ruを設定しますが、ここでプロジェクトディレクトリの構造を決めておきます。HTMLファイルはpublicディレクトリの中に配置することにします。
public/
index.html
...
Gemfile
Gemfile.lock
config.ru
config.ruは公開方法によっていくつかバリエーションがあります。まずディレクトリへのアクセスに対してリスティング表示する場合はRack::Directoryを使います(開発中のテスト時に便利)。
run Rack::Directory.new 'public'
ディレクトリは公開せず、publicディレクトリ内部のファイルアクセスだけ提供する場合はRack::Fileを用います。
run Rack::File.new 'public'
さらにディレクトリへのアクセスをindex.htmlに割り当てる場合の例を示します。
use Rack::Static, urls: [''], root: 'public', index: 'index.html'
run lambda {|env|}
なお小さな不具合があります。サブディレクトリdocに
public/doc/index.html
があった場合、http://.../doc/
のように末尾に/を付けないと動作しません。ルートのindex.htmlに対してはこの問題は発生しません。
ローカルサーバ立ち上げ
開発時はrackup
コマンドでlocalhost:9292
にローカルサーバを立ち上げることができます。ポート番号はrackup -p 8888
のように指定できます。
Herokuへのデプロイ
この状態でそのままHerokuにdeployすれば完了です。gitやHerokuの操作方法はRuby on Rails Tutorialの1章を参照して下さい。