HerokuでPHPのココが便利 #phpcondo2016 #heroku #php version 17

2016/04/11 19:25 by hiro_y hiro_y
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
# HerokuでPHPのココが便利

〜 PHPカンファレンス北海道 2016 〜
合同会社テンマド・山岡広幸

# 自己紹介

![](https://mimemo.s3-ap-northeast-1.amazonaws.com/attachment/3dc8c04a-503d-40cf-8e6a-89107d337681.png)

- 山岡広幸 [@hiro_y](https://twitter.com/hiro_y)
- [合同会社テンマド](http://10mado.jp/)・代表社員
- PHPとかNode.jsとか書く人
- 大学文学部卒 ➡ SIer ➡ ウノウ ➡ Zynga Japan ➡ [デジタルガレージ](http://www.garage.co.jp/ja/) ➡ [トイロ](http://toyro.net/) ➡ 会社設立

# 合同会社テンマド

![10mado](https://mimemo.s3-ap-northeast-1.amazonaws.com/attachment/a29444a2-52a6-42d7-a33c-a34429dbd1da.png)

- WebサイトやWebサービスの制作
- 技術顧問・コンサルティング、経営サポート
  - 技術顧問: [株式会社アスクリード](https://ascreed.jp/)
  - 社外CTO: [株式会社イノベーター・ジャパン](http://www.innovator.jp.net/) など
- Webサービス開発・運営

# 📝 mimemo

***書く・読む・見せるをお手軽に。
mimemoはゆるく使えるテキスト置き場です。***

- https://mimemo.io
- Markdown記法
- 個人メモに使ったりテキスト共有に使ったり
  - 「あいことば」設定して秘密のメモを見せたり共同編集したり
  - もちろんブログのようにも使えます
- **powered by Heroku with Node.js (Express)**

# 🐬 iruca

***オフィスに誰がいるか一目瞭然。
irucaはログイン不要の在席管理ツールです。***

- https://iruca.co
- 無料・ログイン不要、Slack連携あり
  - リモート勤務の多い会社などにオススメ
  - 行動予定表としてご利用されているケースも
- **powered by Heroku with Node.js (Express)**

# 🍆 conasu

***複数案件かけ持ちしていても安心。
conasuはチームで使うタスク管理ツールです。***

- https://conasu.co
- チームでタスクのやり取りをするツール
  - Slackやidobata、HipChatへの通知機能あり
  - 複数プロジェクトのタスクを一覧で見られるので今日やることが一目瞭然
- **powered by Heroku with PHP (Silex)**
  - Web Dyno x1 + Worker Dyno x1

# Heroku

- https://www.heroku.com
  - 2010年にSalesforceに買収される
- PaaS (Platform as a Service)
- Node.js / Ruby / Java / PHP / Python / Go / Scala / Closure
- [The new PHP on Heroku now Generally Available | Heroku](https://blog.heroku.com/archives/2014/7/15/the_new_php_on_heroku_now_generally_available)
  - PHPの正式サポートは2014年7月から

# Herokuの特徴

- アプリケーションを作成して`git push`すればdeployできる
- Docker 🐳 のコンテナごとdeployすることもできるようになった
  - そもそもHerokuがDynoというコンテナ単位で動いている
- GitHubやDropboxなどと連携しての自動deployもできる

# Herokuの弱点

- レイテンシ…でしたがHeroku EnterpriseでPrivate Spacesを使うと東京リージョンが使えるように!(ただしお高い)

```console
$ heroku regions
ID         Location                 Runtime
─────────  ───────────────────────  ──────────────
eu         Europe                   Common Runtime
us         United States            Common Runtime
frankfurt  Frankfurt, Germany       Private Spaces
oregon     Oregon, United States    Private Spaces
tokyo      Tokyo, Japan             Private Spaces
virginia   Virginia, United States  Private Spaces
```

- きめ細かなサーバー設定
- 価格(AWSを単体で使うよりやはりお高い)

# HerokuでのPHPの使い方

- `composer.json`があればPHPアプリケーションとみなされる
  - `package.json`とかもある場合は明示的にbuildpackを指定
- `composer.json`に記述されたPHPの環境が用意される
  - 拡張(extension)が必要な場合も`composer.json`に書けば入る
  - バージョンは`composer.lock`に従う

# 使えるPHP拡張(7の場合)

- 最初から入っている
  - bzip2 / curl / fpm / pdo_mysql / mysqli / opcache / openssl / pgsql / pdo_pgsql / readline / sockets / zip / zlib
- composer.jsonで指定すれば入る
  - bcmath / calendar / exif / ftp / gd / gmp / gettext / imap / intl / ldap / mbstring / pcntl / shmop / soap / sqlite3 / pdo_sqlite / xmlrpc / xsl
  - apcu / blackfire / imagick / mongodb / newrelic / oauth

# PHPサポートの歴史(1)

- 2014年7月15日
  - [The new PHP on Heroku now Generally Available | Heroku](https://blog.heroku.com/archives/2014/7/15/the_new_php_on_heroku_now_generally_available)
  - PHPの正式サポート開始。
  - Updates to support the latest PHP and HHVM versions including PHP 5.5.14 and 5.6.0RC2;
- 2014年9月8日
  - [PHP 5.6.0 and miscellaneous PHP updates | Heroku Dev Center](https://devcenter.heroku.com/changelog-items/523)
  - PHP 5.6.0が使えるようになると同時にデフォルトのランタイムに
  - ちなみにPHP 5.6.0のリリースは8月28日

# PHPサポートの歴史(2)

- 2015年7月10日
  - [PHP 7 beta now available on Heroku | Heroku Dev Center](https://devcenter.heroku.com/changelog-items/679)
  - ちなみにPHP 7.0.0 Beta 1のリリースは7月10日(同日)
- 2015年12月11日
  - [PHP 7 now available on Heroku | Heroku Dev Center](https://devcenter.heroku.com/changelog-items/777)
  - PHP 7.0.0正式版が使えるようになると同時にデフォルトランタイムに
  - ちなみにPHP 7.0.0正式版リリースは12月3日

# PHPのバージョン管理

- バージョンアップ、面倒くさくないですか
  - 7.0.4: 2016年3月3日
  - 7.0.3: 2016年2月4日
  - 7.0.2: 2016年1月7日
  - 7.0.1: 2015年12月17日
  - 7.0.0: 2015年12月3日
- Herokuならdeployするタイミングで勝手に上がります

# PHPのバージョン指定例

```javascript:composer.json
"require": {
  "php": "^5.6.0"
}
```

PHP 5系の最新版、ただし5.6.0以上のバージョン

```javascript:composer.json
"require": {
  "php": "~5.6.0"
}
```

PHP 5.6系の最新版。`~5.5.0`と書くと5.5系の最新版が入る。
# スケールの調整が簡単なこと

![スクリーンショット 2016-04-11 0.28.12](https://mimemo.s3-ap-northeast-1.amazonaws.com/attachment/02e8523b-1852-48c0-b5bb-5ea988c5746c.png)

Dashboardで簡単にスケールアップやスケールアウトの設定ができます。もちろんAPIからの操作も可能。

# メンテナンスモードがあること

```console
$ heroku maintenance:on
```

でメンテナンスモードがONになり、環境ごとに指定されたURLの内容を表示できます。Amazon S3から静的ファイルとして配信するのがオススメ。`off`指定で元の状態に。

# Twelve-Factor Appの思想に則ること

- [The Twelve-Factor App (日本語訳)](http://12factor.net/ja/)
- Herokuで動くように作る=Twelve-Factor Appの思想に則ること
  - 移植性、要するに身軽に作るということ
  - Herokuで動くように作る=Twelve-Factor Appの思想に則ること
- 結果、将来的なAWSなどへの引っ越しも楽に
  - 各IaaSでDockerでdeployできるようになってきている
  - 参考: [diary/2016/03/30/インフラの引っ越しを行いました - docs.esa.io](https://docs.esa.io/posts/179)

# Terraform
# Terraformで扱える

- [Terraform by HashiCorp](https://www.terraform.io/)
- AWSやGoogle Cloud、Microsoft AzureやDigital Oceansなど、様々なクラウドプラットフォームのリソースを一元的に定義・管理できるツール
- Herokuもプロバイダーとして使用できる
  - 設定のコード化が可能
  - configとか、add-onとか、ドメイン名とか


# 何より簡単に始められること

1. Herokuのアカウントを作る
2. applicationの名前を決めて作る
3. `git push`する

何より公開できるようになるまでのステップが少なく、
      

HerokuでPHPのココが便利

〜 PHPカンファレンス北海道 2016 〜
合同会社テンマド・山岡広幸

自己紹介

合同会社テンマド

10mado

📝 mimemo

書く・読む・見せるをお手軽に。
mimemoはゆるく使えるテキスト置き場です。

  • https://mimemo.io
  • Markdown記法
  • 個人メモに使ったりテキスト共有に使ったり
    • 「あいことば」設定して秘密のメモを見せたり共同編集したり
    • もちろんブログのようにも使えます
  • powered by Heroku with Node.js (Express)

🐬 iruca

オフィスに誰がいるか一目瞭然。
irucaはログイン不要の在席管理ツールです。

  • https://iruca.co
  • 無料・ログイン不要、Slack連携あり
    • リモート勤務の多い会社などにオススメ
    • 行動予定表としてご利用されているケースも
  • powered by Heroku with Node.js (Express)

🍆 conasu

複数案件かけ持ちしていても安心。
conasuはチームで使うタスク管理ツールです。

  • https://conasu.co
  • チームでタスクのやり取りをするツール
    • Slackやidobata、HipChatへの通知機能あり
    • 複数プロジェクトのタスクを一覧で見られるので今日やることが一目瞭然
  • powered by Heroku with PHP (Silex)
    • Web Dyno x1 + Worker Dyno x1

Heroku

Herokuの特徴

  • アプリケーションを作成してgit pushすればdeployできる
  • Docker 🐳 のコンテナごとdeployすることもできるようになった
    • そもそもHerokuがDynoというコンテナ単位で動いている
  • GitHubやDropboxなどと連携しての自動deployもできる

Herokuの弱点

  • レイテンシ…でしたがHeroku EnterpriseでPrivate Spacesを使うと東京リージョンが使えるように!(ただしお高い)
$ heroku regions
ID         Location                 Runtime
─────────  ───────────────────────  ──────────────
eu         Europe                   Common Runtime
us         United States            Common Runtime
frankfurt  Frankfurt, Germany       Private Spaces
oregon     Oregon, United States    Private Spaces
tokyo      Tokyo, Japan             Private Spaces
virginia   Virginia, United States  Private Spaces
  • きめ細かなサーバー設定
  • 価格(AWSを単体で使うよりやはりお高い)

HerokuでのPHPの使い方

  • composer.jsonがあればPHPアプリケーションとみなされる
    • package.jsonとかもある場合は明示的にbuildpackを指定
  • composer.jsonに記述されたPHPの環境が用意される
    • 拡張(extension)が必要な場合もcomposer.jsonに書けば入る
    • バージョンはcomposer.lockに従う

使えるPHP拡張(7の場合)

  • 最初から入っている
    • bzip2 / curl / fpm / pdo_mysql / mysqli / opcache / openssl / pgsql / pdo_pgsql / readline / sockets / zip / zlib
  • composer.jsonで指定すれば入る
    • bcmath / calendar / exif / ftp / gd / gmp / gettext / imap / intl / ldap / mbstring / pcntl / shmop / soap / sqlite3 / pdo_sqlite / xmlrpc / xsl
    • apcu / blackfire / imagick / mongodb / newrelic / oauth

PHPサポートの歴史(1)

PHPサポートの歴史(2)

PHPのバージョン管理

  • バージョンアップ、面倒くさくないですか
    • 7.0.4: 2016年3月3日
    • 7.0.3: 2016年2月4日
    • 7.0.2: 2016年1月7日
    • 7.0.1: 2015年12月17日
    • 7.0.0: 2015年12月3日
  • Herokuならdeployするタイミングで勝手に上がります

PHPのバージョン指定例

"require": {
  "php": "^5.6.0"
}
composer.json

PHP 5系の最新版、ただし5.6.0以上のバージョン

"require": {
  "php": "~5.6.0"
}
composer.json

PHP 5.6系の最新版。~5.5.0と書くと5.5系の最新版が入る。

スケールの調整が簡単なこと

スクリーンショット 2016-04-11 0.28.12

Dashboardで簡単にスケールアップやスケールアウトの設定ができます。もちろんAPIからの操作も可能。

メンテナンスモードがあること

$ heroku maintenance:on

でメンテナンスモードがONになり、環境ごとに指定されたURLの内容を表示できます。Amazon S3から静的ファイルとして配信するのがオススメ。off指定で元の状態に。

Twelve-Factor Appの思想に則ること

Terraformで扱える

  • Terraform by HashiCorp
  • AWSやGoogle Cloud、Microsoft AzureやDigital Oceansなど、様々なクラウドプラットフォームのリソースを一元的に定義・管理できるツール
  • Herokuもプロバイダーとして使用できる
    • 設定のコード化が可能
    • configとか、add-onとか、ドメイン名とか

何より簡単に始められること

  1. Herokuのアカウントを作る
  2. applicationの名前を決めて作る
  3. git pushする

何より公開できるようになるまでのステップが少なく、