hubot-scriptを公開する方法(npm編)

hubot-scripts Advent Calendar 2013の7日目の記事になります。
6日目は hubotで突然の死に備える でした。

hubot-scriptの公開

hubot-scriptを書いていて、これを一般にも公開してみたいなと思う瞬間はありませんか?
先日作った>突然の死<ですが、現場でも好評(?)をいただいており練習も兼ねて公開してみることにしました。

ただしこの日本のネット文化丸出しのスクリプトが本家のスクリプト群に取り込んでもらえるとは到底思えません。
そこで、単独でnpmへ公開する方法をとることにしたので、インストール方法と合わせて紹介したいと思います。

今回実際に公開したものは以下になります。

hubot-suddendeath

https://npmjs.org/package/hubot-suddendeath

公開するための準備

公開を行うにあたりディレクト構成は以下のようにしておきます。

hubot-suddendeath/
|-- README.md
|-- index.coffee
|-- package.json
`-- scripts
    `-- suddendeath.coffee

まずpackage.jsonを用意しましょう。
npmへの公開には必須となります。
手で書くこともできますが、package.jsonを対話的に作成するnpm initというコマンドもあります。

$ cd hubot-suddendeath
$ npm init

一度npm initで作ってからエディタで微調整を行うのがいいかもしれません。
詳しい項目の解説はこちら(英語)を参照してください。
今回の例でいうと、mainとdependenciesが正しく設定されていれば他は割とどうでもいいかと思います。

package.jsonができあがったらエントリポイント(packeage.jsonでいうmain)となるindex.coffeeにスクリプトをロードさせるためのモジュールを書いておきます。

Fs   = require 'fs'
Path = require 'path'

module.exports = (robot) ->
  path = Path.resolve __dirname, 'scripts'
  Fs.exists path, (exists) ->
    if exists
      robot.loadFile path, file for file in Fs.readdirSync(path)

robot.loadFileにパスを渡すとhubotがスクリプトを読み込んでくれます。
ひとまずこれで公開できる形にはなりました。

公開する

npmに公開するにあたって、まずnpm専用のアカウントを取得する必要があります。
アカウントの登録は公式サイト上で行うことができますが、コマンドからでも登録は可能なのでこちらの方法を使います。
以下のコマンドを叩くとユーザ名やパスワード、メールアドレスを求められるので適宜入力してください。

$ npm adduser

アカウントの登録が完了したらpackage.jsonの置いてあるディレクトリ上で

$ npm publish

を行うだけで公開が完了します。
お手軽ですね!

$ npm search hubot-suddendeath

で実際に登録されたかどうか確認できます。

またバグ修正などでスクリプトに変更を加えた場合は、再度npm publishを行うことで更新内容が反映されます。
ただしpackage.jsonのversionを上げておく必要があるのでご注意ください。

公開したスクリプトをインストール

本家が公開しているhubot-scriptsは通常、npm install後にhubot-scripts.jsonに使用するスクリプト名を指定して読み込みを行います。

$ npm install hubot-scripts
$ echo '["redis-brain.coffee", "tweet.coffee", "shipit.coffee"]' > hubot-scripts.json

では外部モジュールの場合はどうするかというと、external-scripts.jsonという仕組みが用意されていて、そこにモジュール名を記述することでスクリプトが利用できるようになっています。

$ npm install hubot-suddendeath
$ echo '["hubot-suddendeath"]' > external-scripts.json

あとはhubotを再起動して好きなだけコマンドを打ってみましょう。

まとめ

npmへの公開はとても簡単に行えます。
本家のhubot-scriptsにプルリクを投げるのはなんか怖いという方もまずはこの方法から始めてみては如何でしょうか?

また自分以外にもたくさんの人がこの方法でhubot-scriptを公開していますので面白い/役に立つスクリプトを是非探してみてください。