プレイブック -プロダクション-

私たちが生きている現代は、すでに多くの問題が解決されている魔法のような時代です。私たちはできる限りクライアントのプロダクトに注目し、できる限りの業務を外部サービスへ委託しています。

それは、時間とお金の節約につながります。そしてこれらのサービスはすぐに使い始めることが可能です。私たちのクライアントは、開発者に数千〜数万ドルを支払う代わりに、月額数十〜数百ドルで済むサービスを利用しています。

私たちはよく、Googleのスプレッドシートを使って、クライアントが使っている各外部サービスの毎月のコスト、説明、そして認証情報をリスト化します。それにはGitHub、Heroku、SendGrid、New Relic、Airbrake、そしてSplunkといった項目も含まれます。

チェックリスト

私たちは、新しいプロダクション環境を整える時や公開の準備をする時に、以下のような短いチェックリストが役に立つことに気付きました。

  • HerokuがCedarスタックになっているか。
  • 並行Webサーバを使っているか。Unicornの設定方法を参照。
  • バックグラウンドジョブでメール配信のような長時間動くプロセスが走っているか。遅延ジョブの設定方法を参照。
  • (少なくとも2つの)冗長Webサーバとバックグラウンドで走るプロセスが存在しているか。
  • SSLを使っているか。下記の”SSL証明書”のセクションを参照。
  • APIリクエストが別のサブドメイン(api.example.com)を介して行われているか。そうであれば、同じアプリケーションでも、将来的にアーキテクチャの柔軟性を得られる。
  • Rubyの最新版はGemfileに定義されているか。設定方法を参照。
  • 設定が環境変数の中に格納されているか。Foremanを参照。
  • デプロイは予定どおりの時間に手動で行われているか。そして思ったように動作しなかった場合に備え、チームメイトは元気で手の空いた状態になっているか。
  • デプロイはきちんと解説されたスクリプトに従って行われているか。
  • ログをリモートのログサービスに送っているか。How to Splunk with Herokuを参照。
  • Herokuのデータベースは”Yanari”、もしくはそれ以上のバージョンを使っているか。Herokuプロダクションデータベースを参照。
  • 自分たちのプロダクションデータベースをバックアップしているか。PG Backupsを参照。
  • パフォーマンスと稼働時間をモニタリングしているか。New Relicを参照。
  • エラーをトラッキングしているか。Airbrake Bug Trackerを参照。

ドメイン名

利用可能なドメイン名を探すために、Domainrを使いましょう。

ドメイン名を買ってドメイン名として持続して使うために、DNSimpleを使いましょう。クライアントがすでに、GoDaddyなどの別の場所でドメインを登録していたとしても、DNSimpleは転送サービスを提供しているので簡単に切り替えられます。

DNSimpleの簡易的な点を気に入っていますが、それに加えて、私たちが最も必要とする以下のテンプレートまで持ち合わせています。

  • Heroku
  • Google Apps
  • Tumblr

Herokuでルートとサブドメインを設定するには、Custom Domainsの指示書に従ってください。

SSL証明書

DNSimpleが提供するワイルドカードの証明書を買いましょう。ワイルドカード(*)を使うと、www.、staging.、api.など、今後に向けた他のどんなサブドメインでも同じ証明書を使うことができます。

DNSimpleのSSL証明書をHerokuに追加するには、この手順に従ってください。

SSLとDNSは密接に連動しています。SSLを使う場合はどのような作業内容であっても、CNAMEレコードの追加といったDNSの変更を行える状態であることを確認する必要があります。DNSの管理部署があるクライアントと仕事をする場合、DNS担当者がプログラムに集中して作業がうまくいくように、多忙な時間を避けて予定を決めましょう。作業をきちんと行わないと、全てがSSLで作られたサイトをうっかり消してしまうことがあり得るのです。

ホスティング

私たちはHerokuを使っています。これはAmazonのクラウド・インフラストラクチャ上に構築されたプラットフォームです。アプリが単なる娯楽用であり、高並行処理と高サステンド負荷をスケールアップするために構築されたのであれば、Herokuを使うのは簡単です。

Herokuは、Railsと同じように規約(convention)に従って決定を行うため、開発者の決定すべき事項を減らし、Webサーバやアプリサーバなどの問題を解決してくれます。このようにアウトソーシングの運営チームのように働いてくれるため、私たちは問題対処ではなく、プロダクトに集中する時間を増やすことができるのです。この時間こそが、Amazon Web Servicesを利用して得られる恩恵の中で何よりも価値のあることです。

クラウドを利用すると、確実に運営コストが下がります。特に、キャパシティを小さくできる最初の段階のコストを抑えることが可能です。料金の高いサーバの埋没コストについては目をつぶってください。

以前は巨額の先行投資なしでは不可能だった事業の立ち上げ・運営を、クラウドとそのサービスによってクライアントに実現させることができます。

ユーザのアバターなど、フィーチャーのファイルをアップロードする場合は、Amazon S3にアップロードします。

また、画像、CSS、JavaScriptなどのアセットはFastlyなどのCDNから提供しています。

パフォーマンスのモニタリング

プロダクション・アプリのモニタリングには、New Relic(無料~100ドル/月)を使っています。

パフォーマンスをデバッギングするのが開発という仕事の醍醐味でしょう。問題は明確に数値化されているため、修正すれば数値に反映され、「175%の改善を施した」などと表現することができます。

パフォーマンスの問題を修正するために確立された技術はたくさんあります。また、Rails + Herokuで作成したアプリ用の技術には”無料”のものが数多くあります。

これらの多くで、開発者は以下を考慮する必要があります。

  • データベースインデックス
  • 一括読み込み
  • HTTPキャッシュ

ページキャッシュは、一番もたついてしまう技術ですが、全ページのキャッシュを取得し、CDNに加えてしまえば、最速のパフォーマンスを期待できるオプションとなります。

エラートラッキング

私たちはAirbrake Bug Tracker(無料~25ドル/月)を使っています。

トランザクションメール

アプリからユーザにメールを送る時は、トランザクションメールとして知られているSendGrid(無料~400ドル/月)を使っています。

トランザクションメールの例を以下に挙げましょう。

  • 確認メール
  • 使用開始から3日後に送るフォローアップメール
  • フリートライアルの期間終了の通知メール
  • システム内の他のユーザへのメッセージメール

私たちは、Herokuの他の利用者(非道徳的な行為をしているかもしれない利用者)と同じIPグループとなって一塊にされてしまうことを避けるために、Herokuのアドオン経由ではなく、直接SendGridを使っています。

支払いプロセス

クレジットカードまたはデビットカードによるユーザの支払いを回収するために、Stripeを使っています。これは支払いゲートウェイであり、マーチャントアカウントとなります。また、自動継続請求にも利用できます。

Stripeの使用料金は、扱う金額によって異なる仕組みで、決済額の2.9%+30セント(約36円)が課金されます。セットアップ料や月額料金、カード保管料などの費用はかかりません。

ユーザの銀行口座にACH経由で送金する際は、Balancedを使っています。