穴馬を探せ!freee人事労務のAPIで有馬記念を予想する

freeeのPublc APIチームでエンジニアリングマネージャーをしているまっつーです。

この記事はfreee Developers Advent Calendar 2021の24日目の記事です。

クリスマスイブですでにウキウキしている方もいるでしょうが、落ち着いてください。我々にはまだやることがあります。

そう、有馬記念です。

有馬記念は毎年12月に中山競馬場で開催される競馬のレース名です。

年末に行われる大レースということで競馬ファンの中では年末の風物詩になっています。

やるからには当てたい、では早速有馬記念の予想をしていきましょう。

手順1 今年のサインを探す

競馬の予想にはいろいろな方法がありますが、サイン理論とよばれるものがあります。

説明はwikipediaに任せます。

サイン理論(サインりろん)とは、競馬の勝ち馬予想の手法の一つのことである。広義的な意味でケントク買い(見得買い、見徳買い)の一種として扱うこともある。 この手法を用いて買い目を決めた勝馬投票券をサイン馬券ともいう。

サイン理論 - Wikipedia

サイン馬券は過去の有馬記念でも出たことがあります。

2012年には今年の漢字に「」が選ばれ、その年にはゴールドシップという名前の馬が一位になりました。

なんと2021年も今年の漢字は「金」です、つまり「ゴールド」という単語が入る馬が1位になるに違いありません。

しかし残念ながら今年の出馬表をみると名前に「ゴールド」が含まれる馬はいません。

有馬記念の馬柱

有馬記念【2021年12月26日中山11R】出馬表、予想 | 競馬ラボ

では今年の漢字以外に2021年の世相を反映したものはないでしょうか?

そこで僕は新語・流行語大賞に目をつけました。

今年の流行語大賞は「リアル二刀流/ショータイム」です。

MVPを受賞したロサンゼルス・エンゼルスの大谷翔平選手ですね。

まさに2021年を代表する方と言って差し支えないでしょう。

大谷関連のサインに違いない。

となると思いつくのは誕生日、大谷選手の誕生日は1994年7月5日です。

大谷翔平 - Wikipedia

7→5の馬単、普通の人であればこんな予想をするでしょう。

しかし僕もギャンブラーの端くれです。

ギャンブルとは隣のギャンブラーとの知恵と運の競い合い、他人と同じ賭け方をしていては決して勝つことはできません。

考えた結果、一つのアイディアにたどり着きました。

「今年の大谷選手の誕生日である2021年7月5日、その日の自分の勤怠情報を使って予想したら今年の世相も反映しつつ誰ともかぶらない予想ができるんじゃないか?」

良さそう、では早速勤怠情報を取得します。

手順2 freee人事労務から自身の勤怠状態方法を取得する

freeeでは自社のサービスであるfreee人事労務を利用して勤怠管理をしています。

僕の所属がPublic APIチームなので、freee人事労務のPublic APIを利用して勤怠情報を取得したいと思います。

まずはfreeeアプリストアにアクセスし、開発者ページ → 今すぐアプリを作成をクリックします。

freeeアプリストアのトップページのスクリーンショット。上部のグローバルヘッダーの開発者ページと文字が赤い四角で囲われている。
freeeアプリストアのトップページ

freeeアプリストアの開発者ページのスクリーンショット。今すぐアプリを作成と書かれたボタンが赤い刺客で囲われている。
freeeアプリストアの開発者ページ

アプリ名・概要を入力し、アプリストアでの公開予定はないのでプライベートアプリを指定、利用規約同意にチェックをいれて作成をクリックします。

freeアプリストアのアプリ作成画面のスクリーンショット。アプリ名に有馬記念予想、概要に有馬記念を予想するためのアプリです、と入力してありパブリックアプリとプライベートアプリのラジオボタンはプライベートアプリをチェックし、ディベロッパー規約とfreeeAPI規約に同意するのチェックボックスにチェックが入っている。
アプリ作成画面

アプリ管理画面に遷移します。

画面下部にWebアプリ認証用URL、モバイル・JSアプリ認証用URLが表示されています。

freeeアプリストアのアプリ管理画面のスクリーンショット。Client ID、Client Secret、Webアプリ認証用URL、モバイル・JSアプリ認証用URLが黒塗りでマスクしてある。
アプリ管理画面

アプリを作成した直後の状態ではWebアプリ認証用URLにアクセスすると認可コードが、モバイル・JSアプリ認証用URLにアクセスすると直接アクセストークンがそれぞれ取得できます。

認可コードを使ったアクセストークンの取得方法は、freeeのdeveloper siteに説明があるのでそちらを読んでください。

今回はとりあえずアクセストークンが取れればいいので、モバイル・JSアプリ認証用URLにアクセスします。

認可画面に遷移するので、事業所と認可するスコープを確認して許可するを押します。

freeeの認可画面のスクリーンショット。
認可画面

するとアクセストークンが取得できます。

freeeのアクセストークン取得画面のスクリーンショット。
ブラウザ上にアクセストークンが表示される

アクセストークンが取得できたので次に人事労務APIを叩きます。

人事労務APIのリファレンスから、勤怠上を取得するエンドポイントを探します。

勤怠のエンドポイントで欲しい情報が取得できそうです。

freee developerサイトの中にある人事労務APIの勤怠のgetのスキーマのスクリーンショット。
勤怠のエンドポイント

requiredとなっているパラメータのうちdateは2021-07-05で確定ですが、company_idとemp_idがわかりません。

まずはそれを調べるためにログインユーザのエンドポイントを叩きます。

freee developerサイトの中にある人事労務APIのログインユーザのgetのスキーマのスクリーンショット。
ログインユーザのエンドポイント

以下はAPIのリクエストとレスポンスの結果です。実際のアクセストークンとidはマスクしてあります。

$  curl -H 'Authorization: Bearer foobarhogefuga' https://api.freee.co.jp/hr/api/v1/users/me

{
  "id": xxxxxx,
  "companies": [
    {
      "id": yyyyyy,
      "name": "フリー株式会社",
      "role": "self_only",
      "external_cid": "zzzzzz",
      "employee_id": aaaaaaa,
      "display_name": "松澤伸一郎"
    }
}

これでcompany_idがyyyyyy、employee_idがaaaaaaaであることがわかったので次は勤怠のAPIを叩きます。レスポンスは一部省略しています。

$ curl -H 'Authorization: Bearer foobarhogefuga' 'https://api.freee.co.jp/hr/api/v1/employees/aaaaaa/work_records/2021-07-05?company_id=yyyyyy'

{
  "break_records": [
    {
      "clock_in_at": "2021-07-05T12:00:00.000+09:00",
      "clock_out_at": "2021-07-05T13:00:00.000+09:00"
    }
  ],
  "clock_in_at": "2021-07-05T11:02:00.000+09:00",
  "clock_out_at": "2021-07-05T20:14:00.000+09:00",
  "date": "2021-07-05",
  "day_pattern": "normal_day",
  "normal_work_mins": 480,
  "total_overtime_work_mins": 12,
  .
  .
  .
}

情報が取れました!

手順3 取得した情報から馬券を予想する

無事7月5日の勤怠情報が取れたので、ここから本題の馬券予想に入ります。

レスポンスとリファレンスを照らし合わせると

  • clock_in_at: 出勤時間
  • clock_out_at: 退勤時間
  • normal_work_mins: 所定労働時間
  • total_overtime_work_mins: 時間外労働時間

であることがわかります。

つまり僕は今年の7月5日、11時2分に出勤し20時14分に退勤しています。

労働時間は480分+12分 = 8時間12分です。

11時、20時、8時間。。。。

11→2→8

もうわかりましたね。

今年の有馬記念は

  • 1着: 11番 アリストテレス
  • 2着: 2番 パンサラッサ
  • 3着: 8番 ユーキャンスマイル

に間違いありません。

僕はもちろん11→2→8の三連単一点買い、今年はこいつで勝負します。

12/24の午前時点ではまだ馬券販売が始まっていませんが、競馬情報サイトの予想オッズを見る限りこの買い目は

8番人気 → 9番人気 → 16番人気 (最下位人気)

なんでいわゆる超大穴馬券、有馬記念の過去最高額985,580円を超えそうです。

当たれば一足早い年末ジャンボになりそうです。アツい。

有馬記念(G1) オッズ | 2021年12月26日 中山11R レース情報(JRA) - netkeiba.com

最後に

freeeでは一緒に競馬 (あと仕事も)を楽しんでくれる仲間を募集しています! 少しでもご興味持っていただいた方は、ご応募よろしくお願いします!

jobs.freee.co.jp

そして一番大事なことですが馬券は20歳になってから、ほどよく楽しむ大人の遊びです。またこの記事はあくまで著者の勝手な想像による予想なので、いかなるクレームも受け付けませんのでご了承ください。

アドベントカレンダーも明日で終わり。

最終日はfreeeの誇る雀鬼、wakaharaさんです。