SlideShare ist ein Scribd-Unternehmen logo
1 von 81
Downloaden Sie, um offline zu lesen
4時間耐久
PHP on Herokuの教室



 4時間耐久PHP on Heroku / Yusuke Ando (@yando)
 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テキスト




PHP on Heroku / Yusuke Ando (@yando)
http://tech.a-listers.jp/
PHP on Heroku / Yusuke Ando (@yando)
本日の対象者

    PHPを使っている
Facebookアプリを作りたい
    Herokuを使いたい
      そんな皆さん


  PHP on Heroku / Yusuke Ando (@yando)
Herokuを
使ってFacebook
  アプリを
作ってみよう!
 PHP on Heroku / Yusuke Ando (@yando)
本日のメニュー

  HerokuでPHP
    DBの使い方
Facebookアプリ開発



PHP on Heroku / Yusuke Ando (@yando)
HerokuでPHP
PHP on Heroku / Yusuke Ando (@yando)
PHPサポート?

公式のリストには存在しない
Facebook連携の頃から動作
実際にはかなり稼働している
   技術的には問題なし


  PHP on Heroku / Yusuke Ando (@yando)
事前に必要なもの


  Herokuアカウント
 Facebookアカウント
toolbelt (heroku & git)



 PHP on Heroku / Yusuke Ando (@yando)
developers.facebook.com

                                開発者アプリへ




PHP on Heroku / Yusuke Ando (@yando)
開発者アプリ




PHP on Heroku / Yusuke Ando (@yando)
メニュー画面



                                   アプリの作成




作成済アプリ
 が出る場所
  PHP on Heroku / Yusuke Ando (@yando)
アプリの命名




          チェックを入れると
           Herokuアプリ化

PHP on Heroku / Yusuke Ando (@yando)
言語とメアド設定




PHP on Heroku / Yusuke Ando (@yando)
これでデプロイ完了




                           アプリへ


PHP on Heroku / Yusuke Ando (@yando)
テンプレが動作中




PHP on Heroku / Yusuke Ando (@yando)
ログイン時に権限確認




                      ここが大事!



PHP on Heroku / Yusuke Ando (@yando)
ログイン成功


                            各種情報を取得




PHP on Heroku / Yusuke Ando (@yando)
ソースは何処に?

•ソースはHerokuのgitに存在
•Herokuはからcloneして編集
•commitしてpushすると反映




   PHP on Heroku / Yusuke Ando (@yando)
gitの状況
                               gitリポジトリ


 修正  修正
   コード
       修正                          dyno
修正 修正

  ローカル                            Heroku

   pushでコードを反映する
    PHP on Heroku / Yusuke Ando (@yando)
Herokuにログイン




PHP on Heroku / Yusuke Ando (@yando)
アドレスを確認




                      gitリポジトリのアドレス




PHP on Heroku / Yusuke Ando (@yando)
ソースの修正


•Herokuで確認したURLをクローン
•修正コードをcommit
•Herokuにpush



   PHP on Heroku / Yusuke Ando (@yando)
練習 PHPをデプロイ

•Facebookの開発者ページから作成
•動作を確認
•リポジトリをクローンしてコード修正
•修正した内容の確認
(Hello World等)



   PHP on Heroku / Yusuke Ando (@yando)
ローカルで動く?




PHP on Heroku / Yusuke Ando (@yando)
ローカル動作の要件

•hostsを書き換えるなど
•該当のホストをapacheに設定
•App ID / Secretを環境変数に設定
•開発用は別アプリ、ドメインが無難



    PHP on Heroku / Yusuke Ando (@yando)
Herokuの基本技

•heroku config
•heroku ps
•heroku logs [-t]
•heroku run bash
•heroku open


     PHP on Heroku / Yusuke Ando (@yando)
Herokuの制限事項

•ローカルファイルが永続化されない
•mbstringが標準では使えない
•index.phpの存在が必須
•ネットワークが遠い
•ServerLimit 1 / MaxClients 1


     PHP on Heroku / Yusuke Ando (@yando)
ローカルファイル




                     一応、書き込める




PHP on Heroku / Yusuke Ando (@yando)
再起動すると

$ heroku restart
Restarting processes... done




                      さようなら、データ




 PHP on Heroku / Yusuke Ando (@yando)
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)
東海岸は遠い
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)
mbstringを使う
•改良されたbuildpackを使う
 →この方法が理想


•ダメな場合は自力解決
 heroku用のmbstring.so
 アプリ内に php.ini を作り読み込む


   PHP on Heroku / Yusuke Ando (@yando)
buildpack

•cedarスタックの構築キット
•Linux上での構築ノウハウが使える
•github上でフォークしてさまざまな構
成を自力で作成して、利用できる
•heroku製、コミュニティ製が存在


   PHP on Heroku / Yusuke Ando (@yando)
buildpack




PHP on Heroku / Yusuke Ando (@yando)
Third-party




PHP on Heroku / Yusuke Ando (@yando)
Third-party(2)




PHP on Heroku / Yusuke Ando (@yando)
改良された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)
自力で解決

•mbstring.soを配置
 https://github.com/wuputah/heroku-libraries



•php.iniを記述
  extension=/app/www/mbstring.so




      PHP on Heroku / Yusuke Ando (@yando)
Herokuのコツ

•環境面での制約は受け入れる
•日本語の問題などはクリアできる
•単純にアプリを載せてはいけない
•静的コンテンツを外に逃す



   PHP on Heroku / Yusuke Ando (@yando)
DBの使い方
PHP on Heroku / Yusuke Ando (@yando)
利用できるDB

•Shared DB(PostgreSQL)
  5MBまで無料
  20GBまでで$15
•その他の各種アドオン
  MySQL MongoDB

    まずは無料のPostgreSQL

    PHP on Heroku / Yusuke Ando (@yando)
アドオン




PHP on Heroku / Yusuke Ando (@yando)
addons.heroku.com




 PHP on Heroku / Yusuke Ando (@yando)
ClearDB




PHP on Heroku / Yusuke Ando (@yando)
無料版もある




PHP on Heroku / Yusuke Ando (@yando)
要クレジットカード




PHP on Heroku / Yusuke Ando (@yando)
無料のshared db

•Facebookからのアプリは未設定
•必要な場合は別途コマンドで追加
heroku addons:add shared-database

•接続先は heroku configで確認する
heroku config
•スキーマ管理は db:migrate が想定

     PHP on Heroku / Yusuke Ando (@yando)
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)
DBの管理

•PHPではdb:migrateが使えない
•接続元制限があるのでコンソール不可
•フレームワークの機能も使える
•Webアプリから行うと特に簡単
https://github.com/yandod/phppgadmin-heroku




       PHP on Heroku / Yusuke Ando (@yando)
練習 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)
Facebookアプリ
PHP on Heroku / Yusuke Ando (@yando)
FBアプリ開発の基礎

App ID / App Secret
     PHP SDK
 graph API / scope
    social plugin


PHP on Heroku / Yusuke Ando (@yando)
FBアプリとは?

Facebookが提供するAPIを
  利用したWebやアプリ



  該当範囲は広大
  PHP on Heroku / Yusuke Ando (@yando)
Website




                  認証などにFacebookを利用




PHP on Heroku / Yusuke Ando (@yando)
Facebook内アプリ

                                Canvasで動作




PHP on Heroku / Yusuke Ando (@yando)
モバイル




Facebookのモバイルアプリ内で動作

PHP on Heroku / Yusuke Ando (@yando)
アプリの種類
•Webサイト
 自由だが、Facebook外になる
•Facebook内アプリ
 レイアウト、モバイルに制限あり
•モバイルアプリ
 今後の成長株になると思われる

PCとモバイルで違いがある点に注意

   PHP on Heroku / Yusuke Ando (@yando)
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)
ソース内からの取得




PHP on Heroku / Yusuke Ando (@yando)
php-sdk
•APIを利用するPHPクライアント
•facebookが公開している
•2012年4月からリポジトリが変更に




  PHP on Heroku / Yusuke Ando (@yando)
基本的な利用例




PHP on Heroku / Yusuke Ando (@yando)
認証処理の例

                  ログイン済みならID取得


                            APIをコール



                        ログインURLの生成




PHP on Heroku / Yusuke Ando (@yando)
認証処理の例




                    Facebookに遷移して戻る


PHP on Heroku / Yusuke Ando (@yando)
練習 apiを使ってみる

 •ザッカーバーグの情報を画面に表示
 •ログインして、自分の情報も表示
 •index.phpは変更しないで別ファイル
 •SDKのサンプルを参考
https://github.com/facebook/facebook-php-sdk/
      blob/master/examples/example.php

       PHP on Heroku / Yusuke Ando (@yando)
Graph API




様々なAPIを /me のように使える

 PHP on Heroku / Yusuke Ando (@yando)
scope / permission
•APIを経由した情報のアクセス範囲
•APIを経由した機能の提供範囲
•要求した権限は必ず承認が必要




  PHP on Heroku / Yusuke Ando (@yando)
デフォルトの状態
                        誕生日やemailが無い




PHP on Heroku / Yusuke Ando (@yando)
permissionは膨大




https://developers.facebook.com/docs/authentication/permissions/

       PHP on Heroku / Yusuke Ando (@yando)
scope指定の例

                         カンマ区切りで指定




                 権限付きログインURLの生成



PHP on Heroku / Yusuke Ando (@yando)
scope指定の例




                     確認事項が増える!


PHP on Heroku / Yusuke Ando (@yando)
悪魔の実験




PHP on Heroku / Yusuke Ando (@yando)
まさに外道!




PHP on Heroku / Yusuke Ando (@yando)
秘密主義な人の自衛策




PHP on Heroku / Yusuke Ando (@yando)
実装は簡単だが、規約違反に注意

 PHP on Heroku / Yusuke Ando (@yando)
練習 誕生日リスト
•2ヶ月以内に誕生日の友人を表示
•友人の誕生日を取得する権限追加
•APIの利用方法を工夫する




  PHP on Heroku / Yusuke Ando (@yando)
social plugin
•Facebookの機能を使う埋め込みタグ
•ブログパーツ的な物
•タグを貼れば良い




   PHP on Heroku / Yusuke Ando (@yando)
夢が広がる

•もはやなんでも実装できる
•facebookでログインする掲示板
•友達が登場する昔話
•診断アプリ
•ソーシャル○○で資金調達!(棒読)


   PHP on Heroku / Yusuke Ando (@yando)
まとめ
PHP on Heroku / Yusuke Ando (@yando)
PHP on Heroku


•手軽に利用できるPaaS
•いくつかのコツと制限
•結局、なんでも出来る


 PHP on Heroku / Yusuke Ando (@yando)
Facebookアプリ


•情報はWebからゲット
•英語でもメゲない
•進化が早いので継続が大事


 PHP on Heroku / Yusuke Ando (@yando)

Weitere ähnliche Inhalte

Ähnlich wie 4時間耐久 PHP on Heroku

20091107 Phpstudy
20091107 Phpstudy20091107 Phpstudy
20091107 Phpstudy
Yusuke Ando
 
配布用Dotcloudによるすぐ始めるtwitterwebアプリ開発#twtr hack
配布用Dotcloudによるすぐ始めるtwitterwebアプリ開発#twtr hack配布用Dotcloudによるすぐ始めるtwitterwebアプリ開発#twtr hack
配布用Dotcloudによるすぐ始めるtwitterwebアプリ開発#twtr hack
yut148atgmaildotcom
 

Ähnlich wie 4時間耐久 PHP on Heroku (20)

8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
第67回PHP勉強会LT
第67回PHP勉強会LT第67回PHP勉強会LT
第67回PHP勉強会LT
 
Web api beginners
Web api beginnersWeb api beginners
Web api beginners
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャGoji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
 
Herokuとrails
HerokuとrailsHerokuとrails
Herokuとrails
 
start Heroku
start Herokustart Heroku
start Heroku
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
 
[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 
Facebook and heroku
Facebook and herokuFacebook and heroku
Facebook and heroku
 
オブジェクトストレージを使ってイメージビューアを作ってみる
オブジェクトストレージを使ってイメージビューアを作ってみるオブジェクトストレージを使ってイメージビューアを作ってみる
オブジェクトストレージを使ってイメージビューアを作ってみる
 
20091107 Phpstudy
20091107 Phpstudy20091107 Phpstudy
20091107 Phpstudy
 
Pyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみたPyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみた
 
すぐ始めれるクラウド
すぐ始めれるクラウドすぐ始めれるクラウド
すぐ始めれるクラウド
 
JAWS-UG沖縄 AWS Fargateハンズオン 2018年10月
JAWS-UG沖縄 AWS Fargateハンズオン 2018年10月JAWS-UG沖縄 AWS Fargateハンズオン 2018年10月
JAWS-UG沖縄 AWS Fargateハンズオン 2018年10月
 
WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門
 
配布用Dotcloudによるすぐ始めるtwitterwebアプリ開発#twtr hack
配布用Dotcloudによるすぐ始めるtwitterwebアプリ開発#twtr hack配布用Dotcloudによるすぐ始めるtwitterwebアプリ開発#twtr hack
配布用Dotcloudによるすぐ始めるtwitterwebアプリ開発#twtr hack
 

Mehr von Yusuke Ando

DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
Yusuke Ando
 
Testing your app with Selenium on Travis CI
Testing your app with Selenium on Travis CITesting your app with Selenium on Travis CI
Testing your app with Selenium on Travis CI
Yusuke Ando
 
Travis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テストTravis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テスト
Yusuke Ando
 
Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発
Yusuke Ando
 
Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突
Yusuke Ando
 
Webプログラマの為のUnity入門
Webプログラマの為のUnity入門Webプログラマの為のUnity入門
Webプログラマの為のUnity入門
Yusuke Ando
 
ゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツ
Yusuke Ando
 
Travis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーションTravis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーション
Yusuke Ando
 
ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行
Yusuke Ando
 
PHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテストPHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテスト
Yusuke Ando
 
Shimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆けるShimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆ける
Yusuke Ando
 
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
Yusuke Ando
 

Mehr von Yusuke Ando (20)

ダイナミック広告の改善と拡大
ダイナミック広告の改善と拡大ダイナミック広告の改善と拡大
ダイナミック広告の改善と拡大
 
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックDevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック
 
DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
 
Testing your app with Selenium on Travis CI
Testing your app with Selenium on Travis CITesting your app with Selenium on Travis CI
Testing your app with Selenium on Travis CI
 
Travis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テストTravis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テスト
 
Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発
 
Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突
 
Webプログラマの為のUnity入門
Webプログラマの為のUnity入門Webプログラマの為のUnity入門
Webプログラマの為のUnity入門
 
ゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツ
 
Travis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーションTravis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーション
 
ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行
 
PHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテストPHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテスト
 
Shimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆けるShimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆ける
 
Dev opschef
Dev opschefDev opschef
Dev opschef
 
Paa s and oss
Paa s and ossPaa s and oss
Paa s and oss
 
New relic
New relicNew relic
New relic
 
Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境
 
Engine Yard Cloud
Engine Yard CloudEngine Yard Cloud
Engine Yard Cloud
 
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
 
PHPの教室「foreachを極める」
PHPの教室「foreachを極める」PHPの教室「foreachを極める」
PHPの教室「foreachを極める」
 

4時間耐久 PHP on Heroku