はじめに
新型コロナウイルスのため在宅勤務が基本となりましたが、お互いの状況がわからないとのことで、irucaという在席管理ツールを使うようになりました。
【iruca】
https://iruca.co/
ただ、こういったツールは適切に更新されることで正しく運用できます。
逆に言うと更新漏れが起こるとツールの活用が不十分とも言えます。
そのため、更新漏れが起こらないよう機械的に更新できないか検討してみました。
実施したこと
Windows標準のタスクスケジューラを活用して、ログイン時にirucaのステータスを更新するbatファイルを起動させるものです。
irucaはAPIを提供しているため、外部からの更新が可能です。今回はそれを利用してます。
【irucaのAPIドキュメント】
https://iruca.co/api
PowerShellでirucaのAPIを呼び出すスクリプトを作成、batファイルでPowerShellを稼働させ、タスクスケジューラでそのbatファイルを稼働させる、といった流れです。
作成したもの
前述の通り、PowerShellとbatファイルを作成しました。
APIを呼び出すPowerShell
irucaのステータスを「在席」にするのと、ひとことを「mm/dd 在席中」とするようにputメソッドでirucaの情報を更新するスクリプトにしています。
<# irucaの固定パラメータ #>
# ルームコード
$room_code = 'irucaのルームコード'
# APIトークン
$api_token = 'ルームに設定されているAPIトークン'
<# 個人別可変パラメータ #>
# 更新対象のメンバーID
$member_id = 'メンバーID'
# 更新するステータス
$status = '在席'
# 更新するメッセージ(現在日付取得→文字列形成)
$month = (Get-Date).Month
$day = (Get-Date).day
$message = "$month/$day 在席中"
<# API設定 #>
# メンバー情報更新APIのURL生成
$uri = "https://iruca.co/api/rooms/$room_code/members/$member_id"
# リクエストヘッダーの生成(あいことば設定ありの場合)
$headers = @{ 'X-Iruca-Token' = $api_token }
# パラメータ設定
$body = [System.Text.Encoding]::UTF8.GetBytes('{"status": "' + $status + '","message": "' + $message + '"}')
# API実行(PUT)
Invoke-RestMethod -Method PUT -Uri $uri -Headers $headers -Body $body -ContentType 'application/json'
PowerShellを採用した理由
わざわざPowerShellで作成しなくても、batファイル単体でもできなくはないです。
ただ、iruca APIではJSON形式でやり取りをする関係から、コマンドプロンプトで実行した場合、JSONが扱える(文字化けしない)ようにするにはjqコマンドをインストールしないといけないようでした。
会社の環境では勝手に追加インストールができないので、jpコマンドを必要としないPowerShellを採用しました。
タスクスケジューラで起動させるbatファイル
前述のPowerShellをbatファイル内で起動するようにしています。
わざわざbatファイル経由ではなく、PowerShellファイルを単体で起動させた方がシンプルなのですが、PowerShellファイルを自由に起動できないよう制限が設けられているようです。
そのため、batファイル内で一時的に実行ポリシーを変更してPowerShellファイルを起動させてます。
@echo off
REM irucaのステータスを更新するツール
echo irucaを更新しています。
powershell -NoProfile -ExecutionPolicy Unrestricted .\iruca.ps1
echo 更新完了しました
exit
タスクスケジューラの登録
基本的にはこちらを参考にして登録してます。
【タスクスケジューラの設定内容の詳細】
https://jm1xtk.dip.jp/cnt/109_task/index.php
今回はログオン時にbatファイルを起動させたいので、トリガーを「ログオン時」にしてます。
タスクスケジューラの登録の際、注意しなければいけないポイントとしては、batファイル内で稼働させるpowershellが相対パスで指定されてるため、作業フォルダの指定が必要になります。
【タスクスケジューラに登録したバッチがうまく実行できない時に確認すること】
http://sogohiroaki.sblo.jp/article/178281845.html
まとめ
毎日のルーチン作業であるからこそ、漏れやゆるみが出てしまい、ツールの形骸化が生まれてしまいます。
また、同じことであるならば日々それに費やす時間がもったいないものです。
ささいなことでも自動化できれば適切に続けられるので、APIが提供されているものは積極的に活用していければチーム運営が良くなると思います。
参考リンク
- PowerShell を使用して GET, POST, PUT のリクエストを行う
- PowerShellのPS1ファイルの作成と実行
- curl/PowerShellでHTTPアクセスいろいろ
- Powershellを楽に実行してもらうには
- タスクスケジューラからのBat起動が失敗する際の対処