ChatGPTを使って自分のはてなブログとチャットするツールを作った - $shibayu36->blog;で紹介したchat-hatenablogのv0.1.0をリリースした。リリース内容は本当にちょっとしたものなので、追加で開発メモを公開しておく。
リリース内容
https://github.com/shibayu36/chat-hatenablog/releases/tag/v0.1.0
ユーザー的に変わるところは、呼び出しインターフェースが変わっただけ。breaking changeなのでバージョンを切っておいた。元々はmake_index.pyとask.pyを使っていたが、1コマンドに統一してサブコマンドとして実行するようにした。
./chat-hatenablog make-index --mt-file blog.shibayu36.org.export.txt ./chat-hatenablog ask --query コードレビューで大切なこととは?
後は内部のリファクタリングやテストの追加をした。これは今後「エントリーを編集した後インデックスを作り直してもおかしくならないように」「他人のブログのインデックスを作る」ということをしやすくするため。
開発メモ
ChatGPTやCopilot使いつつ開発していったら勉強になったのでメモだけ残す。Python詳しくないので真偽は怪しい。
PythonのCLIツールでバージョンをどう表示するか
__version__.py
を用意してバージョンを管理して、--version
オプションがついてきた時に表示するのが良さそうだった。
Pythonのパッケージシステム
基本はディレクトリベースのパッケージシステムっぽかった。Python3.2以前は__init__.py
がある場所がパッケージとして認識されてimportできるようになっている。しかし3.3以降はなしでも良いらしい。一方で後方互換性のためや、パッケージから公開するものを明示するために置いてあることも多いようだ。
例えばllama_indexの例を見ると、サブディレクトリの内容を明示的にimportして公開しているものを明示しているように見える。
自分もこれに則って、__init__.py
にモジュールの一覧を書いてみた。
テスト
pytestを使ったら便利ということがわかった。テストの導入は https://github.com/shibayu36/chat-hatenablog/pull/10
またモックについては、最初はChatGPTにDIしろやって教えられた。しかし、このくらいのツールでDIするの面倒だからなんかスタブする方法教えてよって言ったらunittest.mockが使えるって教えてもらえた。便利。
このような感じでさっとAPI利用部分をスタブできて便利。
pytestなど開発用の依存パッケージを書く場所は分けると良い
requirements.txtに依存パッケージを書いているが、pytestなどは実行するために必要ではない。どうやって管理するのが良いのかなと思っていたが、単純にファイルを分ける形式が多いようだ。
例えばrequestsとかは、requirements-dev.txtを作っていた。実際に必要なパッケージはsetup.pyで管理されていそう。
これらを真似して、https://github.com/shibayu36/chat-hatenablog/blob/main/requirements-dev.txt を作っている。
まとめ
今回は簡単にリリース内容紹介 + 開発メモをブログにした。今まで新しい言語を使うときは、まず本を読んで理解した上でざっくり理解してから書くという流れだったのが、何も体系的に学ばずにChatGPT/GitHub Copilotで雑に書きながら学ぶみたいなことが出来るのは面白い。