Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
PHPデプロイツールの世界
2015/10/03 PHPカンファンレンス2015
yuuki takezawa / istyle inc
Deploy?
• ソースコードを本番環境などに設置
• ディレクトリなどに実行権限を与える
• キャッシュの削除
• 業務ルールに則った手順など
デプロイ作業
• FTPによる手動アップロード
• リモートサーバ内のファイルを手動で削除
• rsyncなどによるアップロード
デプロイ方法
PEAR -> Composer
ライブラリなどは
プロジェクト毎の管理へ変化
進化するフロントエンド
Grunt, Gulp
etc…
様々な手順が自動化
• Composer、npm、bowerなどによる

依存ライブラリ管理
• フロントエンドタスクツール
• 継続的インテグレーションによる自動テスト
• 自動化によるヒューマンエラー防止
変わったもの
デプロイも自動化
Develop
Testing
Push
Testing
PHPUnit
phpspec
Behat
Codeception
Deploy Server
staging
production
etc
auto
• ライブラリのインストール
• フロントエンドタスク実行
• 複数のリモートサーバへ接続
• ローカルタスクの実行(rsyncなど)
デプロイツール
Capistrano (Ruby)
Fabric (Python)
PHPに統一したい
難しい
etc…
PHP Deploy Tool
• Capistranoのようなデプロイツール

Magallanes、Altax、Rocketeer、Deployer
• リモートサーバタスクツール

Robo、Envoy
PHP Deploy Tool / Task Tool
• 良質なコンポーネント

Symfony Component、

The League of Extraordinary Packages etc…
• 自由に組み合わせてツール、ライブラリ開発
• PHP-FIG
Background
これらを元に作られる
デプロイツールの世界
• コマンドを実行して構築される世界
• 対話型
• 処理の並列化
• 非同期処理
コンソールアプリケーション
3つのツール
• Envoy 

(http://laravel.com/docs/5.1/envoy)
• Deployer 

(http://deployer.org/)
• Rocketeer 

(http://rocketeer.a...
Envoy
• リモートサーバタスクツール
• リモートサーバで実行するコマンドを記述
• Laravelのマニュアルに記述されていますが、

親和性はありません
• デフォルトで利用できるタスクは用意されていないため、

利用するタスクを記述...
Deployer
• リモートサーバタスクツール
• リモートサーバで実行するコマンドを記述
• PHPの主なフレームワークに対応したタスクが

あらかじめ用意されています
• PHPに親しんでいる方であれば簡単に利用できます
• 足りないタス...
Rocketeer
• Capistranoスタイルで高機能
• デプロイタスクが用意されています
• composerやnpmコマンドなどデフォルトで対応
• Laravelのパッケージとしても利用されるため

サービスロケータを多用している...
Task実行までのアプローチ
• タスクを記述したファイルを

コンパイル(通常のPHPコードへ変換)
• タスク毎にリモートサーバへ
• symfony/processによる接続
• コマンドを実行
Envoyのアプローチ
Console boot
Envoy.blade.php
Compile
Envoy.php (array)
connect
Task
• タスクを記述したファイルを読み込む
• タスク毎にリモートサーバへ接続
• phpseclib/phpseclibによる接続
• コールバックでコマンドを実行
Deployerのアプローチ
Console boot
deploy.php(default)
collection
connect
Task
• サービスをコンテナへ登録し、

タスクを記述したファイルを読み込む
• サービスロケータを介して、

タスク毎にリモートサーバへ接続
• phpseclib/phpseclibによる接続
• コマンドを実行
• 複雑
Rocketeerのア...
Console boot
Service Register
connect
Task Queue
Tasks
Configure
Task
Parallel / 並列のアプローチ
• symfony/processによるproc_open
• それぞれのプロセスがタスク実行
• それ以外は通常の実行と全く同じ
• シンプルな並列処理
Envoyの並列アプローチ
Command
process
connect
Task
process
connect
Task
• ReactPHPを利用した非同期
• proc_openを利用し、

各プロセスがタスクを実行
• socketsエクステンションが必須
• elfet/pure(PHP製Key Value Storage)
Deployerの並列アプローチ
Command
process
connect
Task
process
connect
Task
ReactPHP
Task
• pcntl_forkによるプロセスのフォーク
• 各プロセスがタスクを実行
• pcntlエクステンションが必須
Rocketeerの並列アプローチ
Taskのアプローチ
• 記述したタスクのみを実行
• タスクの前後に処理を行うなどの

仕組みはない
• ローカルタスクはタスクごとに記述
Envoyのタスク
• タスク前後の処理は簡単に記述
• Rocketeerはローカルタスクはタスクごとに
• Deployerはローカルタスクをリモートタスク
内で実行可能
Deployer,Rocketeerのタスク
同じコンポーネントを
利用しながらも、
アプローチはそれぞれ

異なります
• プロジェクトや運用ルールに合致するものを利
用する
• 並列で利用する場合は、依存ライブラリや、

エクステンションを調べる
• 独自タスクの追加方法や、メンテナンスなど
• オリジナルのデプロイツールを開発しても良い
ツールを知ること
Upcoming SlideShare
Loading in …5
×

PHPデプロイツールの世界

29,035 views

Published on

PHPデプロイツールがどういう動作でタスクを処理するのか、
それぞれのデプロイツールがどんな並列処理を行うかにフォーカスを当てたスライドです。

Published in: Engineering
  • Be the first to comment

PHPデプロイツールの世界

  1. 1. PHPデプロイツールの世界 2015/10/03 PHPカンファンレンス2015 yuuki takezawa / istyle inc
  2. 2. Deploy?
  3. 3. • ソースコードを本番環境などに設置 • ディレクトリなどに実行権限を与える • キャッシュの削除 • 業務ルールに則った手順など デプロイ作業
  4. 4. • FTPによる手動アップロード • リモートサーバ内のファイルを手動で削除 • rsyncなどによるアップロード デプロイ方法
  5. 5. PEAR -> Composer
  6. 6. ライブラリなどは プロジェクト毎の管理へ変化
  7. 7. 進化するフロントエンド Grunt, Gulp
  8. 8. etc…
  9. 9. 様々な手順が自動化
  10. 10. • Composer、npm、bowerなどによる
 依存ライブラリ管理 • フロントエンドタスクツール • 継続的インテグレーションによる自動テスト • 自動化によるヒューマンエラー防止 変わったもの
  11. 11. デプロイも自動化
  12. 12. Develop Testing Push Testing PHPUnit phpspec Behat Codeception Deploy Server staging production etc auto
  13. 13. • ライブラリのインストール • フロントエンドタスク実行 • 複数のリモートサーバへ接続 • ローカルタスクの実行(rsyncなど) デプロイツール
  14. 14. Capistrano (Ruby) Fabric (Python)
  15. 15. PHPに統一したい 難しい etc…
  16. 16. PHP Deploy Tool
  17. 17. • Capistranoのようなデプロイツール
 Magallanes、Altax、Rocketeer、Deployer • リモートサーバタスクツール
 Robo、Envoy PHP Deploy Tool / Task Tool
  18. 18. • 良質なコンポーネント
 Symfony Component、
 The League of Extraordinary Packages etc… • 自由に組み合わせてツール、ライブラリ開発 • PHP-FIG Background
  19. 19. これらを元に作られる デプロイツールの世界
  20. 20. • コマンドを実行して構築される世界 • 対話型 • 処理の並列化 • 非同期処理 コンソールアプリケーション
  21. 21. 3つのツール • Envoy 
 (http://laravel.com/docs/5.1/envoy) • Deployer 
 (http://deployer.org/) • Rocketeer 
 (http://rocketeer.autopergamene.eu/)
  22. 22. Envoy • リモートサーバタスクツール • リモートサーバで実行するコマンドを記述 • Laravelのマニュアルに記述されていますが、
 親和性はありません • デフォルトで利用できるタスクは用意されていないため、
 利用するタスクを記述します • 並列実行をサポート
  23. 23. Deployer • リモートサーバタスクツール • リモートサーバで実行するコマンドを記述 • PHPの主なフレームワークに対応したタスクが
 あらかじめ用意されています • PHPに親しんでいる方であれば簡単に利用できます • 足りないタスクは自由に追加できます
  24. 24. Rocketeer • Capistranoスタイルで高機能 • デプロイタスクが用意されています • composerやnpmコマンドなどデフォルトで対応 • Laravelのパッケージとしても利用されるため
 サービスロケータを多用しているため、少し複雑 • Capistranoのようにある程度学習する必要が有ります
  25. 25. Task実行までのアプローチ
  26. 26. • タスクを記述したファイルを
 コンパイル(通常のPHPコードへ変換) • タスク毎にリモートサーバへ • symfony/processによる接続 • コマンドを実行 Envoyのアプローチ
  27. 27. Console boot Envoy.blade.php Compile Envoy.php (array) connect Task
  28. 28. • タスクを記述したファイルを読み込む • タスク毎にリモートサーバへ接続 • phpseclib/phpseclibによる接続 • コールバックでコマンドを実行 Deployerのアプローチ
  29. 29. Console boot deploy.php(default) collection connect Task
  30. 30. • サービスをコンテナへ登録し、
 タスクを記述したファイルを読み込む • サービスロケータを介して、
 タスク毎にリモートサーバへ接続 • phpseclib/phpseclibによる接続 • コマンドを実行 • 複雑 Rocketeerのアプローチ
  31. 31. Console boot Service Register connect Task Queue Tasks Configure Task
  32. 32. Parallel / 並列のアプローチ
  33. 33. • symfony/processによるproc_open • それぞれのプロセスがタスク実行 • それ以外は通常の実行と全く同じ • シンプルな並列処理 Envoyの並列アプローチ
  34. 34. Command process connect Task process connect Task
  35. 35. • ReactPHPを利用した非同期 • proc_openを利用し、
 各プロセスがタスクを実行 • socketsエクステンションが必須 • elfet/pure(PHP製Key Value Storage) Deployerの並列アプローチ
  36. 36. Command process connect Task process connect Task ReactPHP Task
  37. 37. • pcntl_forkによるプロセスのフォーク • 各プロセスがタスクを実行 • pcntlエクステンションが必須 Rocketeerの並列アプローチ
  38. 38. Taskのアプローチ
  39. 39. • 記述したタスクのみを実行 • タスクの前後に処理を行うなどの
 仕組みはない • ローカルタスクはタスクごとに記述 Envoyのタスク
  40. 40. • タスク前後の処理は簡単に記述 • Rocketeerはローカルタスクはタスクごとに • Deployerはローカルタスクをリモートタスク 内で実行可能 Deployer,Rocketeerのタスク
  41. 41. 同じコンポーネントを 利用しながらも、 アプローチはそれぞれ
 異なります
  42. 42. • プロジェクトや運用ルールに合致するものを利 用する • 並列で利用する場合は、依存ライブラリや、
 エクステンションを調べる • 独自タスクの追加方法や、メンテナンスなど • オリジナルのデプロイツールを開発しても良い ツールを知ること

×