はじめまして、テクニカルコンサルティンググループの @yukihiro_ko と申します。
先日、 heroku meets #12 がDeNAにて開催されました。
この勉強会をきっかけにHerokuを利用してみましたので今からはじめる方でも簡単にスタートできるPHP on Herokuを紹介したいと思います。
もともとHerokuはRailsアプリケーション開発者に親しまれてきたサービスですが、ここ数年間で多言語化され今回のUpdateでPHPもベータサポートされました。
そのため今回の解説は Getting Started with PHP on Heroku にそって案内したいと思います。
本記事がこれからPaaSを使ってみようと思っているゲーム開発者の方の参考やヒントになれば幸いです。
それでは最初にHerokuの特徴について簡単に説明したいと思います。
- Ruby、Java、Python、Scalaなど複数言語とフレームワークに対応しています。
- 基本的な機能は無料枠で利用できます。
- Heroku Postgresをはじめ他のRDBMSもアドオン経由で利用可能です。
- 無料のアドオンも充実しています。
- Gitを使ってアプリをデプロイします。
このようにHerokuは多様な言語に対応しWebアプリケーションの開発から公開までサーバサイドを意識することなく実装できるプラットフォームになります。
本記事の中では「HerokuをSandboxアプリのWebサーバとして利用しHelloWorldを表示させる」ことをゴールとして実装の流れを解説したいと思います。
1. アカウント作成
まずメールアドレスを入力して送信します。
そしてパスワードを設定するだけで完了します。(ここまで約1分)
2. 基本セットアップ
次にローカル環境に合わせて「Toolbelt」をインストールします。
なお今回は OS X 10.9.3 の環境が前提になります。
このツールを利用することでHerokuをコマンドラインで操作できます。
またアプリケーションをデプロイする際にも必要になります。
インストールが完了したらターミナルを起動してみます。
ツールが入ったことを確認するためtoolbeltのバージョンを表示してみます。
$ heroku version heroku-toolbelt/3.8.2 (x86_64-darwin10.8.0) ruby/1.9.3
3. SSH鍵を設定します。
Herokuを利用するためにSSH鍵の登録をおこないます。
以下のようにloginをおこなうと1.で生成したメールアドレスとパスワードを聞かれますので入力します。とくに問題がなければ「認証成功」のメッセージが表示されます。
$ heroku login Email: name@sample.com Password (typing will be hidden): Authentication successful.
ローカル環境にSSH鍵がない場合は新たに生成を求めるメッセージが表示されますので[YES]でHerokuに公開鍵が登録されます。(ここまで約5分)
4. アプリを作成します。
アプリケーションを置くディレクトリ(myheroku)を作ります。
$ mkdir myheroku $ cd myheroku
作成されたディレクトリに移動し今回PHPとして動作させるために必要なindex.phpとcomposer.jsonファイルを作ります。composer.jsonの役割については後半で説明していくので、ここでは空ファイルのままにしておきます。
$ touch composer.json
index.phpは最小コードで以下のように実装します。
<?php echo "Hello Heroku World!"; ?>
5. Gitを利用するためにリポジトリを初期化します。
HerokuではGitを使ってリモートリポジトリへプッシュする必要があるのでまずディレクトリ(myheroku)をGitリポジトリにします。以下のコマンドで初期化、追加、コミットまでを完了させます。なお-mのコミットメッセージは要約を記述してください。
$ git init $ git add . $ git commit -m "Add Heroku SampleApp"
6. Heroku上にアプリを生成します。
以下のようにサブドメインにアプリ名が自動生成されます。なおアプリ名は後からダッシュボードにて変更することも可能です。
$ heroku create Creating {アプリ名}... done, stack is cedar http://{アプリ名}.herokuapp.com/ | git@heroku.com:{アプリ名}.git
7. アプリをデプロイします。
git pushを実行して以下のようなメッセージが表示されたら成功です。
$git push heroku master Initializing repository, done. Counting objects: 4, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (4/4), 323 bytes | 0 bytes/s, done. Total 4 (delta 0), reused 0 (delta 0) -----> PHP app detected (中略...) To git@heroku.com:{アプリ名}.git * [new branch] master -> master
8. アプリをブラウザで起動します。(ここまでで約12分)
$ heroku open
なお管理画面のheroku dashboardにあるアプリ詳細情報から起動することも可能です。
9. 最後にデプロイしたWebサーバをSandboxアプリでも表示させてみます。
公開した {アプリ名}.herokuapp.com/ をgadget.xmlのスタートページに登録して
Sandboxアプリにアクセスすると以下のように表示されることが確認できます。
$ heroku apps:info === Git URL: git@heroku.com::{アプリ名}.git Owner Email: name@sample.com Region: us Repo Size: 96k Slug Size: 62M Stack: cedar Web URL: http://{アプリ名}.herokuapp.com/
ネットワーク遅延(レインテンシ)がタイムアウトの原因になる可能性が高いため注意が必要です。まずは影響の少ないステージング環境からの利用がよいでしょう。
補足: composer.jsonについて
先ほど4.にて設定した空ファイルですが、PHPアプリケーションとして利用する場合は
デプロイするルートディレクトリにcomposer.jsonが必要になります。
このファイルは実行するPHPバージョンや拡張の指定をおこなうファイルになります。
デフォルトはPHP 5.5ですが例えば以下のように設定することでFacebookが公開しているPHPの高速実行環境 HipHop Virtual Machine(hhvm)として利用するとこも可能になります。
{ "require": { "hhvm": "3.0.1" } }
まとめ
Herokuをはじめるメリットとしてスモールスタートできる点があります。
他のクラウドサービスとの違いとして例えばAmazon Web Servicesで提供されいる仮想サーバEC2(laaS)は必要性にあわせてミドルウェアやスペックなどを容易に調達できる反面でサーバを構築するための手順はオンプレミスに近い作業で進めることになります。この負担を軽減するためにサーバ構成のテンプレート保存やクラウドデザインパターンも用意されていますが利用するための知識は必要になります。
一方のHerokuはアプリケーション開発者が簡単なコマンドを実行するだけでサーバ環境を準備できるので本来の開発作業に集中でき生産性の向上にもつながると思いますので
まだ利用されたことのない方はぜひ実用性の評価からはじめてみてはいかがでしょうか。