この記事は 早稲田大学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/bin
にenvoy
の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
に記述していきます。
とりあえず簡単に、 ファイルリストを表示するタスクを定義してみます。
@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というものも設定できます。
@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 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に通知を送ることができるようです。
コードは以下の通りな感じです。
@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
できた。浸透力はんぱない。
envoyの活かし方
今の所有用だと思える場面はデプロイ作業のマクロ化くらいでしょうか...?
コンソールでやってた作業をひとまとめにするくらいでしか使えませんね。
slackへのhookは、各タスクの実行後の通知などに用いることができるでしょう。
laravelリソースを使えるscriptの実行がしたいな
バッチ処理としてenvoyからscriptを実行してデータを操作できるようにしたいなぁと思ってちょっとやってみましたが、tasks/
配下に作ったscriptファイル上で require_once('../vendor/autoload.php')
するだけでは、少なくともModelからDB上のデータをのfetchはできませんでした。
本当はそれを実現したかったのですが、残念。。envoyの今後に期待しましょう。
まとめ
ちょっと時間がなかったので簡単にenvoyの導入手順の紹介をしました。
機能としてはもう少し期待したいところはあるので、今後のLaravel/envoyの発展に期待ですね。
ここまで読んで頂きありがとうございました!
明日がラストとなりますが、引き続き早稲田大学AdventClendarをお楽しみください!