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"));
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 を見てもらえるとわかりやすいと思います。
もしバグがあれば教えて下さい!
追記: 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>