PHP製のタスクランナー「Robo」がとても良さそうだったので、試した内容をメモ。PHPカンファレンス2017で@sizuhikoさんが発表されたスライドをみて導入してみました。
https://speakerdeck.com/sizuhiko/php-conference-2017
実際に動くまでの手順と使い方を覚え書きとして。
あらかじめcomposerが入っている必要があります。また、やりたいことによってcomposerの中身を追記する必要があるので、合わせて載せておきます。
##1.インストール
composer.jsonを作る
{
"require": {
"consolidation/robo": "1.*"
}
}
composerインストールを実行
$ composer install
実行。バージョンやヘルプが出てくればインストール完了です。
$ ./vendor/bin/robo
##2.タスクを設定
カレントにタスクファイルをつくって、そこにタスクを書いていきます。
まずはお約束のHelloWorldで試してみます。
<?php
class RoboFile extends \Robo\Tasks
{
/**
* あいさつ
*/
public function hello()
{
$this->say("Hello World!");
}
}
タスクファイルを書いたら実行してみましょう。
$ ./vendor/bin/robo hello
-> Hello World! と表示されたと思います。これでタスクが実行されました。ちなみにここで追加したタスクは、ヘルプにも出てくるようになります。では次に実用的なタスクを書いてみましょう。
##3.よく使うタスクを実行してみる
###シェルスクリプトを実行する
単純にシェルスクリプトを実行します。
public function shell()
{
$this->_exec('touch Robo');
}
###キャッシュクリア
指定のディレクトリ内のファイルを削除します。
public function clear()
{
$this->_cleanDir(['tmp/']);
}
###scssをコンパイルする
先にcomposerでライブラリを追加してcomposer updateしたあとにタスクを書いていきます。実行すると同じ場所にcssが作成されます。
{
"require": {
"leafo/scssphp": "0.1.*",
"consolidation/robo": "1.*"
}
}
/**
* SCSSコンパイル
*/
public function scss()
{
$this->taskScss([
'test1.scss' => 'test1.css',
'test2.scss' => 'test2.css'
])
->importDir('./')
->run();
}
実行するとコンパイルされます。コンパイル対象はimportDirで指定します。この場合はカレントディレクトリです。
$ ./vendor/bin/robo scss
##4.その他いろいろなタスクを実行
ファイルの結合
{
"require": {
"consolidation/robo": "1.*"
}
}
/**
* CSS結合(JSでも可能)
*/
public function concat()
{
$this->taskConcat([
'test1.css',
'test2.css'
])
->to('test.css')
->run();
}
test1.cssとtest2.cssをtest.cssに結合します
###cssのMinify
{
"require": {
"natxet/CssMin": "3.*",
"consolidation/robo": "1.*"
}
}
/**
* CSS・JSのMinity
*/
public function minify()
{
$this->taskMinify('test.css')
->to('test.min.css')
->run();
}
test.cssをコンパイルしてtest.min.cssとして吐き出します。ちなみにjavascriptでも全く同じことが可能です。
###画像の圧縮
{
"require": {
"consolidation/robo": "1.*"
}
}
/**
* 画像圧縮
*/
public function minifyimg()
{
$this->taskImageMinify('before_img/')
->to('after_img/')
->run();
}
before_imgにある画像すべてを圧縮してafter_imgに吐き出します
###ファイル変更監視
{
"require": {
"leafo/scssphp": "0.1.*",
"consolidation/robo": "1.*"
}
}
/**
* ファイル監視(管理画面)
*/
public function watch()
{
$this->taskWatch()
->monitor([
'./test/'
], function () {
$this->scss();
} )
->run();
}
上記の場合だと、test内のファイルを変更して保存された時点で検知して、scssメソッドを実行します。つまり、内容を書き換えたら自動的にcssにコンパイルしてくれます。
タスクをまとめて実行する
/**
* Task1
*/
public function task1()
{
$this->say("task1");
}
/**
* Task2
*/
public function task2()
{
$this->say("task2");
}
/**
* まとめて実行
*/
public function all()
{
$this->task1();
$this->task2();
}
単純に他のメソッドを順番に読み込むだけです。処理したい順番に並べる必要があるので気をつけて下さい。たとえばminifyしてから結合したいのか、結合してからminifyしたいのか、、などなど。
##あとがき
これでフロント周りをまとめてRoboに面倒見てもらえるようになりました。なによりnpmとかをいじらず、composerだけでインストールが済むので非常にシンプルになってスッキリしましたね。ちなみにテストなどもRoboで実行できます。