1. nerd0geek1

    Posted

    nerd0geek1
Changes in title
+ Sketch Pluginの開発(開発編)
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,68 @@
+[こちら](http://qiita.com/nerd0geek1/items/8c7192a6c962e9ac9611)の記事の続きです。
+Sketch Pluginの前提知識が十分でない方はそちらを先に参照ください。
+
+今回は、
+
+- 環境構築
+- 開発
+- 配布方法
+
+を解説します。
+
+# 環境構築
+## お手軽セットアップ
+`Menu->Plugins->Custom Plugin...`を選択すると、
+![plugin.png](https://qiita-image-store.s3.amazonaws.com/0/33395/8fe8474f-c0e3-1823-bcc1-52970f32675d.png)
+以下の画面が表示され、Javascript編集画面と、その実行結果をその下のconsoleで確認できるようになります。
+<img width="692" alt="Screen Shot 2017-01-15 at 07.27.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/33395/8cd40b2f-9c57-ccd8-2634-163c54fdd2ed.png">
+
+## Editor連携
+Sketch Pluginを軽く書いてみたい場合は、上記の方法で良いかと思いますが、ガッツリと書く場合、自分の使い慣れたEditorを使いたくなるかと思います。
+その場合、以下のコマンドでEditorを切り替えることができます。
+(以下はatomの例)
+`defaults write ~/Library/Preferences/com.bohemiancoding.sketch3.plist "Plugin Editor" "/usr/local/bin/atom"`
+
+Sketch Pluginでは`print`や`log`でログを取ることができますが、
+外部Editor連携を行っている場合、その結果はconsole.appから確認することができます。
+(※注:以下はJavascriptの例。CocoaScriptの場合、`log/print`を`NSLog`に変更し、
+console.appでも`system.log`から`Devices`に表示される自分をPCを選択するように変更)
+
+```js:hello-world.js
+function onRun(context) {
+ log("onRun method started");
+ ...
+ print("onRun method finished");
+}
+```
+
+<img width="884" alt="Screen Shot 2017-01-22 at 15.43.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/33395/b78e2aa9-1814-fc7a-1162-a6ab034da0e5.png">
+(system.logを選択し、`Sketch`でフィルタリング)
+
+# 開発
+javascript or CocoaScriptで実装することができますが、どちらもそれほど資料がまとめられてはいませんので、
+既存のPluginのコードを読む形になると思います。
+
+今回は、[Sketch Color Palette](https://github.com/nerd0geek1/SketchColorPalette)という、
+選択されたShapeのbackgroundとnameから.clrファイルを生成するSketch Pluginを作成したのですが、
+NSColorやNSColorListにアクセスする都合上、CocoaScriptで記述しました。
+
+開発した感じとしては、Sketch内でおさまるのであればJavaScriptで書いたほうがやりやすいなー、という感想です。
+CocoaScriptはAppKitにアクセスできる点はいいのですが、IDEの補完が弱かったり、そこまで書きやすくはないという点でJavaScriptに軍配があがる感じではありました。
+
+# 配布方法
+開発元に確認したところ、
+GitHub上に[sketchplugins/plugin-directory](https://github.com/sketchplugins/plugin-directory)というリポジトリがあり、
+そのリポジトリ上で以下のいずれかの方法で知らせてくれれば良い、とのことでした。
+
+- READMEに自分の開発したPluginを含めてPR投げる
+- 自分の開発したPluginのURLを貼付したissueを起票する
+
+![plugin-directory.png](https://qiita-image-store.s3.amazonaws.com/0/33395/a7bef018-6ae7-0f22-7711-3cae4c539627.png)
+
+# まとめ
+実際作ってみると、色々とハマりはしましたが、既に多くのPluginが開発・公開されているので、そのコードを読み、既存の実装を組み合わせていけば、実装自体はそこまで難しくないかと思います。
+なので、デザイナーとのワークフローを開発したいと思っているのであれば、Sketch Pluginはかなりオススメです。
+
+# 参考
+- [Plugins, Scripts, and Commands - Sketch公式](http://developer.sketchapp.com/introduction/plugin-scripts/)
+- [Scripting Preferences](http://developer.sketchapp.com/introduction/preferences/)