37
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

調整さんのスケジュールを自動生成するLINE Botを作った話

Last updated at Posted at 2025-12-10

はじめに

システムアイアドベントカレンダー11日目です。アドベントカレンダーへの参加は今年で3年目になりますが、みなさん、今年の目標は達成できましたか?
個人に課していた目標でアドベントカレンダーまでに、Qiitaの記事投稿をする目標を立てていたのですが、
結局、アドベントカレンダーまで下書き記事ばかりを残してしまってました。
ただし、別の目標として個人開発を実施する目標は無事達成できたので、それに関する記事を書こうと思います。

これはどんなテーマなの?

sendchoseisan.png

毎月特定の時間になったら、その月の調整さんのスケジュールを自動で作成して、LineグループにURLを送ってくれます。
今は毎月1日の正午から自動バッチが作成されるようになっています。
ちなみに、Botの名前になっている「よこたまん」はボクシングトレーナーの愛称です(^^)

なんで作ったの?

私が所属しているボクシングスクールでは、毎月土曜日にボクシングの参加出欠をとる
調整さんをLineグループに送っていました。

元々はトレーナーや私が毎回直接作成していたのですが、毎月実施する作業なので自動化したほうが楽じゃない?と思ったのが、開発のきっかけです。

あとは、SEとしてなにか自分の成果になるものが欲しかったというのもあります。

使用した技術

  • TypeScript
  • LINE Messaging API
  • AWS(細かいサービスは次の章で解説)

AWS構成図

linebot.drawio.png

このシステムのポイント

  1. TypeScriptで作成し、ドメイン駆動で開発した
    過去に似たようなシステムを作成した際は、node.jsを利用していたのですが、今回はTypeScriptを採用しました。

  2. インフラ情報をAWS CDKで記述して、ソースコードに保存した
    以前、Lineグループで前回はインフラ構築する際に、マネージドコンソールから直接作成していたのですが、
    他のアカウントへの移行のしやすさや、システムで何のAWSシステムが使われているかを把握しやすいように、
    ソースコードで管理するようにしました。
    私の先輩も「マネージドコンソールでサービスを立てるのは、中学生までだよね〜(^^)」と言っていたので、
    私も早くその領域に行きたいです。

苦労したところ

  1. 調整さんを直接操作するAPIはない
    LineBotでは、外部から操作させるようなAPIはありません。なので、E2Eテストなどで
    利用されるPlaywrightを利用して、画面を操作しています。
    人が手で操作していることと同じことをやるので、速度はものすごく遅いのですが、定時処理で、
    時間がかかっても影響ないので、問題ないと判断したところです。

  2. LineグループのIDを取得する手順が公式では見つからない
    LineのグループIDはそれ自体を取得するAPIは存在せず、LineBotをLineグループに招待された状態で
    こちらからメッセージを送ることで、グループIDを取得できます。
    実際、グループIDを取得する際は、事前にアナウンスをしてグループID取得用のLinebotを作成して、取得してました。

今後について

サークルのメンバーはとても喜んでくれました。
ちょっとお手伝いの一貫として、サークルの宣伝活動や、公式アカウントを作成することになりました。
このツールについては、今後誰でも利用できるような、公式アカウントにできないかを検討しております。

37
3
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
37
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?