先週にpublic betaが始まったgithub製のエディタのAtomを使ってみたので、旬な内にパッケージ (他のエディタでいうところの拡張とかプラグインとか)を作ってみました。 公式ドキュメントが充実しており、開発が活発(バージョンも毎日にようにあがっている)で変化も大きそうですので、ちゃんと触りたい方はそれを読んだほうが良いと思いますが、雰囲気を知りたい人向けの解説を書いてみました。
Atomのエディタとしての基本的な使い方は、次のリンクをどうぞ http://qiita.com/spesnova@github/items/d3096d062d70e7385e9d
Invite権もまだ残っているので、欲しい方は@stanakaまでmentionしてみてください。→権利終了しました
パッケージ作成の基本
パッケージ作成の基本は、次の二つの公式ドキュメントを読むと分かります。 - https://atom.io/docs/v0.64.0/creating-a-package - https://atom.io/docs/v0.64.0/your-first-package
特徴をざっと並べると次のようなものです。 - coffee scriptでnode.jsのmoduleとして書く - activate, serialize, deactiveのメソッドを用意する (後ろの2つはoptional) - activateのところで、コマンドに対応するメソッドの登録などを行う - package.jsonがパッケージのメタデータで名前やらバージョンやら依存ライブラリやらを記述する - スタイルシートやキー/メニュー設定もここに記述
開発者向けエディタだけあって、プログラミング言語のサポートも標準であり、syntax-highlightも実装しやすくなっています。
カーソル上の単語をDash.appで検索するためのパッケージを書いてみたのですが、本体のコードはコンパクトにあっさりと書けました。
module.exports = activate: (state) -> atom.workspaceView.command "dash-on-cursor:open", => @open() open: -> editor = atom.workspace.getActiveEditor() return unless editor? token = editor.tokenForBufferPosition(editor.getCursorBufferPosition()) return unless token?.value grammar = editor.getGrammar() docsets = grammar2docsets[grammar.name] if grammar if docsets shell.openExternal("dash-plugin://keys=#{docsets}&query=#{token.value}") else shell.openExternal("dash://#{token.value}")
またパッケージの雛形も「Package Generator: Generate Package」で生成されますので、書き始めもイージーです。テストも標準でサポートされており、モダンですね。
標準機能の多くもパッケージとして実装されており、 https://github.com/atom で公開されいます。こういう機能はどう実装すればいいのかな、と悩んだ時に参考になります。
パッケージを公開する
Atomにはapmというパッケージを触るためのコマンドが付いてきて、それで簡単に公開することができます。これも詳細は次の公式ドキュメントを参照してください。 - https://atom.io/docs/v0.64.0/publishing-a-package
apm public minor
とするだけで公開されます。
実行結果は次のようになります。
% apm publish minor GitHub Username or Email> stanaka Password> Saving token to Keychain ✓ Registering dash-on-cursor ✓ Preparing and tagging a new version ✓ Pushing v0.1.0 tag ✓ Publishing dash-on-cursor@v0.1.0 ✓ Congrats on publishing a new package! Check it out at https://atom.io/packages/dash-on-cursor
実行するとこんなコミットとタグの付与が自動的に行われます。 https://github.com/stanaka/dash-on-cursor/commit/07643903b7e5a3129c269b04d50123e9c694dfc0
githubのidとパスワードの入力が求められるので、ちょっとヒヤッとしますが、version番号の管理までされるのは便利です。
というわけで、カーソル上の単語をDash.appで検索するためのパッケージを公開してみました。 https://atom.io/packages/dash-on-cursor
DashとAtomを使っている方はよろしければお使いください。