Mac純正アプリだけでタイムレコーダーを作るプロジェクトの第2回目に突入します。どうも、私(@saosaoyamayama)です。
前回は稼働開始前の下準備として、メモ.appへのページ追加や未完了タスクのコピペなどを自動化しました。
今回は打刻用のスタートボタン・ストップボタンを作ってまいります。「カレンダー.app」をタイムレコーダーとして使うわけです。仕事の所要時間(ラップタイム)も算出しますよ〜!
Contents
スタート・ストップボタン概要
今回は上図の2・3を作ります。
稼働1セットにつきカレンダーの予定を1つ作成する、というシンプルなスタイルです。たとえば9時〜11時、12時〜14時で稼働するなら予定が2つ追加されます。
私はフリーランスなので始業・終業時間は決まっておらず、中抜け・細切れで稼働することもあるので、1日何セット稼働してもラップタイム(開始〜終了の所要時間)が正確に取得できるように工夫しました。
- 開始ボタンを押下した時間〜3時間後までの予定作成
- 終了ボタンを押下したら終了時刻をボタン押下時間に変更
- 終了ボタンを押下したら予定タイトルに「-終了」を付ける
- 開始〜終了のラップタイムと時刻をカレンダーメモ欄に出力
- 開始〜終了のラップタイムと時刻を当日ページ(メモ.app)に出力
大まかな流れはこんな感じです。それではスタートボタン・ストップボタンに分けて解説しまーす。
スタートボタン作成
まずは、稼働開始時に押すスタートボタンのショートカットを作ります。スタートボタンはかなりシンプルです。
どのカレンダー(カテゴリー的な意味でのカレンダー)を使うか、決めておいてくださいね!
終了日用変数パーツ作成:変数1
カレンダー.appで予定を作成する時は、予定タイトルや日時・カレンダー(カテゴリーみたいなもの)などの指定が必要です。そのうちの1つである「終了日(終了時刻)」パーツを作成します。
終了時刻は「稼働開始の○時間後」で指定しますが、稼働してみなければわかりませんよね。なので適当でOKです。私は稼働開始から3時間後としました。
ここで使用するアクションは《日付を調整》です。とある日時を起点として○時間後・○分前などが算出できます。
今回は、ボタンを押す時刻(=「現在の日付」)に3時間を加算、です。
稼働開始打刻(予定作成)
カレンダーに予定を作成する時は《新規予定を追加》を使います。開始日は「現在の日付」、終了日は上で作った変数1です。
予定のタイトル(名前)には社名と日付を入れています。カスタムフォーマットを使って「社名-MM/dd」としました。カスタムフォーマット、便利っす……。
あとは必ず「表示を増やす」をクリックしてカレンダーを指定しましょう。今回は「リマインド」というカレンダーを指定しています。
ここで1つ注意点。
英語で始まるタイトルを付けると文字化けするようです。
当初「A社」という表記でテストショートカットを作っていたんですが、文字化けして数字に変換されてしまいました。
ただ、表示が化けるだけで「A社」で検索できるみたいですね(オススメはしない)。
ストップボタン作成
ストップボタンはちょっと複雑。以下の順に動きます。
- ボタンを押す
- 押した時刻を「終了日」に変更
- 予定タイトルに「-終了」を付ける
- 何分稼働したか計算
- 計算結果と時刻を予定メモ欄&メモ.appの当日ページに記入
画像右側が最終的な出力ゴールです。
予定ピックアップ〜ラップタイム計算
稼働進行中の予定を検索して終了時間を打刻、タイトルに「-終了」を付けてラップタイムを計算させます。
稼働記録中の予定を検索:変数1
スタートボタンで作成した予定を検索したいので《カレンダーの予定を検索》を使います。検索条件は画像を参考にしてください。
この時必ず「終了を含まない」という条件を入れるのがポイントです。
また予定の名前は「〜と一致」で検索したいところですが、うまく検索できなかったため「〜を含む(含まない)」を使いました。
予定を編集:変数3
《カレンダーの予定を編集》は予定の各項目を変更・修正する時に大活躍するアクションです。ここでは2つセットしましょう。
1つ目では、検索した予定(変数1)の終了日を「現在の日付」に書き換えます。これで稼働開始〜終了の時刻が確定しますね!
2つ目はタイトルの編集です。こちらはカスタムフォーマットを使って「社名-MM/dd-終了」に変更します。
ラップタイムを計算:変数4
確定した開始時刻・終了時刻からラップタイムを計算しましょう。ここでは《日付間の時間を取得》を使います。
終了時刻確定済みの予定を使う必要があるので、私は変数3の開始日・終了日をセットしました。
稼働時間を算出する時に「秒」を含めて計算するならフォーマットナシでOKです。しかし「秒は切り捨て」とするなら以下にご注意を。
秒を含めずにラップタイムを計算するなら、必ず「HH:mm」にフォーマットしましょう。
というのも、フォーマットしないと1分単位で計算がズレてしまいます。
こちらの画像、稼働は5分間のはずなのに、6分になっています(★6★)。1分ズレていますよね……。
原因は「秒」を加味して計算しているからです。
フォーマットを複数試した結果、「HH:mm」なら正確に計算してくれることがわかりました。日付は不要です。
貼り付け用テンプレ作成〜各所に貼り付け
計算したラップタイムを、予定のメモ欄・メモ.appの当日ページに記入するショートカットです。
わざわざラップタイムを記録する理由は、何かミスが出た時にチェックしやすいから。たとえば先ほどの1分のズレとかですね。説明はややこしいので省きます。
貼り付けテンプレート作成:変数5
《テキスト》を使って、貼り付けテンプレを作りました。
ポイントは稼働時間を「★」で囲むこと! のちのち役に立ちます。あとは稼働開始と終了を「〜」で繋ぎました。フォーマットは日付ナシで時間は「短」です。
テキストを各所に貼り付ける
作成したテキスト(変数5)をカレンダーのメモ欄・メモ.appの当日ページに貼り付けます。
まず、カレンダーについては《カレンダーの予定を編集》を使い、予定(変数3)の「メモ」にテキスト(変数5)を貼り付ければOK。
最後にメモ.appで当日ページを検索(変数6)し、テキスト(変数5)を貼り付けましょう。テキストのフォーマットは不要です。
ラップタイムはページの最下部にペーストされます。
いろいろと書き込みをしてあっても、複数回稼働した場合でも「ボタンを押した時点」のページ最下部にペーストされる形です。
次回は集計ショートカットを3つ作ります!
これで無事、タイムカードの「打刻」機能が実装できましたね!
次回はいよいよ、1日の稼働終了時に使う報告書出力用ショートカット作成に入ります。あと2回で完結ですよ〜!
うまく動かない・もう少し詳しく聞きたい……などあれば、お問い合わせからご連絡いただくか、X(@saosaoyamayama)のDMでご連絡くださいませ。