先日書いたこの記事のとおり。Macで動く伺か環境を作ったら、勢い余ってGruntプラグイン作っちゃいました。
grunt-sstp - https://www.npmjs.org/package/grunt-sstp
さくらさんが可愛いので仕方なかったんです。
使い方
$ npm install grunt-sstp --save-dev
npmコマンドでインストールして。
grunt.initConfig({
sstp: {
options: {}
}
})
// Load task
grunt.loadNpmTasks('grunt-sstp');
// run sstp notify
grunt.task.run('sstp');
Gruntfile.jsに追加するだけです。
さくらスクリプトを自分で書く
一応、自分でさくらスクリプトを書けないとおもしろくないので、いくつか受け口を作りました。
さくらスクリプト用のビルダーは誰か作ってくれると信じてる。
options.success
タスクが成功したときに実行するスクリプトです。
sstp: {
options: {
success: 'NOTIFY SSTP/1.1\n\
Sender: grunt-sstp\n\
Script: \\\\0\\\\s[5]タスクの実行に成功したよ\\\\1\\\\s[10]良かったな\\\\e\n\
Option: nodescript,notranslate\n\
Charset: UTF-8'
}
}
options.warning
タスクで警告が発生したときに実行するスクリプトです。
sstp: {
options: {
warning: 'NOTIFY SSTP/1.1\n\
Sender: grunt-sstp\n\
Script: \\\\0\\\\s[5]警告を発生させたよ\\\\1\\\\s[10]問題ないな\\\\e\n\
Option: nodescript,notranslate\n\
Charset: UTF-8'
}
}
options.error
タスクでエラーが発生したときに実行するスクリプトです。
sstp: {
options: {
error: 'NOTIFY SSTP/1.1\n\
Sender: grunt-sstp\n\
Script: \\\\0\\\\s[5]エラーを発生させたよ\\\\1\\\\s[10]テストだから気にするな\\\\e\n\
Option: nodescript,notranslate\n\
Charset: UTF-8'
}
}
options.fatal
タスクがFatal Errorが発生したときに実行するスクリプトです。
sstp: {
options: {
fatal: 'NOTIFY SSTP/1.1\n\
Sender: grunt-sstp\n\
Script: \\\\0\\\\s[5]致命的なエラーを発生させたよ\\\\1\\\\s[10]テストとはいえビックリするな\\\\e\n\
Option: nodescript,notranslate\n\
Charset: UTF-8'
}
}
options.command
警告、エラー、Fatal Errorが未定義のとき実行するスクリプト定義です。
sstp: {
options: {
command: 'NOTIFY SSTP/1.1\n\
Sender: grunt-sstp\n\
Script: \\\\h\\\\s[0]タスクの実行をしたよ\\\\w9\\\\u\\\\s[11]失敗してるぞ\\\\w9\\\\w9\\\\h\\\\s[4]\\\\n\\\\nええー\\\\e\n\
Option: nodescript,notranslate\n\
Charset: UTF-8',
}
}
SSTP+さくらスクリプトの仕様
自分が実装にあたって参考にしたページです。
Sakura Script Transfer Protocolで通信するのに必要な仕様
http://usada.sakura.vg/contents/sstp.html
さくらスクリプトを書くのに必要な仕様
http://usada.sakura.vg/contents/shiori.html
表情の変更に必要な仕様
http://usada.sakura.vg/contents/shell.html
地味にリンクが死んでるので、なかなか必要な情報を漁りづらいです。
でも、表情を変え出すと楽しさ倍増です。頑張って情報を漁ってください。
作った感想
今回は初めてのNodeJS & Gruntプラグイン作りだったので苦労するかと思ったけど以外にあっさり作れました。
ソケット通信+Gruntのフックみたいなことをやって、だいたい1日かからないぐらいでした。
$ npm install -g generator-gruntplugin
$ yo gruntplugin
今回はyeomanさんのジェネレーターからひな形を作成しました。
最初の構成に迷ったらyeomanさんの出番ですね。
最初の構成ができたら、あとは機能に合わせてコーディングして、npm publish
して上げれば良かったです。
実装で難しかったのはGruntのフック周りでしたが、grunt-notifyリスペクトです。先人のいる分野は助かります。
便利レベルで使ってた自分がgrunt-notifyの中の実装を完璧理解できるようになったレベルでリスペクトです。ありがとうございます。
あと、テストをgrunt.util.spwan
でタスクを呼び出して、その結果と通信内容の確認と、大味なテストにしたのでカバレッジが取得できないという事態に。。。
ソケット通信したり、Gruntの処理をフックするようなときのテストの書き方がさっぱりわからないです。
この辺り、良い書き方があれば、ぜひ教えてください。
ついでに最初はnodeunitでテストを書いてましたが、途中でmochaとchaiに切り替えました。
nodeunitがダメというより、mochaとchaiはテストを綺麗に書けて凄い楽しいです。
たぶん、気が向いたらまた伺か関係のおもちゃ作ると思います。
次は何を作るとおもしろいかなぁ。