2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SansanAdvent Calendar 2015

Day 1

自分で積み上げた負債を見つめなおすその1

Last updated at Posted at 2015-12-01

この記事はSansanアドベントカレンダー一日目です。

誰よお前

エンジニアとしてご飯を食べ始めて9ヶ月のHaiToです。
最近ではOmotesando.rbで発表したりしてます。

9ヶ月も経てば、自分が作ってしまった悲しいコードとかも出てきてgit blameする度に悲しい気持ちになります。
悲しい気持ちになっているだけではナンの前進もないので、悲しいコードを見てどうしてこうなったのかを考えてみます。

Twitter,2ch検索Bot

Twitterと2chで風評検索をするBotを作りました。
名前空間的にはこんな感じ

module Bot
  module Reputation
    class Bbs2chSearcher
    class TwitterSearcher

Bot (本当は別の名前だけど気にしない)空間には他にもいろいろあるので、更にもう一階層切ってReputationとしてるところまでは、去年(インターン時代)の自分にしてはなんかまっとうに頑張ろうとした感じが見える。

で、どのへんが悲しいかというと、Bbs2chSearcherTwitterSearcherのインターフェースは合ってないので、呼び出すときにいい感じに共通化して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画像の移動機能とか、インシデント対応とかしてたおかげであんまり負債感がない。

もしかして:全然コード書いてない

そんな気もする :cry:

しかしゆるやかにソフトウェアは腐っていくので日々前進していこう。

LGTM

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?