consoleを簡単に色付けするモジュールのcoloを作った

coloを作りました。

coloとは

console.logとかを簡単に色付けできるモジュールです。下記のような書き方で色付けできます。

var colo = require("colo");

console.log(colo.red("colo colo"));
console.log(colo.cyan.bold("colo colo"));
console.log(colo.green.underline("colo colo"));
console.log(colo.magenta.italic("colo colo"));
console.log(colo.grey.inverse("colo colo"));

f:id:yosuke_furukawa:20140904093333p:plain

install 方法

$ npm install colo

作った動機

コンソールの文字列を赤くしたり、緑にしたりするのをよくやってたんですけど、これまでこんな感じでやってました。

//コンソール赤くする:
console.log('\033[31m' + 'Hello World'+ '\033[39m');

//コンソール黄色くする:
console.log('\033[33m'+ 'Hello World'+  '\033[39m');

//コンソール青色にする:
console.log('\033[36m' + 'Hello World' + '\033[39m');

//コンソール灰色にする:
console.log('\033[90m' + 'Hello World' + '\033[39m');

//コンソール緑色にする:
console.log('\033[32m ' + 'Hello World'+ ' \033[39m');

この「\033[32m 〜 \033[39m」が覚えられなくなってきたので、ここまでたくさんやるならちゃんとモジュール化しておこうと思ったのがきっかけです。

※ あと一応、\033はOctal literalsなので、"use strict"の下では怒られます。

こだわったところ

colorizeモジュールは既にいくつも存在するんですが、Stringのprototype拡張してたり、依存モジュールが多かったり、文字列の中で独自の構文を覚えないといけなかったりするのでもう少し手軽なやつを、、、と思って作りました。


依存モジュールを減らしたかったんですが、AnsiColorの定義はコード内に持ちたくないなぁと思ってたらコアのutilモジュールが持ってたので、それだけに依存するようにしました。

DSLライクに

書き味として

colo.red("RED");
colo.red.bold("RED and BOLD");
colo.red.bold.underline("RED and BOLD and UNDERLINE");

みたいにプロパティアクセスっぽく書くんだけど、実際にはメソッドチェーンになるようにdefinePropertyでgetterを持つオブジェクトをネストさせて作っています。

どうやって実現しているかは github を見てもらえるとわかりやすいと思います。

yosuke-furukawa/colo · GitHub

もしバグがあれば教えて下さい!

追記: 9/15

coloをブラウザでも使えるようにして、bowerに公開しました。

<script type='text/javascript' src="./colo/colo.js"></script>
<script type='text/javascript'>
colog(colo.red("colo colo"));
colog(colo.cyan.bold("colo colo"));
colog(colo.green.underline("colo colo"));
colog(colo.magenta.italic.bold("colo colo"));
colog(colo.grey.bold.italic.underline("colo colo"));
</script>