誰よお前
エンジニアとしてご飯を食べ始めて9ヶ月のHaiToです。
最近ではOmotesando.rbで発表したりしてます。
9ヶ月も経てば、自分が作ってしまった悲しいコードとかも出てきてgit blame
する度に悲しい気持ちになります。
悲しい気持ちになっているだけではナンの前進もないので、悲しいコードを見てどうしてこうなったのかを考えてみます。
Twitter,2ch検索Bot
Twitterと2chで風評検索をするBotを作りました。
名前空間的にはこんな感じ
module Bot
module Reputation
class Bbs2chSearcher
class TwitterSearcher
Bot
(本当は別の名前だけど気にしない)空間には他にもいろいろあるので、更にもう一階層切ってReputation
としてるところまでは、去年(インターン時代)の自分にしてはなんかまっとうに頑張ろうとした感じが見える。
で、どのへんが悲しいかというと、Bbs2chSearcher
とTwitterSearcher
のインターフェースは合ってないので、呼び出すときにいい感じに共通化してDRYに出来ない。
TwitterSearcher.new(last_fetched_at).fetch_twitter_reputation_posts
Bbs2Searcher.new(last_fetched_at).fetch_2ch_reputation_posts
なんでこうなったかというと、まっとうに設計せず作り始めたからというのと、当初自分はあんまり周りのコードを読んでいなかったので綺麗なコードへの理解度が低かった。
今はいろいろとコードを読んで、ある程度は何が良くて何が辛くて何がダメなのかはわかってきた。
今思い返せば、ちょっと工夫して
class SearcherBase
def initialize(last_fetched_at)
@last_fetched_at = last_fetched_at
end
def fetch_reputation_posts
raise NotImplementedError
end
end
class TwtitterSearcher < SearcherBase
class Bbs2chSearcher < SearcherBase
みたいなのを用意してあげたほうが、利用する側でさくっと統一できてよかったなぁなんて。
本当はきになったベースでPRを出すと良いんだろうけど、もっと大改造したかったりしてうーんとかうなってる。小さく改善したほうがまぁ見通しは良さそうだが。年末にでもやります。 今はモンハンやります。
ほかにもいろいろ悲しいコードを作ってしまったという思いはあるのですが、ここ数ヶ月はAuroraの検証だとか、S3画像の移動機能とか、インシデント対応とかしてたおかげであんまり負債感がない。
もしかして:全然コード書いてない
そんな気もする
しかしゆるやかにソフトウェアは腐っていくので日々前進していこう。