Sketch x TravisCI


[Sketch 3 Advent Calendar 2015](http://qiita.com/advent-calendar/2015/sketch3)の 9日めの記事です。また、[俺の Advent Calendar](http://www.adventar.org/calendars/1209) も協賛してます。むしろ相乗りさせてもらってます。昨日は.... dagezi氏の [ああ、invokedynamicがな](http://dagezi.hatenablog.com/entry/2015/12/08/235719) でした。ということにしときます。

## 今日のメニュー
今日は Github上にある Sketch3 データが更新される度に、TravisCIが Android向けのアイコンを exportしてすぐに使える形にまとめるようにします。

## CIってなに?
デザイン界で CIといえば Corporation Identityなのかもしれません。でも、今回扱う CIは [継続的インテグレーション](https://ja.wikipedia.org/wiki/%E7%B6%99%E7%B6%9A%E7%9A%84%E3%82%A4%E3%83%B3%E3%83%86%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3) (Continuous Integration) という意味です。単純に言うとコンパイルやテストを自動的に、人手をかけずに実行して、自動的にデプロイ、つまり試せる環境まで持って行こうぜ、という話です。

これの背景には、さっさとデプロイして試してさっさと失敗してさっさと改善していこう、という [DevOps](https://ja.wikipedia.org/wiki/DevOps) という方法論が有ります。そういう iteratoin (繰り返し) を増やすことでソフトウェアの質をどんどんよくしていこう、とうのが昨今の Web開発のはやりだったりします。

で、自分はその繰り返しに Engineerだけではなく Designer も入れていくべきだと [DevUI](http://dagezi.hatenablog.com/entry/2015/12/05/165500) という概念を提唱しています。いや、その blog書いてる時に思いついただけですけど。

で、 @meyco さんをそそのかして [Sketchデータを githubにいれさせ](http://uxblog.meycou.com/entry/2015/12/02/000025)、そしてそこで CIの実験みたいなものをやってみた、というのが今日の話になります。

## TravisCIってなに?

[TravisCI](https://travis-ci.org/)は、クラウド上の CIサービスです。ヘルメットおじさんの顔で知られています。自分で CI用のサーバ (Jenkinsとか) を管理しなくても自動的にソースが変更になったタイミングでテストとかいろいろやってくれるので便利。

本当は、仕事でも使ってる [CircleCI](https://circleci.com/) でやろうと思ったんだけど、考えてみると CircleCIは OS Xサポートのβ期間が終わって OS Xをやるのに有料になってしまったので。ほんとは CircleCIの方が Artifactの機能とかあって楽なんですけどねえ。

## どう動くの?
まず Sketchデータを Githubで管理してることが前提となります。そこらへんの利点については @meycoさんの [blog](http://uxblog.meycou.com/entry/2015/12/02/000025) を参照ください。

今回はためしに [sketchSample](https://github.com/dagezi/sketchSample) って repositoryを作ってみました。ご覧のように sketchファイルは [icons.sketch](https://github.com/dagezi/sketchSample/blob/master/icons.sketch) しかありません。Engineerがつくったのでこんなものです。中身も slice2つとごみがあるだけです。

![image](https://qiita-image-store.s3.amazonaws.com/0/28133/8ebbcdc9-c31d-6c15-0bbb-8e04303f44b9.png)

で、どうも Qの穴のサイズがちがう、と気になったとします。そこを適宜編集してセーブして commitして pushしたのが [この change](https://github.com/dagezi/sketchSample/commit/69fd18ae45effb085fcd8879469b032345420e90) になります。

すると TravisCIがそれを見つけて動き出して 勝手に [iconを exportして](https://travis-ci.org/dagezi/sketchSample/builds/95802730)、[zip](https://s3.amazonaws.com/sketch-sample/dagezi/sketchSample/10/10.1/out/android/android.zip) にまとめてくれます。

![image](https://qiita-image-store.s3.amazonaws.com/0/28133/a2ce7711-ce7f-511d-0029-18a3264c9ff4.png)

できた PNGの [一覧](https://s3.amazonaws.com/sketch-sample/dagezi/sketchSample/10/10.1/index.html)も作ってくれます。ちなみに scriptの bugで、うえの zipped fileというリンクは使えません。ぺこん。

![image](https://qiita-image-store.s3.amazonaws.com/0/28133/d1ce8b59-c767-235a-6604-072dfd641faf.png)

ちなみに以前の画像が [こちら](https://s3.amazonaws.com/sketch-sample/dagezi/sketchSample/9/9.1/index.html) にあるので、見比べてみれば変わったことがわかるでしょう。

あとはこの zipファイルを Engineerが持って行ってコードに組み込む、というイメージです。

## 仕組み
純正コマンドラインツール [SketchTool](http://www.sketchapp.com/tool/) を走らせて[うにゃうにゃ](https://github.com/dagezi/sketchSample/blob/master/script/export-png.sh) やってるだけです。

この sketchtoolが OS Xでしか動かないので、OS Xサポートがあるクラウド CIでしか動きません。Linux版出してくれればいいのになあ。

## 野望

### アートボードの公開
今回は iconの exportしかやってませんが、アートボードを出力することができます。すると Sketch3を持ってない人もそこを覗くことで最新のデザインの共有もできます。そこへのコメントをまた Github issueとかに乗せることによって、最初の段階で素早くフィードバックを得ることができます。

### 自動にアプリ本体への Pull Requestを作る
たとえば、developブランチとかをつくって、masterからそっちに mergeすると PNGを差し替える Pull Requsetを アプリ本体の Repositoryに送ってくれるとか。そうすれば Engineerが zipを持ってきてアプリ本体に mergeする手間が省けます

### アイコンを差し替えたアプリを自動的につくる
さらに一歩進んで、勝手にアプリを作ってしまうとか。そうすれば Desingerも Engineerに頼むことなしに実機でどんな見栄えになるか試せます。まあ、buildに時間がかかるのですぐにというわけには行きませんが。

## まとめ
今回は手始めに iconの exportだけやってみましたが、可能性は示せたでしょうか。

ただ、これを実際に回すにはいろいろ気配りが必要で、export時のファイル名を正しくつけるとか、conventionをまもるとか、ゴミアイコンを作らないようにするとか、Engineerとすり合わせないとならないことも増えます。Engineer間はそういう決まりを守るのは慣れてるし、それをサポートする IDEとかのツールもあるんですが Designerの世界ではどうなんでしょう。そこの温度差をのりこえつつ、前進できて DevCIを回せるといいなあ、といのでまとめに代えさせてもらいます。