$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

ChatGPTを使って自分のはてなブログとチャットするツールを作った

【2023/04/18追記】現在、この記事で説明したものから使い方のインターフェースが変わっているので、実際に使うときは https://github.com/shibayu36/chat-hatenablog のREADME.mdを参考にしてください。

以下の記事を見て、もっと気軽に自分のはてなブログとチャットしたいなと思った。

そこで自分のはてなブログとチャットするツールを作ってみた。 https://github.com/shibayu36/chat-hatenablog

やりたかったこと

僕はコードレビューでコメントする時、自分の意見を補足する目的で、参考となる自分のブログや他の人の記事を紹介することが多い。その時には自分のブログから記事を検索して、該当の記事を見つけて、URLを貼り付けてというようなことをしていて、非常に面倒に感じていた。

ChatGPTを使えば、この作業をよりいい感じにできるのではと考えた。具体的には質問を投げかけると自分のブログを使って回答を生成し、さらに追加で参考URLを出してほしい。

できたもの

以上のことを実現するために、chat-hatenablogというツールを作った。 https://github.com/shibayu36/chat-hatenablog

このツールははてなブログのエクスポート機能で出したMTファイルを使ってインデックスを作り、それを元に回答を生成してくれる。たとえばこんな感じ。回答と共に参考URLも出してくれるので非常に便利。中身も自分のブログっぽいことが出てきている。

$ python ask.py --query GitHubでPullRequestを送ってレビュー依頼をする時、事前にすべきことはありますか?

THINKING...

ANSWER:
はい、事前に自分自身でコードレビューを行うことが重要です。具体的には、必要な部分だけをgit addし、git diff --cachedによって差分を確認し、自分自身でセルフコードレビューを行うことが大切です。また、PullRequest作成時には、自分自身でファイルの内容をレビューし、修正が必要な部分は直し、わかりにくい部分にはGitHub上でラインコメントを行い、必要に応じてコード上にコメントを残す ことも重要です。さらに、ユーザーの導線に影響するコードの場合は、自動テストだけでなく、自分自身でユーザーの行動をトレースし、違和感がある部分が存在しないかチェックすることも必要です。これらの作業を行うことで、手戻りの量を減らし、より品質の高いコードを提供することができます。

refs:
- コード変更で抜け漏れやミスを少なくするための習慣: https://blog.shibayu36.org/entry/2022/04/24/160753
- 仕様や実装方針の相談をPullRequestで行う取り組み: https://blog.shibayu36.org/entry/2016/08/05/103000
- はてなで開催されたGitHub勉強会に行きました: https://blog.shibayu36.org/entry/2014/06/05/021210
- コードレビューを段階的に行ってもらう話: https://blog.shibayu36.org/entry/2016/06/30/110000

使い方

https://github.com/shibayu36/chat-hatenablog をgit cloneした後、いくつか必要なセットアップを行う。

pip install -r requirements.txt

.envファイルへ以下を書く。

OPENAI_API_KEY=...
BASE_URL=https://blog.shibayu36.org/entry/

初回はインデックスを作成する。

python make_index.py --mt-file blog.shibayu36.org.export.txt

一度インデックスを作れば、質問をすることができる。

python ask.py --query GitHubでPullRequestを送ってレビュー依頼をする時、事前にすべきことはありますか?

ブログに新しいエントリが増えたら、再度エクスポートしてインデックスを作り直せば良い。一応差分更新に対応している。*1

python make_index.py --mt-file blog.shibayu36.org.export2.txt

Tips

ChatGPTとGitHub Copilot強い

僕はこれまでPythonをまったく書いたことがなかったのだが、ChatGPTとGitHub Copilotを使ったら、とりあえずそれっぽく書けたのはすごかった...しかも爆速で開発できた。もし使ってなかったら、そもそもPythonの学習から始めないといけなかったと思うので、モチベーションが尽きて完成させられなかったかも。

とりあえずこういうのをサクサク教えてくれて便利。

またCopilotを使っていると、基本構文やライブラリの使い方、メソッドコメント、なんならcommit messageの英語なども含めてサクサク補完してくれて良かった。

ChatGPTとはてなブログを繋げる仕組み

ChatGPTを使って自分のブログ風回答を生成する仕組みを学ぶ - $shibayu36->blog; に書いたので参考にどうぞ。

まとめ

今回は自分のはてなブログを気軽にインデックスしてチャットするツールを紹介してみた。もし使ってくれたら感想ください。

*1:現状新しい記事には対応できているが、昔の記事を編集した場合は変になってしまうことに注意