皆さんはプロジェクトのリソースとしてエクセルの xlsx ファイルを使う事があると思います。
何てったって事務職の人ですら楽々使えるスーパー優れた UI なので、 web の管理画面とかを作り込むよりもエクセルでシート作ってもらってしまった方が早いケースも多いんです。現実の世界では。
で、普通の人は TSV にするだの CSV にしてもらうだのすると思うんですが、一方的にデータ貰うだけなら良いんだけど、相手とやり取りする時にはどうしても xlsx ファイル経由とかにしないと相手がこまる!やっぱりエンジニアのエは優しさのエだから相手に優しくしないとだめです。
で、 xslx ファイルでエンジニア以外の人とデータやり取りするとやっぱり、バージョン管理したくなるのが人情です。
でも xslx ファイルはバイナリファイルなので git diff とかが残念です。。。
って事で作っちゃいました。
https://github.com/yappo/p5-git-xlsx-textconv.pl
xlsx2txt みたいなコマンドは結構あるけど、僕が作ったのは git diff した時に見やすさを重視してます。
だいたい下の画像のようになります。
シート名を行頭に持ってくるので複数のシートでもだいじょうぶです。
行名や列名を入れると行挿入で死ぬので入れてません。簡単ですね。
README.md の通りに install して .gitconfig を設定して プロジェクトの .gitattributes を設定すればすぐに使えます。
僕の用途だと1行に意味がある感じのシートだからわりとこれで良いけど、列と行を特定したセルにそれぞれ意味があるなら行列を1行で区切る感じの出力にしたら便利でしょう。
折角だけど git merge も全自動で良い感じにするラッパー書きたかったけど git には良い感じに merge warpper script を指定出来なかったようだ。。
あと .xlsx って実は zip file で中身は XML だったから shell だけで解決させようと思ってたんだけど、データ構造わりと面倒くて諦めた。
もし Perl とか使うだけで発狂するような方がいたら Ruby に移植するなりお好きにしてください。その場合のライセンスも好きに設定していいです。
enjoy!
perl -E 'my $x = pack "C", 160; $x = "A${x}B"; say(join ",", unpack "C*", $x); $x =~ s/\s//; say(join ",", unpack "C*", $x)' 65,160,66 65,66
perl -E 'my $x = "ム"; say(join ",", unpack "C*", $x); $x =~ s/\s//; say(join ",", unpack "C*", $x)' 227,131,160 227,131
160 = 0xA0
UTF8 string に対して、うっかり byte data に対して s/\s// とかすると 0xA0 を使っている UTF8 string が broken どす。
\s is space character, and includes 'no-break space'.
LINE株式会社という会社が月イチでdeveloper meetupを福岡でやっている、ついては第四回目でしゃべってくるがよい、ということになったので、いってきた。わーい博多だ。
http://yappo.github.io/talks/20140528-linedm04/
話題はどうしようかと思ったけど、普通に自分のお仕事で考えている話すか、ということでエンジニアの考え方の概要、どういう考え方で働けばいいのか、実務でどうかの話もからめてひと通りやった。30分の予定が40分近い話になってしまった。
もうちょっとコードレベルの話とかでも良かったんだけど、もう一人の資料みたらそういう感じだったので逆ばりして、意識高いだけのなんちゃってエンジニアっぽい感じのふわっとした話をしてみました。
こんな話でよかったかなあと思ったけど、懇親会で「バッチスクリプト動かす時に勇気居るの共感した」しかもお仕事で! という人に何人も話しかけてもらったりもして、それなりに興味を持ててもらえる話ができたのかなという気はした。参加者も登録数(定員いっぱい40人)くらいは実際に来場されてたらしい。よかったよかった。
来月以降はまた全然違う方向の技術の話をしに別の人が行くと思うので、今回の話がまったく楽しめなかったという方も、これに懲りずに参加してもらえると良いのではないかと思います。
雑感
死ぬほどうビールを飲んだので1泊のうちの出費がほとんどなかった。福岡は魅力的な場所だが長期滞在したらサイフだいじょうぶそう。
冗談は置いておいても、U/Iターン採用みたいのもやるらしいし福岡良い所だから移住して働くでも良いと思うんじゃないのかな?
あと、今回の話をよりちゃんとコード書ける人レベルに落とし込んだ話を YAPC::Asia 2014 でやります。