私が歌川です

@utgwkk が書いている

4年前のハッカソンで書いたコードと向き合う

ふと4年前に作ったwebサービスにアクセスしてみたところ、エラーが出ていたので、いい機会だと思いコードの修正をすることにした。

github.com

hatena-bookmark-read-all.herokuapp.com

コードとwebサービスはこれ。はてなブックマークの「あとで読む」を一気に読めるwebサービスで、4年前に はてな×ドワンゴ合同ハッカソン@京都 で作った。

はてなブックマークAPIの仕様が変わっていてエラーを吐いていたので、とりあえず動くようにした。そのついでにコードをガリガリ書き換えていて、いくつか気づきがあった。

  • HerokuもはてなブックマークHTTPS対応してた
  • jQuery!!
    • かっこいい
    • $.ajaxとか登場してる
    • querySelectorとfetch APIで書き直したらjQuery不要になった
      • bootstrapが依存してるのでscriptタグは残す
  • sixを使ってるけど捨てる
    • Python2と3の非互換変更を吸収するライブラリ
    • HerokuがPython3対応してたので退役してもらう
  • requirements.txt使うのをやめてpipenvを使う
    • Herokuのstackをアップグレードしたら自然とpipenvを使うようになった
    • 現代的で良い
  • 状態がいろいろなところに散らばっている
    • ハッカソンで8時間ぐらいで書いたというのもあるけど全体的に雑
    • このころ設計とか知らなくてぜんぶ勘で書いていたと思う
      • 外部API呼び出す関数にいきなりcontrollerの処理が登場している
      • oauth っていう名前なのにOAuth関係ない処理が登場している
  • リクエストごとにAPI叩きまくって一気にデータを持ってきていてワイルド
    • ハッカソンじゃなかったらめっちゃ怒られてると思う
    • ひとまずAPI叩くの1回だけにしてページネーションできるようにする作戦
    • ぜんぶ既読にするボタンは最悪で、一気にリクエスト送ってる(!)
      • 1秒ずつwait入れるようにした
  • かっこよく書こうとして分かりづらいみたいな書き方がある
    • any(map(x.__contains__, ys)) って書いてあったらギョッとすると思う
  • 当然テストはない

これはハッカソンのコードですね、というところから、雑なwebサービスのコードですね、というところまで持っていくことができたと思う。 ページ遷移とくにないので、今やるならReactとかVue.jsとか使ってナウい感じに書くと思う。当時はMVVMみたいな概念は知らなくて、jQuery使ってDOMを直接いじってて手作り感がある。 まだ雑ではあって、認証失敗したらセッションをflushするのでもう一度ログインしてください、というモデルになっている。

みなさんも4年前に作ったもののコードを見直してみてはいかがでしょうか。4年経つとこうも変わるのかというのを感じられてお得だし、リファクタリングの練習になる。