くりにっき

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

condo3と地域.rbカレンダーを作った

夏の進捗です。

condo3

condo3について

connpassやDoorkeeper のグループのイベント情報をiCalendarやAtomで取得するためのサイトです

https://condo3.appspot.com/

f:id:sue445:20190811162205p:plain

モチベーション

connpassやDoorkeeperで特定のグループ(コミュニティ)の勉強会をウォッチするのに現状だと開催通知のメールしかないのが不便という問題がありました。(個人的にはSlackでウォッチする手段がほしかった)

本当は公式でこの手の機能(グループ単位のフィード)を提供してほしかったんですが、connpassには(Doorkeeperだったかも?)過去に要望投げたものの特に音沙汰がなかったので結局自分で作りました。

ユースケース

  • AtomのURLをSlackの特定のチャンネルで /feed subscribe 〜 すれば新しいイベントが作られた時にSlackに通知される
  • iCalendarのURLをGoogleカレンダーに登録すれば自分のカレンダーに表示できる。

ここではSlackとGoogleカレンダーのみ取り上げていますが、AtomもiCalendarも汎用的な規格なのでこれらの形式に対応している他のツールと連携させることもできます。

技術的なこと

リポジトリ

github.com

余談ですが個人開発だとCloud KMS, TypeScript, webpack, Bulma辺りは初採用です

技術の選択理由

  • Google App Engine/Go
    • アプリの性質上無限にAPIを叩かれることが容易に想像できたので、Herokuはあまり使いたくなかった
      • Herokuはアカウント単位でDyno hour(インスタンス起動時間)の無料枠を使うため。(既にHerokuで個人アプリ10個以上動いてるのでリクエストがガンガンくるアプリは立てたくない)
    • 業務的な話になるけど今期の個人目標が「GCPのスキルをつける」だったのでせっかくだからappengineを使ってみるかってことに
      • appengineは昔使ってたことがあるので全然知らないわけではなかった
    • appengineではいくつか言語が選択できるけど、爆速でリクエストさばくにはGoが一番向いてた
  • フロントエンド
    • 自分の中ではReactかVue.jsの二択だったけど、APIがメインで画面はトップページしか必要なかったのでVue.jsを選択
      • Reactは大規模開発のイメージがあった。(異論は認める)
    • 型安全が好きなのでTypeScript選択
  • CSSフレームワーク
    • Bootstrap以外思いつかなかったので社のSlackで募集したうちの1つがBulma
    • 実際に社のSlackに投げた時のスクショが下記

f:id:sue445:20190811165356p:plain

開発時に苦労したこと

  • 8〜9年ぶりにGoogle App Engineを触ったので浦島太郎状態
  • 特にappengine/GoはGo 1.11(1st generation)と1.12(2nd generation)で作り方が全然違う *1 のを知らずに最新版って理由だけで1.12で作り始めたので、1.12のドキュメントも少なくググった時に1.11以前のドキュメントが出てきて動かなくてそこでハマってた
    • 2nd genだとローカル開発時に dev_appserver.py が不要になってたり、appengine本体にmemcachedが入ってないのが一番のハマりでした...
  • フロントエンド赤ちゃんの状態で雰囲気でVue.jsやTypeScriptを書いたのでハマりしかなかった

名前の由来

connpassの con とDoorkeeperの do を足してcondo3です。

末尾の3に関しては諸説ありますが語呂が良かった説が一番有力です。(他にもappengineで作った3つ目のwebアプリだったり、appengine/Javaで使ってたSlim3というフレームワークにあやかったという理由もある(今思いついた))

地域.rbカレンダー

condo3の副産物です。日本各地の地域.rb情報がひと目で分かるカレンダーです

https://sue445.github.io/regional-rb-calendar/

f:id:sue445:20190815120012p:plain

github.com

技術的なこと

condo3のiCalendarのURLをGoogleカレンダーにインポートして表示させただけ。

僕が見つけた地域.rbは全部登録したけど漏れがあると思うのでその場合は issue で教えてください。

メリット

  • 一度iCalendarのURLをGoogleカレンダーに登録してしまえばあとは勝手に最新の情報に追従され続けるのでメンテが楽

8/15 16:50追記

知らなかった...

開発時にソース内検索してrssatomが無かった気がしたんだけど今見たら普通に埋め込まれてた(つらい)

f:id:sue445:20190815165516p:plain