枕を欹てて聴く

香炉峰の雪は簾を撥げて看る

tumblr reblogging enviroment Advent Calendar 2013 - 17th day - Taberareloo Canary

f:id:Constellation:20131218025637j:plain特に関係のない UNIX 画像

This is posted for tumblr reblogging enviroment Advent Calendar 2013 17th day

予定地です, 現在進行形で作業しています... すみません...公開しました

3 秒でわかる版

f:id:Constellation:20131218023836p:plain

CI によって Taberareloo を commit ごとに自動 build し, Taberareloo Canary として提供します. ここ: https://drone.io/github.com/Constellation/taberareloo/files から taberareloo.crx を download して, Chrome 拡張機能のページ(上記のような)に向かって drag & drop で install することができます.

もしくは, ExtensionInstallSources を指定することで install 可能なサイトを増やすことができ, 例えば OSX の場合は, defaults コマンドで拡張可能です*1 ここで https://*drone.io/* を指定することで install が可能となります.

Introduction

一部で微妙な人気を博している Taberareloo はなんだかんだで公開から4年*2という時間を経つつも, YungSang さん*3, syoichi さん*4ら maintainer の方々によるメンテナンスによって維持され続けている. web scraping を基板とするシステムは多くの web service に対応することを可能にしたが service の変更に対して脆弱であり, 意図的に制限の弱い XPath を利用するなどの手法である程度の変化を吸収することはできるが, 大きな変化に対応するためには Taberareloo 自体の対応を必要とする. こういった変更の commit はすぐさま release されるわけではなく, release と commit の間には時間がかかる. また, release した後に問題が顕在化することがあり, release 直後に小規模の変更の release が相次ぐといった問題が存在した.

そこで Taberareloo では CI による commit ごとの build である Taberareloo Canary を提供する. CI によって commit ごとに build, 公開され, 自動的に updates.xml が更新され, release される. これにより Taberareloo Canary のユーザに対して commit ごとの build をすぐさま提供することができ, service 変更の早期対応や bug の早期発見に役立つ.

(ここまでで長い文章を書く気力が尽きました)

Architecture

drone.io は CI のサービスですが, artifact という, なんらかのファイルを生成し公開する機能を持っています. そこで artifact として crx / updates.xml を提供することで CI による自動的な build & release を提供しようというのが趣旨です. この時, grunt-crx を用いて crx file を作成しました, らくしたいーという思いが溢れました(しかし bugfix をするはめになりました...).

crx を作成するためには private key が必要ですが, 当たり前ですが CI サービスの repository に入れることはまずいです,

Security Notice

It is strongly recommended to store your privates keys outside the source folder of your extensions.

Otherwise we will laught at you.

grunt-crx README

そこで今回は, drone.io の環境変数に key を入れることとし, また build 可能な branch を master に制限することによって, key の dump を防ぎました. なんか漏れがあったらまずい感じもしますが指摘してください.

また version 番号の 4 つめの部分を build 番号として用いました. build 番号を UNIX time にしようと試みたのですが, Chrome extension は仕様上, version のそれぞれの区切りは uint16_t でなければだめです. そこで, 前の updates.xml を取得し, その番号を increment したものを新たな番号として付与することにしました. この変更により, build 番号は連続します.

実装の途中で, npm の crx module について bug を発見したため, 一時的に自分の fork の module を利用していますが, 後に upstream する予定です. また grunt-crx についても private key をファイルでしか受け取ることができなかったため, 文字列で受け取ることができるように変更しました. これも後に upstream する予定です.

Conclusion

ゆゆ式は素晴らしいです. 最近はまんがタイムきららのドキドキ☆ビジュアルコミックスを読むことが生きるということなのだとひしひしと感じます. 来月からは桜Trickという最高の作品が始まるので見たほうが良いと思われます. またご注文はうさぎですか?という最高の作品についてもアニメ化するようなので原作を買っておくのを強く, 強くおすすめします.

Acknowledgment

というわけで, 明日も引き続き tumblr reblogging enviroment Advent Calendar 2013 とアニメをお楽しみください. 明日の担当は Tombloo に多くの緻密な patch を書かれている polygon_planet さんです. よろしくお願いします.

*1:http://superuser.com/questions/450893/how-to-install-a-private-user-script-in-chrome-21

*2:http://constellation.hatenablog.com/entry/20091129/1259514045

*3:https://github.com/YungSang

*4:https://github.com/syoichi