Pythonでツールや小さなアプリを作っていると、「また同じ処理を書いている」と感じる場面があります。
ログ設定、設定ファイルの読み込み、エラー処理、パス操作などは、どのプロジェクトでもほぼ必ず必要になります。
そのたびに実装を考えるのは時間がかかり、開発のテンポも落ちてしまいます。
この記事では、そうしたよく使う処理をPythonの共通機能としてまとめ、ChatGPTとCodexを使って実際に作成した流れを紹介します。

この記事で分かること

  • Pythonで共通機能を作ろうと考えた理由
  • Python共通機能の一覧
  • ChatGPTとCodexの役割分担
  • 共通機能を作るための設計の考え方
  • プロジェクト作成からテストまでの具体的な手順

Pythonで共通機能を作ろうと思った理由

Pythonでツールやアプリを作っていく中で、よく使用する処理が毎回似通っていることに気づきました。
今後もツールやいろいろなアプリを作る予定があるため、これらを都度実装するのではなく、最初に共通機能としてまとめておいた方が効率的だと考えました。
共通機能を用意しておけば、新しいプロジェクトを始める際に基盤部分を考える時間を減らすことができます。
その結果、本来取り組みたい機能の実装に集中できるようになると考えました。

今回作ったPython共通機能の一覧

今回作成した共通機能は、次のGitHubに公開しているREADMEに一覧としてまとめています。
README(GitHub)

作成した機能は次の一覧の通りです。

機能名概要
Logginglogging設定を外部ファイルで管理するための共通機能
ConfigYAML、JSON、TOMLなどの設定ファイル読み込み
Errors共通で使う例外クラスの定義
MessagesメッセージをIDで管理し取得する仕組み
CodesCSVで管理するコード定義の読み込み
Pathspathlibを使ったパス操作ユーティリティ
YAML StoreYAML形式でのデータ保存ユーティリティ
IO UtilsテキストやCSVの入出力処理
Datetime日付や時刻を扱う共通ユーティリティ
Validationpydanticを使った入力・設定の検証

これらは、Pythonでツールやアプリを作る際によく使う共通機能です。
共通機能としてまとめることで、プロジェクトごとの初期作業を大幅に減らすことができます。

ChatGPTとCodexの役割分担

今回の開発では、ChatGPTとCodexを明確に役割分担して使いました。
設計と実装を分けることで、作業内容が整理され、進めやすくなりました。
役割分担は次のとおりです。

ツール担当内容
ChatGPT共通ルールの整理、AGENTS.mdとPLANS.mdの作成、specs配下の仕様書作成
Codex仕様書をもとにしたコード作成、テストコード作成、README作成

共通機能を作る設計の考え方

最初、共通機能をAGENTS.mdに全て設定して開発しようと考えていました。
ChatGPTに依頼したら、数百行の仕様書が出力した内容を見て、各機能の仕様書を修正する場合にAGENTS.mdを毎回修正するのは大変と考え、次のように個別の機能はspecs配下に仕様書を分ける方針にしました。

samples/python-common-sample/
├── specs/                    # 各共通機能の仕様書
│   ├── codes.md              # コード管理仕様
│   ├── config.md             # 設定ファイル読み込み仕様
│   └── logging.md            # logging 仕様
├── AGENTS.md                 # 共通の仕様と行動指針
└── PLANS.md                  # 実装計画
STEP1
AGENTS.mdとPLANS.mdの作成

最初に行ったのは、共通機能全体のルールと作業の進め方を決めるため、AGENTS.mdとPLANS.mdを次のような考えでChatGPTに依頼して作成しました。
これにより、後から機能を追加しても方針がぶれにくくなります。

  • AGENTS.mdはsrcレイアウト、日本語のコメント、ストにはpytestを使うことなどの全体にかかわるる^るを定義する
  • PLANS.mdは仕様作成から実装、テストまでの作業手順を定義する
STEP2
個別機能の仕様書作成

個別の機能は、specs配下に仕様書を分けて作成していきます。
仕様書を作成するのはChatGPTに依頼しています。
oggingやpathsなど、1つの機能につき1つの仕様書を用意しています。

プロジェクト作成手順

仕様書の準備ができたら、GitHubリポジトリをクローンしてプロジェクトを作成します。
Codexを使用するため、WindowsでWSLを使っています。
WSLでCodexを使用する手順は次の記事が参考になります。

リポジトリのクローン後、作業用のブランチを作成します。

git switch -c feature/python-common-sample

次にuvを使ってプロジェクトを初期化します。

cd samples/
uv init python-common-sample --python 3.13

テストを実行するためにpytestを追加します。
これでプロジェクトの準備は完了です。

cd python-common-sample
uv add --group test pytest

Codexに依頼した内容

ChatGPTで作成した仕様書は次のように格納します。

samples/python-common-sample/
├── specs/                    # 各共通機能の仕様書
│   ├── codes.md              # コード管理仕様
│   ├── config.md             # 設定ファイル読み込み仕様
│   └── logging.md            # logging 仕様
├── AGENTS.md                 # 共通の仕様と行動指針
└── PLANS.md                  # 実装計画

仕様書を格納した後、次のようにspec配下の仕様書を指定してCodexにコードの作成を依頼します。
依頼後、コード作成、pytestによるテストコード作成・実行まで自動的に行ってくれます。
コードやテストコードで問題があればCodexに追加で依頼して修正させます。

下記の仕様に従って、メッセージ取得のコードを実装してください。
samples/python-common-sample/specs/messages.md

Codexのコードやテストコードの作成が完了したら、次のように手動でテストを実行して仕様通りに動作するのか確認します。
以下はloggingのテストを実行する手順です。

cd samples/python-common-sample
uv run python -m pytest tests/test_logging.py -v

手動のテストが完了したら、READMEの作成を依頼します。
これを共通機能の作成数分繰り返します。

繰り返しの作業が増えるのは手間ですが、個別の機能をひとつずつ確認していくので、手戻りがなくて効率的でです。

作成したリポジトリとプロジェクト

今回作成したコードは、次のリポジトリで公開しています。
興味がある方は参考にしてください。

リポジトリ
https://github.com/ojichiku/public-python-samples

共通機能のプロジェクトフォルダ
https://github.com/ojichiku/public-python-samples/tree/main/samples/python-common-sample

まとめ

Pythonでよく使う処理を共通機能として先に作っておくことで、その後の開発が進めやすくなります。
今回、共通機能とspecを分けて管理することで、仕様が整理されて生成AIへの指示も明確になり、開発が効率的に進められたと思います。
また、ChatGPTで設計を行い、Codexで実装を進めるという役割分担は、実務でも取り入れやすい方法のため、今後の開発はこの方法を使っています。

今後もツールやアプリを作る際には、今回作成した共通機能をベースとして活用していく予定です。