| @登山/ランニング

唐人の舞手前の地点から糸島方面を見渡す

3年ぶりの脊振山系全山縦走。今回はトレランバージョン。同僚、元同僚、霧えびをきっかけに仲良くなったアラツさんの四人でチャレンジ。

金曜の17:00に福吉スタート。明るい時間に金山前後の危険箇所を通過したかったので夕方スタートにした。

職場の同僚の皆さんが長野峠と坂本峠、九千部山でエイドステーションを用意してくれたおかげで荷物は最低限で済んだ。

3月、三瀬峠脊振山ピストンを2回やったし飯盛1500もやってたので結構トレーニングしてるつもりだったけど、登りで足手纏いになってしまって申し訳なかった。もう少し体重を減らさないとダメっぽい(撮ってもらった動画を見ると自分の小デブ感が際立つ)

夜通し走ったのは初めてだったけど眠くてどうにもならないということにはならなかった。一晩だけのオーバーナイトランならなんとかなるっぽい。

ただし、中盤以降、2回足を引っ掛けて激しく転倒してしまった。手を出してガードすることもできず、顎からぶっ倒れたことも。疲れると足が上がらず躓いてしまうっぽい。脳みそが疲れて正常に働いてないのではとも指摘された。そうかも知れない。疲れたときには意識して足を大きく動かすようにしたい。

以下、セクションごとの記録。

十坊山→女岳

しんどいけどまぁなんとかなった。この辺は個別に何度も登山・トレランしたことがあって夜だったけど大きな不安はなし。浮嶽、女岳の傾斜はえぐい。

福吉駅 福吉駅スタート直後 福吉駅から見る十坊山 苦々しい表情で十坊山登頂 十坊山から眺める夕日 白木峠を経て浮嶽へ

女岳→長野峠

女岳から羽金山がしんどかった。いつまで経っても同じ景色、アップダウンの繰り返し。長野峠には同僚がサポートエイドを開いてくれていると知ってたので待ち遠しかったが、走れど登れど辿り着かない。今回の縦走で一番メンタルに応えた。

桃子で水補給 長野峠の豪華エイド

長野峠→雷山

知ってはいたが長野峠から雷山への登りもきつかった。あまりにへばっていたので同僚がトレッキングポールを貸してくれた。3年前に全山縦走したときも長野峠からの登りはポールを頼りに登ったことを思い出した。ポールを借りたおかげでなんとか登り切ることができた。

雷山→三瀬峠

井原山まではお馴染みの縦走路で快適に走れた。夜景がよく見えた。こんな夜中に走る機会はそうそうないので新鮮だった。

井原山から三瀬峠までは通行量が少ないせいか笹が生い茂っており難儀した。特に幅が狭くて一歩間違えると崖下にダイブという場所で道が不明瞭で怖かった。三瀬峠になかなか辿り着かずやきもきしながら走った。

三瀬峠には自分が前日置いておいた補給物資があったので水を補充して菓子パンやカルパスを食べた。補給拠点で補給食のゴミを捨てられるのがありがたい(ゴミは後日回収して持ち帰ってます)

本富士山からの夜景 前夜に設置した兵糧 どら焼き、マンハッタン、レッドブル

三瀬峠→脊振山

城ノ山から金山、鬼ヶ鼻岩にかけては危険な岩場があるが、眠気と疲れも出てきていたので慎重に通過した。三瀬峠からピストン走するときに比べたらペースが遅いのでやたら長く感じた。唐人の舞の手前あたりで足が躓いて派手にこけた。アゴから地面にダイブ。土の上だったので大したダメージはなし。

脊振山には9時ごろ着いたが、もう昼くらいの気分だった。脊振山では昨晩エイドを出してくれた同僚殿の旦那さんと遭遇した。爆風で寒すぎて山頂の避難小屋に入ってたのでロクな写真なし。

三瀬山と金山の間の危険箇所l

脊振山→九千部山

一部五ケ山脊振クロストレイルとコースがかぶっている。前回の全山縦走とクロストレイルの経験からすごくきつい区間のような気がしていたが、三領堺峠(三国峠)の登り以外はそんなにしんどくなかった。

九千部山までの途中、坂本峠で本当は一緒に走る予定だったが足の不調で見送ったかっぱさんがサプライズエイドを開いてくれてレッドブルをもらって飲んだ。めっちゃ嬉しかった。

九千部山ではさらに別の同僚殿がエイドを開いてくれて、ゆで卵とおにぎりとウィンナーとリポビタンゼリーをもらった。下から水を歩荷してもらっていてめっちゃありがたかった。温かい食事は元気出る。

坂本峠のサプライズエイド 九千部山のウィンナーエイド

九千部山→基山

柿の原峠までは単調な下りが続く。この区間で2回目の転倒。情けない。

柿の原峠から基山までは虚無の舗装路が続く。前回の全山縦走時はこの区間が最もきつかった。この区間は歩くよりも走った方が楽に感じた。あと平らなロードかと記憶していたが実は結構傾斜のある登りが多くて、山から降りてきたあとに峠走をやらされる感じがまたいやらしい。

相変わらず基山の山頂までの急登はきつかったが、3年前ほど絶望的な疲れ方ではなかった。

基山→原田駅

基山に登頂して記念撮影して原田駅を目指す。基山はぱっと見丘のような外見なのに下山が長い。かなり長くトレイルを歩いてようやく下界に出る。しかしまたここからが長い。もうキロ7分ペースでも走れる気力がなくなっていて、基山から先は全歩きだった。

原田駅には17時過ぎに到着。博多に移動してかっぱさんと合流してさしすで乾杯した。

24時間超で原田駅着 博多駅のさしすでかっぱさんも合流して乾杯

装備

  • 帽子
    • パタゴニア ダックビルキャップ
    • Smartwool メリノビーニー(使わず)
  • サングラス
    • Float リゲル
  • ドライレイヤー
    • オンヨネ ブレステックPP
  • ベースレイヤー
    • パタゴニア エアシェッドプロプルオーバー(基本ずっとこれ、フード付きなので少々の風は凌げる)
    • パタゴニア キャプリーンクールデイリースリーブレスシャツ(使わず)
  • ミッドレイヤー
    • STATIC アドリフトクルー(寒いとき、停滞時に着用)
  • ウインドシェル
    • パタゴニア フーディニジャケット(風が強いとき、停滞時に着用)
  • 長ズボン
    • パタゴニア ウインドシールドパンツ(基本ずっとこれ)
  • 短パン
    • パタゴニア ストライダープロショーツ(ウインドシールドパンツの下に着用、寒かったので大峠から先だけ短パンになった)
  • レインウェア
    • 山と道 UL All-Weather Hoody & Pants (使わず)
  • 靴下
    • Danish Endurance メリノハイキングソックス
  • シューズ
    • アルトラ TIMP 5
  • 手袋
    • RxL メリノグローブライト(ハードなトレランには向かなかった、穴が開いてしまった)
  • ヘッドライト
    • Milestone MS-i1 (充電ミスで同僚の予備バッテリーを借りた)
    • Ledlenser NEO1R(予備)
  • GPS ウォッチ
    • COROS PACE 3 (全周波モード&ナビゲーション利用ではバッテリーがもたないかも)
  • ザック
    • PaagoWorks Rush 11R

補給食

たくさん持って行ったがエイドを開いてもらえたので全部食べなかった。ジェルよりカロリーメイトなどの方が食べ飽きない。

サポート・デポ

  • 長野峠
    • 同僚二人によるサポートエイド。夜中にありがとうございます 🙏🏻🙏🏻🙏🏻
    • 水、おにぎり、カップラーメン、羊羹、ジャリパン
  • 三瀬峠
    • 前日夜に自分が設置しておいた
    • 水、 Redbull、マンハッタン、どら焼き、カルパス
  • 坂本峠
    • 本当だったら一緒に走る予定だったかっぱさん(サブスリーランナー)設置のサプライズエイド。グループ位置共有のデータを見てやってきてくれた。
    • 水、カステラ、Redbull
  • 九千部山
    • 同僚が麓から水を 8L 歩荷してくれた。大感謝。
    • 水、リポビタンゼリー、おにぎり、ゆで卵、ウィンナー

総評

まさか自分が0泊で全山縦走できるとは思ってなかった。アラツさんと元同僚のヨギーさんがマイラーで、二人にサンドイッチしてもらったおかげだった。来週の ASO VOLCANO TRAIL 完走に一歩近づけた気がする。

同僚たちが出してくれたエイドにも感激。知ってる顔の人が待っていてくれて温かいものを食べさせてくれると涙が出そうなくらい嬉しくなる。今度は自分がサポートする側でなんかしたいと思った。

| @技術/プログラミング

去年の 3 月に ChatGPT を API で使いたいと思って、 OpenAI の API クレジットを $10 分買っていた。 ChatGPT の API を使っても全然クレジットが減らず、まだ $9.5 分くらい残ってたはずだが、先日買いたブログ記事の要約を作ってもらおうとしたがちゃんと動かない。どうも API がレスポンスを返していないようだ。最初はぶっ壊れたのかなと思ったが、 ChatGPT に聞いてみると以下の通りで、購入から 1 年が経ったら失効するとのことだった。

CleanShot 2025-04-24 at 00.26.51@2x

利用頻度は高くないけれど使えなくなったら不便なので取り急ぎ $5 分クレジットを購入した。

| @写真

三月の出来事

  1. 三瀬峠↔脊振山ピストンのトレイルランニングをソロで2回実施
  2. 油山でのイベント(仕事)
  3. キャナルシティ博多におでかけ
  4. 毘沙門山花見ラン
  5. 自宅でから揚げ密造 阿蘇の丸福のとり天(から揚げ)を再現したかったが失敗
  6. 初の飯盛練コース周回 叶岳神社、飯盛神社、高祖神社の三社参り

| @ブログ

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

結果はこんな感じになる。

実際に動的に生成されたこの記事の og:image

| @ブログ

Photo Gallery

写真でふりかえるやつはフォトギャラリーとして実装した。

  1. PhotoSwipe を使えるように組み込む
  2. PhotoSwipe が期待するフォーマットで本文の HTML を書き出しつつ写真を S3 にアップロードする Rake タスクを作成
  3. PhotoSwipe の Dynamic Caption プラグインを組み込む
  4. ↑の Rake タスクから exiftool を呼び出し、 Exif データを HTML 内に Caption として埋め込む
  5. ↑の Rake タスクに緯度経度から住所を取得する機能を追加( Nominatim の API を利用)

ChatGPT に聞きながらやったらサクッとできてしまった。 AI 、ちょっとやる気がある人がその気になればサクッとプログラムを作れてすごい。 Rails で 10 分で Twitter もどきを作れる〜みたいなのがどんな種類のプログラムでもできる感じ。すごい世の中になった。


フォトギャラリーの機能が面白くて、むかし Flickr の存在を知ったときに猿のように画像をアップロードしてた頃を思い出した。あの頃はウェブ上に写真の Exif 情報が表示されるだけで面白かった。カメラの機種名とかレンズとか、焦点距離とか絞り値とか。自分のブログでそういうのをサクッと表示できてうれしい。 2025 年はもっと写真を撮ってブログにアップしていきたい。こういう発言、ウェブ縄文時代( 2000 年代)っぽい。

Flickr に関してはダメなサービスになってしまったし、悪口のような記事も過去に書いたけれど、 Flickr があるおかげで写真を撮ってアップロードするのが楽しかった側面はあったなぁと思う。 Flickr を使わなくなってから全く一眼カメラを使わなくなってしまった。

フォトギャラリーを作ったので、今後はまめにカメラを引っ張り出して写真を撮りたい。

| @写真