今年npm publishしたモジュールについて

この記事はNode.js Advent Calendar 2013 - Adventarの3日目の記事です。
今年npm publishしたモジュールについて、ということで(今年、ってまだ12月終わってないのだけど)私が2013年01月01日から今日2013年12月03日までにpublishしたモジュールについて書いていきます。

mktemp

npm / github
このモジュールは、mktempコマンドのようなモジュールです。

var mktemp = require('mktemp'),
    temp;

// "ランダムな値.tmp"というファイル名の空ファイルが生成され、
// tempには"ランダムな値.tmp"が代入される。
temp = mktemp.createFileSync('XXXXXXXXXX.tmp');

というような使い方をします。
例に書いた同期関数だけでなく、非同期関数もあります。あとファイルの生成だけでなくディレクトリを生成する関数もあります。


このモジュールで初めてPull Requestをもらったりしました。(しかもCoffeeScriptReduxの人!)
それほどパッとしないモジュールですが、無かったら無かったで微妙に面倒なのでニッチなモジュールとしてはまあまあ良いものが出来たのかなと思います。

deepcopy

npm / github
このモジュールは、オブジェクトなどをディープコピーするモジュールです。
この手のモジュール、やはりnpmにはいくつかある(cloneとか)ようです。ということに最近気がつきました。


ちなみにこのモジュール、ブラウザでも動作します。bowerでインストールできたりもします。
なので、ブラウザとnode.jsで共有できるコード中でディープコピーする必要がある場合などは良いかもしれません。……かなり限定的ですが。
あとはjQueryやunderscore.jsなどを使うまでもなく、本当にディープコピーだけできれば良いときなどでしょうか。これもあまりなさそうではありますが。

ltsv

npm / github
このモジュールは、LTSVを処理するモジュールです。
最初はJSONに変換するストリームが無かったのですが、ltsv-streamを見てぐぬぬとなったので、そこからStreamを調べて実装したりという経緯があったり。


このモジュールもブラウザでも動作します。bowerでインストールできたりもします。

ltsview

npm / github
このモジュールは、Text::LTSV付属のltsviewっぽいコマンドです。
内部では上記のltsvを使用しています。確かLtsvToJsonStreamを使っていたような気がします。(覚えてない)
全然メンテできていません……でも後々ちゃんと作り直したいです。

split-stream

npm / github
このモジュールは、ストリームを文字列もしくは正規表現で分割するストリームです。
これもnpmに似たようなものがいくつかあった気がします。これも全然メンテできていません……メンテしたいです。

generator-prototyping

npm / github
このモジュールは、Yeomanのgeneratorモジュールです。"client side webapp prototyping"と説明には書きましたが……
具体的にこのgeneratorを使ってscaffoldingすると、

  • ローカルサーバ + LiveReload + ファイル監視
  • JavaScript, Jade, Stylus, Less, CoffeeScriptで開発できる
  • bower入り

という環境が生成されます。

$ grunt develop

でローカルサーバ(grunt-contrib-connect)を起動、LiveReload(grunt-contrib-connect)もonにして、ファイル監視(grunt-este-watch)しながら、
js/, jade/, stylus/, less/, coffee/の各ディレクトリにそれぞれのファイルを書いていくと、ローカルサーバのルートであるpublic/にコピーされたりコンパイルされたファイルが配置されるという流れです。
CoffeeScriptはSourceMapも一緒に出力されるので、デバッグも安心(?)。
ファイル監視にgrunt-este-watchを使用しているので、grunt-contrib-watchと違って監視後にファイルを生成しても、生成されたファイルを見てくれます。
とはいえgrunt-este-watchも若干癖があるのですが


Sassにはまだ対応してませんが、そのうち対応したいなーとは思っています。


なので、ちょっとした実験コードや、HTML5APIの挙動とか、ちょっとしたものをささっと書くには良いgeneartorかなあと思います。

generator-flowtime

npm / github
このモジュールは、Yeomanのgeneratorモジュールです。flowtime.jsを使ったスライドがすぐに作れます。
generator-prototypingをベースにしている(でもJade, Stylus, CoffeeScriptのサポートしかしていない)ので、LiveReloadとか、grunt-este-watchでのファイル監視も健在です。


……とまあ、作ったのはよいのですが、周囲の人たちがreveal.jsを使ったスライドを多く作っていてreveal.jsがかなり気になっていることと、Jadeでもスライドを書くのが辛くてMarkdownがいいなあと思い始めているところで、これからこのgeneratorはどうしようかなというところです。
自分があまり使わないから、という理由でdeprecateにはしたくないのでのろのろメンテしていこうかなと思います。

終わりに

というわけで、今年はいくつかのモジュールをpublishしました。githubリポジトリ数が大幅に増えたり、スターをもらったり、Pull Requestをもらったり、npmのダウンロード数を見て一喜一憂したり……実りの多い11ヶ月だったかなと思います。
ただ、名前空間汚し申し訳ありませんというものもいくつかあったりするので、調子に乗ってあれこれpublishしすぎるのも良くないなあとは思いました。
この中でこれ便利そうというものがあれば、ぜひ使ってみていただけたらと思います。お役に立てれば幸いです。

11月のまとめ

2013年最終月にとうとうなってしまった……

やったこと

  • Yeomanのgeneratorを作った
  • OS Xにnginxをインストールした
  • npmに寄付した
  • HTML5 Conference 2013に参加した

前の月に比べると大分アウトプットが減ったように見えるけど、ブログの記事としてのアウトプットが減っただけかな。
今月はsasaplus1 (sasaplus1) · GitHubとかsasaplus1 - Qiitaへのアウトプットが大半を占めていたような気がします。
Qiitaに関しては有用な記事を書けてないので、思うところも多いというか……
そろそろ文章力とか説明とか、技術的なスキルだけじゃなくてその辺のスキルも必要になってきてる頃合いなのかなと思います。


まあ、とりあえずNode.js Advent Calendar 2013 - Adventarの3日目を登録してあるので、それをがんばる!

HTML5 Conference 2013に行ってきたよ

HTML5 Conference 2013に行ってきました。



これらは戦利品とか。右上のはCodeIQドーナツ。あと鮭おにぎりももらったりしました。

セッション

見た・聴いたセッションは以下の通り。

  • 14:00-14:45 実践的なモバイルHTML5テクニック
    • 初紀平さん
    • 実践的・実用的なテクニックが本当に有用そうだった
    • スマートフォンブラウザこわい
  • 15:15-16:00 Canvas/WebGLを活用したインタラクティブ表現 〜CreateJS、Three.js、Away3D.js〜
    • 初clockmakerさん
    • 画像をBase64に変換して配信というのが盲点だった
    • 文字列にすることでgzip圧縮が期待できる
    • 昔、Base64にするとキャッシュされない〜みたいな記述をみてから敬遠してた
  • 16:15-17:00 地下鉄 x サクサク x これからのWebゲームアプリが備えるべき8つの機能
    • 初uupaaさん
    • 知らないことがかなり多かった
    • Command Patternよさそう
    • 黒魔術すごい
  • 17:15-18:00 Web をまともにしたいので Shadow DOM と Web Components をつくってます
    • かなり興味を持った

スペシャルセッションは聴きに行かずに帰りました……

いろいろ

そもそもHTML5 Conference 2013は参加できないはずだったのですが……


というのも、HTML5 Conference 2013は2000人も参加できるから、参加登録はあとあとでも大丈夫だろうと呑気にしていて、そろそろ登録するかとTwitterを見ていたら

となってしまい……
参加登録は早めにしておくものですね。今までの他の勉強会ではそうしていたのですけど。


でもまあ、あれこれあってVIPとして入れたのでよかったです。悪運強し。

scalenpm.org

https://scalenpm.org/
npmにはとてもお世話になってるので寄付した。Tiny - $7だけど。
npm Tシャツ欲しかったけど、ちょっと出せなかった。$75くらいポンと出せるようになりたい。


Keeping The npm Registry Awesome | Node.js


考えてみたら、寄付的なの初めてかも。

記事を書く場所

記事を書く頻度が減ってきた……
最近、細かいメモとかをQiitaに書くようにしたので、はてなダイアリーの更新もあまりしなくなってきた。まあ、それは短くないけど長くもない記事を書けなくなってきたからなのだけど。極端に短い記事しかかけなくなってきたってことね。
それと、はてなはてなブログ推しになっているので、はてなダイアリーはちょっとずつ衰退傾向にあるのかなーと。


なのでそろそろGitHubあたりに記事を載せるようにしようかとちょっと考え中。
tumblrは別のことに使ってるしね。あまり使ってないけど。はてなブログもよいのだけどなんかこう。
blogってリポジトリを作って、サブドメインでgh-pagesブランチを見に行くようにして、あとはOctopressとかその辺使おうかと。
でもどうなんだろう、いろいろ面倒なのかな。まあ、一番簡単なのはサービス使うことなんだろうけど。

nginxをインストールする

最近何かと使う、nginxをインストールするメモです。
環境:OS X 10.9

$ curl -O http://nginx.org/download/nginx-1.4.3.tar.gz
$ curl -L -O "http://downloads.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpcre%2Ffiles%2Fpcre%2F8.33%2F&ts=1383407826&use_mirror=jaist"
$ tar xvf nginx-1.4.3.tar.gz
$ tar xvf pcre-8.33.tar.bz2
$ cd nginx-1.4.3
$ ./configure --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --prefix=$HOME/Binary/nginx --with-pcre=../pcre-8.33
$ make
$ make install

--with-pcreってコンパイルしたバイナリの場所を渡すんでなくて、pcreのソースの場所を渡すのですね……
とりあえず、これでCocProxy for nginx - #生存戦略 、それは - subtech / cocproxy for nginx · GitHubが使えます。

Yeomanのジェネレータ、generator-prototypingを作ったよ

generator-prototyping - npmを作りました。
東京Node学園祭2013で[twitter:@yosuke_furukawa]さんの"Yeoman, Grunt, Bower"を聞いたし、後夜祭でテンプレート的なリポジトリを持ってると言ったらジェネレータ作った方が良いですよ、と言われたのでせっかくなので作ってみたのでした。
Yeomanのジェネレータを作るのはこれが初めてだったので、なかなか大変だったのですけどYeoman入門(第一部、yoを使う) - from scratchYeoman入門(第二部、generatorを作る) - from scratchがかなりわかりやすく、yeomania - npmのおかげでデバッグもかなり捗ったので想定以上には時間がかからなかったかなーと思います。ジェネレータの中身自体もファイルを配置するだけの簡単なものですし。


今回作ったジェネレータは、

をします。


ブラウザで何かの機能をちょっと試したい時などに使っています。
初級フロントエンドエンジニアなので、このジェネレータを使ってブラウザの挙動とかをすぐに調べたりするにはもってこいなのです。


自身のリポジトリに、他にもスライド用のテンプレートリポジトリとかもあるので、それもジェネレータにしようかなーと思ったのでした。