読者です 読者をやめる 読者になる 読者になる

grunt-asciifyを紹介するよ。(gruntの今後についてもちょっと書いたよ)

grunt yeoman node.js

はじめに

この投稿はGrunt Plugins Advent Calendar 2013の25日目の記事です。

grunt-asciifyで、遊び心のあるgruntを作りましょう。

後最後にちょっとしたgruntの今後を書きました。最後までお付き合いをお願いします。

asciify is 何

コンソールに文字ascii artを出力させるモジュールです。

$ npm install asciify -g

でインストールできます。

簡単な使い方

$ asciify hello

だけで、以下の様な画像が出ます。

hello

詳しくは過去にまとめた記事があるので、それを見て下さい。

コンソールに文字でAscii Artを出力する asciify がイノベーティブな件

grunt-asciifyはこれをgruntから使えるようにしたものです。

grunt-asciifyの使い方

grunt.initConfig({

  asciify: {
    banner:{
      // 表示したい文字列
      text: 'GRUNT-ASCIIFY!’,
      // フォントなどの情報
      options:{
        // フォント、フォントに何が使えるかは asciify -aで確認
        font:'graffiti’,
        // ascii artを表示するかどうか
        log:true
      }
    }
  },
});

grunt.loadNpmTasks('grunt-asciify');

grunt.registerTask(‘ascii', ['asciify']);  

こんな感じで登録しておくだけでgruntからasciifyが使えます。

$ grunt ascii

grunt

メリクリ

特に今日は何の日でしょうか、そうリア充の日、メリークリスマスです。

そんな日にgrunt-asciifyで勝手にgruntファイルを弄ってびっくりさせましょう。誰にも祝ってもらえないお前ら方々のために少なくともコンソールから祝ってもらいましょう。

initConfigを以下のように変更して、、、

    asciify: {
      banner:{
        text: 'Merry Xmas',
        options:{
          font:'larry3d',
          log: true
        }
      }
    }, 

どーん!

merryxmas

これで誰も寂しくない!

golgo

最後に

grunt-pluginアドベントカレンダー、皆さんお疲れ様でした。最後にこんなエントリで締めくくってしまって申し訳ない。 本当はもう少し役に立つ話も書きたかったのですが、gruntもいい感じに円熟してきて初心者向けのエントリとかは不要になってきた感があります。逆に膨大な量のjs, css, htmlをコンパイルするのに時間がかかるからチューニングするgrunt-parallelizeとかtipsとかがたくさん出てきて、面白くなってきました。

Gruntの中で今年一番大きなニュースとしてはやはりv0.4.2が出たことかなと思うのですが、gruntのv0.4.2で重要な変更が書かれています。

gruntのutil系ライブラリとfile系ライブラリは基本deprecated。今後は元のライブラリ使ってね。

http://gruntjs.com/blog/2013-11-21-grunt-0.4.2-released

リストアップするとこんな感じですね。

  • grunt.file.globの代わりにglobを
  • grunt.file.minimatchの代わりにminimatchを
  • grunt.file.findupの代わりにfindupを
  • grunt.util._の代わりにloadshを
  • grunt.util._.strの代わりにunderscore.stringを
  • grunt.util.hookerの代わりにhookerを
  • grunt.util.asyncの代わりにasyncを
  • grunt.util.namespace の代わりにgetobjectを

使いましょう。

こんな感じに変更していく事になりそうです。

// 以前までのコード:
var newArr = grunt.util._.map(arr, fn);

// 今後:
var _ = require('lodash');
var newArr = _.map(arr, fn); 

色々議論はあったのかと思いますが、元々いろんなモジュールに依存する重厚長大な一つのアプリケーションだったものを分割して依存度を低くする流れというのはこれまでも幾つか見てきました。Yeomanがそうですし、最近出たExpressの後継であるKoaもその流れにあります。

その方がリリースサイクルを短くできますし、ライブラリ感を疎結合にしておいた方がユーザーはいろんなものを試せます。何よりgrunt開発チームがgruntのcoreモジュールの開発に集中できます。現在、v0.5.0に向けて開発が進んでいて、非常に楽しみでもあります。

個人的にv0.5.0で一番楽しみな対応

Yeomanの開発者でもある、@sindresorhusissueとして上げているgruntのinteractive cliですね。今のところ構想レベルですが、grunt --interactiveとかで下のようなinteractive cliが起動されてタスクが選べるようにしたいという構想です。

interactive cli

既にgrunt-promptで実現されているみたいですが、gruntを起動する時にタスクの名前を覚えてなくても良くなるというのはgruntを起動する開発者の敷居を下げます。

そんなこんなで

2014年も、より一層grunt業界が面白くなるといいなと思います。最近話題のgulpという競合もあるし、rubyには元々guardもあります。

今Koaについてまとめてますが、generatorも重要なキーワードですね。Node v0.12でgeneratorがデフォルトになればgruntやgulp等のタスクランナーの書き方が刷新される気がします。

※Node v0.12でもデフォルトになるかはES仕様策定次第という話なので打ち消し線を追加しました。

そんな結びでお疲れ様でした。メリークリスマス!!