Successfully reported this slideshow.
Your SlideShare is downloading. ×

4時間耐久 PHP on Heroku

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Power shell で DSL
Power shell で DSL
Loading in …3
×

Check these out next

1 of 81 Ad

More Related Content

Similar to 4時間耐久 PHP on Heroku (20)

More from Yusuke Ando (20)

Advertisement

Recently uploaded (20)

4時間耐久 PHP on Heroku

  1. 1. 4時間耐久 PHP on Herokuの教室 4時間耐久PHP on Heroku / Yusuke Ando (@yando) 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
  2. 2. テキスト PHP on Heroku / Yusuke Ando (@yando)
  3. 3. http://tech.a-listers.jp/ PHP on Heroku / Yusuke Ando (@yando)
  4. 4. 本日の対象者 PHPを使っている Facebookアプリを作りたい Herokuを使いたい そんな皆さん PHP on Heroku / Yusuke Ando (@yando)
  5. 5. Herokuを 使ってFacebook アプリを 作ってみよう! PHP on Heroku / Yusuke Ando (@yando)
  6. 6. 本日のメニュー HerokuでPHP DBの使い方 Facebookアプリ開発 PHP on Heroku / Yusuke Ando (@yando)
  7. 7. HerokuでPHP PHP on Heroku / Yusuke Ando (@yando)
  8. 8. PHPサポート? 公式のリストには存在しない Facebook連携の頃から動作 実際にはかなり稼働している 技術的には問題なし PHP on Heroku / Yusuke Ando (@yando)
  9. 9. 事前に必要なもの Herokuアカウント Facebookアカウント toolbelt (heroku & git) PHP on Heroku / Yusuke Ando (@yando)
  10. 10. developers.facebook.com 開発者アプリへ PHP on Heroku / Yusuke Ando (@yando)
  11. 11. 開発者アプリ PHP on Heroku / Yusuke Ando (@yando)
  12. 12. メニュー画面 アプリの作成 作成済アプリ が出る場所 PHP on Heroku / Yusuke Ando (@yando)
  13. 13. アプリの命名 チェックを入れると Herokuアプリ化 PHP on Heroku / Yusuke Ando (@yando)
  14. 14. 言語とメアド設定 PHP on Heroku / Yusuke Ando (@yando)
  15. 15. これでデプロイ完了 アプリへ PHP on Heroku / Yusuke Ando (@yando)
  16. 16. テンプレが動作中 PHP on Heroku / Yusuke Ando (@yando)
  17. 17. ログイン時に権限確認 ここが大事! PHP on Heroku / Yusuke Ando (@yando)
  18. 18. ログイン成功 各種情報を取得 PHP on Heroku / Yusuke Ando (@yando)
  19. 19. ソースは何処に? •ソースはHerokuのgitに存在 •Herokuはからcloneして編集 •commitしてpushすると反映 PHP on Heroku / Yusuke Ando (@yando)
  20. 20. gitの状況 gitリポジトリ 修正 修正 コード 修正 dyno 修正 修正 ローカル Heroku pushでコードを反映する PHP on Heroku / Yusuke Ando (@yando)
  21. 21. Herokuにログイン PHP on Heroku / Yusuke Ando (@yando)
  22. 22. アドレスを確認 gitリポジトリのアドレス PHP on Heroku / Yusuke Ando (@yando)
  23. 23. ソースの修正 •Herokuで確認したURLをクローン •修正コードをcommit •Herokuにpush PHP on Heroku / Yusuke Ando (@yando)
  24. 24. 練習 PHPをデプロイ •Facebookの開発者ページから作成 •動作を確認 •リポジトリをクローンしてコード修正 •修正した内容の確認 (Hello World等) PHP on Heroku / Yusuke Ando (@yando)
  25. 25. ローカルで動く? PHP on Heroku / Yusuke Ando (@yando)
  26. 26. ローカル動作の要件 •hostsを書き換えるなど •該当のホストをapacheに設定 •App ID / Secretを環境変数に設定 •開発用は別アプリ、ドメインが無難 PHP on Heroku / Yusuke Ando (@yando)
  27. 27. Herokuの基本技 •heroku config •heroku ps •heroku logs [-t] •heroku run bash •heroku open PHP on Heroku / Yusuke Ando (@yando)
  28. 28. Herokuの制限事項 •ローカルファイルが永続化されない •mbstringが標準では使えない •index.phpの存在が必須 •ネットワークが遠い •ServerLimit 1 / MaxClients 1 PHP on Heroku / Yusuke Ando (@yando)
  29. 29. ローカルファイル 一応、書き込める PHP on Heroku / Yusuke Ando (@yando)
  30. 30. 再起動すると $ heroku restart Restarting processes... done さようなら、データ PHP on Heroku / Yusuke Ando (@yando)
  31. 31. index.phpが無い $ git mv index.php index2.php $ git commit -m "move" [master 65b0921] move 1 files changed, 0 insertions(+), 0 deletions(-) rename index.php => index2.php (100%) $ git push heroku master Counting objects: 3, done. Writing objects: 100% (2/2), 228 bytes, done. Total 2 (delta 0), reused 0 (delta 0) -----> Heroku receiving push ! Heroku push rejected, no Cedar-supported app detected To git@heroku.com:stark-warrior-3088.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'git@heroku.com:stark-warrior-3088.git' pushできない PHP on Heroku / Yusuke Ando (@yando)
  32. 32. 東海岸は遠い 1 10.200 ms 2.443 ms 10.540 ms 2 *** 3 14.313 ms 11.478 ms 12.616 ms 4 10.042 ms 12.934 ms 12.804 ms 5 12.451 ms 14.936 ms 17.440 ms 6 te4-4-403.gw2.nrt2.asianetcom.net (203.192.150.125) 13.373 ms 16.648 ms 18.423 ms 7 gi0-0-0.cr1.nrt1.asianetcom.net (202.147.1.62) 17.052 ms 34.160 ms 16.097 ms 8 te0-0-0-4.gw1.lax3.asianetcom.net (202.147.61.169) 129.748 ms 132.160 ms 129.538 ms 9 be1.gw2.lax3.asianetcom.net (202.147.61.162) 124.365 ms 123.194 ms 123.215 ms 10 equinix02-iad2.amazon.com (206.223.115.35) 182.967 ms 192.914 ms 187.884 ms 11 72.21.220.45 (72.21.220.45) 200.332 ms 72.21.220.43 (72.21.220.43) 193.632 ms 205.251.245.5 (205.251.245.5) 197.197 ms 12 205.251.245.47 (205.251.245.47) 192.199 ms 195.086 ms 72.21.222.155 (72.21.222.155) 367.567 ms 13 216.182.224.71 (216.182.224.71) 193.768 ms 216.182.224.203 (216.182.224.203) 188.929 ms 216.182.224.207 (216.182.224.207) 204.856 ms 14 * * * 15 * * * 16 * * * 17 * * * PHP on Heroku / Yusuke Ando (@yando)
  33. 33. mbstringを使う •改良されたbuildpackを使う  →この方法が理想 •ダメな場合は自力解決 heroku用のmbstring.so アプリ内に php.ini を作り読み込む PHP on Heroku / Yusuke Ando (@yando)
  34. 34. buildpack •cedarスタックの構築キット •Linux上での構築ノウハウが使える •github上でフォークしてさまざまな構 成を自力で作成して、利用できる •heroku製、コミュニティ製が存在 PHP on Heroku / Yusuke Ando (@yando)
  35. 35. buildpack PHP on Heroku / Yusuke Ando (@yando)
  36. 36. Third-party PHP on Heroku / Yusuke Ando (@yando)
  37. 37. Third-party(2) PHP on Heroku / Yusuke Ando (@yando)
  38. 38. 改良されたbuildpack •新規アプリの場合   $heroku create --buildpack https://github.com/winglian/heroku-buildpack-php -s cedar •既存アプリの場合は変更 $heroku config:add BUILDPACK_URL=https://github.com/winglian/heroku- buildpack-php PHP on Heroku / Yusuke Ando (@yando)
  39. 39. 自力で解決 •mbstring.soを配置 https://github.com/wuputah/heroku-libraries •php.iniを記述 extension=/app/www/mbstring.so PHP on Heroku / Yusuke Ando (@yando)
  40. 40. Herokuのコツ •環境面での制約は受け入れる •日本語の問題などはクリアできる •単純にアプリを載せてはいけない •静的コンテンツを外に逃す PHP on Heroku / Yusuke Ando (@yando)
  41. 41. DBの使い方 PHP on Heroku / Yusuke Ando (@yando)
  42. 42. 利用できるDB •Shared DB(PostgreSQL)   5MBまで無料   20GBまでで$15 •その他の各種アドオン   MySQL MongoDB まずは無料のPostgreSQL PHP on Heroku / Yusuke Ando (@yando)
  43. 43. アドオン PHP on Heroku / Yusuke Ando (@yando)
  44. 44. addons.heroku.com PHP on Heroku / Yusuke Ando (@yando)
  45. 45. ClearDB PHP on Heroku / Yusuke Ando (@yando)
  46. 46. 無料版もある PHP on Heroku / Yusuke Ando (@yando)
  47. 47. 要クレジットカード PHP on Heroku / Yusuke Ando (@yando)
  48. 48. 無料のshared db •Facebookからのアプリは未設定 •必要な場合は別途コマンドで追加 heroku addons:add shared-database •接続先は heroku configで確認する heroku config •スキーマ管理は db:migrate が想定 PHP on Heroku / Yusuke Ando (@yando)
  49. 49. DB設定の仕組み •環境変数にDSN文字列が設定される •Rubyが前提となった形式 •PHPから利用する場合は適宜、解析 postgres://ajkilbabda:4E7Nr- gtIcIk9qCSABBB8@ec2-174-129-20-245.compute-1.ama zonaws.com/ajkilbxgca postgres://[user]:[pass]@[host]/[database] PHP on Heroku / Yusuke Ando (@yando)
  50. 50. DBの管理 •PHPではdb:migrateが使えない •接続元制限があるのでコンソール不可 •フレームワークの機能も使える •Webアプリから行うと特に簡単 https://github.com/yandod/phppgadmin-heroku PHP on Heroku / Yusuke Ando (@yando)
  51. 51. 練習 DBを使ってみる •heroku addons:add shared-database •phppgadminをgit submodule add •デプロイしてWebからの管理を確認 $git submodule add git://github.com/yandod/phppgadmin-heroku.git PHP on Heroku / Yusuke Ando (@yando)
  52. 52. Facebookアプリ PHP on Heroku / Yusuke Ando (@yando)
  53. 53. FBアプリ開発の基礎 App ID / App Secret PHP SDK graph API / scope social plugin PHP on Heroku / Yusuke Ando (@yando)
  54. 54. FBアプリとは? Facebookが提供するAPIを 利用したWebやアプリ 該当範囲は広大 PHP on Heroku / Yusuke Ando (@yando)
  55. 55. Website 認証などにFacebookを利用 PHP on Heroku / Yusuke Ando (@yando)
  56. 56. Facebook内アプリ Canvasで動作 PHP on Heroku / Yusuke Ando (@yando)
  57. 57. モバイル Facebookのモバイルアプリ内で動作 PHP on Heroku / Yusuke Ando (@yando)
  58. 58. アプリの種類 •Webサイト  自由だが、Facebook外になる •Facebook内アプリ  レイアウト、モバイルに制限あり •モバイルアプリ  今後の成長株になると思われる PCとモバイルで違いがある点に注意 PHP on Heroku / Yusuke Ando (@yando)
  59. 59. App ID / Secret •FacebookのAPIの利用に必要 •開発者アプリから確認可能 •1クリックで作成されたアプリでは環 境変数を使って受け渡している $ heroku config === Config Vars for vivid-rain-6470 FACEBOOK_APP_ID: 425865070767611 FACEBOOK_SECRET: c50346e471016be2fbd3572fd2de1f11 PHP on Heroku / Yusuke Ando (@yando)
  60. 60. ソース内からの取得 PHP on Heroku / Yusuke Ando (@yando)
  61. 61. php-sdk •APIを利用するPHPクライアント •facebookが公開している •2012年4月からリポジトリが変更に PHP on Heroku / Yusuke Ando (@yando)
  62. 62. 基本的な利用例 PHP on Heroku / Yusuke Ando (@yando)
  63. 63. 認証処理の例 ログイン済みならID取得 APIをコール ログインURLの生成 PHP on Heroku / Yusuke Ando (@yando)
  64. 64. 認証処理の例 Facebookに遷移して戻る PHP on Heroku / Yusuke Ando (@yando)
  65. 65. 練習 apiを使ってみる •ザッカーバーグの情報を画面に表示 •ログインして、自分の情報も表示 •index.phpは変更しないで別ファイル •SDKのサンプルを参考 https://github.com/facebook/facebook-php-sdk/ blob/master/examples/example.php PHP on Heroku / Yusuke Ando (@yando)
  66. 66. Graph API 様々なAPIを /me のように使える PHP on Heroku / Yusuke Ando (@yando)
  67. 67. scope / permission •APIを経由した情報のアクセス範囲 •APIを経由した機能の提供範囲 •要求した権限は必ず承認が必要 PHP on Heroku / Yusuke Ando (@yando)
  68. 68. デフォルトの状態 誕生日やemailが無い PHP on Heroku / Yusuke Ando (@yando)
  69. 69. permissionは膨大 https://developers.facebook.com/docs/authentication/permissions/ PHP on Heroku / Yusuke Ando (@yando)
  70. 70. scope指定の例 カンマ区切りで指定 権限付きログインURLの生成 PHP on Heroku / Yusuke Ando (@yando)
  71. 71. scope指定の例 確認事項が増える! PHP on Heroku / Yusuke Ando (@yando)
  72. 72. 悪魔の実験 PHP on Heroku / Yusuke Ando (@yando)
  73. 73. まさに外道! PHP on Heroku / Yusuke Ando (@yando)
  74. 74. 秘密主義な人の自衛策 PHP on Heroku / Yusuke Ando (@yando)
  75. 75. 実装は簡単だが、規約違反に注意 PHP on Heroku / Yusuke Ando (@yando)
  76. 76. 練習 誕生日リスト •2ヶ月以内に誕生日の友人を表示 •友人の誕生日を取得する権限追加 •APIの利用方法を工夫する PHP on Heroku / Yusuke Ando (@yando)
  77. 77. social plugin •Facebookの機能を使う埋め込みタグ •ブログパーツ的な物 •タグを貼れば良い PHP on Heroku / Yusuke Ando (@yando)
  78. 78. 夢が広がる •もはやなんでも実装できる •facebookでログインする掲示板 •友達が登場する昔話 •診断アプリ •ソーシャル○○で資金調達!(棒読) PHP on Heroku / Yusuke Ando (@yando)
  79. 79. まとめ PHP on Heroku / Yusuke Ando (@yando)
  80. 80. PHP on Heroku •手軽に利用できるPaaS •いくつかのコツと制限 •結局、なんでも出来る PHP on Heroku / Yusuke Ando (@yando)
  81. 81. Facebookアプリ •情報はWebからゲット •英語でもメゲない •進化が早いので継続が大事 PHP on Heroku / Yusuke Ando (@yando)

×