くりにっき

フルスタックキュアエンジニアです

地域.rbカレンダーのバックエンドをリプレイスした

見た目は変わらないですがバックエンドを変えてます

sue445.github.io

今までの運用

  1. カレンダーに追加したいconnpassやDoorkeeperのグループを condo3 でics取得
  2. 自分のGoogleカレンダーにインポート
  3. https://calendar.google.com/calendar/embedhelper?gsessionid=OK&hl=ja で埋め込み用のスニペットを生成して貼り付け

今までの運用の問題点

自分のGoogleカレンダーにインポートする関係上グループ追加時のみ自分がSPOFになってました。ただし、一度やってしまえばあとは全自動で最新のイベント情報が表示され続けるので問題ではなかったです。

しかしある時いつものように新しい地域.rbのグループを追加した辺りでカレンダーに表示されなくなりました。

公式情報がないので憶測なのですが、上記埋め込みツールで表示できるカレンダーが60個までという制約のため表示できなくなっていました。

たくさんカレンダーを追加しすぎた図

f:id:sue445:20200213011142p:plain

そのためグループの追加方法を変えました

解決方法

すごいシンプルですが、大量のカレンダーを埋め込むのがダメなので複数のグループを1つのicsにまとめることで解決しました。

具体的にはcondo3のAPIを叩いて巨大なicsを生成するウェブアプリをGoogleカレンダーにインポートしています

f:id:sue445:20200213012303p:plain

今はconnpassとDoorkeeperでicsを1つずつ作っているけど、量が増えすぎてタイムアウト起きるようになればさらに分割するかも。

技術的なこと

このウェブアプリ自体はGoogle App Engine/Rubyで作りました。

ソースコードは地域.rbカレンダーと同じリポジトリにあります。

github.com

appengineを採用した理由は今までHeroku + RubyがメインでGoogle App EngineRubyは使ったことがなくて慣れておきたかったためです。*1

新しい運用方法

https://github.com/sue445/regional-rb-calendar のREADMEに書いてますがリポジトリにある設定ファイルとindex.htmlを修正してPRを投げるだけで新しいグループが追加されるようになりました。

PRをアクセプトする部分が自分がSPOFなのは変わらないけど、自分しかできない作業が減ったのは地味に嬉しい。

*1:appengineのJavaとGoは経験済