| @登山/ランニング

Garmin Epix Pro

検証用に会社の予算で Garmin の Fenix 7 Pro を買ってもらって 3 ヶ月ほど使ってみた。かなり気に入ったので個人で Garmin の Epix Pro を買い、 Apple Watch から乗り換えることにした。

これまで自分は、走ってる時間よりも日常を過ごす時間の方が長いから、日常生活で便利な Apple Watch を使うのがいいと思ってきた。しかしハードウェア的な設計の良さとランニング支援機能で Garmin の便利さが身にしみてわかり、 Apple Watch から Garmin へとスイッチするに至ってしまった。

これまでのスマートウォッチ遍歴

自分はランニングをはじめて以来、 Apple Watch をずっと使ってきて、 Ultra も買ったが、普段のランニングで使うには重すぎて定着しなかった(ノーマルの Apple Watch だとバッテリーが持たない長いトレランのレースでは重宝した)。

日常をともにする時計としては Apple Watch が便利なのだが( Apple Pay 、 Siri 、 Mac の認証・ロック解除、プッシュ通知の受け取り)、トレーニングについてのサポート機能が不足していると感じて COROS の Pace 3 も買ってみた。

COROS Pace 3 を使ってみて感じたこと

COROS はトレーニングの指南をしてくれるのは便利だと思ったが、 Apple Watch を置き換えるほどでもないなと思った。なにより COROS Pace 3 は軽いのはいいのだがプラスチッキーで質感があまりよくなく、バックライトの点灯やバイブレーションといったハードウェア部分の作り込みが甘いと感じた。

バッテリーは Apple Watch よりかは断然持つが、ナビゲーションをオンにして使っていると 24 時間くらいしかバッテリーが持たず、 100 マイルのトレランレースで使うのは厳しい。自分は 112km の ASO VOLCANO TRAIL に COROS Pace 3 を着けて出走したが、 25 時間かかったのでバッテリーがギリギリになり、最後の 20km くらいはナビゲーションをオフにして走った。

Fenix 7 Pro で一気に解消された不満

Garmin Fenix 7 Pro を使ってみたところ、 Ultra を含む Apple Watch や COROS Pace 3 に対して感じていたソフトウェア・ハードウェア的な不満が解消されてとっても気に入ってしまった。

スマートフォン用アプリのビジュアルデザインは COROS の方が優れているのだが、健康管理とかトレーニング指南的な機能は Garmin Connect の方が優れていると感じる。 Apple Watch の場合、 Apple のヘルスケア・フィットネスアプリは iOS 26 になって以前よりかはマシになったとは言え、踏み込んだアドバイスをしない。

一方で Garmin Connect では Body Battery や Training Readiness なる指標があって、トレーニング状態と睡眠時間、 HRV (心拍変動)からその日の体調を推測し、最適なトレーニングメニューまで提案してくれる。

タフなハードウェアと圧倒的なバッテリー

ハードウェアもよくて、 Fenix 7 Pro はチタンベゼルでガラスはサファイアガラスなのでめっちゃ頑丈。全然傷が入ったりしない。

バッテリー時間もメチャ長い。結構ランニングするタイプの人でも一週間に一回充電すれば十分。 3 ~ 4 日程度の出張なら充電のことを気にする必要がない( Apple Watch は充電器を忘れないように気をつけないといけない)。

COROS Pace 3 はバックライトの点灯やバイブレーションが野暮ったいとは先ほど書いた通りだ。これらは Apple Watch が最も洗練されているが、 Garmin は COROS と Apple Watch の中間といった感じ。 Apple Watch ほどよくはないが、うんざりするほどでもない。

重さは気になるかなと思ったが、シリコンベルトと本体の重量配分がちょうどいいのか、走っていて重たいと感じたことはない( Fenix 7 Pro は 73g )。

地味だけど圧倒的に便利な「LEDフラッシュライト」

そして Garmin Fenix 7 Pro で最もよいと思っているのが LED フラッシュライトで、夜に帰宅して玄関周りの暗がりを照らすときや、夜中に目が覚めてトイレに行くときにも便利。山に行ったときに下山が遅くなってヘッドライト付けたらまさかの充電忘れで点灯せず、暗闇のなかを Fenix のフラッシュライトを頼りに下山したことが一回あった。

フラッシュライトが付いてるだけでも素晴らしいが、仮に Apple Watch にフラッシュライトが付いてたとしても、 10 時間近い山行で使った後であればおそらくバッテリー切れ寸前で、フラッシュライトに使える電力は残っていないだろう。 Garmin Fenix 7 Pro なら 10 時間使ってもバッテリー残量はまだ 50% 以上あって、余裕でフラッシュライトを使うことができた。

こういう経験があって、山に入るときは Garmin は非常に頼りになるというか、「もはや欠かせない存在」と思うようになった。

心配だったこと: 音声コントロールと Apple Pay

Apple Watch で便利なのが音楽や Podcast のコントロールだ。走りながら聞いてる Podcast を 10 秒戻したいことが多々あるが、そういうときに Apple Watch は 1 スワイプと 1 タップで操作ができて便利だった。 Garmin だとチャプタースキップしかできないし、音楽コントロールは DOWN ボタンの長押しが必要で面倒。

しかし音楽や Podcast を聞いている時間は走っているときよりも電車に乗っているときや歩いているときが圧倒的で、そのときは iPhone をポケットから出して操作すればいい。

自分は電子マネーは iD 派だが、 Garmin は Suica しか使えないので不便になると危惧していたが、 iD を使うのはコンビニくらいだし、iPhone の Apple Pay で iD は使えるので問題なかった。

唯一の不満:Siri がいない

唯一不満があるとすれば「 Hey Siri 」と時計に向かって言っても反応がないことだ。 Apple Watch は料理するときにキッチンタイマーとしてフル活用していた。手が塞がっている状態でタイマーをセットできるのはとても便利だ。 Garmin の場合は手で時計を操作するか、 iPhone 側の Siri を使うしかない。

まとめ

iPhone 、 Mac との連携や Apple Pay が使える点などはやっぱり Apple Watch の方が便利だ。でも山やランニングで使う場合は Garmin の方が便利だ。ハードウェアとソフトウェアを同じメーカーが作ってる強みを感じる。 Apple Watch はサードパーティーがアプリを提供できるが、ランニング支援や健康管理は本体のハードウェアや OS の設計に依存する部分があるため、 Garmin ほどにはアウトドアアクティビティに特化したアプリが作りづらく、 Apple Watch は Garmin を置き換えられる存在にはならないだろう。皮肉にも Mac や iPhone 、 iPad の使い心地の良さと同じ構造がアウトドアウォッチでも働いている。

お買い得情報

Garmin は Fenix 8 が出てめっちゃ値段が上がった。検証用に買った Fenix 7 Pro は在庫一掃の売り切りセールで 78000 円くらいで買えた。 Epix Pro も現行の Gen 2 は 2023 年に発売されたのでもうそろそろ新モデルが出るかもしれないが、おそらく価格がガッと上がると思われる。一方で Fenix 8 と同じ進化だとすると音声コントロール機能がつくくらいだろうと思われ、ぶっちゃ音声コントロールとかは Apple Watch の方がよくできてるはずなので大して期待できない。現行の Epix Pro を安く買うのがおすすめ。 Amazon アウトレットで 7 万円台で出てることもある(自分もそれで買った)。

| @写真

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

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

いろいろあって手元で docker build が通らなくなってしまったので ChatGPT に相談したら Alpine Linux はビルドが遅くなるので Debian Slim に変えた方がよいと言われてガチャガチャやった。BuildKit を使ってキャッシュせよとも言われたけど、逆にビルドにめっちゃ時間かかるようになったので BuildKit は使わずに普通にビルドしてる。 Apple Silicon の Mac で Linux で動かすように linux/arm64 でビルドしてたけどこれが遅い原因だと散々言われた。クロスプラットフォームで BuildKit のキャッシュを使うとめっちゃ遅くなるらしいので逆効果だった(半日以上ビルドしても終わらないてことがざらだった)。

Docker 、これまで Alpine ベースのイメージを使ってたせいで自前でいろいろコンパイルしたりインストールしたりしてたけど、ビルド済みのものをダウンロードしてくる運用はやっぱり楽。 Alpine 使っても最終的なイメージサイズは膨大になってたし、もっと早めに Debian ベースに変えればよかった。

ちなみにビルドが通らなくなったのは tantiny が依存する rayon という Rust のライブラリが Rust 1.8 以降でしか動かなくなったため。 tantiny は Rust 1.77 までしかサポートしてないので Rust のバージョンを 1.77 で固定していたが、このせいでビルドにこけるようになった。なので tantiny をフォークして rayon と rayon-core のバージョンを古いバージョンに固定した。

tantiny および tantivy は楽に運用できる非常に優れた全文検索ライブラリだと思うけど、 tantiny のメンテナーの人が仕事で使わなくなったそうでメンテナンスされてないのが悲しい。自分でできるならやりたいが、職業プログラマーではないし Rust わからんちんなのでどうしたもんか…。

| @写真

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 オーバー)