Garoonのスケジュール通知がmacOSではデフォルトで付いていなかったりして個人的に不便だったので、garoonのCLIツールをgolangで作ってみました。
tzmfreedom/goroon: Cybozu garoon library and command line interface by golang
使い方
macOSの場合はhomebrewでインストール可能です$ brew tap tzmfreedom/goroon
$ brew install goroon
goroonには現時点で3つのサブコマンドがあります
- login
- schedule
- bulletin
ログイン
loginはその名の通り、garoonに対してログインのAPIを叩いてSessionIDを取得するAPIです。これを叩かなくても他のサブコマンドでクレデンシャルをオプション引数に入力してログインすることも出来るのですが、loginを予め叩いておくとSessionIDを保存してくれるので、scheduleやbulletinでクレデンシャルを叩かなくても良くなります。以下のように叩けばOKです。
$ goroon login -u {USERNAME} -p {PASSWORD} -e {ENDPOINT}
ENDPOINTはgaroonのエンドポイントベースURIで、grn.exeやgrn.cgiのパスまで入力します。このコマンドを叩くとendpointやログインによって取得したSessionIDをホームディレクトリの.goroonファイルに保存するため、以降のクレデンシャル入力は不要になります。
スケジュール
自分のスケジュールを日時を指定して取得する場合は以下のようにしてコマンドを叩けばOKです。$ goroon schedule --start "{yyyy-MM-dd HH:mm:ss}" --end "{yyyy-MM-dd HH:mm:ss}"
今日のスケジュールを取得したい場合は引数無しでscheduleコマンドを叩きます。
$ goroon schedule
他のユーザのスケジュールも取得可能です。
$ goroon schedule --userid {USER_ID}
掲示板
掲示板のフォローコメントを取得したい場合はbulletinサブコマンドを叩きます。$ gorooon bulletin --topic_id {TOPIC_ID}
デフォルトは最新20件なので、20件以上取得したい場合や、オフセットを変更したい場合は -o {OFFSET}
や -l {LIMIT}
のオプションを追加すればOKです。
実装について
- 実装言語は、マルチプラットフォームやバイナリ一つで動くのが魅力的だったのでgolangを採用。
- CLIのフレームワークはurfave/cliを使用。
- golangでWSDLからSOAPクライアントを作成するツールを使って楽をしようと思ったが、gowsdlはgaroonのWSDLの形式に対応していなかったので、自前で構造体を定義してMarshal/Unmarshal
- Makefileは以下を参考に作成。homebrew自動更新のmakeタスクも入れた。
- パッケージ管理はglideで。
- libraryとcliはディレクトリを分けて切り離し、ライブラリは個別に利用できるようにした。
- HTTPテストのモックはgopkg.in/h2non/gock.v1を利用。
- 開発用としてデバッグオプションを追加し、HTTPリクエスト(SOAP)をデバッグできるように(リリースビルドではオプション削除しといいた方が良かったかな…)