LoginSignup
2

More than 5 years have passed since last update.

Laravelのタスクランナーenvoyを実装

Last updated at Posted at 2016-12-23

この記事は 早稲田大学AdventCalendar 24日目の記事です。

こんにちは。早稲田大学授業レビューサイト「A+plus」の開発を担当している @taiyo です。
このAdventCalendarに出てくるのは二度目で、現在は逃げ恥ロスと闘っています。恋ダンスは完コピしました。

さて、この記事ではLaravel製のA+plusにまだなかったタスクランナーを実装した手順を書きます。Laravelはphp界隈で今最もHOTなwebフレームワークとしてどんどん普及しているようで、Laravelの開発自体もとても活発なようです。

A+plusも開発が進み、Laravelの様々な機能を使ってきましたが、まだ使っていないenvoyというタスクランナーがあることに気がつきました。今まで温かみのある手作業で行ってたのをもっと単純化したりできるかなってことでひとまずenvoyが実行できるところまで簡単に実装します。実装にあたってはこちらを参考にしています。

開発環境

簡単に、以下の通りです。

  • MacOSX El Capitan v10.11.6
  • PHP v5.6
  • Laravel v5.2

Envoy

前提としてですが、Laravelのタスクランナーにはenvoyというライブラリを用います。

introduction

Laravel Envoy provides a clean, minimal syntax for defining common tasks you run on your remote servers. Using a Blade style syntax, you can easily setup tasks for deployment, Artisan commands, and more. Currently, Envoy only supports the Mac and Linux operating systems.

イントロにもあるように、envoyはMacOSとLinuxにのみ対応しているようですが、bladeと同じsyntaxで書けるので新たなキャッチアップは不要なので取り入れやすいですね。

導入手順

順にやっていきますよー

envoyのインストール

インストールします。
コンソール上でenvoyコマンドを実行するので、グローバルインストールが必要です。

$ composer global require 'laravel/envoy=~1.0'
$ composer global update

念のためupdateも行います。ここまでやると、 ~/.composer/vendor/binenvoyのexecuterが入ります。

$ envoy -v
-bash: envoy: command not found

で確認すると、私はcommand not foundと返ってきました。
パスを通したらいけました。

$ echo 'export PATH=$HOME/.composer/vendor/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile
$ envoy -v
Laravel Envoy 1.3.2

インストールdone

タスク定義

タスク定義は、Laravelのプロジェクトルートに置いたEnvoy.blade.phpに記述していきます。
とりあえず簡単に、 ファイルリストを表示するタスクを定義してみます。

Envoy.blade.php
@servers(['localhost' => '127.0.0.1'])

@task('foo', ['on' => 'localhost'])
    ls -la
@endtask

Envoy.blade.phpが置かれているディレクトリで実行してみます。

$ envoy run foo
[127.0.0.1]: total 424
[127.0.0.1]: drwxr-xr-x   32 user  staff    1088 12 23 22:41 .
[127.0.0.1]: drwxr-xr-x   30 user  staff    1020 12 15 19:15 ..
[127.0.0.1]: -rw-r--r--@   1 user  staff    6148  5 29  2016 .DS_Store
[127.0.0.1]: -rw-r--r--    1 user  staff     286 12  3  2015 .env.example
...

無事一覧が表示されましたね!

macro

いくつかのタスクをひとまとめにできるmacroというものも設定できます。

Envoy.blade.php
@servers(['localhost' => '127.0.0.1'])

@task('foo', ['on' => 'localhost'])
    ls -la
@endtask

@task('hoge', ['on' => 'localhost'])
  git status
@endtask

@macro('tasks')
  foo
  hoge
@endmacro

macroを実行します。

Envoy.blade.php
$ envoy run tasks
[127.0.0.1]: total 424
[127.0.0.1]: drwxr-xr-x   32 user  staff    1088 12 23 22:41 .
[127.0.0.1]: drwxr-xr-x   30 user  staff    1020 12 15 19:15 ..
[127.0.0.1]: -rw-r--r--@   1 user  staff    6148  5 29  2016 .DS_Store
[127.0.0.1]: -rw-r--r--    1 user  staff     286 12  3  2015 .env.example
...
[127.0.0.1]: On branch task_runner
[127.0.0.1]: Untracked files:
[127.0.0.1]: (use "git add <file>..." to include in what will be committed)
[127.0.0.1]: Envoy.blade.php
[127.0.0.1]: Envoy28037481713759f8a501e91e97527eaa.php
[127.0.0.1]: tasks/

git statusの結果も表示されていますね。最高に見辛いけど。。

チームのslackにpostしてみる

envoyからhipchatやslackに通知を送ることができるようです。
コードは以下の通りな感じです。

Envoy.blade.php
@servers(['localhost' => '127.0.0.1'])

@task('foo', ['on' => 'localhost'])
  ls -al
@endtask

@after
  @slack('https://hooks.slack.com/services/xxxxxx/xxxxxxx/xxxxxxx', '#general', '浸透力、はんぱなーーーーーーーーーーーーーーーい!!!')
@endafter

タスクを走らせると、、、

$ envoy run foo

スクリーンショット 2016-12-24 0.15.16.png

できた。浸透力はんぱない。

envoyの活かし方

今の所有用だと思える場面はデプロイ作業のマクロ化くらいでしょうか...?
コンソールでやってた作業をひとまとめにするくらいでしか使えませんね。

slackへのhookは、各タスクの実行後の通知などに用いることができるでしょう。

laravelリソースを使えるscriptの実行がしたいな

バッチ処理としてenvoyからscriptを実行してデータを操作できるようにしたいなぁと思ってちょっとやってみましたが、tasks/配下に作ったscriptファイル上で require_once('../vendor/autoload.php')するだけでは、少なくともModelからDB上のデータをのfetchはできませんでした。

本当はそれを実現したかったのですが、残念。。envoyの今後に期待しましょう。

まとめ

ちょっと時間がなかったので簡単にenvoyの導入手順の紹介をしました。
機能としてはもう少し期待したいところはあるので、今後のLaravel/envoyの発展に期待ですね。

ここまで読んで頂きありがとうございました!
明日がラストとなりますが、引き続き早稲田大学AdventClendarをお楽しみください!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2