GruntJSで伺かを操作するgrunt-sstpを作った

  • 20
    Like
  • 0
    Comment
More than 1 year has passed since last update.

先日書いたこの記事のとおり。Macで動く伺か環境を作ったら、勢い余ってGruntプラグイン作っちゃいました。

grunt-sstp - https://www.npmjs.org/package/grunt-sstp

さくらさんが可愛いので仕方なかったんです。

うにゅう_and_うにゅう_and_さくら_and_さくら.png

使い方

$ 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'
    }
  }

うにゅう_and_うにゅう_and_さくら_and_さくらsuccess.png

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'
    }
  }

うにゅう_and_うにゅう_and_さくら_and_さくらwarning.png

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'
    }
  }

うにゅう_and_うにゅう_and_さくら_and_さくらerror.png

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'
    }
  }

うにゅう_and_うにゅう_and_さくら_and_さくらfatal.png

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',
    }
  }

うにゅう_and_うにゅう_and_さくら_and_さくらcommand.png

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でテストを書いてましたが、途中でmochachaiに切り替えました。
nodeunitがダメというより、mochaとchaiはテストを綺麗に書けて凄い楽しいです。


たぶん、気が向いたらまた伺か関係のおもちゃ作ると思います。
次は何を作るとおもしろいかなぁ。