おさらい…
“Heroku”ってどう読むの?



発音は「her-OH-koo」
 二文字目にアクセントを置いて、「ヘロク」もしくは「ハオク」と発音しま
  す。
“Heroku”ってどういう意味?



Hero(ヒーロー) + haiku(俳句)の造語
 「Rubyの開発者をヒーローにする」というコンセプトのもとに命名
どんなサービス?



Webアプリケーションのホスティングサービス
 最近流行のPaaS(Platform as a Service)




       ※参考URL     http://ja.wikipedia.org/wiki/PaaS
ここがすごい
Herrokの提唱   公開までの手間がいらない


                                    アイデア
                                     の実現


                    Herokuに展開
                                ⇓
            コーディン    インターネットに公
            グ        開
git push heroku
                              アイデア




               ✗
                               の実現

              デプロイ作業


      ✗
     サーバの購入、
     構築、設定          運用

コーディング
                         拡張
まとめ    スピードと柔軟性
                       Gitによ
                       るデプロ
                       イ
              スピー
               ド




             Herokuの
                                add-ons
              強み
      豊富な機               スケーラ
        能                ビリティ
アプリケーションを公開
    する
アプリケーション公開までの
      手順



ローカルでアプリ
            git でHerokuの
    の                      公開
           リポジトリにpush
 作成/変更
必要なもの

       Ruby

       rvm(使ったほうが便利)

       Git

★必須    Herokuアカウント

       Herokuで公開するアプリケーション

        (今回はRubyアプリケーション)
heroku gemのインストール
    $ gem install bundler

    $ bundle init

    $ vim Gemfile ←Gemfileに使用するgemsを記述

     source http://rubygems.org

     gem ‘heroku’

     gem ‘sinatra’
                             bundlerでGemfileのgemsをアプリケーション
       …その他必要なgem 以下の/vendor/bundleにインストール
                             ↓
    $ bundler install –path /vendor/bundle

    $ vim .gitignore   ←herokuの容量がもったいないので
                        gemsはherokuのリポジトリにpushしない
     vendor/bundle
アプリケーションの作成




    省略…
Herokuにアプリケーションを作成
          する

        $ heroku create アプリ名

        または

        $ heroku create




     アプリケーション名を変更をする


      $ heroku rename 新しいアプリ名
デプロイ(初回)


     Herokuにマスターブランチを作成する


          $ git push heroku master


DBを使用する場合、HerokuのDBにマイグレーションを行う


         $ heroku db:migrate

         $ heroku db:push <db url>
デプロイ(変更を反映)


  Herokuに変更を反映させる


     $ git push heroku
ブラウザ起動




 $ bundle exec heroku open
標準(無料)の範囲


App       1アカウントにつきいくつ作成できるのか不明
容量        100MBまで(git、gem関連以外)10MB以下を推奨
プロセス      1dyno
リクエス      1dyno(1プロセス)につき10-50リクエスト(秒)
ト
メモリ       1dynoにつき最大300MBまで
DB        PostgreSQL 5MB
Ruby      1.9.2
ログ        1500行まで
Add-ons   最低グレードは無料(使用するには登録が必要)
便利な機能
環境変数

              環境変数を設定する


$ bundle exec heroku config:add PASSWORD=“password”
          stackコマンドで切り替える

              環境変数を参照する

                 ENV[‘PASSWORD’]



         設定した環境変数一覧を見る

             bundle exec heroku config
メンテナンスモード

   メンテナンスモードにする

   stackコマンドで切り替える
 $ bundle exec heroku maintenance:on
       環境変数を参照する



 メンテナンスモードを解除する

 $ bundle exec heroku maintenance:off
ログ

    環境変数を参照する

$ bundle exec heroku logs
メンテナンスモードを解除する
$ bundle exec heroku logs –n 200

$ bundle exec heroku logs --tail
チーム開発


   プロジェクトにメンバーを追加する

            環境変数を参照する
 $ bundle exec heroku sharing:add xxx@xxx.com


        課金アカウントを変更する

$ bundle exec heroku sharing:transfer xxx@xxx.com
add-ons
アドオンを使用する




$ bundle exec heroku addons:add アドオン名:グレード名
便利なアドオン
cron




$ bundle exec heroku addons:add cron:daily
httpsアクセス




$ bundle exec heroku addons:add ssl:piggyback
カスタムドメイン



$ bundle exec heroku addons:add custom_domains

$ bundle exec heroku domains:add xxx.xxx.com
DBバックアップ(herokuサーバー
       上)


   $ bundle exec heroku addons:add pgbackups

   $ bundle exec heroku pgbackup:capture

   $ bundle exec heroku pgbackups



   $ bundle exec pgbackups:restore バックアップファイル名
plugins
プラグインを使用する




$ bundle exec heroku plugins:install gitリポジトリのパス
プラグインのカタログ
プラグインのカタログを利用す
      る



    Herocutter
    http://herocutter.heroku.com/
Herocutterプラグイン

   $ bundle exec heroku plugins:install git://github.com/hone/heroku_herocutter.git




                         インストールが簡単になる


$ bundle exec heroku plugins:install git://github.com/hone/heroku_colorize_console.git

                                        ↓
$ bundle exec heroku plugins:install colorize_console
HeroはRuby開発者だけじゃない..
対応環境


 Ruby(デフォルト)

 Node.JS

 Clojure(Lisp)

 Java

 Python

 Scala
stack
        Stack一覧を確認する
          aspen-mri-1.8.6

           bamboo-ree-1.8.7   Ruby
デフォルト → bamboo-mri-1.9.2
      *

           cedar (beta)       その他
動作環境を切り替える
アプリケーション作成時にオプションを指定する


 $ bundle exec heroku create アプリ名 –stack cedar


         stackコマンドで切り替える

     $ bundle exec heroku stack:migrate ceder



          Pushした時に切り替わる

                $ git push heroku
http://devcenter.heroku.com/

start Heroku

Editor's Notes

  • #2 本日のテーマはRuby開発者であれば誰もが触ったことがあろうHerokuについてのお話です。
  • #3 まずはおさらいHerokuって?
  • #4 一部にハーオークーとよぶ人もいるので、呼び方は人それぞれ。気になる人はyoutubeなどでネイティブの発音を聞いてみてください。
  • #5 なぜ”俳句”なのかはよくわかりませんが、Rubyのふるさとの日本文化に敬意をあらわして、というコンセプトからHerokuのサービスには日本語や日本的なモチーフが多く使用されています。それらについては日本語の意味をなしていないため、特別な意味合いはないと考えられます。
  • #6 PaaS(パース)とはソフトウェアを構築、稼働する土台となるプラットフォームをインターネット経由で提供するサービスです。--2007/7にSalesforce.comがSaaSの進化版として提唱しました。簡単に言うと、自分で作成したアプリケーションを簡単にインターネット上に公開することができるサービスです。
  • #7 Herokuのなにがすごいか
  • #8 元HerokuSEO(現在はSalesforce.comのシニア・バイス・プレジデント)のバイロン・セバスチャン氏曰く、「開発者は偉大なアイデアを思いついたら、Rubyのプログラムにして、Herokuのプラットフォームに展開すればいい。そうすれば、そのアイデアはすぐに実現可能になり、開発者はヒーローになれる。」どういうことかというと・・・
  • #9 Herokuを使えば開発者はサーバの購入コスト、環境構築設定やデプロイにかかる時間コストを大幅に削減することができ、アプリケーションの公開に至る開発スピードを劇的に上げることができます。コーディングを行ったら、次に、gitでherokuの公開レポジトリにソースをコミットするだけでデプロイが完了し、インターネット上にアプリを公開することができます。驚異的なスピードで開発を行うRuby開発者は、Web開発のヒーローになる!ということらしいです。さらに、アプリケーションを公開するだけではなく、公開後の運用や拡張を行うための機能もがふんだんに用意されています。
  • #10 まとめると、Herokuの強みは、①スピード ローカルのプログラムをgitでHerokuに展開すれば一瞬で利用可能になります②スケーラビリティ 必要になった時に必要なだけ即座にMailやcron、DBなどの機能や、メモリなどのリソースの拡張が行えます③豊富な機能 Node.jsやNoSQLデータベースなど話題のサービスを使用できるなど、アーリーアダプターの志向に対応した機能を提供しているため、最近のクラウドを取り巻く環境を簡単に手に入れることができます。また、アプリケーションを公開するだけではなく、ログやバックアップ、解析、ステージング環境などに対応する機能が環境が整っています。
  • #11 実際にHerokuでアプリケーションを公開する手順です
  • #12 ローカルでアプリを作成します。ローカルのアプリをheroku上に展開します。デプロイはgit push herokuコマンドのみ。これだけでアプリケーションをインターネット上に公開することができます。
  • #13 herokuはRuby以外の言語環境にも対応していますが、今回はRubyアプリケーションを公開します。Rubyのバージョンやgemの管理を簡単にするため、Rubyのバージョン管理をおこなうrvmを使用します。herokuサーバーへのソースの展開はgitを使用して行うため、gitの導入は必須です。herokuのアカウントはメールアドレスの登録のみで簡単に作成することができます。
  • #14 herokuの操作はherokuのサイトからGUIで行う方法と、コマンドラインからherokuコマンドを使用してCUIで行う2通りの方法が可能ですが、herokuコマンドを使用するためにはheroku gemを導入する必要があります。今回はCUIから操作を行います。herokuではすでにgemsが用意されているため、使用するgemのインストールなどは不要ですが、herokuで用意しているgem以外のgemを使用したい場合、や、gemのバージョンを指定したいは2通りの方法でgemsを管理することができます。ひとつは.gemファイルを作成し、その中に使用するgemを記述してpushする方法ですが、バージョンの指定やgems同士の互換性は管理できないため、herokuではgems管理ラッパーであるbundlerを使用することを推奨しています。herokuの公開リポジトリにpushすると、.gemファイル、もしくはbundlerで管理するGemfileとGemfile.lockファイルを参照してherokuが自動でgemsのインストールを行なってくれます。.gemファイルとGemfile.lockファイルの共存はできません。(.gemファイルが優先されます)
  • #15 Herokuで公開するアプリケーションを作成します。今回は省略します。
  • #16 herokuコマンドで、heroku上にgitリポジトリと、アプリケーションを作成します。アプリケーション名を付ける場合はheroku内で一意な名前のみ命名することができます。サービス名がURLになるので、heroku上ですでに存在するサービス名は命名することができません。アプリ名を省略すると、自動でアプリケーション名が割り振られます。作成時に命名したアプリケーション名はいつでも変更することが可能です。変更する場合は、コマンドラインから $ heroku rename NEWNAME コマンドで変更を行うか、herokuサイトからアプリケーション設定画面で変更することができます。
  • #17 デプロイは、herokuのmasterリポジトリにpushするだけでです。
  • #18 変更を反映させたい場合は、Herokuの公開リポジトリに変更をpushするだけで変更が反映されます。
  • #19 pushしたソースが実際にデプロイされ、アプリケーションが公開されたか確認してみます。
  • #20 デフォルトのHerokuの装備についてです。1アカウントにつき作成できるアプリケーションの数に制限は設けられていません。そのため、ステージング環境を保持することも容易です。容量ですが、この100MBはソースを圧縮したサイズで100MBまでです。(git push herokuをすると自動で圧縮されます。)Dyno(ダイノス)はCPUリソースの設定単位で、1Dynoが1プロセスです。1Dynoのメモリ使用量は最大300MBまでです。WebアプリケーションサーバープロセスであるWebDynosと、バックグラウンドプロセスであるWorkerDynosが設定可能です。設定する際は、上限値を設定します。3にすれば3dynos分のリソースが使用されるわけではなく、溢れた容量分が設定値まで拡張されると考えてください。標準ではWebDynosが1Dyno割り当てられています。DBは標準ではPostgreSQLが5MB用意されていますが、add-onsを使用することで容量を増やすことや、MysqlやMongoDBなどのDBを使用することができます。ログは1500行までフィッチすることができます。add-onは最低グレードは大抵が無料で提供されています。(ただし、アドオンが無料であっても連携先のサービスが有料の場合があります。)無料でも使用登録の際にクレジットカードの登録を求められます。ただし、無料の機能を使用している範囲内で課金されることはありません。サービスの成長に合わせて課金していくのが一般的です。
  • #21 Herokuには標準で便利な機能が用意されています。ありすぎて書き切れないのでその一部を紹介します。
  • #22 パスワードなど、コード内に記述したくない値を環境変数としてherokuに保持させることができます。具体的な使用例としては、Twitterやfacebookなどの外部サービスと連携したアプリを作成する場合、aouth_tokenなどを環境変数にもたせておくと、本番環境とステージング環境で、異なったtokenで同じソースを使用できるなど、汎用的な使い方ができます。
  • #23 メンテナンス中画面に切り替える場合もherokuコマンド一つで行うことができます。ユーザーがメンテナンスモード中にアプリケーションにアクセスすると、メンテナンス画面のレスポンスが返されますが、この画面をカスタマイズしたい場合はcustome_error_pagesアドオンを導入します。このアドオンではエラー画面も設定することができます。
  • #24 標準のログコマンドでは最近の100行を出力します。-nオプションを指定することで、1500行まで取得することができます。その他に、--tailオプションでリアルタイム出力を行ったり、プロレスごとのログ出力を行うことも出来ます。
  • #25 アプリケーションの共同開発を行うには、herokusharing:addコマンドの後に、追加するユーザーのメールアドレスを指定します。コマンドを発行すると、追加ユーザー宛てにメールが送信され、URLリンクをクリックすることで招待を認可します。共有しているプロジェクトが課金サービスを使用している場合に、支払いを行うユーザーを変更することができます。課金対象ユーザーはプロジェクト一つにつき一人のみです。
  • #26 ここからはHerokuの拡張についてです。Add-onsはアプリケーションに対して機能を追加します。
  • #27 外部ホスティングサービスとの連携や、DB、cron、メール、ロギング拡張、アナライザなどの機能はadd-onとして提供されています。標準装備以外のアドオンを使用するには、はじめにherokuのサイトからadd-onsの使用登録をしなければなりません。その際クレジットカードの登録を求められますが、課金されることはありません。初回に一度登録を行えば、2個目からは使用登録は要りません。
  • #28 Herokuで公開しているアプリケーションの拡張を行う
  • #29 cronアドオンを導入することで、バッチ処理を行うこともできます。一日一回実行するDailyCronは無料です。
  • #30 ssl:piggybackアドオンを導入することで、SSLを使えるようになります。
  • #31 custom_domainsアドオンを導入することで、独自ドメインを使用することができます。
  • #32 pgbackupsアドオンを導入することで、PostgreSQLのDBのバックアップを自動でキャプチャし、heroku上に保持することができるようになります。バックアップ2ファイルまでは無料です。captureでバックアップファイルを作成し、作成したバックアップはpgbackupsで確認することができます。Rstoreでリストアします。これらはすべて最低グレードなら無料で使用することができます。この他にも、様々なアドオンが提供されています。
  • #33 次に、プラグインについてです。add-onsがアプリケーションに対して機能を追加するのに対して、pluginはherokuコマンドに対して機能を追加します。そのため、GUIから操作を行うユーザーに対しては必要がありません。herokuコマンドはプラグインという仕組みを持っていて、herokuのCUIでの操作をより快適にする機能を追加することができます。例えば、コードハイライトの機能を提供するプラグインなどがあります。
  • #34 プラグインは主にgithubで公開されています。プラグインをインストールするコマンドは、herokuplugins:installのあとに、gitリポジトリのパスを指定します。プラグインを使用するために、別途gemが必要な場合があります。
  • #35 これらのプラグインは有志によって主にgithubで公開されていますが、プラグインを統括しているカタログサイトが存在します。
  • #36 プラグインのカタログを提供するのがherocutterというサービスです。Rubygems.orgの前身である、gemcutter.orgのherokuプラグインバージョンとして展開されています。Gemcutterと同じく、自分で開発したプラグインを自由に追加することが可能になっています。現在、18個のプラグインが登録されています。
  • #37 Herocutter用のプラグインもあり、これを導入することにより、カタログ上のプラグインのインストールがプラグイン名のみで行えるようになります。
  • #39 2011/10現在、対応言語は6つ。フレームワークはなんでもOK。
  • #40 Ruby以外のアプリケーション環境を使用する場合はVMを切り替えます。Ruby以外のアプリを動かすには、Ceader(シーダー)を選択します。
  • #41 環境を切り替えるには、herokuアプリケーション作成時にオプションを付けるか、stack:migrateコマンドを使用します。変更はpushした時にはじめて切り替わります。
  • #42 Herokuで提供しているドキュメントがわかりやすいので詳しくはHerokuサイトのドキュメントをどうぞ。