Re: Sphinx コードの半減期と未来予想図

ぼちぼち Sphinx-1.8 をリリースしようというこのタイミングで、以前書いた Sphinx コードの半減期と未来予想図 - Hack like a rolling stone を見かけたので、1年半ぶりに試してみました。

将来、また実行したくなったときにさくっと再現できるようにこんな Dockerfile を書きました。全部 RUN で書いてるのでとても雑ですね。

FROM ubuntu:bionic

RUN apt update; apt install -y python3 python3-pip git; apt-get clean
RUN pip3 install git-of-theseus
RUN git clone https://github.com/sphinx-doc/sphinx /sphinx
RUN git-of-theseus-analyze --ignore 'tests/*' /sphinx
RUN git-of-theseus-stack-plot /cohorts.json
RUN git-of-theseus-survival-plot /survival.json
RUN for mod in application builders directives domains environment ext util writers; \
do (cd /sphinx; echo $mod; find sphinx/$mod* -type f -exec git annotate {} \; | perl -ne 'm/(\d+)-\d+-\d+/; print $1, "\n"' | sort | uniq -c; echo); \
done
CMD cp /*.png /mnt

現時点の半減期グラフはこうなりました。なお、今回は tests/ ディレクトリは対象外にしています。
f:id:tk0miya:20180826183051p:plain

徐々にコード規模が増えてきてますね。
5年以上前のコードも徐々に新しいコードに入れ替わっていっています。2010-2012 あたりのコードは完全に虫の息ですね。


もうひとつのグラフは主要モジュールごとの年代比率です。
f:id:tk0miya:20180826164448p:plain
どのモジュールもここ 3年で大きく手が入っていますね。environment などは 75% 以上の書き換えが行われています。
これは行ごとのタイムスタンプから計算しているので、実装が大幅に変わったかどうかはわかりません (typo 修正にも反応する)が、リリースから 10年が経過したいまでもあちこちに手が入っていることがわかります。

ext や writers あたりは比較的古いコードがそのまま残されているようです。
この傾向は自分の感覚とも一致しています。


ところで、以前の記事ではこんなゴールを挙げていました。

  • Sphinx を細かくモジュール分割すること
  • モジュールの結合度を下げること
  • Sphinx 自身を Sphinx API で作ること

自分の感触としては、まだ道半ばという感じです。
クラス変数を使う箇所をかなり削ったり、API やモジュールの責務を整理したりと、一歩ずつ前に進んでいるので引き続き頑張っていきたいところです。