Garoonのスケジュール通知がmacOSではデフォルトで付いていなかったりして個人的に不便だったので、garoonのCLIツールをgolangで作ってみました。

tzmfreedom/goroon: Cybozu garoon library and command line interface by golang

使い方

macOSの場合はhomebrewでインストール可能です

goroonには現時点で3つのサブコマンドがあります

  • login
  • schedule
  • bulletin

ログイン

loginはその名の通り、garoonに対してログインのAPIを叩いてSessionIDを取得するAPIです。これを叩かなくても他のサブコマンドでクレデンシャルをオプション引数に入力してログインすることも出来るのですが、loginを予め叩いておくとSessionIDを保存してくれるので、scheduleやbulletinでクレデンシャルを叩かなくても良くなります。

以下のように叩けばOKです。

ENDPOINTはgaroonのエンドポイントベースURIで、grn.exeやgrn.cgiのパスまで入力します。このコマンドを叩くとendpointやログインによって取得したSessionIDをホームディレクトリの.goroonファイルに保存するため、以降のクレデンシャル入力は不要になります。

スケジュール

自分のスケジュールを日時を指定して取得する場合は以下のようにしてコマンドを叩けばOKです。

今日のスケジュールを取得したい場合は引数無しでscheduleコマンドを叩きます。

他のユーザのスケジュールも取得可能です。

掲示板

掲示板のフォローコメントを取得したい場合はbulletinサブコマンドを叩きます。

デフォルトは最新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)をデバッグできるように(リリースビルドではオプション削除しといいた方が良かったかな…)

参考URL