この記事はオルターブース2025年のアドベントカレンダーの9日目の記事です🎄
こんにちは!オルターブースのレアキャラとなりつつあるエンジニアの古野です!
へいしゃでは業務を始めたり終えたりする際の打刻でfreeeを使用しています。
打刻する際にはfreeeへログインして打刻ボタンをぽちっと押す流れですが、これをSTREAM DECKのボタンぽちっでできるようにしました!
今回はその手順を紹介したいと思います。ただ、一つ残念なことがあり...それは後程....
それではやってみましょう!
手順
- freee APIを使用できるようにする
- 打刻するAPI を作成する
- STREAM DECKでAPIを実行できるようにする
- レッツ打刻!
1. freee APIを使用できるようにする
こちらは公式ドキュメントがあるため、そちらを参照していただくのがわかりやすいかと思います。
※次の手順で以下の値は使用するため必ず記録しておいてください。
- 認可コード
- アクセストークン
- リフレッシュトークン
- Client Id
- Client Secret
2. 打刻するAPI を作成する
ここで残念なお知らせ...
作成していたAPIのソースコードが紛失しました...
なので後日改めて作ってこちらへアップしようと思います。
ここではどんな内容で処理していたか記載しておきます。
使用したもの
- Azure Functions
- APIで使用
- 環境変数にClient Secretを登録
- Azure ストレージサービス
- アクセストークン、リフレッシュトークン、従業員IDなどを保存する場所としてTableStorageを使用
リクエストパラメータ
- 打刻タイプ
- 出勤
- 休憩開始
- 休憩終了
- 退勤
- 認可コード
APIの処理フロー
- アクセストークンの有効性チェック
- アクセストークンが有効であればそのまま使、無効であればリフレッシュトークンを使って更新
- 登録する日時(API実行日の0:00~23:59)を取得
- 今日の打刻チェックして打刻状況の有無を取得(freee APIの「打刻の取得」を使用)
- 打刻タイプを取得して打刻処理を実行(freee APIの「打刻の登録」を使用)
- 出勤
- 今日の打刻が既にある場合
- エラーを返す
- 打刻がない場合
- 出勤を打刻
- 今日の打刻が既にある場合
- 休憩開始
- 既に休憩に入っている場合
- エラーを返す
- 休憩に入っていない場合
- 休憩開始を打刻
- 既に休憩に入っている場合
- 休憩終了
- 現在休憩中ではない場合
- エラーを返す
- 現在休憩中の場合
- 休憩終了を打刻
- 現在休憩中ではない場合
- 退勤
- 出勤していない場合
- エラーを返す
- 出勤中の場合
- 退勤を打刻
- 出勤していない場合
- 出勤
レスポンス
登録の実行正否のみ返す(STREAM DECKでは詳しく表現できないためシンプルでOK)
3. STREAM DECKでAPIを実行できるようにする

STREAM DECKデフォルトで搭載されている機能ではAPIの実行はできません。
そのため、APIを実行できるアプリをダウンロードする必要があります。
今回私は「API Ninja」というアプリを使用しました。
このアプリを使用することでAPIのリクエストをボタン一つで実行することができるようになります。

設定は簡単!画像にあるようにボタンに設置して、設定でリクエストタイプとAPIのURL(必要であればパラメータ)を設定するだけ!
設定が終わればボタンをポチっとするだけでAPIが実行できます。
4. レッツ打刻!

後は日々の業務で使っていくだけですね!
注意点
必ずアクセストークンの更新処理を入れること
アクセストークンは6時間しか有効ではないため、リフレッシュトークンを使用してアクセストークンを更新する必要があります。
この処理を自動で行うようにしておかないと毎回初回で設定した手順を行う必要があり、逆に手間になりますのでご注意を。
STREAM DECKのアプリはたまに確認を
STREAM DECKのアプリがたまーに消えてることがあります(更新のタイミング?)
私も2回ほどAPI Ninjaが消えていて何度ボタンをしても動かない時がありました...
1度設定したらあまり確認しないと思いますが、なんかおかしいなと思ったらまず確認してみるのがいいかもしれないです!
まとめ
今回のような日々繰り返し行う操作でAPIで実行できるのものは同じようにボタン一つで実行できるようになります。
STREAM DECKをお持ちの方は是非トライしてみてください!
まだまだ続くオルターブース2025年のアドベントカレンダーもお楽しみください!
サービス一覧 www.alterbooth.com


