2022.03.21
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
こんにちは。たなしょです。 社内チャットで祝日APIの話で少し盛り上がっていたので、この機会に自分でも作りたいなと思いHeroku/GitHub Actions/Goを利用して作ってみました。
祝日API
今回作る祝日APIのデータは内閣府の国民の祝日についてというサイトのCSVから2021~2023年までのデータを使って作成しています。「2021」や「2022」と年を入力して検索すると入力された年の祝日一覧がJSON形式で見れるようにしています。
システム構成
極力お金をかけずかつDBを使わず、運用にも手間がかからないようにしたかったので
- 祝日のデータはGoで構造体として持たせて、処理でJson形式に変換する。
- GitHub Actionsを使ってBuild/Test/Lintの工程を自動で実施してもらって、ある程度の品質を担保する。
- GitHubのmasterリポジトリにマージしたら、自動でHerokuリポジトリにデプロイされるようにして即時公開できるようにする。
という形にしてみました。
今のところ公開したばかりなので問題は出てないですが、データの数や扱うパラメータが増えたらシステム構成からまた見直そうかなと考えています。
完成したもの
リクエストは2パターンありまして、
- https://go-holiday-api.herokuapp.com/holidayもしくはhttps://go-holiday-api.herokuapp.com/holiday/のどちらかをリクエストすると2021~2023年のすべての祝日のデータを取得する子ができます。
- https://go-holiday-api.herokuapp.com/holiday/year/yyyyをリクエストすることで「yyyy」年の祝日を取得することができます。
上記の2つがあります。
使用例
curl -s https://go-holiday-api.herokuapp.com/holiday/year/2022
レスポンスは以下の通りです。
[
{
"Title": "元旦",
"Date": "2022-01-01"
},
{
"Title": "成人の日",
"Date": "2022-01-10"
},
{
"Title": "建国記念の日",
"Date": "2022-02-11"
},
{
"Title": "天皇誕生日",
"Date": "2022-02-23"
},
{
"Title": "春分の日",
"Date": "2022-03-21"
},
{
"Title": "昭和の日",
"Date": "2022-04-29"
},
{
"Title": "憲法記念日",
"Date": "2022-05-03"
},
{
"Title": "みどりの日",
"Date": "2022-05-04"
},
]
カレンダーデータは以下の構造になります。
名前 | 型 | 説明 | 例 |
Title | string | 祝日の名称 | “元旦” |
Date | string | 日付をYYYY-MM-DD形式で表したもの | “2022-01-01” |
以下今回作ったもの成果物になります。
https://github.com/jacoloves/go-sample-holiday-api
振り返り
今回初めてGitHub Actionsを使ったのですが便利です!
Build/Test/Lintを自動でやってくれて品質をある程度担保できるので、リリースするまでの心理的なハードルがだいぶ下がります!
今後もなにか作る際は採用していきたいと思います。
久しぶりにHerokuを採用しましたが、簡単なアプリケーションをデプロイする際はとても便利なので、AWSを使うほどでもないものには使っていきたいです。
今回の日曜大工報告記事は以上になります。
最後までお読みいただきありがとうございました。