xlsx-extractor v1.0.0 release
XLSX ファイルを解析して JSON 化する npm をリリースした。
同じ用途の npm は既にいくつかあるけど、それらのうち excel を業務で利用していた。なぜ excel なのかというと、この npm による解析結果は空セルも要素として扱われる。npm によっては空セルを詰めてしまうのだけど excel で 4x4 のシートを解析したなら
[
[ '', 'Data', '', '' ],
[ 'Data', '', '', '' ],
[ 'Data', '', 'Data', '' ],
[ 'Data', '', '', '' ]
]
のような Array
を返す。データ的に冗長だが Excel や Numbers 上の表示と同じ座標でセルを指定可能になる。これは地味に便利。
しかし excel 内で使用されている libxmljs に問題があるらしく、これを通すとマルチバイト文字の一部が化けてしまう。全部でないところが曲者。おそらく XML の encoding を真面目に解釈して文字エンコーディング変換に失敗、という感じで問題が起きているのだろう。
そんなわけで XML 解析を xml2js に変更した fork を実装したわけだが、せっかくなので OSS 化することにした。業務開発したものとの違いは以下。
- 再設計 & 実装
- 元は excel の処理に近づけることを目的としていた
- 処理の大枠は参考にしつつ再設計する
- ユニット テストする
- 複数シート対応
- excel はシート 1 のみ対応
- シート識別のためにシート名と id も取得する
- CLI 対応
- シート数とシート JSON 出力を実装
- 複数シートの場合は、それらがルートの Array に包まれる
- 出力対象は stdout
- stdout の内容を
> sample.json
とすればファイル生成も可能 - 他の CLI ツールと組み合わせることを想定
ここのところ連続して npm を開発 & 公開しているのだけど、ようやく自分なりのスタイルができてきた。ざっとまとめると、
- ES2015 で実装
- babel-cli を採用
- なるべくフル機能、できれば import を使いたい
- いまの Node 標準 ES2015 対応 (
use strict
) だと役者不足
- mocha + power-assert + espower-babel でユニット テスト
- これも ES2015 で実装
- Travis CI で複数環境テスト
- 設計方針として現行 + ひとつ前のバージョンに対応
- いまなら Node v5.x + 4.x
- esdoc でコード ドキュメントを書き ESDoc Hosting Service で公開
- なるべく CLI 対応する
- インストールするだけで動かせる、というのを重視
- CLI なら npm-scripts にもそのまま組み込める
- README に Node API と CLI の説明を網羅的に書く
- すくなくとも I/O は書いておきたい
- たまに API の results 解説がなくて自分で調べることがあるけど、これは辛い
- CLI は
-h
の出力を流用 -h
の説明が十分か?という検証も兼ねてる
という感じ。
それにしても npm 開発は楽しい。npm publish
の手軽さとか npm link
みたいにローカルで CLI を試す仕組みとか、環境面がこなれていて快適なため、ちょっとしたネタでも npm 化したくなる。