先週に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
公開手順はgithub上にリポジトリを作っておいて、
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を使っている方はよろしければお使いください。