Github製エディタAtomでパッケージを作ってみた

先週に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を使っている方はよろしければお使いください。