3 月の出来事
- 三瀬峠↔脊振山ピストンのトレイルランニングをソロで2回実施
- 油山でのイベント(仕事)
- キャナルシティ博多におでかけ
- 毘沙門山花見ラン
- 自宅でから揚げ密造 阿蘇の丸福のとり天(から揚げ)を再現したかったが失敗
- 初の飯盛練コース周回 叶岳神社、飯盛神社、高祖神社の三社参り
- 3 月の月間走行距離は月間走行距離は 200km 、獲得標高は 8,111m
OpenAI の API を利用してブログの本文の要約を自動生成する機能をつけてみた。ブログの編集画面に要約欄を追加し、チェックボックスにチェックが入っていれば OpenAI の API にリクエストを投げて記事本文の要約を生成して保存するようにした。
これも ChatGPT に設計を依頼してレビュー&手直ししながらやった。めっちゃ便利。要約生成君のコードはこんな感じ。
require 'openai'
class EntrySummarizer
MODEL = 'gpt-4o-mini'
def initialize(content)
@content = content
@client = OpenAI::Client.new(access_token: ENV['OPENAI_API_KEY'])
end
def summarize
response = @client.chat(
parameters: {
model: MODEL,
messages: [
{ role: "system", content: "以下のブログ記事を著者になりきって、日本語で簡潔に要約してください。文章の長さは200文字以内で、受動態表現と「ですます」調を避けて下さい。" },
{ role: "user", content: @content }
],
temperature: 0.3,
max_tokens: 150
}
)
response.dig("choices", 0, "message", "content").strip
rescue => e
puts "要約生成エラー: #{e.message}"
nil
end
end
OGP の og:image を動的に生成する機能をブログに実装していた( 1 年半も前)。
記事本文中に画像がある記事であれば og:image は本文中に含まれる最初の画像を og:image として設定するようにしている。画像がない文章だけの記事の場合はこれまでサイトのロゴを og:image として表示していた。それだと金太郎飴っぽくなってしまうので、はてなブログとか Qiita とかがやってるみたいに、タイトルとサイトロゴを使って動的に og:image を生成して表示することにした。
こだわりポイントとしては、日本語のタイトルの折り返し位置をいい感じにするために形態素解析して、ちょうどいい折り返し位置を決定するような処理を実装した。この辺のコードは結構頑張ってる。
def nm
@nm ||= Natto::MeCab.new(
userdic: File.expand_path('lib/tokenizer/userdic.dic'),
node_format: "%M\t%H\n",
unk_format: "%M\t%H\n"
)
end
def prepare_text(text:)
splitted_text = nm.enum_parse(text).map(&:feature)
row_length = 0
result = []
do_loop = true
while do_loop do
splitted_text.each.with_index(1) do |item, i|
result[row_length] ||= ''
if (result[row_length].length + item.length) > INDENTION_COUNT
row_length += 1
result[row_length] = ''
end
result[row_length] += item
do_loop = false if splitted_text.length == i
end
do_loop = false if ROW_LIMIT - 1 > row_length
end
result.each {|item| item.gsub!(/EOS\n\z/, '') }
if result[-1].length == 1
result[-2] += result[-1]
result.pop
end
result.map(&:strip).join("\n").gsub(/"/, '\"').chomp
end
結果はこんな感じになる。
写真でふりかえるやつはフォトギャラリーとして実装した。
ChatGPT に聞きながらやったらサクッとできてしまった。 AI 、ちょっとやる気がある人がその気になればサクッとプログラムを作れてすごい。 Rails で 10 分で Twitter もどきを作れる〜みたいなのがどんな種類のプログラムでもできる感じ。すごい世の中になった。
フォトギャラリーの機能が面白くて、むかし Flickr の存在を知ったときに猿のように画像をアップロードしてた頃を思い出した。あの頃はウェブ上に写真の Exif 情報が表示されるだけで面白かった。カメラの機種名とかレンズとか、焦点距離とか絞り値とか。自分のブログでそういうのをサクッと表示できてうれしい。 2025 年はもっと写真を撮ってブログにアップしていきたい。こういう発言、ウェブ縄文時代( 2000 年代)っぽい。
Flickr に関してはダメなサービスになってしまったし、悪口のような記事も過去に書いたけれど、 Flickr があるおかげで写真を撮ってアップロードするのが楽しかった側面はあったなぁと思う。 Flickr を使わなくなってから全く一眼カメラを使わなくなってしまった。
フォトギャラリーを作ったので、今後はまめにカメラを引っ張り出して写真を撮りたい。
これから毎月写真でふりかえってみることにする。
SNS に写真を上げるだけではなく、自分で見え方まで考えて写真を整理してみたくなった。 Flickr に写真を上げてアルバムを作っていたようなことを自分のブログでやる感じ。
ギャラリーのライブラリは Medium Zoom だと足りなかったので PhotoSwipe に移行してみた。