LoginSignup
5
7

More than 5 years have passed since last update.

PHP製タスクランナー「Robo」でsassコンパイルやMinifyなどを試す

Last updated at Posted at 2017-11-12

PHP製のタスクランナー「Robo」がとても良さそうだったので、試した内容をメモ。PHPカンファレンス2017で@sizuhikoさんが発表されたスライドをみて導入してみました。
https://speakerdeck.com/sizuhiko/php-conference-2017

実際に動くまでの手順と使い方を覚え書きとして。
あらかじめcomposerが入っている必要があります。また、やりたいことによってcomposerの中身を追記する必要があるので、合わせて載せておきます。

1.インストール

composer.jsonを作る

composer.json
{
    "require": {
        "consolidation/robo": "1.*"
    }
}

composerインストールを実行

$ composer install

実行。バージョンやヘルプが出てくればインストール完了です。

$ ./vendor/bin/robo

2.タスクを設定

カレントにタスクファイルをつくって、そこにタスクを書いていきます。
まずはお約束のHelloWorldで試してみます。

RoboFile.php
<?php
class RoboFile extends \Robo\Tasks
{
    /**
     * あいさつ
     */
    public function hello()
    {
        $this->say("Hello World!");
    }
}

タスクファイルを書いたら実行してみましょう。

$ ./vendor/bin/robo hello

-> Hello World! と表示されたと思います。これでタスクが実行されました。ちなみにここで追加したタスクは、ヘルプにも出てくるようになります。では次に実用的なタスクを書いてみましょう。

3.よく使うタスクを実行してみる

シェルスクリプトを実行する

単純にシェルスクリプトを実行します。

RoboFile.php
    public function shell()
    {
        $this->_exec('touch Robo');
    }

キャッシュクリア

指定のディレクトリ内のファイルを削除します。

RoboFile.php
    public function clear()
    {
        $this->_cleanDir(['tmp/']);
    }

scssをコンパイルする

先にcomposerでライブラリを追加してcomposer updateしたあとにタスクを書いていきます。実行すると同じ場所にcssが作成されます。

composer.json
{
    "require": {
        "leafo/scssphp": "0.1.*",
        "consolidation/robo": "1.*"
    }
}
RoboFile.php
    /**
     * SCSSコンパイル
     */
    public function scss()
    {
      $this->taskScss([
        'test1.scss' => 'test1.css',
        'test2.scss' => 'test2.css'
      ])
           ->importDir('./')
           ->run();
    }

実行するとコンパイルされます。コンパイル対象はimportDirで指定します。この場合はカレントディレクトリです。

$ ./vendor/bin/robo scss

4.その他いろいろなタスクを実行

ファイルの結合

composer.json
{
    "require": {
        "consolidation/robo": "1.*"
    }
}
RoboFile.php
    /**
     * CSS結合(JSでも可能)
     */
    public function concat()
    {
      $this->taskConcat([
        'test1.css',
        'test2.css'
      ])
           ->to('test.css')
           ->run();
    }

test1.cssとtest2.cssをtest.cssに結合します

cssのMinify

composer.json
{
    "require": {
        "natxet/CssMin": "3.*",
        "consolidation/robo": "1.*"
    }
}
RoboFile.php
    /**
     * CSS・JSのMinity
     */
    public function minify()
    {
      $this->taskMinify('test.css')
          ->to('test.min.css')
          ->run();
    }

test.cssをコンパイルしてtest.min.cssとして吐き出します。ちなみにjavascriptでも全く同じことが可能です。

画像の圧縮

composer.json
{
    "require": {
        "consolidation/robo": "1.*"
    }
}
RoboFile.php
    /**
     * 画像圧縮
     */
    public function minifyimg()
    {
      $this->taskImageMinify('before_img/')
           ->to('after_img/')
           ->run(); 
    }

before_imgにある画像すべてを圧縮してafter_imgに吐き出します

ファイル変更監視

composer.json
{
    "require": {
        "leafo/scssphp": "0.1.*",
        "consolidation/robo": "1.*"
    }
}
RoboFile.php
    /**
     * ファイル監視(管理画面)
     */
    public function watch()
        {
      $this->taskWatch()
         ->monitor([
          './test/'
        ], function () {
           $this->scss();
         } )
         ->run();
    }

 上記の場合だと、test内のファイルを変更して保存された時点で検知して、scssメソッドを実行します。つまり、内容を書き換えたら自動的にcssにコンパイルしてくれます。

タスクをまとめて実行する

RoboFile.php
    /**
     * 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で実行できます。

5
7
0

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
5
7