laravel-elixirにタスク追加する方法(タブ -> スペース変換など)

Posted: 2015-02-12 00:12 | 
5がリリースされて安定版になったので中身をいじりまくって遊んでますが、
コンテナ回りがいい感じに強力になりました。
これまでの、インスタンス生成、concreteとabstractのバインド、
サービスロケーター以外に、
ドキュメントにはありませんが、AOP的なアプローチやフィールドインジェクションなどもできるようになっています。

ただ、どうしてもソースを読まなければならない+バージョン追うごとに難しくなっているのは事実で、
多分初心者の方はそのあたりの仕組みを理解するにはすこしばかり時間がかかると思います。
Laravel5はjavaになりたかったphp的な雰囲気すら感じられるようになった気がします。

そんなわけでgulpで動くlaravel-elixirが付いてきますが、
フロントエンドでも開発をしてる方やnode.jsの方はもう使いこなしていると思います
npmにもこのlaravel-elixirを利用したパッケージがどんどん追加されてますが、
ぶっちゃけそのほとんどが、elixir.extend つまりただelixirに自分のタスクを追加しただけのもので、

そんなのパッケージにしなくてもよくないか?

というものばかりで、だいたいテストコードもありません。
その程度ならパッケージではなくてリポジトリに置いて置くくらいで十分なのでは・・とも思います。

ということで、パッケージに登録するほどのものでもないサンプル的なものを紹介します。
Laravel5で完全にPSR-2になる動きがあったんですが、作者が、「やっぱやめた」となってしまったのかわかりませんが、
オールマンスタイルのままになってしまい、インデントも相変わらずタブのままです。
フレームワークのソース自体はタブでもぶっちゃけユーザーには関係ありませんが、
make系のコマンドを実行すると全部タブなわけで直すの面倒臭いという話も聞かれたのでそれをスペースに変更するタスク例です。
個人的にはphpstormで変換しているのと、make系コマンドほとんど利用しない派ですが。

▪️package.json

{  
  "devDependencies": {
    "gulp": "^3.8.8",
    "gulp-plumber": "*",
    "gulp-notify": "*",
    "gulp-replace": "*",
    "gulp-shell": "*",
    "laravel-elixir": "*",
    "underscore": "*"
  }
}

▪️app配下のインデントを自動でスペースに変更タスク

"use strict";
var gulp = require('gulp'),
    elixir = require('laravel-elixir'),
    replace = require('gulp-replace'),
    plumber = require('gulp-plumber'),
    shell = require('gulp-shell'),
    watch = require('gulp-watch'),
    notify = require('gulp-notify'),
    _ = require('underscore');

var config = {
    dest: "app",
    replace: {
        from: /\t/g,
        to: "    "
    },
    routes: "app/Http/routes.php",
    configs: "config/**/*.php"
};

/**
 * indent
 */
elixir.extend('tabReplace', function (src, options) {
    options = _.extend(config, options);
    src = src || "app/**/*.php";
    gulp.task('tabReplace', function () {
        return gulp.src(src)
            .pipe(plumber())
            .pipe(replace(options.replace.from, options.replace.to))
            .pipe(gulp.dest(options.dest));
    });
    this.registerWatcher('tabReplace', src);
    return this.queueTask('tabReplace');
});
app配下のソースが変更されたり、追加された時に変換するようになります。
が、これをこのままwatchすると、変更した後に検知してもう一回実行されますので、適宜変更してください。
elixirで使うときは、
elixir(function(mix) {
    mix.tabReplace();
});
だけです。
拡張の仕方はマニュアルにもありますので、誰でもできます。
*gulp-notifyはこの後に紹介するタスクで使っています

▪️ルーティングキャッシュ

/**
 * for php artisan route:cache
 */
elixir.extend('routeCache', function (options) {
    options = _.extend(config, options);
    gulp.task('routeCaching', function () {
        return gulp.src('')
            .pipe(plumber())
            .pipe(shell('php artisan route:cache', {
                quiet: true
            }))
            .on('error', notify.onError({
                title: "route:cache Failed",
                message: "Error(s) occurred route:cache..."
            }));
    });
    this.registerWatcher('routeCaching', options.routes);
    return this.queueTask('routeCaching');
});
実行がこけたら画面上に通知してくれます。elixirのphpunit()などと同じですね。
routes.phpを監視するので、変更されれば毎回キャッシュファイルを作成します。
アクセスが増えてくるとこのキャッシュファイルが少し効いてきますので、大規模系のものを開発するときは忘れずに。

▪️コンフィグキャッシュ

/**
 * for php artisan config:cache
 */
elixir.extend('configCache', function (options) {
    options = _.extend(config, options);
    gulp.task('configCaching', function () {
        return gulp.src('')
            .pipe(plumber())
            .pipe(shell('php artisan config:cache', {
                quiet: true
            }))
            .on('error', notify.onError({
                title: "config:cache Failed",
                message: "Error(s) occurred config:cache..."
            }));
    });
    this.registerWatcher('configCaching', options.configs);
    return this.queueTask('configCaching');
});
同様にconfig配下を監視して、変更されたらconfigキャッシュを作成します。
この辺りをブログに書いてる方はまだ少ないですが、コンフィグ取得系は4から大分早くなっているので、
やってみてください。
まぁそんなに実行速度は大きく変わりませんが・・。

全て使う場合は、
elixir(function(mix) {
    mix.less('app.less')
        .tabReplace()
        .routeCache()
        .configCache();
});
tabReplaceは対象のソース(glob)やオプションでそれなりに変更できますね。
この程度であればパッケージするほどでもないので、コピペで十分でしょう!
慣れてきたら、通常のgulpでのタスク記述もやってみましょう!
 

about ytake

執筆に参加しています


Laravel お役立ち情報

share



このエントリーをはてなブックマークに追加

Categories

laravel 45

DTM 0

music 0

PHP全般 31

0

JAPAN 1

WORLD 1

javascript 4

RDBMS 1

NoSQL 1

NewSQL 1

Recent Posts

Ad

comments powered by Disqus

GitHub

Social Links

Author


クリエイティブ・コモンズ・ライセンス
Yuuki Takezawa 作『Ytake Blog』はクリエイティブ・コモンズ 表示 - 非営利 4.0 国際 ライセンス で提供されています。

© ytake/comnect All Rights Reserved. 2014