誰がログ

歯切れが悪いのは仕様です。

生成AIと一緒にWordpressでオリジナルのナレッジベースを作った

はじめに

個人サイトに専門分野の資料や情報を蓄積する、ナレッジベースと呼ばれるものを作成しました。登録されている記事はまだテスト用の数件だけです。

学術・研究ナレッジベース | 田川拓海

この後簡単に書くように、既存のプラグインを使わずオリジナルのシステムにしました。コードはかなりの部分生成AIに書いてもらったので「一緒に」と言うのはおこがましいかもとは思いましたが、トラブル対応や修正案を考えるのはけっこう自分でもやりました。

これと下記の記事で紹介した、やはりオリジナルの文献情報表示の仕組みと合わせて、ようやくはてなブログからの記事の移行準備が整いました。

Zoteroから文献情報を取得してWordpressで表示させる仕組みを作った - 誰がログ

経緯

先に簡単にまとめると、記事数が多くなりそうなのでナレッジベースのような仕組みで管理したい、でもBetterDocsが使いにくかったのでオリジナルで作ることにした、というところです。

ブログの記事は一過性のものになってしまいがちで、またさいきんははてなブログが生成AIからの(直接の)アクセスをブロックしているということもあって、はてなブログに書いた専門的な記事を個人サイトに移行することを計画しました。

そこでどの記事を移行してどう管理するかを考えてみたのですが、意外と移行の候補数が多くてただ固定ページや記事として移すだけではやはり情報や資料が埋もれてしまいそうです。

そこで、以前から気になっていたナレッジベースを導入してみることにしてみました。当初は自分で作る気などまったくなく、BetterDocsを試してみたのですが、サイトで使用しているSWELLというテーマとどうも相性が良くなかったのです。BetterDocs自体は良いプラグインだと思ったのですけどね。

そこまで詳しくありませんのでざっくり書きますが、SWELLがサイト全体のCSSに与える影響がBetterDocs内の記事にもあって、うまく見た目が調整できませんでした。これについても生成AIに相談しながらいろいろな方法を試してみたのですがどうにもうまくいかず。

ここで運悪く文献情報表示の仕組みの成功体験があったため、「じゃあオリジナルのナレッジベースを作っちゃえ」と思いついてしまったのです。結果としてなんとか形にできましたが、遥かに骨が折れました。

生成AIの環境

エディターや使い分けなど

ZedというエディターとClaudeのSonnet4の組み合わせ、CursorとClaude Code(ProプランなのでこちらもSonnet4)の組み合わせ、でほとんどの作業を行いました。

ただしこれらのプランだとそれほどガンガン使えるという感じではないので、事前の情報収集や方針・案の検討についてはアプリの方のChatGPTやClaudeで下準備をしました。体感としては、イメージややりたいことがぼんやりしている段階ではChatGPTのo3かDeep ResearchあるいはClaudeのOpus4に相談、ある程度やりたいことが具体的になってからの相談はClaude Codeのplan modeがちょうど良い感じでした。Claude Opus4はProプランだとすぐ使用上限が来るので、後に書く問題点の解決のために取っておくという役割分担に今は落ち着いています。

アプリ版のChatGPTやClaudeだと質問や作業を投げて任せることができるので、ほかにやることがある場合にとりあえず依頼だけしておいて、時間ができたら結果を読むというのが細切れな時間を使ったもの作りと相性が良いように思います。特に、通勤で電車に乗っている時間がけっこうあるので、電車に乗る前にDeep Researchを依頼して乗車中にレポートを読むというのは良かったです。追加の質問くらいならスマホでもぽちぽちできますしね。

トラブルとその対応

今回、Soneet4はお任せにするとなんでもコーディングで解決しようとするのでかえって変なトラブルにはまるということがそこそこ起こるなあという感触を持ちました。Wordpress上での管理やプラグインを使ったらあっさり解決したものもあったので自分の介入があった方が結果として良かったというケースが思ったよりありました。アンダースコアとハイフンを間違えるとか、開きタグと閉じタグが一致していないというような、私が目視で気付いたような単純ミスもあってこれは意外でしたね。

そういえば、その時のやりとりではぜんぜん言及していなかった重要なファイルをついでに消してしまう(報告もなし)ということもありました。幸いWordpress側にファイルがあったのですぐ復元できましたが、けっこうこわいですね。

Sonnet4がどうも変にはまってしまったなと感じたときは、アプリ版のClaudeでOpus4に聞いてみるとあっさり解決するという体験を何度かしたので、さいきんはちょっと変だなと感じたらすぐOpus4にも聞いてみています。ただProプランだとOpus4はすぐに使用上限に達してしまうんですよね…Maxプランでやると楽なんだろうなあ。コーディングだけでなく、背景や状況までも考慮したトラブル対応もやはりOpus4の方が良い気がします。

あと、Zedには「New from Summary」という今のチャットを要約して次のチャットに引き継ぐという機能があるのですが、それほどきれいに引き継げるわけではなくまた確認から作業が始まったりしますので、Sonnet4だともうトークン上限に達してしまった、でももうちょっと今の作業を継続すれば一段落、というような状況のときにGemini 2.5 Proにモデルを変更してそのチャットで最後までやりきってもらう、ということでGeminiにも少し手伝ってもらいました。

ナレッジベースに持たせた特徴

最初は記事数を多くしてもある程度整理できれば良いくらいに考えていたのですが、作っているといろいろ欲も出てきて。これが仕事ならコストとか納期とかのリミットが要因で歯止めがきくのかもしれません。

それでもそんなに多機能にはしていません。実装に時間がかかったのはトップページと個別の記事のサイドバーにある目次でしたが、良くあるタイプのものです。

学術関係の記事・情報だと、内容のアップデートと記事自体の修正はずれるよなあというのをずっと思っていたので、バージョン情報は手動で入力するようにしました。個別の記事の最下部に表示されているやつです。

役割語(キャラクターとことばの結びつき)に関する本 | 田川拓海

これは個別の記事の編集時に毎回挿入しているわけではなく、ACF (Advanced Custom Fields) というプラグインで編集画面に入力欄を作り、その内容が自動で表示されるような仕組みにしています。

検索の実装にもチャレンジしてみましたが、オーバーレイ検索の実装が難しくてあきらめました。検索にはプラグインを使用しています。

おわりに

PHPはぜんぜん詳しくないのでかなり大変かもとは思っていましたが、想像以上にエラーやトラブルが多く、何度か「重大なエラーでサイトが表示できません」状態になったりもしました。その際に訪問してくださった方には申し訳ありません。

今後、PHPやWordpressのアップデートにちゃんとついていけるかなど不安もありますが、自分用にカスタムした環境はやはり快適ですね。この後待っている長くなりそうな移行の作業もがんばりたいと思います。

【発表応募締め切り7月21日(月)】Morphology and Lexicon Forum 2025(9月13-14, つくば)

Morphology and Lexicon Forum (MLF) 2025が9月につくばで開催されます。発表応募締め切り(7月21日(月)23:59)まで1週間を切りました。

詳細は下記の公式サイトをご覧ください。

Morphology & Lexicon Forum (MLF) Official Site

開催の概要は下記の通りです。会場は筑波大学ではないのでご注意ください。つくば駅に近い施設なので大学より参加しやすいと思います。

デジタルコミュニケーション研究会の発表資料を公開しました

第5回デジタルコミュニケーション研究会の発表「マイクロブログを対象にした日本語研究の可能性:XからBlueskyへ」を終えました。参加してくださった皆さんありがとうございました。

特にBlueskyに関するところは新しく取り組んでいるところで技術的な面など不安なところがいろいろあったのですが、会ではポジティブに議論していただいたのでたいへん刺激になりました。

発表資料(スライド)をResearchGateとAcademia.eduで公開しています。以下それぞれのリンクです。ファイルはまったく同じですので興味のある方はなじみのある方で見てみてください。表現や文字装飾など発表時に使用したものに若干修正を加えていますが、内容はそのままです。

www.researchgate.net

www.academia.edu