heroku + sinatraでメールフォームを作ってみる
Salesforceに買収されたこともあり、最近またherokuが注目を浴びています。
多くのrubyistの間では数年前(?)からおなじみですが、これを機に知ったという方もいらっしゃると思います。
herokuを使うことでPHP並み、いやそれ以上に気軽にWebアプリケーションを作ることができます。ぜひその気軽さを知っていただきたいと思い、heroku + sinatraで簡単なメールフォームを作ってみました。
(ruby, git, sinatra, hamlあたりは一応ある程度知っているという前提。あまり難しいことはしていないので、全く知らなくても読めると思います。)
(ruby, git, sinatra, hamlあたりは一応ある程度知っているという前提。あまり難しいことはしていないので、全く知らなくても読めると思います。)
キモとなるところを少し解説します。
ライブラリ(gem)の設定
herokuにデプロイした際に、必要なライブラリがちゃんとインストールされ、requireされるようにします。
Gemfile
source :rubygems
gem 'sinatra'
gem 'haml'
gem 'mail'
config.ru
require 'rubygems'
require 'bundler'
Bundler.require
require './app.rb'
run Sinatra::Application
Gemfileに書いたライブラリをインストールするには、以下のようにします。
$ bundle install --path bundle
これで、Gemfile.lockというファイルと、.bundle/, bundle/というディレクトリができます。
Gemfile.lockはgitでリポジトリに入れてください。.bundle/とbundle/は入れる必要はありません。
Gemfile.lockはgitでリポジトリに入れてください。.bundle/とbundle/は入れる必要はありません。
ローカルでの開発
では、肝心なアプリケーションをapp.rbに書きます。メール関連の設定をしているのは以下のコードです。
configure do
set :root, File.dirname(__FILE__)
set :haml => {:escape_html => true}
set :mailto, ENV['MAILTO'] || 'YOUR_MAIL_ADDRESS' # ここで送信先を設定
end
configure :development do # 開発時用の設定
Mail.defaults do
delivery_method :smtp, {
:address => 'smtp.gmail.com',
:port => 587,
:domain => 'localhost:9393',
:user_name => 'YOUR_NAME@gmail.com',
:password => 'YOUR_PASSWORD',
:authentication => :plain,
:enable_starttls_auto => true,
}
end
end
configure :production do # heroku上で使われる設定
Mail.defaults do
delivery_method :smtp, {
:address => 'smtp.sendgrid.net',
:port => 25,
:domain => ENV['SENDGRID_DOMAIN'],
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:authentication => 'plain',
:enable_starttls_auto => true,
}
end
end
sinatraでの開発方法については特に書きません。shotgunというgemを使うと楽です。
また、開発時にはgmailのsmtpを使ってメールを送信するようにしてみました。YOUR_NAMEやYOUR_PASSWORDをご自分のものに書き換えてください。
set :mailto, ENV['MAILTO'] || 'YOUR_MAIL_ADDRESS'
のYOUR_MAIL_ADDRESSも同様に、メールの送信先を入力してください。ENV['...']というところは環境変数です。heroku上で自動的に設定されるものもありますし、自分で任意に設定することもできます。ここではENV['MAILTO']が自分で設定したもの、ENV['SENDGRID...']がSendGridというアドオンを追加したときに自動的に設定されたものです。
Herokuにデプロイ
では、ここから実際にherokuとやり取りします。(ソースコードはgitでコミットをすませておいてください。)
$ gem install heroku
$ heroku create simple-form #など、適当なアプリ名。あとで変えられます。初めての場合はここでメールアドレスやパスワードを聞かれたりします。
$ heroku config:add MAILTO='YOUR_MAIL_ADDRESS'
$ heroku addons:add sendgrid:free # 追加する前にクレジットカードの認証が必要だったはずです。(sendgrid:freeは無料で使えます。)
$ heroku config # 環境変数が見られます。
$ git push heroku master # このコマンドでデプロイ。
$ heroku open
これだけです。これで、herokuへデプロイが完了し、自動的にアプリケーションがデフォルトのブラウザで開かれたはずです。
DBの操作などは他にもたくさん記事がありますので、敢えて解説記事の若干少なめなメールフォームを作ってみました。環境変数の設定やアドオンの追加なども(さらっと)盛り込んでみましたので参考になれば幸いです。