oinume journal

Scratchpad of what I learned

DMM英会話でお気に入りの先生の空きレッスンがあった時にメール通知するlekcijeというサービスを作った

www.lekcije.com

lekcijeという、DMM英会話で講師に空きレッスンがあった時にメール通知するサービスを作った。もともとは下記で書いたものがベースになっていて、これに画面を付け足したという感じ。毎日家に帰ってから自分の空き時間でチマチマ作っていたので半年ぐらいかかってしまった。

oinume.hatenablog.com

作った動機としては

  • DMM英会話はレッスンが終わらないと次の分の予約ができない
  • 人気の講師はすぐ予約が埋まってしまう
  • でも意外とキャンセルが出るので、それを逃したくない

という感じ。もちろんお金をかければ1枚500円もするレッスンチケットを買いまくって予約するということはできるのだろうけど、さすがにそれは金銭的につらかったので技術で解決しようという試み。

実装に関して

本当はReactとかも使いたかったんだけど、どうしても時間が取れなくてSPA的なモノは諦めて、サーバーサイドでHTMLを生成するというオールドタイプな実装になっている。Herokuを使っているのでアメリカの東海岸からHTMLが配信されるのがつらいけど、静的ファイルはHTTP2を使って配信するようにしてパフォーマンス面には気を遣った。

久しぶりにWebサービスを作ったのだけど、普段の仕事ではサーバーサイドのコードしか書かないので、ロゴ作ったりキャッチコピー考えたりすることはいい勉強になった。プロの人はすごいなぁと思うばかりです。というわけで、DMM英会話をやっている人がいたらぜひ使ってみて下さい。

使った技術

  • HTTP2
    • Let's encryptでSSL証明書を取得
  • Frontend
    • bootstrapだと素っ気ないので、bootswatchを使った
    • ビルドにはWebpack使った(つらい)
  • Server (Go)
    • Web Applicaton Framework: gojiを使ったけど、素のnet/httpでもよかったかもしれない。もはやルーティング回りしかgojiを使っていない
    • ORMapper: gorm (つらい)
    • Vendoring: glide
    • Logging: uber-go/zap
    • Scraping: xmlpath
      • goqueryのコールバックスタイルがどうも好きになれなかったので。
    • Hot reloading: reflex
      • 開発時のホットリローディング
  • Database: MySQL 5.7
    • Database migration: goose使ったけど、sql-migrateにする予定
  • E2E test
    • agouti: Selenium WebDriver的なヤツ
  • Nginx: 静的ファイルの配信
  • メール送信: Sendgrid
  • Heroku
  • ngrok
    • スマホで動作確認したい時に便利過ぎた