夏の進捗です。
令和の夏、進捗の夏
— sue445 (@sue445) 2019年8月11日
condo3
condo3について
connpassやDoorkeeper のグループのイベント情報をiCalendarやAtomで取得するためのサイトです
モチベーション
connpassやDoorkeeperで特定のグループ(コミュニティ)の勉強会をウォッチするのに現状だと開催通知のメールしかないのが不便という問題がありました。(個人的にはSlackでウォッチする手段がほしかった)
本当は公式でこの手の機能(グループ単位のフィード)を提供してほしかったんですが、connpassには(Doorkeeperだったかも?)過去に要望投げたものの特に音沙汰がなかったので結局自分で作りました。
ユースケース
- AtomのURLをSlackの特定のチャンネルで
/feed subscribe 〜
すれば新しいイベントが作られた時にSlackに通知される - iCalendarのURLをGoogleカレンダーに登録すれば自分のカレンダーに表示できる。
- さらにGoogleカレンダーをSlackに連携させればSlackに通知もできる
ここではSlackとGoogleカレンダーのみ取り上げていますが、AtomもiCalendarも汎用的な規格なのでこれらの形式に対応している他のツールと連携させることもできます。
技術的なこと
- アプリ本体でいうと開発期間は全部で3週間くらい
- サーバサイド2週間 + フロントエンド1週間 + 細かい調整で3日弱
- 他に https://github.com/sue445/go-doorkeeper の開発で2〜3日。(condo3作ってる最中にDoorkeeperのgolang用のAPIクライアントがないのに気づいて作った)
- サーバサイド
- Go 1.12
- GCP
- Google App Engine/Go
- Cloud KMS
- memcached
- フロントエンド
余談ですが個人開発だとCloud KMS, TypeScript, webpack, Bulma辺りは初採用です
技術の選択理由
- Google App Engine/Go
- フロントエンド
- 自分の中ではReactかVue.jsの二択だったけど、APIがメインで画面はトップページしか必要なかったのでVue.jsを選択
- Reactは大規模開発のイメージがあった。(異論は認める)
- 型安全が好きなのでTypeScript選択
- 自分の中ではReactかVue.jsの二択だったけど、APIがメインで画面はトップページしか必要なかったのでVue.jsを選択
- CSSフレームワーク
- Bootstrap以外思いつかなかったので社のSlackで募集したうちの1つがBulma
- 実際に社のSlackに投げた時のスクショが下記
開発時に苦労したこと
- 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が入ってないのが一番のハマりでした...
- 2nd genだとローカル開発時に
- フロントエンド赤ちゃんの状態で雰囲気で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/
技術的なこと
condo3のiCalendarのURLをGoogleカレンダーにインポートして表示させただけ。
僕が見つけた地域.rbは全部登録したけど漏れがあると思うのでその場合は issue で教えてください。
メリット
- 一度iCalendarのURLをGoogleカレンダーに登録してしまえばあとは勝手に最新の情報に追従され続けるのでメンテが楽
8/15 16:50追記
わかりにくくて申し訳ありませんが、実は connpass では、グループごとにイベント一覧のフィードをご提供しております。わかりにくくて…申し訳ありません…
— connpass (@connpass_jp) August 15, 2019
例) https://t.co/7GRqbPA9y0
知らなかった...
開発時にソース内検索してrssやatomが無かった気がしたんだけど今見たら普通に埋め込まれてた(つらい)