3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【個人開発】草生えてないと怒ってくれるBOTを作った

Posted at

明けましておめでとうございます。

新年早々少し個人で開発したのでそのアウトプットとして投稿させていただきます。

全てのツールを無料枠で抑えて作ることができるので、個人で開発してデプロイまでしてみたいと思っている人に参考になれば良いなと思います。

作ったもの

草(commit)がされていない場合にはその日の夕方に通知を送ってくれるLineのBOTを作りました。

Githubリンク

作成動機

  • 新たな年が始まって、より成長できる年にしたく継続を促せるようなものを作りたかった。
  • これまで触れていないものを使って何か作ろう、自分の技術の幅を広げようと思ったから。(Goも含めて全て開発で使ったことはなかったです。)

使用技術・構成

  • AWS Event Bridge (cron)
  • AWS Lambda
  • Line Notify
  • Github GraphQL
  • Golang

(コンテナ化(Docker)は図に乗っていますが、現在進行中です。。😅 別で続きとして記事にします。)

構成
スクリーンショット 2024-01-03 午前9.22.45.png

説明
Event Bridgeでcronの設定をし、1日に1回Lamdaの関数を発火させています。
LamdaではGoで作成した関数が走り、Github GraphQLから当日分のcommit数を取得し、草があるかを確認します。
ないことがわかった場合にはLine Notifyでユーザー(自分)に向けて通知を行なっています。

mojikyo45_640-2.gif

使用技術・参考記事の紹介

Lambda & Event Bridge

Lambdaは関数を定義して、イベントがその関数に対して走った際に、実行を行うサービスです。Event Bridgeは特定のイベントが検知された時や、定期実行(cron)などで設定している時間にイベントを実行してくれるサービスです。

この二つを組み合わせることで、関数の定期実行をすることができます。

実行のログがcloudWatchに自動的に保存されていたのでバグやエラーにも気がつくことができます。

EC2等でアプリケーションをデプロイするのに比較するとはるかに手間も少ないですし、どちらも1日1回程度だとお金はかからないのでぜひ使ってみていただきたいです!

少し躓いたところ

Lambdaデプロイ時に、コードをビルドしてバイナリを生成する必要があるのですが、筆者はM1のmacを使用しており、m1で生成されるバイナリはlambdaとの互換性がないことがわかりました。

ですのでm1ユーザーの方は以下のコマンドでLambda互換のものを生成する必要があります。

通常

GOOS=linux go build -o main

mac M1

GOOS=linux GOARCH=amd64 go build -o main

参考

Github GraphQL

GithubはRest APIとGraphQLからAPIを公開していますが、今回のように草を取得したい場合にはGraphQLの方を使う必要があります。

今回はその日のコミットがあるかを確認したかったので、contributionsCollectionのfromとtoをその日の最初と最後の時刻にすることで対応しました。

query := `
	query($userName: String!, $from: DateTime!, $to: DateTime!) {
		user(login: $userName) {
			contributionsCollection(from: $from, to: $to) {
				contributionCalendar {
					totalContributions
					weeks {
						contributionDays {
							contributionCount
							date
						}
					}
				}
			}
		}
	}
`
variables := map[string]interface{}{
	"userName": os.Getenv("GITHUB_USER"),
	"from":     startOfTodayStr,
	"to":       endOfTodayStr,
}

今回はuser情報の取得しかしていませんが、様々な用途に使えるので個人開発したい人にはおすすめです。

参考

Line Notify

Line Notifyは自分のLINEアカウントに対してメッセージを送信できるサービスです。
先ほどあげたデモの画像のように、メッセージやLINEスタンプを簡単に送信することができます。
Line Messaging APIのpush message機能を使うと料金がいくらかかかってしまう可能性があるので、お金をかけずに開発したいという人におすすめです。

参考

まとめ

今回様々なものを初めて使ってみましたが、どれも素晴らしいサービスだなと思いました。
自分ようなので無料で作れたのもまた良かったなと思います。
特にLine Notifyはめちゃめちゃ簡単だったので、様々なことにサクッと導入できそうだなと思いました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?