最近書いたミニnpm packageとか

最近、コードを書いたら小さくてもnpm publishしたりP-R送るようにしてる。

npm package

@fand/irasutoya

github.com

いらすとや を検索して、キーワードにマッチした画像URLをランダムに返すCLIツール
SlackとかTwitterで使うのに便利。

用例

# 寿司の画像を検索
$ irasutoya 寿司
http://1.bp.blogspot.com/-G_HJK4ZIXio/VMItt7xPEMI/AAAAAAAAqxY/2ZsYWj5Vu6U/s800/food_kaburazushi.png

# クリップボードにコピー(macの場合)
$ irasutoya 寿司 | pbcopy

# ブラウザで開く
$ open `irasutoya 寿司`

スクレイピングしてるけど1回の実行で2回しかアクセスしないので大丈夫なはず……。
ルールの範囲内でお使い下さい。

@fand/load-audio, @fand/sample-node

github.com

evil, GuitarBreaks, cyro と、音鳴らすときに何回も同じコード書いてたのでpublish。
サンプラーを簡単につくれる。

var SampleNode = require('@fand/sample-node');
var ctx = new AudioContext();
var node =new SampleNode(ctx, './kick.wav');
node.connect(ctx.destination);


[https://github.com/fand/promisify:embed:cite]

node.play(0);  // 音がなる

sample-nodeは altnode/alt-audio-node を継承している。
alt-audio-nodeはWeb Audio APIのAudioNodeと同じように使えるNodeを自分で作るためのクラス。

github.com

@fand/map-merge

github.com

配列をforEachして何らかのオブジェクトを作る、だけの関数。
↓こういう動機で作ったんだけど、、、綺麗になったのかこれ……??

@fand/promisify

github.com

依存ライブラリなしのPromisify。
Promiseが実装されてる環境でしか使えない。

es6-promiseのindex.jsが module.exports = global.Promise || require('./lib'); みたいになっていれば解決、という話もある。

[WIP] aozora

github.com

CLI青空文庫の著者情報を表示したり、ランダムな小説を文字数指定して取得するやつ。
仕事でデバッグ用に長い文字列取得するために作ってる。
仕事、デバッグ時に適当なアホな文章入力して、ミスって公になってしまったら悲しいし損害という感じがする。
パブリックドメインな小説なら無害だし、たとえ刺激的な内容でも許されるのでは?と思ったのが発端。

CLIでテーブル表示するのに苦戦してて、まだ著者情報表示するとこまでしかできてない。

出したPull Request

skerit/janeway

github.com

お高級REPL。
ChromeのDevToolsは console.log したオブジェクトとかをクリックすると展開して中身見れたりする。
janewayはblessedを使って実装されており、ターミナルに表示したオブジェクトをクリックすると展開されたり、入力が補完されたりする!!

僕がインストールしたときは、何故かスクリプトファイルを指定せずに起動するとエラーが出る仕様になっていたので、何も指定せずに起動出来るように修正した。

jamestalmage/cli-table2

github.com

aozoraでテーブルを表示したくなってnpmを探ってみた。
cli-table, easy-table 辺りが人気っぽいけど、日本語を表示すると崩れるという問題があった。
cli-tableはいくつもP-Rが出されているけど、どれも半端だったり完全に放置されている。
あんまりに放置されているので cli-table2 というfork版が作られていた。

cli-table2には既にCJK文字対応のP-Rが出されていたけど、カバレッジが下がってしまってCIに弾かれ、放置されているように見えた。
僕は今すぐCJK対応して使いたかったので、forkした自分のリポジトリにCJK対応コードを丸パクリし、カバレッジあげるためにテストを追加してついでにP-R投げた。
テストを追加したところ、元のP-Rでは幅が奇数の時の対応が不十分だったことがわかった。
現在はその問題を修正して、レビューされた所直そうとしてるところ。

経緯

去年の7月から11月まで、毎日コードを書いてコミットするというのをやっていた。

きっかけは7月のWeb Midi ハッカソンだった。
去年前半はあまり趣味のコードを書く機会がなかったのだけど、ハッカソンの準備でコードを書いていたら楽しくなって、2週間くらい続いてた。
毎日コードを書いてGitHubに草を生やすの、John Resigさんとかt_wadaさんがやって最高だって言ってたことだし、せっかくなので力の続く限りやってみるか、という事になった。
彼らのオススメでは「夜12時までにやる」「必ずちゃんと問題を一つ解決する」みたいなルールがあったけど、僕にはまだ無理だと思い、「とにかく毎日書いてGitHubに草を生やす」事を目標にしていた。
GitHubで当時のcontribution見ると、Mithril試した時とかCycle.js試した時のおもちゃコードだったり、昔書いたコードの塩漬けissue消化とかやってた。

11月くらいまでは続いたのだけど、そのうちに簡単にこなせるネタも尽き、体力的に限界になってしまった。
一旦諦めて、もうちょっと人間らしい生活をするために方針を見なおす事にした。

今年のはじめにこんな記事を見た。

motemen.hatenablog.com

2015年に作ったもの20点あって今も使ってるのすごい。
僕はこういう便利ツールしゅっと思いつかないので真似はできないなーって思ったのだけど、sindresorhusとか、あるソフトウェアを作るために必要な部品全て別々のパッケージにしてnpmに公開してるのを思い出した。
sindresorhusみたいにnpmの名前空間を潰しまくる勇気は無いけど、npmにはscoped packageを公開できるので、オレオレ実装を公開しまくっても特に不都合は無いのだった。

というわけで、しばらくは肩の力を抜いて、思いつくままに書いては公開していこうと思う。