Twitter
ATOM
Coffescript

AtomパッケージのTips

More than 3 years have passed since last update.


Twitter Client for Atom

すみません、最初に宣伝です。Atom向けTwitterクライアントをリリースしました。

atom-twitter-client

A screenshot of your package

よかったら使ってみてください。

※ ただし、atom/atom#1783があるので日本語でのツイートに若干の難ありです。

Atomパッケージを作るのは初めてだったので、その所感とTipsをつらつらと書いてみます。


ドキュメント

本家ドキュメントはそれなりにしっかりしているので最初に目を通すと良いかと思います。

ただ、ちょっと突っ込んだことしようとするとこれだけではこと足りなくなります。その場合、他の人のパッケージが参考になります、自分の実現したいUIや機能に近いパッケージを探してそのソースを読むのが近道です。参考になるパッケージの例としては:

多分他にもあるはず、ただこの他人のパッケージを参考にするという方法にも限界があります。まず、本家のAPIの変遷が早すぎて半年前のパッケージでも参考にできないことが多々あります。後、本家のパッケージ検索が若干使い辛くて、参考にしたいパッケージが見つかりにくいという難点もあります。

最後の手段として、やっぱり本家のソースを読むことになります。

正直、頑張ってググるより最初からソース見に行ったほうが解決は早いと思います(残念ながらAtomは非常に検索効率が悪いので…)。

あと、Electronのドキュメントとソースも読んでおいたほうが効率が上がります。


HTML5とかNode.jsとか

atom-twitter-clientではアカウント情報の記憶にIndexedDBを使っています。

なにせChromiumベースなのでHTML5等の最新の機能は使いたい放題です。

あと、普通にNode.jsのAPIも使えます。

普段レガシーなブラウザ相手にJavaScript書いている人にとっては、互換性考慮せずに好き勝手に最新機能をCoffeeScriptで実装できるのは結構ストレス発散になるのでお勧めです。


Publish前後の違い

一番困ったのがこれです。

レジストリにPublishする前と後でパッケージの挙動に差分があり、初めてPublishした後、Tweetの検索機能が動かなくなってしまっていました。

初めてPublishしたとき、package.jsonのdependenciesの各モジュールについてバージョンを縛り忘れていた(*を指定していた)のですが、dependenciesのモジュールの中にAtomのcoreが内包しているものと同じモノがある場合、*をしているとAtom core側のモジュールが利用される仕組みになっているようでした。

自分の場合、requestモジュールを利用しているが、Publishしたパッケージを利用した時のみ若干古いrequestモジュールで動作しようとして動かなくなってました。Publishする前とした後にインストーラから落としたソース自体には変な差分は見受けられなかったので、結構原因に行き着くのに時間がかかってしまいました。

基本ですが、package.jsonのdependenciesにはちゃんとバージョン番号を指定したほうが無難なようです。


テスト

specディレクトリ配下にサフィックスが-spec.coffeeになっているファイルを配置しておくと、メニューの[View] -> [Developer] -> [Run Package Specs]でテストが実行されます。自分で色々下準備する必要がないので楽ちんです。

テスティングフレームワークは現時点ではJasmineの1.3が使われています。なので1.3のJasmineのドキュメントを参照してテストがかけます。

ただし、setTimeoutsetIntervalを多用するパッケージの場合注意が必要です。本家のspec-helperがココらへんの関数をモックして回っているので、Jasmineのドキュメントを読むだけでは理解できない挙動をします。自分の場合jasmine.useRealClock()メソッドを使ってココらへんのモックを解除して回避しました。


最後に

なんか文句多くなっちゃいましたが、Atomのパッケージ作るのは楽しいです。

「自分の作業環境は自分で良くしよう」みたいなemacs根性を端々に感じるし、若干ドキュメントが不足しているがそれゆえに他人のソース読んで理解できる部分も多いし、後、もともとかっこいいUIに合わせて自分のパッケージもかっこよくUI組めたら楽しいし、githubベースだから基本オープンでpublishしたら速攻でissue飛んでくるし…繰り返しになりますが、仕事効率化を名目に遊べるストレス発散措置としてはemacsなみに楽しいです。