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

4時間耐久 PHP on Heroku

  • Upload
    yandod

  • View
    13.148

  • Download
    1

Embed Size (px)

DESCRIPTION

PHP on Herokuのワークショップ資料です。

Citation preview

Page 1: 4時間耐久 PHP on Heroku

8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)

PHP on Herokuの教室4時間耐久

4時間耐久PHP on Heroku / Yusuke Ando (@yando)

Page 2: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

テキスト

Page 3: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

http://tech.a-listers.jp/

Page 4: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

本日の対象者

PHPを使っているFacebookアプリを作りたい

Herokuを使いたいそんな皆さん

Page 5: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

Herokuを使ってFacebookアプリを

作ってみよう!

Page 6: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

本日のメニュー

HerokuでPHPDBの使い方

Facebookアプリ開発

Page 7: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

HerokuでPHP

Page 8: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

PHPサポート?

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

Page 9: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

事前に必要なもの

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

Page 10: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

developers.facebook.com

開発者アプリへ

Page 11: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

開発者アプリ

Page 12: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

メニュー画面

作成済アプリが出る場所

アプリの作成

Page 13: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

アプリの命名

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

Page 14: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

言語とメアド設定

Page 15: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

これでデプロイ完了

アプリへ

Page 16: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

テンプレが動作中

Page 17: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

ログイン時に権限確認

ここが大事!

Page 18: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

ログイン成功

各種情報を取得

Page 19: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

ソースは何処に?

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

Page 20: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

gitの状況gitリポジトリ

コード

pushでコードを反映する

修正

修正修正

修正修正 dyno

Herokuローカル

Page 21: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

Herokuにログイン

Page 22: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

アドレスを確認

gitリポジトリのアドレス

Page 23: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

ソースの修正

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

Page 24: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

練習 PHPをデプロイ

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

Page 25: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

ローカルで動く?

Page 26: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

ローカル動作の要件

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

Page 27: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

Herokuの基本技

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

Page 28: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

Herokuの制限事項

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

Page 29: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

ローカルファイル

一応、書き込める

Page 30: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

再起動すると

さようなら、データ

$ heroku restartRestarting processes... done

Page 31: 4時間耐久 PHP on Heroku

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 masterCounting 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 [email protected]:stark-warrior-3088.git ! [remote rejected] master -> master (pre-receive hook declined)error: failed to push some refs to '[email protected]:stark-warrior-3088.git'

pushできない

Page 32: 4時間耐久 PHP on Heroku

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 ms10 equinix02-iad2.amazon.com (206.223.115.35) 182.967 ms 192.914 ms 187.884 ms11 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 ms12 205.251.245.47 (205.251.245.47) 192.199 ms 195.086 ms 72.21.222.155 (72.21.222.155) 367.567 ms13 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 ms14 * * *15 * * *16 * * *17 * * *

Page 33: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

mbstringを使う

•改良されたbuildpackを使う →この方法が理想

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

Page 34: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

buildpack

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

Page 35: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

buildpack

Page 36: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

Third-party

Page 37: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

Third-party(2)

Page 38: 4時間耐久 PHP on Heroku

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

Page 39: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

自力で解決

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

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

Page 40: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

Herokuのコツ

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

Page 41: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

DBの使い方

Page 42: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

利用できるDB

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

まずは無料のPostgreSQL

Page 43: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

アドオン

Page 44: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

addons.heroku.com

Page 45: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

ClearDB

Page 46: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

無料版もある

Page 47: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

要クレジットカード

Page 48: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

無料のshared db

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

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

Page 49: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

DB設定の仕組み

•環境変数にDSN文字列が設定される•Rubyが前提となった形式•PHPから利用する場合は適宜、解析

postgres://ajkilbabda:[email protected]

zonaws.com/ajkilbxgca

postgres://[user]:[pass]@[host]/[database]

Page 50: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

DBの管理

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

Page 51: 4時間耐久 PHP on 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

Page 52: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

Facebookアプリ

Page 53: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

FBアプリ開発の基礎

App ID / App SecretPHP SDK

graph API / scopesocial plugin

Page 54: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

FBアプリとは?

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

該当範囲は広大

Page 55: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

Website

認証などにFacebookを利用

Page 56: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

Facebook内アプリ

Canvasで動作

Page 57: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

モバイル

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

Page 58: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

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

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

Page 59: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

App ID / Secret•FacebookのAPIの利用に必要•開発者アプリから確認可能•1クリックで作成されたアプリでは環境変数を使って受け渡している

$ heroku config=== Config Vars for vivid-rain-6470FACEBOOK_APP_ID: 425865070767611FACEBOOK_SECRET: c50346e471016be2fbd3572fd2de1f11

Page 60: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

ソース内からの取得

Page 61: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

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

Page 62: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

基本的な利用例

Page 63: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

認証処理の例

ログイン済みならID取得

APIをコール

ログインURLの生成

Page 64: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

認証処理の例

Facebookに遷移して戻る

Page 65: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

練習 apiを使ってみる

•ザッカーバーグの情報を画面に表示•ログインして、自分の情報も表示•index.phpは変更しないで別ファイル•SDKのサンプルを参考

https://github.com/facebook/facebook-php-sdk/blob/master/examples/example.php

Page 66: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

Graph API

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

Page 67: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

scope / permission•APIを経由した情報のアクセス範囲•APIを経由した機能の提供範囲•要求した権限は必ず承認が必要

Page 68: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

デフォルトの状態誕生日やemailが無い

Page 69: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

permissionは膨大

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

Page 70: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

scope指定の例

カンマ区切りで指定

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

Page 71: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

scope指定の例

確認事項が増える!

Page 72: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

悪魔の実験

Page 73: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

まさに外道!

Page 74: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

秘密主義な人の自衛策

Page 75: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

実装は簡単だが、規約違反に注意

Page 76: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

練習 誕生日リスト•2ヶ月以内に誕生日の友人を表示•友人の誕生日を取得する権限追加•APIの利用方法を工夫する

Page 77: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

social plugin•Facebookの機能を使う埋め込みタグ•ブログパーツ的な物•タグを貼れば良い

Page 78: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

夢が広がる

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

Page 79: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

まとめ

Page 80: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

PHP on Heroku

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

Page 81: 4時間耐久 PHP on Heroku

PHP on Heroku / Yusuke Ando (@yando)

Facebookアプリ

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