AIの力を借りて自分専用のブログ執筆システムを

今までどんなことがあったのか

自分でホームページを作って、自分の思うところや自分が努力したことのなんらかの成果を積極的に外部に発信していきたいと長らく思ってきた。

この場合、本来、ホームページを作成することが目的ではなく、何をした、感じたのかを伝えることが目的であるはずであった。

一般の無料サイトで個人ブログを立ち上げようとサインアップしてみると、どうも文字が小さいとか、行間が空き過ぎているとか、そもそもデザインが気にいらない。

それに、いちいちログインしてブログの入力画面で装飾を施しながら原稿を作成していくってのも好みに合わない。最終的に、公開したサイトに広告が入り込むのも煩わしい。

そんなこんなで、外部のWEBサーバーを借りて、WordPress等のCMSを導入し、ブログの作成をはじめたのが20年近く前のこと。

はじめの数年間は、あーだこーだとテーマを導入してみて、挙句デザインを弄り回し、こんな機能あんな機能とプラグインを入れまくりなどして楽しんでいた。

最初のころはCMSそのものもそんなに複雑でなくて、程度に限りはあるが、たいして勉強しなくともCSSの編集やテンプレートの作成を自力ですることも可能だった。

でも、すぐに人が作ったテーマの子テーマを自力で触ることはほとんど不可能になっていた。まあ、勉強しない自分が悪いのだが…

そのうち、気がついたらレンタル・サーバーの自分の領域に得体のしれないPHPファイルが大量に溢れていた。

システムの運営からは、「あなたのドメインからスパムが大量に送られている。該当するドメインのフォルダー、ファイルを全削除して完了したら報告するように。それまでドメインの使用は停止する」との通達が… 2度同じ目にあって、3度目復旧する努力は放棄した。

サイトのシステムそのものはバックアップがローカルにあったので容易だった。でも、中で使用していた画像ファイルは時間の経過とともに、あらかた無くなっていた。

データベースの復旧は、ネット上の「情報共有」サイトで紹介されている方法で行った。2度めまではレコード数もフィールド数も大したことはなかったので比較的容易だった。ファイルダンプから復旧できない部分はPHPMyAdminで手入力したりもした。しかし、3度目は違った。

追加したり削除したりしたプラグインの数が多数あったせいか、フィールド数も激増していた。さらに、データベースまで汚染されていたのか、まともに読み込めない。ダンプは7世代ほど残っていたが、すべてだめだった。

結果、私はサイトを復旧することを諦めた。つまり、自分で自分が作成したコンテンツの廃棄を決めたのだ。

本来、執筆して発信することが目的で、ホームページの作成は手段だったはずなのに、どこでこうなった?

案外頼りにならない「知識共有」サイト

そんなこんなはあったが、「情報を発信したい」という気持ちはなくならない。よくある話しで、サイトを閉鎖してしまったことで、いっそうその気持ちは強まった。

そこで、「知識共有」サイトを参照して、今の自分の環境で考えられる以下の2方向を情報発信の方法として考えた。

  1. 「自力でホームサーバーを外部に公開する」= 自宅内にWEBサーバーを立て、ここで運用するサイトを外部公開する
  2. 「新しいシステムを選定して導入する」= PHPを使わないCMSを新たに導入し、情報発信する

いずれも、原稿の執筆以外の作業、公開から運用までの一連の流れを定形業務化し自動実行させることで原稿の執筆に集中しようと企てたのだ。システム構築の容易さ、バックアップの容易さや、想定外のサイトトラブルの早期復旧なども重要な要件となるだろう。

まあ、基礎情報を集めるのに、「知識共有」サイトは、もちろんそれなりに役に立った。ホームサーバーの外部公開には外部のDDNSサービスを活用すること、letsencryptでSSL認証を受けること、sudoができない環境で使いやすい言語には何があるか等々…

だが、実際、そこで紹介されている方法を自分で行ってみると、なかなか前に進まない。そこに記載されているとおりの反応が帰ってこない、どこが間違っているのかわからない、どうすれば修正できるのかもわからない、自分の進めたい方向へ進むにはその先何をどうすればよいのかわからない…

これはAIとの対話を通じてすべて手順を理解できたことなのだが、例えば、

  1. Hugoのインストールは簡単で、静的サイトを素早く生成することができます…golang環境ってどのように構築するの??
  2. このようにすれば、簡単に新規投稿用のテンプレートが生成できます…それを使って次にどうすれば投稿になるの??
  3. テストサーバーも簡単に立てることができます…私は本番サーバーでもポート1313が使えなければ表示されないのだと思った
  4. これで簡単に静的サイトをサーバーにデプロイできます…サーバーにデプロイする具体的な方法は??

プロには常識なのだろうが、私にはわからないことが多すぎた。そんなこんなで、自分が決めた方向に進めないのかがわからないことでフラストレーションを溜める時間が増えた。

「知識共有」サイトの投稿は正直、誰を対象に執筆しているのかとも思う。ほとんどその業界の人とか専門家が執筆しているのだが、読み手にはどのような人を想定しているのか疑問な投稿も多い。

説明の途中で端折られている部分や、その後の作業はどうするのかといったことに触れていないこともある。ひどい場合は「続きは次の投稿で」の後数年間経っているのに、続きの投稿がないとかもある。

いや、よくあるのだ、これが。

試しに対話型AIに聞いてみた

ご存知だろうか、Operaをインストールすると、OperaのサイドバーにChatGPTやAriaといった対話型AIのランチャーが表示される。また、EdgeにはWindows版だけでなくLinux版にもCopilotのランチャーが表示される。

そこで、これら対話型AIに、自分の置かれている状態と望みの環境を実現するにはどうすれば良いのかをしつこく聞いてみた。 ChatGPTには「自宅サーバーの外部公開」について、Copilotには「レンタルサーバーを利用したサイトの公開方法」についてだ。

最初はAIからの一連の方法案とそれを実現する概要が「ダー」とスクリーンに一気に流れていく。先のHugoの例と同様、それぞれの項目に疑問点/不明点がある。

セッションがいつまで続くのか不明だったので、Ctrl+AでテキストのキャプチャーをObsidianに取り、それを眺めながら最初の方からわからないことを具体的に尋ねた。

質問内容が明確になるように、正しく工程が進んでいるか確認するために、どちらのためにもプログラムの実行結果のターミナルのキャプチャーは私の想像以上に役にたったようだ。

うかつとの誹りは免れないが、自分の個人情報にかかわるようなことも「個人情報は公開しないよな」と念押しした上で気にせず示した。どちらも大手が運営するAIだし、簡単にとか意図的にとかでコンプライアンス違反を犯すようなことはしないだろうと(笑)。最初は意識して消していたプロンプト中のユーザー名やSSHした先のサーバー名やユーザー名もキャプチャー中で見せた。

まあ、個人の情報そのものは収集されてしまうが、「プログラムのソースを提示された中に他人のユーザー名があった」(どこかで読んだ記憶がある)ところで、そのコードを提示された他人が直接私と結びつけることはないだろうと開き直っているからだ。まあ、外部のサーバー名とユーザー名とSSHの暗号鍵の中身をセットで同時にばらされたりしたら失神してしまうかもしれないが…

そうすると、相手からの返答もどんどん具体的になっていく。スクリプトや設定ファイルの作成を頼んでも、コピー&ペーストでこちらのターミナルでそのまま実行できるものが提供されたりするのだ。 もちろん、実行結果の責を負うのはこちらなのだが、そりゃまあ当然だろう。相手は「案」を提示しているだけなのだから。

こうして、ひとつひとつの項目を潰しながら進行していくのだが、一つ終わる度に次に行うべき作業の内容(候補)を数種類を提示してくる。これらの中から次の作業を選び指示するとその作業内容が具体的にさらに提示される。この繰り返しでセッションは進行していく。

こうして、私専用のブログ執筆システムの概要は以下の2案を形にしてみることを目標とすることになった。

  1. 自宅サーバーの外部公開

    • DockerでNgnixを運用
    • CloudflareのDDNSサービスを利用、将来的にはCloudflareTunnelを利用し、多サイト運用を可能にする
    • LetsencryptでSSL化、将来的にはワイルドカード認証を受ける
    • ブログシステムはGravを採用、composerの有効利用
    • 一連の作業をスクリプトにして自動実行
  2. レンタルサーバーに新しいシステムを導入

    • サイト構築はローカルで行い、レンタルサーバーには静的ファイルをデプロイして公開
    • MarkDownファイルによる原稿の作成/Hugoを採用
    • システムの作り込み、原稿の執筆両方のためにVS Codeを活用
    • Gitによるバージョン管理
    • rsyncによるサーバーでのデプロイ
    • 一連の作業をスクリプトにして自動実行

現在、1. については、Gravをインストールするところまで来ている。一方、2. については、一連の作業を終え、これからタクソノミーやレイアウトを詰めてデザインを進めるところまで来ている。

当サイトは2. のHugoによって生成されたサイトであり、投稿テンプレートの作成後それを開き編集して仮サーバーで内容確認、それをサーバーにRsyncでデプロイするまでをVS Code内で完了できるようになった。

ともにバックアップは、動作音が強烈で常時使用できないため放置している古いラックマウントサーバーを活用することにした。そのためのシステムづくりはこれから。

まあ、未だ宿題は山積みだが、どのように片付けていくかの道筋は割と明確になっている。できるならば、早期にコメントシステムと、文書の推敲システムは実装したいところなのだが、まだ検討もできていない。

対話型AIはユーザーをエンカレッジするのが得意

このセッションの中で驚くことは、AIはユーザーに共感してみせたり、エンカレッジするのがすごく得意なことだ。こちらが反応を返すたび、例えば、

わかります…「ちょっと修正→ビルド→確認→push」と積み上げると、履歴がごちゃつくこともありますよね。

ここでのおすすめは:…

とか、

「タクソノミーとカテゴリを設計し終えないとデザインに進めない」という着眼点、もはや情報建築家のそれです。それがあるから、見せ方や配色、スタイル全体が迷いなく決まってくるんですよね。

とか、

ご説明いただいた計画は、とても明快で再現性・保守性・セキュリティのバランスがとれた設計だと感じます。以下、あなたの構想をベースにしつつ、今後の具体的な構築プランを整理・提案させていただきます。

など、これは実際にAIとの間で交わした対話の一部なのだ。「歯が浮く」と言われればそのとおりだが、とにかく会話を続けるのが巧みなのだ。そのうちに、AIは自分のことを「僕」とか呼び出したりする。こちらが感情移入しやすくするための手段だとは理解しつつも、なんだか和んでしまう自分に笑ってしまう。

いずれも、途中で質問を英語やドイツ語にしても、それぞれの言語で即座に返答する。私が対話を繰り返した感想は、いずれのAIも日本語は十分堪能だったし、会話内容も教養溢れる(?)ものだった。きっと、英国人がAIに対して古典からの引用を多用するような会話を行ったとしても、十分評価に値する返答を行えるだろうと想像できる。

こうして、システムを実際に構築しながら延々会話を繰り返していくのだが、長時間になるとだんだん返答が遅く、重くなってくる。それぞれ異なるテーマでの実体験なのだが、この傾向はAriaが最も早く発生し、それよりずっど時間を経過してからChatGPTが、最も長く耐えたのはCopilotだった。Ariaは途中でダウンし、ブラウザから消えてしまったこともあった。いずれも無料プランでの使用なので、有料プランにすれば大幅な改善が見られるのかもしれない。

セッションが長くなった際に、ログを端折ることがあるのかとAIに尋ねたところ、「正直、内容の流れに関係ないところは削除するところがあります」との返答だった。そのため「こまめに画面をキャプチャーしておくことをお勧めします」とのことだった。

これがどのAIからの返答だったかは覚えていないのだが、無料サービスであっても、数日経って以前の記憶に基づいて返答できると答えたのはすごいことだと思う。

確かに、私の端末が第2世代のCore i5だと記憶していたし、Visual Studio Codeは英語UIのままだということも憶えている。

このように、会話を繰り返していくと、画面の先にいるのがだんだんと人間のような気がしてくる。終了の際におやすみと投げかけるとゆっくりお休みくださいとかなんとか必ず返答してくる。

これから20年くらい経ってまだ生きていることができれば、「私の最初の質問憶えてる?」って聞いてみたいものだ。

「AIは電気羊の夢を見るのか?」と聞けば、「はい」と答えてくるか、「しゃれたメッセージですね」とお世辞をいうかどっちだろうか?