やばい、月末なのに勤怠登録できてない!となった時にmacでワンクリックでジョブカン登録自動化した話(非エンジニア)
月末時点で勤怠の登録全然やってねぇってことありませんか?
私は割とあります(駄目)
ちゃんと毎日勤怠をつけましょう(大事)
とはいえ、毎日業務に追われているとついつい忘れがちな勤怠登録、
月末などで忙しい時にまとめてやるの、大変ですよね。
こうなった時に、出勤日全部ガーッと勤怠を登録してくれる人がいればいいのにな、と思うわけです。
よし、作りましょう。
macbookのapple scriptさんに頼む
今回私が使用している環境は、macbook proですので、
申し訳ないですがwindowsの方向けではございません、、、
macをお使いの方で、apple scriptをご存知の方、どれだけいらっしゃるのでしょうか?
私は10ヶ月くらい現職で使っていますが、最近知りましたw
そんなapple scriptさんにコードを書いて、
勤怠入力のフル自動化をしていただこうと思います。
apple scriptを起動する
applescriptは、Launch pad上の「スクリプトエディタ」から起動できます。
起動したら、下のようなまっさらな画面が出てくるので、
ここにコーディングしていきます。
ちなみにですが、私はプログラマではないのでこういったことが得意なわけでもなんでもありません。
試行錯誤しながら動くものを作れるといったことも感じていただければ幸いです
今回やりたいこと
ジョブカンの勤怠入力の、勤務開始時間、休憩開始時間、休憩終了時間、勤務終了時間を自動入力したい
自動入力の日付は休日を除くなど、事前に指定した日付のみ実行したい
ここから、実際にやったやり方を記載していきますが、「過程はええから結果だけ見せんかい!」という方は末尾まで読み飛ばしてください^^
実際のコーディング作業
勤怠入力画面を起動する
まず、勤怠を入力する画面を開きます。
すると、ページのURLが以下のようになっていたことがわかりました。
年と日がURL上にあるわけですね。
ではこの日付を、スクリプト上で弄れば、登録したい日付を指定できるやん!
という発想になります。
ここで、スクリプトの一番初めにURL情報を記載します
Safariを起動する
「https://」から「day=」までを、URLのヘッダとして変数「theURLHeader」に登録する
登録したい日付を{}の中に、コンマ区切りで日付を入れ、変数theDayに登録する
tell application "Safari"
set theURLHeader to "https://〜〜〜〜〜〜URL〜〜〜〜〜〜〜?year=2022&month=12&day="
set theDay to {11,12,13,14,15}
end tell
ここで使う{}はリストと呼ばれ、いろいろな設定値を複数持てるもの、とざっくり理解してもらえればと思います。
例えば、りんごとみかんといちごを買うとして、それを買い物リストに設定する場合は
set 買い物リスト to {"りんご","みかん","いちご"}
みたいになるわけです。(文字情報を””で括るのはお約束と思っておいてください)
これで、勤怠を登録したいURLをプログラム上で呼び出せるようになりました。
設定した日付ごとのURLを繰り返し開いていくコード
上記で設定したURLを、一つずつ開いていくコードを書きたいと思います。
出来上がったものがこちらです。
repeat with a from 1 to length of theDay
set thetourokubi to item a of theDay
set theURL to theURLHeader & thetourokubi
open location theURL
end repeat
まず、考える順序としては(コーディング未経験者としては)以下の順序で考えました
「変数theDay」に登録した日付を、一番左のものから一つだけ取り出したい
一つだけ取り出したら、「変数theURLHeader」とくっつけてURLを完成したい
完成したURLを開きたい
ます、「「変数theDay」に登録した日付を、一番左のものから一つだけ取り出したい」ですが、repeat withという機能を使えばいけそうとわかりました。
repeat with a from 1 to length of theDay
〜ここにURLを開く機能を書く〜
end repeat
ここでは、まずtheDayの項目の数を「length of theDay」で取得します。
上の方に書いたtheDayの数は{1,2,3,4,5}だったので、「5」になりますね。
で、「repeat with a from 1 to 5」となります。
そこから、動きとしては、
aに1を入れて、end repeatまでの機能を実行し、
次にaに2を入れて、end repeatまでの機能を実行し、
次にaに3を入れて、end repeatまでの機能を実行し、
次にaに4を入れて、end repeatまでの機能を実行し、
次にaに5を入れて、end repeatまでの機能を実行する
ということになります。
で、次はrepeatの中身で実行する、「URLを決める機能」を作ります
set thetourokubi to item a of theDay
set theURL to theURLHeader & thetourokubi
open location theURL
「set thetourokubi to item a of theDay」のところでは、
theDayのa番目にある項目を「変数thetourokubi」に設定します。
リピート1回目だと、a=1なのでリストの1番目の項目である「11」が持って来られますね。
「set theURL to theURLHeader & thetourokubi」のところで、
theURLHeaderと日付をくっつけ、実際に開きたいURLを「変数theURL」に設定し、
「open location theURL」でそのURLを開きます。
なのでここまでのコードでは、
tell application "Safari"
set theURLHeader to "https://~~~~~~~URL~~~~~~~~?year=2022&month=12&day="
set theDay to {11,12,13,14,15}
repeat with a from 1 to length of theDay
set thetourokubi to item a of theDay
set theURL to theURLHeader & thetourokubi
open location theURL
end repeat
end tell
上のようになり、11日から15日までのジョブカンURLを連続して開いていくことが実装できました。(ここらへんで実際に動かして動きを見たりしています。)
では、ここからそれぞれの日付でURLを開いた後に、画面上で期待時間の入力と登録を行う機能を書いてみたいと思います
勤怠画面上の処理を書く
ここでもう一度、下の画面上でやりたいことを洗い出してみます。
「時刻」のところに、「0900」を入力
「打刻ボタン」を押す
「時刻」のところに、「1200」を入力
「打刻ボタン」を押す
「時刻」のところに、「1300」を入力
「打刻ボタン」を押す
「時刻」のところに、「1800」を入力
「打刻ボタン」を押す
ここで記載したコードは以下のようになりました。
時刻の入力箇所に、「0900」を登録する
do JavaScript "document.getElementsByClassName('form-control w-auto jbc-form-control')[1].value='0900'" in document 1
打刻ボタンを押す
do JavaScript "document.getElementsByClassName('btn jbc-btn-secondary')[0].click()" in document 1
ややこしい!!!と思う人も少なくないと思いますw
ですが動けばいいんです、動けば。(あくまで個人利用で自分の責任で!)
簡単にですが、解説していきます。
時刻の入力箇所に、「0900」を登録する
do JavaScript "document.getElementsByClassName('form-control w-auto jbc-form-control')[1].value='0900'" in document 1
ここでは、まずJavascriptを使いますよ、という宣言として「do JavaScript」と書き、実行内容を””の中に記載します。
そして、「document.getElementsByClassName(”とあるclass”)[1].value='0900'」で開いている画面上の、とあるclassを選択し、0900を入力します。
勘のいい人はお気づきかと思いますが、ここで画面上の時刻を入力するテキストボックスを「とあるクラス」として検索して時刻入れるんですね。
では、classの検索の仕方ですが、画面上で時刻のテキストボックスを右クリックし、「要素の詳細を表示」を押します。
すると、以下のような画面が出ています。
ここでは画面上の構成アイテムの見え方を定義している(と私は思っている)ので、
時刻の部分がどれに該当しているのかをカーソル動かしてチェックし、「class=""」の中身を持ってくるイメージですね。
同様の作業を、打刻ボタンを押す操作でも対応します。
押す操作は.click()で実行できるようです
打刻ボタンを押す
do JavaScript "document.getElementsByClassName('btn jbc-btn-secondary')[0].click()" in document 1
自動勤怠登録プログラムの完成!
ここまでの情報で、
safariで指定した日付の勤怠入力画面を開く
打刻時間を入力する
打刻ボタンを押す
を実装できました。完成したものがこちらです。
(所々、delayという、待ち時間を定義するものを入れています。スクリプトの操作が早すぎてsafariが追いつかないのを防いでいます)
tell application "Safari"
set theURLHeader to "https://〜〜〜〜〜〜URL〜〜〜〜〜〜?year=2022&month=12&day="
set theDay to {11,12,13,14,15}
repeat with a from 1 to length of theDay
set thetourokubi to item a of theDay
set theURL to theURLHeader & thetourokubi
open location theURL
delay 3
do JavaScript "document.getElementsByClassName('form-control w-auto jbc-form-control')[1].value='0900'" in document
delay 0.5
do JavaScript "document.getElementsByClassName('btn jbc-btn-secondary')[0].click()" in document
delay 1
do JavaScript "document.getElementsByClassName('form-control w-auto jbc-form-control')[1].value='1200'" in document
delay 0.5
do JavaScript "document.getElementsByClassName('btn jbc-btn-secondary')[0].click()" in document
delay 1
do JavaScript "document.getElementsByClassName('form-control w-auto jbc-form-control')[1].value='1300'" in document
delay 0.5
do JavaScript "document.getElementsByClassName('btn jbc-btn-secondary')[0].click()" in document
delay 1
do JavaScript "document.getElementsByClassName('form-control w-auto jbc-form-control')[1].value='1800'" in document 1
delay 0.5
do JavaScript "document.getElementsByClassName('btn jbc-btn-secondary')[0].click()" in document 1
delay 1
end repeat
end tell
これで、登録したい出勤日をtheDayに入れれば後は自動でゴリゴリ登録してくれます。
まとめ
apple scriptを使うことで、比較的簡単なコードで作業を自動化することができました。
ちょっと苦戦するところもありましたが、なんとか動くものを初心者でも作れるので、ジョブカン使っていない方もぜひチャレンジしてみてください!!
最後に
勤怠は毎日つけましょう!!!!!