Coworkと旅するCPythonのソースコード、36年の旅HPかわさきの研究ノート

cpython_growth.csvという、36年間にわたるCPythonのコミット履歴から1400件弱を抽出し、その時点でのソースコードの行数を記録したデータセットがあります。今回はこのデータセットを少しばかり眺めてみましょう。

» 2026年03月17日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「HPかわさきの研究ノート」のインデックス

連載目次


かわさき

 どうもHPかわさきです。

 ある日、こんなブログ記事を見つけました。

 内容を簡単にまとめると「CPythonのソースコードがどんな調子で増えていったのかを表すデータセットを作ったよ」というお話です。というわけで、今回は自分ではコードを書かずにClaude Cowork(以下、Cowork)と一緒に、このデータセットをいじくってみることにしました。

 「1990年にはGitHubなんてないけど、どうなっているの?」というのは分かっています。が、Pythonのソースコードのバージョン管理は何度かの変更を経て、現在はGitHub(Git)で行われています。そして、過去のコミット履歴も参照可能なように引き継がれてきたことに感謝しながら、データセットを眺めてみましょう。


ざっくりとまとめると?

  • cpython_growth.csvはPythonのコードベースの増加を調べたデータセット
  • CPythonのリポジトリは順調に行数が増えている
  • コードの大規模な増減にはそれなりの原因がある
  • データセットを見ていても分からない増減の理由が、Coworkを使って外部に情報を求めることで見つかるかも
  • 例:LaTeXからreSTへのドキュメントフォーマットの移行
  • Pythonのコード量がCのそれを追い越したのは2004年
  • でも、cpython_growth.csvには原因に対応するコミットが記録されていないこともある
  • データセットだけでは減少は見えても、原因が見えない
  • Coworkを使って外部の情報を求めることで、原因が見えてくる(かもね?)

cpython_growth.csvファイルについて

 このデータセットはcpython_growth.csvというもので、先に述べたブログ記事で紹介されているものです。これをダウンロードして、適当なフォルダに放り込んで、Coworkにその概要を調べてもらいました。

cpython_growth.csvファイルがどんなものか聞いてみる cpython_growth.csvファイルがどんなものか聞いてみる

 その結果、次のようなことが分かりました。

  • 総行数:4万4641行
  • 記録されているコミット数:1392件
  • カラム:commit(コミットハッシュ)、date(日時)、files(ファイル数)、language(言語種別)、blank(空白行数)、comment(コメント行数)、code(コード行数)
  • 言語の種類:61種類
  • 1990年8月から2026年3月

 また、「1コミット=1行ではない」というのも重要です。1つのコミットについて、そのコミットが行われた時点での行数の合計(言語種別:SUM)と、言語別の行数(C/C++、Pythonなど)が複数行にわたって記述されています(これはclocというツールを使っているとのこと)。

 36年間にわたるCPythonのソースコードに対する大量のコミットから1392件を抽出し、コミット時点でのソースコードの行数をまとめたものが本データセットということです(抽出の基準まではちょっと分からないのですが)。

 これをスタート地点として、Pythonのコード量についていろいろ考えていきましょう。ただし、その前に気を付けてください。このデータセットからは、CPythonのコードベースがどの時期に、どの種類のファイルを増やしながら膨らんできたのかは分かります。でも、その増減がなぜ起きたのかまでは、このCSVでは見えません。どのコミットによってコードが増減の原因だったのか、行数の変化が機能追加を意味するのか、単なる移行や整理なのかまでは、このCSVだけでは分からないのです。つまり、「現象」は見えますが、「原因」までは見えないのです。そこで役立つのがCoworkということですね。

言語ごとにコードの増減をグラフにする

 あるあるでしょうが、「言語ごとのコード量の増加」をまずは可視化してもらいました。入力したのは「まずは各言語の行数の増加をグラフにしてください。主要な言語のみで構わないです」というプロンプトです。

言語ごとのコード量の増加を可視化 言語ごとのコード量の増加を可視化

 横軸は日付ですが、コミット日に各言語のコード行の数を打点し、それらを直線でつないだものです。へー、増えていく一方かと思ったらそうでもないんですね。ガクッとコード量が減っている箇所もあります。


かわさき

 実はその後にCoworkとやりとりしていく中で、同じファイル名でグラフを上書きしてくれちゃったので、これは後から再作成してもらったものです。


 筆者が気になったのはグラフの下にある茶色の線(TeX)です。ある時期を境に急降下しています。と同時に、赤い線(reStructuredText。以下reST)が垂直に立ち上がって以降は徐々に行数を増やしています。

斜めに降下していくTeXの線と、垂直に立ち上がるreSTの線 斜めに降下していくTeXの線と、垂直に立ち上がるreSTの線

 それから、このグラフにPythonの各バージョンのリリース日が含まれていると、何かが分かるかもしれません。この2点をCoworkとの対話を重ねながらグラフに入れ込んでもらいました。その結果が以下のグラフです。

Python 2.6の開発中にドキュメントのフォーマットがLaTeXからreSTに全面移行した Python 2.6の開発中にドキュメントのフォーマットがLaTeXからreSTに全面移行した

 先ほどはTeXのグラフは右肩下がりに急降下でしたが、今度のグラフでは急降下どころか垂直落下に変わっています。これはデータセットの作り方が原因ともいえます。LaTeXからreSTへの移行で、一度はLaTeXのコードがリポジトリからは完全になくなってしまいました。しかし、2010年に少量のLaTeX(もしくはTeX)のコードが復活したのです。この間に行われたコミットに関するデータには、言語種別TeXのエントリは一切含まれないのです。

 当初はこのことをちゃんと理解していなかったため、Coworkは10万行超から4000行程度へと斜めに落ちていくグラフをプロットしてしまいました。その後、この点を踏まえて、グラフを書き直してもらうと、実態に近い垂直落下の形のグラフになったのです。


かわさき

 このような結論に自分1人でたどり着こうと思ったら、どれほどの手間がかかるか分かりません。1人の人間よりもはるかに多くのことを学習し、Web検索能力も持っているCoworkと一緒にこのデータセットについて調べていたから、アッという間にこの結果が得られました。以下はその対話の模様です(既に述べているようにグラフは再作成などをしているために、対話のコンテキストが少々異なっている点には注意してください)。

reSTが伸びた理由を「直感」で答えている reSTが伸びた理由を「直感」で答えている

 直感でこの結論にたどり着いちゃうんですよ。イヤになっちゃいますねぇ(笑)。


 対して、Pythonバージョンとコード量の関係はよく分かりませんでした。気になる点は幾つかあります。2000年を過ぎた辺りで突然増加して、その少し後に突然減少しているところや、2010年の少し前にある突然の減少、2010年を過ぎたところ(Python 3.2のリリースと同時期)の増加など。これらについては後で聞いてみることにしましょう。

CとPythonのコード量の比較

 次にコード量の増加を積み上げ面グラフにしてもらいました。全体のコード量の中で各言語がどれほどのボリュームを持っているかを示すものですね。

積み上げ面グラフにしてもらった 積み上げ面グラフにしてもらった

 よくある感じのグラフになりました。C関連のコードとPythonのコードが着実に増えていることがよく分かります。1990年代初頭はCのコードが大半だったところ、徐々にPythonで書かれたコードも増えてきて、どこかの時点でPythonの行数がCの行数を追い越し、現在でもPythonコードの方がCコードよりも多い状態が続いています。

 では、Pythonのコードの行数がCのコードの行数を超えたのはいつでしょう。Coworkに調べてもらいました。答えは次のようなものでした。

2004年8月23日以降はPythonコードの行数がCのコードの行数を逆転したまま 2004年8月23日以降はPythonコードの行数がCのコードの行数を逆転したまま

 では、何か増加の要因として考えられるのでしょう。筆者が「うーん」となって、「ピコーン! モジュール数に目を付けてみたらどうだろう」と思い付いて、作ってもらったのが以下のグラフです。


かわさき

 グラフにあるモジュール数は各バージョンの標準ライブラリを列挙するページ(例えば、Python 3.14の「Python Module Index」ページ)で数えています。が、あくまでも概算です。

 Python 3.10からはsysモジュールのstdlib_module_names属性(frozenset)に標準ライブラリの名前が一覧されています。Python 3.14でこの属性の要素数を調べると297個となりました。これに対して、Coworkが上記ページから算出したのは315個とのこと。後者には下位モジュールやサブパッケージも含まれているからでしょう。このように誤差があることはご承知おきください。


積み上げ面グラフにモジュール数を重ねたもの 積み上げ面グラフにモジュール数を重ねたもの

 うん。これを見ると、Pythonのコード量の増加とモジュール数には大きな関係はなさそうです。となると、何が原因でしょうか。Coworkによれば、大規模なモジュール(asyncioやpathlibなど)が追加されたことや、CとPythonの両者のコードで実装されているモジュール(datetimeなど)、ドキュメント文字列の充実化、ツール類の拡充などが、Pythonのコード量増加の要因として考えられるとのことです。ソースコードの森に踏み入らなければ、これについては正確なところは分からないのでしょうねぇ(踏み入ったところで、分かるとも思えませんが)。

コード量の増減について知っている2、3の事柄

 先ほど、コード量の増減について幾つか気になる点があるといいました。

  1. 2000年を少し過ぎた辺りでCのコード(オレンジ)が突然増加し、その後、突然減少している
  2. 2007年くらい(Python 2.6/3.0のリリースの少し前)。Cのコードがガクンと減少している
  3. 2010年を過ぎた辺り、Python 3.2のリリースと似たタイミングでテキストファイル(水色)が格段に増えている

 これらについて該当部分のコミットIDを取得して、それを基にClaude in Chromeを使ってCPythonのリポジトリからコミットメッセージを見てみる、というのを基本的な方針として原因を調べてみました。

コードが突然、増加したり減少したりしているところ コードが突然、増加したり減少したりしているところ

 結果は次の通りです。

  1. Unicode文字データベース(C言語)の追加で増加、圧縮で減少
  2. Mac用モジュールの削除
  3. SVNからMercurialへの移行に伴うsvnmap.txtファイルの追加

 と書くのは簡単なのですが、Coworkさんといえども、これにたどり着くのは簡単ではありませんでした。まず、「すぐにリミットに当たっちゃう」ことがあります。


かわさき

 湯水のようにトークンを使いたい(笑)。


 それから、「cpython_growth.csvファイルはPythonの全コミットを記録したものではなく、データセットの作成者が何らかの基準で選んだコミットに関する記録をまとめたものである」点にも考慮する必要があります。

 例えば、上記の2にある「2007年ころにCのコードがガクンと減少している」状況を記録した行で記録されているコミットと、実際にCコードをガクンと減らしたコミットは別モノでした。こうなると、該当のコミットとその直前に記録されているコミットの日付の間になされたコミットを探して、原因となりそうなものを探す必要が出てきます。湯水のようにトークンを使えれば、Claude in Chromeに任せて力業で原因を究明することも可能でしょうが、なかなかそうもいきません。

 実際はどうだったかというと、筆者が人力でCPythonのリポジトリで日付の範囲指定と「remove」という語句を指定して、コミットを検索し、その結果をCoworkに渡すという謎の連係プレーをすることになりました。


かわさき

 人が指示を出した上で、生成AIの下請けまでやることに(笑)。でも、結局、今の段階では、生成AIが活躍できるように、人がうまく立ち回ってやる必要があるということですねぇ。


 月次でのコミット数を集計することで、Pythonを取り巻く環境がどのくらい活発だったのかも検討できるかもしれません(でも、やっぱりどういう基準でコミットが抽出されているのかが分からないから、当て推量にしかならないかなぁ)。


 というわけで、Coworkのリミットにそろそろヒットしちゃいそうになってきたので、この辺りで終わりにしたいと思います。あんまりよい知見が得られていないのですが、興味のある方は、cpython_growth.csvをダウンロードして、ご自分でもCoworkなり、他のチャットボットなりを使って、いじってみると何かの発見があるかもしれませんよ!

「HPかわさきの研究ノート」のインデックス

HPかわさきの研究ノート

Copyright© Digital Advantage Corp. All Rights Reserved.

アイティメディアからのお知らせ

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2026
人に頼れない今こそ、本音で語るセキュリティ「モダナイズ」
4AI by @IT - AIを作り、動かし、守り、生かす
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。