前置き
関西Ruby会議08 のProposalが不採択だったんですがkinoppydさんに影響されて公開してみます。
ブログ書きました、不採択だったCFPの内容を転載しただけですが。誰かの役に立つといいな。 #kanrk08
— kinoppyd (@GhostBrain) 2025年5月21日
関西Ruby会議08のプロポーザル落ちたので公開します - kinoppyd dev https://t.co/FLJVm7YZwp
Title
Rearchitecturings of regional-rb-calendar
Abstract
皆さんは地域.rbカレンダー( https://sue445.github.io/regional-rb-calendar/ )というのをご存知でしょうか?
2019年にリリースして以降、様々なRubyistの方たちに利用されてきたと思います。
この6年間見た目はさほど変わっていないのですが、実はインフラを含めた裏側のアーキテクチャは地味に変遷してきました。問題解決のために必要に応じてgemもいくつか作ってきました。
今回は地域.rbカレンダーのリアーキテクチャリングの変遷を紹介したいと思います。
Details
地域.rbカレンダーは大きく分けて下記のフェーズがあるのでそれぞれに関して話したり話さなかったりします
2019/08: なにもなかったサーバサイド
- https://sue445.hatenablog.com/entry/2019/08/15/120630
- 各地域.rbのicsファイル(カレンダーの予定データ)を自分のGoogleカレンダーに登録し、それをGitHub Pagesで埋め込み表示するだけの牧歌的な仕様
2020/02: AppEngine
- カレンダーをたくさん登録しすぎたせいでGoogleカレンダーの仕様に引っかかって表示されなくなったので、1つのicsで複数の地域.rbの予定を含めるためにサーバサイドを作った
- https://sue445.hatenablog.com/entry/2020/02/13/013022
2021/01: Heroku
- 詳しい理由は覚えてないんだけどたぶん運用しやすさからHerokuに移行した気がする
- https://github.com/sue445/regional-rb-calendar/pull/111
- 今まで色んなIaaSやPaaSなどを使ってきましたがgit push heroku mainでデプロイできる開発体験はいまだに超えれてない
2022/09: Cloud Run Functions
- Herokuの無料プランが消えるので移行した
- https://github.com/sue445/regional-rb-calendar/issues/173
2022/09: Doorkeeper APIを直接呼ぶようにした
- もともとは https://condo3.appspot.com/ 経由でDoorkeeperのicsを取得してたんだけど、regional-rb-calendarから直接Doorkeeper API叩いてics生成した方がよくね?と唐突に思ってやった
- https://github.com/sue445/regional-rb-calendar/pull/182
- Doorkeeper APIのクライアントgemがなかったんでついでに作った
- https://sue445.hatenablog.com/entry/2022/09/29/232905
2024/05: Connpass API v1の仕様変更
- Connpass APIの仕様変更により個人アプリで使うにはむっちゃ高い金額になったのでやめようとしたら、個人利用なら無料で使えるようになったので続けることにした
- しかしそのためには送信元のIPアドレスを固定にしてConpass APIを使う必要があったのでインフラまわりをいじった
- https://github.com/sue445/regional-rb-calendar/issues/254
- public repo側の変更は https://github.com/sue445/regional-rb-calendar/pull/264 だけなんだけど、private repo側(Terraform)でそれなりに変更してます(詳しくは https://sue445.hatenablog.com/entry/2024/05/22/202155 参照)
2025/04: Connpass API v2への移行
- 前述の固定IPアドレスのための仕組みだけで月20ドルくらいかかってつらいのでv2に移行した
- https://sue445.hatenablog.com/entry/2025/04/08/115309
- v2対応のクライアントgemも無いので自分で作った。(API v2対応のAPIクライアントはおそらく世界最速)
- https://sue445.hatenablog.com/entry/2025/04/05/174637
Pitch
https://sue445.github.io/my-ci-badges/ を見てもらえれば分かるように、僕は地域.rbカレンダー以外にもたくさんのOSSをメンテしてきてます。僕の代表作の https://github.com/sue445/rubicure は10年以上メンテしてますが、これだけ多くのOSSを長くメンテしてる人はあまりいないと思います。
https://github.com/gayanvoice/top-github-users/blob/main/markdown/public_contributions/japan.md によると僕は日本国内でトップ10に入ってるので(プロポーザル執筆時点)、それなりに活発にOSS開発してる方だと思います。
僕がメンテしてるOSSにしては珍しく様々な方々がパッチを送ってきてくれてます。 https://github.com/sue445/regional-rb-calendar/graphs/contributors
今回はそのようなRubyist達によって作られた地域.rbカレンダーという1つのアプリケーション(?)を通して、どのようにリアーキテクチャリングしてきたのかを話そうと思ってます。