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/ ディレクトリは対象外にしています。
徐々にコード規模が増えてきてますね。
5年以上前のコードも徐々に新しいコードに入れ替わっていっています。2010-2012 あたりのコードは完全に虫の息ですね。
もうひとつのグラフは主要モジュールごとの年代比率です。
どのモジュールもここ 3年で大きく手が入っていますね。environment などは 75% 以上の書き換えが行われています。
これは行ごとのタイムスタンプから計算しているので、実装が大幅に変わったかどうかはわかりません (typo 修正にも反応する)が、リリースから 10年が経過したいまでもあちこちに手が入っていることがわかります。
ext や writers あたりは比較的古いコードがそのまま残されているようです。
この傾向は自分の感覚とも一致しています。
ところで、以前の記事ではこんなゴールを挙げていました。
自分の感触としては、まだ道半ばという感じです。
クラス変数を使う箇所をかなり削ったり、API やモジュールの責務を整理したりと、一歩ずつ前に進んでいるので引き続き頑張っていきたいところです。