| @登山/ランニング

福岡マラソンが迫っているので大濠公園で 30km 走をした。午後休をとって 15 時過ぎから走り始めた。携帯を持たず、現金 1500 円だけ持ってウォーミングアップがてら会社から走って大濠公園まで行った。シューズは本番で使おうと思っている ASICS の Magic Speed 4 のワイド 26.5cm 。初めて使うシューズなので心配だったが、左のかかとが少し痛くなりはしたものの、靴擦れなどは起きなかった。走り始めは暖かかったが 17 時前から気温が下がり、走り終わる頃はかなり寒かった。走り終わってから会社に戻ってグループランに参加したのでこの日一日で 40km 走ってしまった。めちゃ疲れたがいいトレーニングになった。

ペースはこんな感じ。

大濠公園 30km 走 2025年

ダニエルズのランニングフォーミュラに M ペースと E ペースは同じトレーニング効果なので M ペースで練習する必要はないと書いてあったが、走り出したら気持ちがのって 5'20" くらいで走ってしまった。 20km 過ぎからペースが落ちているが、それでも 6 分台までは落ちなかった。心拍数にも余裕があった。

ちなみに去年の 10 月に同じように大濠公園で 30km 走をしたときは以下。

大濠公園 30km 走 2024年

20km 過ぎからガクンとペースが落ちている。

今年は 8 月、 9 月、 10 月と月間走行距離が 200km に至ってないので心配だったが、 ASO VOLCANO TRAIL 前後で走り込んでいたおかげか、去年よりかは調子がよいのかも? グロスタイムでサブフォーできることを期待している。

| @写真

2025 年 10 月のできごと

| @写真

2025 年 9 月の出来事

  • iPhone 17 Pro を買った
  • 冷や汁をよく作って食べた
  • 月蝕を見た
  • コテンラジオで伊藤野枝のエピソードを聞いた(伊藤野枝は今宿出身)
  • Audible で『国宝』を聞き始めた
  • Docker イメージの手入れカテゴリー・タグ検索の実装
  • 8 月に引き続いてあまり走れず、月間走行距離は 123km

| @ブログ

カテゴリー検索

ふと思い立ってカテゴリーで検索できるようにしたら便利だろうと改修してみた。 Tantiny には facet_query というものがあって、カテゴリー名などは検索インデックスの型を facet にしておくと、カテゴリーだけを検索対象にできる。実装してみたところ便利。カテゴリー内の記事一覧ページを表示する機能はあるが、本文やコメントなども読み込むため遅い。タイトルだけ一覧でがっと欲しいときにカテゴリー検索は便利。

同様にタグでも検索できるようにしてみた。こちらは term_query を使っている。本文の検索は検索キーワードを形態素解析してトークナイズされた文字列で検索しているが、タグ名での検索は exact match をするようにしている。なので過不足あればヒットしない。完全一致で検索したいときに便利。

ただ、これまで記事にタグを設定してこなかったのでタグ未設定の記事が多い。ということで ChatGPT に記事の内容を読ませてタグを自動生成してもらうようにした。ちょっとへんちくりんなタグを設定することもあるが、文脈を読んでタグを設定してくれる。本文中にキーワードはないけど記事の内容に合致するタグを選んできたりもする。賢い。

ちなみに今回 ChatGPT のモデルを gpt-4o から gpt-5-mini に変更した。 GPT 5 系に移行するためには Chat API から Responses API への移行が必要だった。最初それがわからず難儀したが、 Responses API の方がパラメーターがシンプルで使いやすい。例えば JSON のフォーマットを指定したいとき、 Chat API だと JSON Schema で定義を書いて渡す必要があったが、 Response API であればプロンプト中に「こういうフォーマットでくれ」と書けばそのフォーマットで返してくれる。すごい。

require 'openai'

class EntryTagGenerator
  MODEL = 'gpt-5-mini'
  PROMPT = <<~EOF
添付のブログ記事に関して、文章の内容を反映したタグを付与してください。ただし、以下の条件を遵守してください。

1. ブログ全体のタグの一覧は「 %s 」です。ふさわしいものがあればそこから利用してください。なければ新しいタグを考えて設定してください。
2. タグの数は最大で 5 個までとします。
3. すでにタグが付与されている場合は、現在のタグを加味して 5 個までタグを付与してください。現在のタグが内容にふさわしくなければ削除しても構いません。
4. タグは極力一語で構成されるようにしてください。固有名詞の場合はその限りではありません。
5. 略語は避けてください。固有名詞の場合はその限りではありません。
6. 「減量ダイエット」のような意味が重複する二つの単語で構成されるタグは付与しないでください。固有名詞の場合はその限りではありません。
7. タグは半角スペースを含んでも問題ありません。"GoogleAnalytics" ではなく "Google Analytics" でよいです。
8. レスポンスは JSON フォーマットで、以下のような形式にしてください。

\```json
{
  "tags": ["tag1", "tag2"...]
}
\```

# ブログ記事 #

## タイトル ##

%s

## 本文

%s

## すでに付与済みのタグ

%s
EOF

  attr_reader :response

  def initialize(title, body, tags)
    @title = title
    @body = body
    @tags = tags
    @client = OpenAI::Client.new(access_token: ENV['OPENAI_API_KEY'])
  end

  def generate
    @response ||= begin
                    request = @client.responses.create(
                      parameters: {
                        model: MODEL,
                        input: input,
                        reasoning: { effort: 'minimal' }
                      }
                    )
                    JSON.parse(request.dig("output", 1, "content", 0, "text").strip)
                  rescue => e
                    puts "タグ生成エラー: #{e.message}"
                    nil
                  end
  end

  def input
    PROMPT % [Tag.joins(:entries).pluck(:name), @title, @body, @tags]
  end
end

| @写真

2025 年 8 月の出来事

  • 東京出張のついでに山と道、ハイカーズデポ訪問。高尾山にも登った
  • 会社の TGIF にローストビーフ持って行った
  • 実家に帰省した際に杵島岳に朝駆け
  • 国見岳山頂祠再建の歩荷ボランティアに参加
  • 国見岳ボランティアの帰りに甲佐のたこやき大阪蜂来饅頭でたこ焼きを買い、亡き祖母を偲ぶ
  • 月間走行距離は 107km (6ヶ月連続月間 200km オーバーならず 😢)

| @登山/ランニング

福岡マラソンにまた今年も出る。昨年はネットタイムでギリギリサブフォーだったが、グロスタイムでは4時間を切れていなかった。ゴール後、やっとサブフォーできたと思って携帯を開いたら元同僚の速いランナーから「サブフォー惜しかったですね」とメッセージが届いていた。ガチラン勢からするとネットタイムの記録は正式なものではないらしい。なので今年こそはグロスタイムでもサブフォーやったろうと思う。

走り込みなどの練習をやるのはもちろんだが、今年は体重をできる限り落とそうと思う。以前読んだランニングについての本で、体重を1kg落とせばフルマラソンのタイムは3分縮められると書いてあった。減量を決意したタイミングで69kgくらいだったので5kg落として64kgを目指したい。本の理屈に従うなら、体重を5kg落とすだけで15分タイムを縮められることになる。BMIは21.6、体脂肪率は15%を目指したい(それぞれ現在は23.3、20.9%)。

この要件を ChatGPT に伝えたら計画を立ててくれた。

ChatGPT による減量計画

これを Numbers に転記して週次で体重、体脂肪をトラッキングしている。

週次減量計画

計画・実績グラフ

ダイエットアプリは何がよいかも相談して、 MyFitnessPal とあすけんだったら日本人には和食のデータが充実してるあすけんの方がよいと教えてくれたのであすけんを使うようになった。あすけん、ポップアップが断続的に表示されて UI は良くないしサーバーが遅くてイライラするけど、アプリ内の飽きさせない企画とかはよく考えられてるし(職場でプロダクトマーケティングしてる同僚に使わせたい)、食品データの豊富さも便利。

週次のグラフには現れてないけど、先週結構頑張って体重が 65kg 台になったので引き続き頑張って体を絞っていきたい。

ダイエットだけでなく、ランニングの目標管理・レビューも ChatGPT にしてもらってる。 ChatGPT が適度に励ましてくれるおかげか、 5 ヶ月連続で月間 200km オーバーの走行距離を維持できてる。これまで専門的なトレーナーとかコーチにつかないとやる気を引き出すのって難しかっただろうけど、 AI がそれを肩代わりしてくれるようになってきてる。

AI が肩代わりできるのは知識の領域だけで、人を励ましたりするのは人間にしかできないと思ってたけど、 AI でもやれるっぽい。どんどん人間ができることが減ってきてる。ちょっと恐ろしくもある。

| @写真

2025 年 7 月の出来事

  • 6 月に初めて飲んだヤッホーブリューイングの有頂天エイリアンズ HAZY IPA がうまくてよく飲んだ
  • 会社から自宅まで初めて帰宅ランしてみた
  • 熱中症になりながら生の松原でインターバル走した
  • 真夏の宝満山に登った
  • 宇土の長田部海床路まで夕焼けを見に行った
  • 月末に東京出張に行った
  • 月間走行距離は 200km ちょうど(5ヶ月連続月間 200km オーバー)