キタ━━━━(゚∀゚)━━━━!!
皆さん、ついにやりました!長らく開発を進めておりました「つぶやきブログ投稿システム」が、ついに完成しましたー!🎉🎉🎉
いやー、ここまで来るのに本当に色々ありましたよ…。(遠い目)
まるで、RPGのラスボスを倒した時のような達成感…!😭
どんなシステムなの?
このシステム、一言で言うと「LINEでつぶやいた内容が、自動でブログ記事になる」という、夢のような(?)システムなんです!
例えば、
- 「今日のランチは〇〇だった!美味しかった😋」
- 「仕事で〇〇なことがあって、マジありえないんだけど…😠」
- 「〇〇の映画見てきた!めっちゃ感動した😭」
みたいな、日常のちょっとしたつぶやきを、LINEでポチポチ送るだけで、それが自動的にブログ記事として公開されちゃうんです!
このシステムのすごいところ
- 手軽さ: 思いついたことをLINEでつぶやくだけでOK!ブログを書くハードルが爆下がり!
- 自動化: 記事の生成から投稿まで、全部自動でやってくれる!めんどくさい作業は一切なし!
- 自由度: テキストだけでなく、画像も投稿可能!アイディア次第で色々なブログ記事が作れちゃう!
開発秘話(ちょっとだけ)
このシステムを作るにあたって、一番苦労したのは、LINEとブログを連携させる部分でしたね。
LINE Bot APIを使いこなすのに、結構時間かかったんですよ…。(汗)
でも、その分、完成した時の喜びはひとしおでした!
システム
ざっくり説明すると、こんな感じ。
- LINEでメッセージや画像を送信
- ローカルサーバーにメッセージと画像を保存
- エージェントが新しいコンテンツを監視
- ブログ投稿をトリガー
- RAGサーバーでコンテンツ分析
- Gemini APIで記事生成
- はてなブログに投稿
はい、文字で書くと、結構ややこしいですね。😅
実際のPlantUMLコード
百聞は一見にしかず、ということで、実際に書いたPlantUMLのコードがこちらです!
このコードをPlantUMLでレンダリングすると、記事冒頭のような図が出来上がります。
図から読み解くシステム
この図を見ると、各サービスの役割とデータの流れが一目瞭然!
具体的には、以下の点が明確になりました。
-
ポート割り当て: 各サービスがどのポートで動いているかが明確になりました。(例:
lineapp2.py
が8083番ポート) - データフロー: LINEから投稿までのデータの流れが矢印で表現されていて、視覚的に分かりやすい。
-
コンポーネントの役割: 各コンポーネントの役割(例:
hatena_post.py
はブログ投稿の処理)が理解しやすい。
特に、データの流れを追うのがすごく楽になりました。
以前は、頭の中でごちゃごちゃしていたのが、図になったことでスッキリ!
各コンポーネントの詳細
各コンポーネントの役割をもう少し詳しく説明しますね。
- lineapp2.py: LINEからのWebhookイベントを受信し、メッセージや画像をローカルストレージに保存する役割を担っています。Port 8083で稼働中。
- hatena_post.py: ブログ投稿を処理する部分。RAGサーバーとの連携や、Gemini APIを呼び出して記事を生成したり、はてなブログAPIで投稿を行ったりします。Port 8100で稼働中。
- flaskapp.py: RAG(Retrieval-Augmented Generation)処理を行うサーバー。過去のコンテンツにアクセスして、コンテンツ分析に使います。Port 4999で稼働中。
- line_to_blog_agent.py: 新規コンテンツを監視し、ブログ投稿をトリガーするエージェントです。Port 8200で稼働中。
PlantUMLのメリット
今回、PlantUMLを使ったことで、以下のメリットを実感しました!
- 可視化: システム全体を視覚的に把握できる。
- コミュニケーション: 関係者とのコミュニケーションが円滑になる。
- ドキュメント: システムのドキュメントとしても活用できる。
- 修正が楽: コードを修正するだけで、図も簡単に更新できる。