| @登山/ランニング

国造神社

5月の10日から11日にかけて行われた ASO VOLCANO TRAIL 2025 に出場した。初めて出たトレランのレースが今は開催されていない阿蘇草原マラニックで、そのとき第一回大会のことが紹介されていて ASO VOLCANO TRAIL の存在を知った。初めてのレースでマラソンも走ったことがなかった当時の自分からすると、阿蘇の外輪山を夜通し走るなんですクレイジー過ぎるし、自分がそんな超人みたいなことにチャレンジする日がやってくるとは思わなかった。しかしそれから 2 年で出場して完走してしまった。

レースでは曇り、晴れ、暴風、霧といろんな風景の阿蘇を見られた。夜の外輪山を自分の足で移動したのは貴重な体験だった。何世代か前の先祖にもきっと牧草を刈り取りに来て草泊まり(草で作ったテント)に泊まり、同じ光景を見ていた人がいただろう。生まれ故郷の知らない姿を見た気がした。

ずっと一人で走ってたけど途中から以前一緒に今宿の山を走った方たちの仲間に入れてもらい A6まで一緒に走らせてもらった。ずっと一人だったら坂梨から実家に帰ってたかもしれない。おかげでレース中の写真も撮ってもらうことができた。

ゴール直後こそダメージがあったが、翌々日には大腿四頭筋は筋肉痛なし、ふくらはぎはちょっと痛い。足の裏はマメ三箇所。爪は一本も死んでなさげ。三日後からは普通にジョグしてる。112km走って5000m登ってもほぼダメージがないとは自分でもびっくりしてる。人間は鍛えれば強くなるということだ。

何年か前の平尾台ではトレランザックではなくショルダーバッグを持って走ってる人に抜かれて悔しかったが、今回はトレランザックが小さくて荷物が入りきらなかったのか、トレランザックの上から普通のバックパックを重ねて背負いつつ、手にはハンドライトではなく普通の懐中電灯(単一電池が 4 本いるやつ)を持って走ってる人に抜かれて悔しかった。次のレースでは変な装備で走ってる人に負けたくない。

ふりかえり

スタート〜A1

阿蘇ミルク牧場

IMG_4952

IMG_4953

IMG_4955

IMG_4959

IMG_4964

IMG_4966

IMG_4968

後方スタート。渡渉やドロドロポイントで渋滞の影響をもろに受ける。体力的には全然平気。

A1 ではソフトクリームとバウムクーヘンとランチパックとだご汁とミニトマトを食べた。

A1〜A2

初めて出たトレランレースの阿蘇草原マラニックとほぼ同じコース。このコースめっちゃいい。阿蘇草原マラニック復活してほしい。阿蘇草原マラニックでは大観峰は通らなかったが今回は通れた。大観峰ではアグリーズの方がコーラを振る舞っていて、ありがたく一杯頂戴した。急登を登り切ったあとのコーラはとてもうまかった。

天気は曇りで山の全容は見えなかったが、右手に阿蘇、左手にくじゅうを見られて贅沢な景色だった(ガスってたけどそれでも絶景)。

A2 の国造神社では少し疲労を感じる。あとで合流させてもらう猫丸さんとアベタマさんと話す。

IMG_4971 IMG_4974 IMG_4975 IMG_4976 IMG_4980 IMG_4983

A2〜A3

引き続き良い景色。飛ばしてるつもりはなかったが、振り返るとペースが速い。総じて前半はもう少し抑えて後半に体力をとっておくべきだった。

A3 までの途中で猫丸さんとアベタマさんに追いつき、ここから仲間に加えてもらう。このペースで行くと 20 時間でゴールとできるはずと教えてもらいビックリする。ただやはり実際はそんなに甘くなかった。

A3 は唐揚げが売り切れで食べられなかった。ポッドキャスト 7trails ラジオ練で聞いたエイドでの過ごし方の鉄則に倣い、何か食べたり飲んだりする前にゴミ捨て、水の補充、荷物の整理をやった。そうこうするうちに唐揚げはなくなっていた。代わりに高菜漬けと沢庵と切り干し大根を食べたが、阿蘇らしいあまからい味付けでとても美味しかった。味噌汁も出がけに飲んだが子どもの頃お寺の集まりで飲んだ味噌汁を思い出した。

IMG_4986 IMG_4988 C75FAFA6-F8C8-40D1-84ED-C7FC1BDC8899

A3〜A4

坂梨から外輪山に登る。トレイル女学院と一部コースが被ってるらしい。根子岳がだんだん迫ってきて迫力満点だったが爆風で何度も体を持っていかれそうになった。根子岳と外輪山が接続してるところから森の中に入り上色見へ。トレイル区間の記憶があまりない。

A4 ではドロップバッグを受け取り着替えて靴を TIMP 5 から OLYMPUS 4 へ履き替えた。 OLYMPUS 4 はサイズがデカいのでレースでは履くまいと思っていたが、 50km 以上走って足がむくんでおりちょうど良かった。靴下を履き替えるとだいぶ気持ちよさが違う。ちなみに渡渉やドロドロゾーンで足の裏がふやけていて皮が剥けそうになっていた。本当なら靴下を履き替える前にテングバームを塗るべきなのだが忘れてしまっていた。

A4 はカレーがうまかった。一人一皿までらしいのに後ろの椅子に座ってる女性はお代わりして食べてた。ずるい。

A4〜A5

29D949E5-3605-4D8E-A9FB-0BAA2FD8F6C1

A4 に入るまでは薄明るかったが A4 を出たときは真っ暗。気温も下がっていて寒さを感じた。 A4 を出てから標高を上げるまでずっとロード。根子岳がパカーンと見える月廻り公園を通ったのに夜なので何も見えなかった。

A4 から A5 までは距離は最短で 10km しかないが、はちゃめちゃに長く感じた。標高を上げると風もやばかった。この区間は雨が降ってなくて本当によかった。土の滑りやすい斜面を何度か下ったが、雨降りだったら悲惨なことになっていた。

A5 の高森峠エイドは通常のトレランレースであるようなエイドでテントが貼ってある屋外エイドだった。東屋の側面にブルーシートが貼ってあり椅子に座って寝てる人たちもいて、野戦病院の様相を呈していた。ここではほとんど休まず補給を済ませるとさっと出た。

A5〜A6

ロードと林道の道で標高を上げ、清水峠から激下り。一昨年の南阿蘇カルデラトレイルで登ったところを下った。トレランでは立ったまま下る人が多いけど、手をついて三点支持で降りたらこけなかった。三点支持以外でも、ロープのある場所は一人ずつ行く、ロープは股に挟むようにして持つ、というようの登山の基本的な知識をランニングしかやってない人は知らないことが多い。トレランマンや普段はロードしか走らない人も最低限の登山の知識は身につけておいた方が良いと思う。

A6 で一緒に走ってもらってた猫丸さんとアベタマさんと別れた。マメが痛かったのと膝の痛みが出てきており、下りのスピードについていくのが難しそうだったため。膝は横側が痛くてこれまで経験したことのない嫌な感じの痛さだった。

猫丸さんたちが出発したあと、靴を緩めてしばらくぼっーとしてた。マメは A4 でテングバームを塗り直しておかなかったのが悔やまれた。

A6〜ゴール

猫丸さんたちから 20 分くらい遅れで A6 を出た。駒返峠の取り付きまでずーっとロード。傾斜が緩い区間はジョグ、きついところはパワーウォークで進んだ。南阿蘇カルデラトレイルではここは下りなので一瞬で終わったけど、登るとかなり長い。みんなも疲れてるようで、駒返峠を登り切るまでに何人か抜いた。

しかし峠を登り切って日が出てきたくらいから急に眠気が襲ってきて体が動かなくなった。脊振山系全山縦走のときに経験したやつだ。 5 時とか 6 時くらいが一番眠い。さっき抜いた人たちにあっという間に抜き返され、さらに後方の人にも抜かれた。

しばし停滞したので体が冷えて寒い。夜が明けたら霧が出てきて気温が急激に下がってきた。体を動かして心拍数を上げなければならないが眠くてどうにもならない。カフェインで目を覚ましたいのにメダリストのカフェインジェルは 21 時ごろと 3 時ごろに摂っており残弾がなく、カフェイン入りは普通のマグオンのジェルしかない。このフラフラ状態では滑落しかねないと思い、マグオンを食べると、信じられないくらいフラフラだったのが目が冴えてきて動けるようになった。登りで頑張りすぎて低血糖気味になっていたのかもしれない。 ANDO_ は適宜摂っていたが、これは比較的ゆっくり血糖値を上げるので、低血糖気味のときにはジェルやラムネのようなものの方が良さそうだ。いつ自分が低血糖なのか知りたい。血を取らずに血糖値がわかるテクノロジー開発されてほしい。

南外輪山の最も雰囲気の良い区間をフラフラで歩いたのはもったいなかったが、大矢岳のあたりで復活してからぐんぐん下って、ロードに出てからもキロ 8 分くらいで走り続けた。方々にダメージは来てたが走れないほどではなかった。南阿蘇カルデラトレイルのときは地蔵峠までの登りがとにかくしんどいが、下りで通ると楽ちんだった。

ゴール直前で知ってる人に追いついたので一緒にゴール。タイムは 25 時間 18 分 56 秒だった。大矢岳で復活したことを考えると、猫丸さんたちについていけてたかもしれない。

IMG_4999

ゴール後

ゴール後には猫丸さんたちとも会話して、更衣室で着替えて(気がついたら更衣室で小一時間寝てた)、南阿蘇鉄道の中松駅から列車を乗り継いで実家まで帰った。自分はチートで親に車を出してもらってアスペクタから中松駅まで送ってもらったが、歩いて中松駅まで移動している人もいた。 110km 走ったあとに大荷物でお疲れ様です。乗合タクシーとかあればいいのに。

列車の乗り換え待ちで立野駅で食べたビーフピラフがシャバの味がしてうまかった。阿蘇駅に着いたらまだ食べ足りなくて、駅の近くのラーメン屋でラーメンを食べてから帰って昼寝して温泉に行き、夜は 11 時間くらい寝た。

練習

3 月は月間 200km の 8165m アップ、 4 月は月間 231km の 10831m アップだった。自分は普段月間 150km くらいの走行距離なので直前 2 ヶ月は結構頑張った。それでも平日は仕事が忙しく、 1 、 2 回しか走れないことが多かったので週末に土日の片方はロードを長めに、もう片方は山に行くという練習をやってた(米の山通信のボルケーノ攻略回で聞いた内容、いわゆる Back to Back )。

山練は時間がないときは家の近所の今宿四座周回( 8.4km 、 700m アップ)、時間があるときは三瀬峠↔︎脊振山ピストンの練習をやった。 4 月頭には脊振山系全山縦走をやって夜通しトレイルを走る練習もやった。以下に 3 月、 4 月、 5 月の山練を列記。

日付 内容 距離 獲得標高
3/1 三瀬峠↔︎脊振山ピストン 26km 2100m
3/9 今宿四座周回 8.8km 713m
3/21 今宿四座周回 9.2km 689m
3/22 三瀬峠↔︎脊振山ピストン 25.8km 2073m
3/30 今宿四座周回+α(飯盛練) 16.5km 1649m
4/4 脊振山系全山縦走 79.1km 5819m
4/20 糸島四座縦走 18.7km 1572m
4/27 三瀬峠↔︎脊振山ピストン 26.5km 1998m
5/4 今宿四座周回 8.6km 674m

↑に加えてトレイルに入らずできる林道練や、家の近所の低山でのトレイルインターバルなんかもやった。

三瀬峠↔︎脊振山ピストンはだいぶ鍛えられた。その後やった糸島四座縦走が楽に感じられるくらい。 3 回目の三瀬峠↔︎脊振山ピストンのあとはまだ体力に余力を感じられた。きつい練習は一回一回自分が強くなっていくのがわかるので面白い。

今宿四座周回は 2 年前の自分にはチャレンジングな内容だったが、いまはお手軽なジョグという感じになってきた。時間がない日に手早く山に入りたいときに便利。ただし、飯盛神社と高祖神社に寄る飯盛練は斜度 10% でかなりきつい。

極めつけは脊振山系全山縦走。このコースは YAMAP では 72km と表示されるが COROS での計測ではほぼ 80km だった。自分のトレランの最長記録は昨夏のキリエビロング 65km だったので最長記録を更新した。

装備

前半と後半で上半身とシューズを変えた。ノースリーブを忘れて、レース後の着換え用に持ってきていたティートンブロスのアクシオライト T シャツを着て走ったが、寒かったのでちょうど良かった。スリーブレスを着るには寒すぎた。

前半

  • Tシャツ
    • Teton Bros. アクシオライトティー
  • シューズ
    • Altra TIMP 5

後半

  • ドライレイヤー
    • Onyone ブレステックPP
  • ベースレイヤー
    • Patagonia エアシェッドプロプルオーバー
  • シューズ
    • Altra OLYMPUS 4

共通

  • 帽子
    • Patagonia ダックビルキャップ( A4 で交換)
  • 靴下
    • Danish Endurance( A4 で交換)
  • ウィンドシェル
    • Patagonia フーディニジャケット
  • ザック
    • Paago Works Rush 11R
  • レインウェア上
    • Mont-bell バーサライトパンツ
  • レインウェア下
    • 山と道 UL All-Weather Pant
  • ヘッドライト
    • Milestone MS-i1
    • Petzl Tikka
  • バックライト
    • Nathan
  • ソフトフラスク
    • Nathan 532ml × 2
  • 手拭い
    • Chaoras スポーツ手ぬぐい
  • サングラス
    • Float リゲル

補給食

IMG_4942

たくさん持って行ったがかなり余った。ジェルを少なめにして ANDO_ とカロリーメイトを多めに持った。走りながらは食べづらいけど自分はカロリーメイトの味が好きだ。あとはアミノバイタルの青をエイドに寄る度に摂るようにしていた。キリエビに出たとき、いかに後半の筋疲労を抑えるかが長いレースでは大事だと思っていたので。加えて A3 と A6 ではアミノバイタルゴールドも飲んだ。

Pow Bar

あと昨年のキリエビ同様、 Pow Bar で復活したのが一回あった。中身に薬剤でも入っているのかなと確認したがオールオーガニックで変なものは入ってなさげ。自分は咀嚼する系の補給食が向いているみたいだ。今回、謎の右顎痛があって顎を動かして食べるのがきつかったのが悔やまれる(レースが終わったら嘘のように顎の痛みはなくなった)。眠気で死んでた区間も Pow Bar 食べればよかったかも。

カツサプ

今回、初めてカツサプを使ってみた。よく言われる無限の持久力のような感覚はなかったが、確かに登りで足がパンパンにはならないような? 一袋 1300 円で一回のレースでどのくらい使えばよいのか分からない。今回はスタート前に一袋 8 錠飲んで、 A3 からエイドに寄る度に 2 錠ずつ飲んでみた。錠剤が結構でかいのでソフトフラスクの水で飲むのはきつかった。

痛み

首の痛み

実はレース直前の 5/4 に最後の刺激入れ兼夜のランニングの練習で近所の周回コースを走りに行ったときに、斜面で派手に転倒してしまった。首から地面に落ちて首を痛めてしまい、ムチウチのようになっていた。病院で診てもらって異常はなさそうなので出場したが、下や横を向くと首が痛んだので走っている最中に痛みが出ないか心配だった。首を痛めてからレースまでは痛みがありジョグもできなかったので、ギリギリレース当日に回復して無事走ることができた。

足首の痛み

5/4に転倒したときに右足首を岩にぶつけて怪我をしていた。単なる擦り傷かと思っていたがなかなか良くならず、レース当日もまだ傷口から膿が出ていた。あとになってよくよく傷口を見てみると肉が削られていたようだ。いまだに少し腫れている。この状態で渡渉したり、ドロドロの水たまりゾーンに足首上まで浸かって走ったと思うとゾッとする。化膿したり破傷風になったりしなかったのは幸運だった。

足の裏の痛み

米の山通信のボルケーノ攻略回を聞いて、靴下は耐久性が高そうなものが良いだろうと思った。五本指ソックスであればマメを予防できるが、五本指ソックスは薄手のものが多いから破れるだろうと想像した。 Danish Endurance というメーカーのメリノウールソックスを最近気に入って履いていて、普通の靴下としては高いが、登山やトレラン用の靴下としては安い(一足 1200 円くらい)し、これで全山縦走してノートラブルだったのでこいつを使うことにした。

しかしテングバームの塗り込みが甘かったのか、靴下がよれていたのか、 A4 で靴と靴下を変えたときに見てみると右足小指に巨大な血豆が出来ていたし、テングバームを塗っていなかった中足部あたりはふやけてしまっていた。このふやけが原因で強烈な靴擦れから皮むけにつながるので危なかった。靴下と靴を履き替えたことで靴擦れは免れたが、マメは最後まで痛んだ。雨上がりや渡渉が見込まれるレースでは思考停止でドライマックスの靴下を選ぶべきかもしれない。

結び

100km 越えのウルトラトレイルレース、なんとかなるもんだった。それでも順位は後ろの方なので全然自慢できるようなものではないが、自分は長い時間をダラダラ走り続けることはできるみたいだった。

またすぐやりたいかと言われると微妙だし、100マイルのレースにすぐチャレンジできるとも思わないが、年に一回くらいはこういう過酷なレースに出てみるのもいいなぁと思う。

| @ブログ

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 を使わなくなってから全く一眼カメラを使わなくなってしまった。

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

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

このブログは Ruby 2.7 でずっと動かしていた。コミットログをたどると 2020 年の 1 月から Ruby 2.7 のようだ。 Ruby 2.7 は 2023 に EOL を迎えている。

さすがにまずいと思ったので Ruby 3 にしようと一日頑張ってみたが、なかなかうまくいかない。Ruby 3 の キーワード引数の仕様変更はかなり対応がきつい。どこで ArgumentError が起こっているのかが極めて追いかけづらい。他のメソッドに委譲している場合などは特に。

ガチャガチャやってトップページと個別記事ページまでは Ruby 3 化できたので Ruby 3 でデプロイしてみたが、動かない画面があることに気がついたので Ruby 2.7 に戻した。 Kaminari がちゃんと動かない(具体的には kaminari-sinatra と actionview v6 系の互換性がない)のが原因でページネーションするページがちゃんと動かなそうだったので Ruby 3 化は諦めた。 kaminari-sinatra の ActionViewTemplateProxy#initialize を actionview v6 対応させないと無理っぽい。

kaminari のような有名な gem の派生 gem ならきちんとメンテされてるかなーと思っていたが、 kaminari-sinatra の最終コミットは 4 年前だった。

Ruby で View まで作る人たちはほとんどいなくなってるのだろう。

なお動かないところのデバッグは ChatGPT と対話しながらやった。めっちゃ便利。一人だと気がつかないような部分のコードを見てみろと ChatGPT が言ってくれて、そこにデバッグコードを入れてみるとビンゴだったりする。便利な世の中になった。

忘れないようにやったこと・気づいたことをメモっておく。

  • sinatra は v4 にあげないといけないのでパスの正規表現から ^$ は消さないといけない
  • better_errors の REPL がちゃんと動かないので Backtrace を見たいときはログを開くか better_errors を使うのをやめる
  • fork していた sinatra-cache は sinatra 4 では動かないので外した(キャッシュできない部分をどうするかは要検討)
  • capistrano-puma も Ruby 3 対応させないといけない(期待される systemd のフォーマットが変わっているので単にデプロイするだけではだめで一部手作業が必要)
  • tilt は v2.1.0 に固定( Tilt::ErubisTemplate クラスが消えるため、 padrino-helper がエラーを出す)
  • concurrent-ruby は 1.3.5 未満に固定
  • compass は 1.0.3 に固定
  • SESSION_SECRET は 64 文字以上にする
  • haml の過剰な escape を抑制
  • kaminari-sinatra の ActionViewTemplateProxy#initialize を actionview v6.1.7.8ActionView::Base#initialize に対応させる

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

MySQL だけでお手軽に全文検索ができるということを知らなかった。 MySQL 5.6 から入っていたようだった。 Tantivy および Tantiny を使ったやり方を以前記事に書いてサイトで実装しているが、 MeCab によるトークナイズでは二文字の熟語がセットになって四文字になっているようなパターンを取り逃すことがあった(「関連記事」は「関連」と「記事」に分割され、「関連」や「記事」というキーワードで検索したときにはヒットするが「関連記事」で検索するとヒットしない)し、記事追加時の検索インデックス更新処理が不要( MySQL にレコードが追加されたときに勝手に更新される)なので試してみることにした。

やり方は以下の記事を参考にした。

最初にデータベースに全文検索用のインデックスを作成した。

ALTER TABLE `entries` ADD FULLTEXT INDEX index_entry_fulltext(title, body) WITH PARSER ngram;

その後、検索部分のコードを書き換えて以下のようにした。

class Entry < ActiveRecord::Base
  scope :search,
        ->(words) {
          return all if words.blank?
          where('MATCH (entries.title, entries.body) AGAINST (? in BOOLEAN MODE)', words)
        }
end

めっちゃ簡単。

このブログは記事数が 1500 記事くらいなのでぶっちゃけ LIKE 検索でも実用的な速度( 100msec 以内)で結果を取得できるが、 FULLTEXT インデックスを使うと 10msec 程度で結果を取得できる。

ただし Tantivy と比べて劣る点もあって以下は注意が必要。

  1. なぜかわからないが Vim で検索すると何もヒットしない。また Rails で検索すると Rails について触れていない記事もヒットする。 ngram によるインデックスというのはこんなものなのかもしれない。検索ワードが日本語のときはいい感じに結果が表示される。
  2. 複数のテーブルにまたがるデータを一個の検索インデックスにまとめることができない。例えば Tantivy のインデックスは記事のタイトル、本文、カテゴリー、タグをインデックス対象としているが、 MySQL の FULLTEXT インデックスだとテーブルごとにしかインデックスを作れないので(当たり前)、複数のテーブルにまたがる検索をするときにはテーブルを JOIN するしかない。 OR マッパーを使っている場合には利用しづらい。

1 の問題に関しては、 MySQL 5.7 からインデックス生成時の PARSER に MeCab などを指定できるようになったのでそうすると回避できるかもしれない。ただし MeCab のインストールや設定を行う必要があるので要注意。

2 の問題に関しては全文検索システムを入れた方が良さげ。 Tantivy であれば非常に簡単に導入できる。

現状、このサイトでは右上の検索窓から検索したときのインクリメンタルサーチとアーカイブページでの絞り込みは Tantivy を、インクリメンタルサーチの結果で必要な情報が得られなかったときの「全文検索する」と 404 Not Found ページの検索は MySQL の全文検索を使うようにしている。

二つの検索

| @WWW

Basecamp で従業員の大量離職騒動が起きていた。原因は社内で社会問題についての議論を禁止するという制度変更への反発。

この制度変更の背景にはさらにややこしい問題があったようだ。

この騒動を経て、以前 HEY を使ったときの感想として書いた以下の記事のことを思い出した。

ソフトウェアに必要なのは理念ではなく機能だ。そのことは Jason Fried も書いている。

6. No forgetting what we do here. We make project management, team communication, and email software. We are not a social impact company. Our impact is contained to what we do and how we do it.

ただ、 Jason Fried も DHH も本、 Twitter 、ブログで業務の一環かのように他社のソフトウェアやビジネスモデルに難癖を付けたりと舌鋒鋭い。その一方で従業員に社内で社会問題を議論をさせないのは矛盾しているような気がする。

以前書いた記事では、 Flickr は理念のみで機能が不足しているということを指摘した。 Basecamp の HEY については理念だけでなく、それを裏付ける機能があると支持した。しかし今回の騒動を見るに、理念の部分がだいぶ強すぎたと感じる。理念に引き寄せられて opinionated な人たちが集まったが、理念を表明して良いのは経営者だけで従業員は仕事だけして下さいと言われると反感を買うのは当然だろう。

理念や社会に対する意見があることは結構なことだと思う。しかしそれを声高に表明して回ることはソフトウェア会社の仕事ではないと思う。ソフトウェア会社の仕事はただ一つで、その理念に基づいたソフトウェアを作ることなはずだ。

そもそもソフトウェアで社会を変えられるのだろうか。自分はそうは思わない。世の中がソフトウェアをきっかけにして変わるだけだ。ソフトウェアは人々の内側にあった曖昧模糊とした欲求を具現化して解消しただけに過ぎない。 Uber で車と時間を持て余している人がお金を得られるようになったし、全然タクシーがつかまらなくて困っていた人はふっかけられることなく車で移動できるようになった。これは元々潜在的に存在していた需要と供給を顕在化させて結び付けただけだに過ぎない。どんなに画期的なソフトウェアやサービスも、人々に必要だと思われなければ意味がない。

崇高な理念や信念があったとして、それをいかにソフトウェアに吹き込むかがソフトウェア企業のやるべきことだ。自分は Rails エンジニアとしてソフトウェア業界に橋頭堡を築いたので DHH のことは尊敬しているけど、 Basecamp には人々に求められる良いソフトウェアを作ることにフォーカスして欲しいし、自分もそういう姿勢でソフトウェア開発に携わっていきたい。

| @Mac/iPhone

"Your Computer Isn't Yours" という記事が先週バズってた。

概略を説明すると、 Catalina の頃から Apple が Mac ユーザーのアプリ起動ログを勝手に収集していたが、 Big Sur の公開日にログ集約サーバーがダウンしてしまい、そのせいで Mac を使えなくなる人が続出して問題が発覚したというもの。 Rebuild の Episode 288 で触れられているので興味がある人は聞いて下さい。

この記事については日本語の翻訳もあってはてブで 500 ブックマークくらいついていたが、どうも機械翻訳されただけのようだったし、一部訳が違うのではと思われるところがあったので自分でも訳してみた。訳を原著者の Jeffrey Paul 氏にメールで送ったので恐らくそのうち本家に日本語訳が追加されると思う。

Your Computer Isn't Yours

2020-11-25 9:16 追記

日本語訳追加してもらいました。


起きていることをまとめると以下のような感じだ。

  1. Apple は Mac ユーザーのアプリ起動データを IP 付きで Apple のサーバーに集めている(ログ送信)
    • 各アプリの署名有効期限チェックやマルウェア対策のためということになっている
    • Mac から Apple への通信は暗号化されていない
      • ISP や CDN ( Akamai )、ネットワークを盗聴している他人が内容を確認可能
    • この通信はユーザーが自分の意思で無効化できない(「Mac解析を共有」をオフにしても送信される)
  2. Mac (特に Big Sur でしか動かない Apple Silicon Mac )を使いたければ利用ログ送信を甘受するしかない
    • Big Sur から、上述のログ送信や Apple 製のアプリは VPN やファイヤウォールを無視するようになった
    • OS の挙動を変更しようとすると Mac が起動しなくなる
  3. iCloud Backup は iMessage の秘密鍵も一緒にバックアップするので Apple がメッセージの内容を読むことができる
    • 自分自身が iCloud Backup 利用していなくても、メッセージの送信相手が iCloud Backup を使っていると自分が送ったメッセージが iCloud 上に保存される
  4. Apple はプライバシー保護を売りにしながらユーザープライバシーをなおざりにしている
    • iMessages/iCloud Backup のバックドアを放置している
    • 過去にアプリ開発者には HTTPS を強制しながら自分たちは OCSP の通信を平文で行っている
    • ログ送信の件について対応を発表したが、対応時期を明確にしていない

その結果、以下のような状況に陥ることが懸念されている。

  • Apple が集めている情報は NSA や FBI に筒抜けになる
    • Apple はアメリカ軍の諜報機関や FBI にユーザーログデータなどの閲覧を令状なしで認める協定を結んでいる
    • iCloud Photo や iMessage の内容を Apple だけでなく軍や FBI も見られるようになっている
  • ユーザー保護を隠れ蓑に Apple が力を増大させる
    • マルウェアから守る、を大義名分にして、ユーザーがどのアプリを動かせるかを Apple がコントロールできる可能性がある
    • 原理的には Apple が気に入らないアプリを起動できなくしてしまうことが可能

モバイルアプリの利用状況の収集は多分いろんなアプリがやっている。 Mac で Apple が集めている程度以上の情報を集めているアプリも多いだろう(位置情報を取得しているアプリなど)。なので最初この件については過剰に反応しすぎなのではないかと思っていたが、よくよく考えてみると自分の感覚の方が麻痺していたのかもしれない。アプリの利用履歴を IP アドレス付きで送るということは、どこで何をしているかがアプリ開発者に筒抜けだ。そしてそのログを公権力が自由に閲覧可能だとしたらいい気持ちはしない。

アプリと Apple の場合で決定的に異なるのは、アプリはそのアプリが起動している間(あるいはバックグラウンドでのログ送信を許可されている間)だけログを送信するが、 Mac に関して言うとずっーっと起動しっぱなしで使い続けるものなので、ログデータからユーザーの行動履歴・生活様式がわかってしまう。地図アプリで検索した場所の情報も送られていたということなので、 Jeffrey Paul 氏が書いているように、その人がこれから行く予定の場所もわかってしまう。

GDPR や様々なプライバシー保護は、アプリを作りサービスを運営する側としては正直厳しいなと思うところはあるけど、 Apple がアメリカ軍と結んでいる PRISM のような取り決めが存在すると、様々な個人情報が政府機関に流れてしまって、アメリカのサスペンスドラマのように個人の位置情報を携帯の使用履歴からいとも簡単に割り出せるようになってしまう。それはやはり恐ろしい世界だ。

プライバシーの侵害のみならず、プラットフォーマーである Apple の匙加減次第で、ユーザーが使えるアプリが決まるという状況も好ましくない。たびたび iOS の App Store で起こる Apple の恣意的な審査基準改変などはその一端だ。 Hey の件で Apple とやり合った DHH は痛烈に Apple を批判するとともに、かつて邪悪な Microsoft に対抗するための救いとも言えた Apple が以前の Microsoft 以上に邪悪になってしまったのが嘆かわしいと Twitter に書いていた。学生の頃、 Mac を広める活動をやって大学のクラスの半分の同級生のラップトップを Mac にしたというエピソードや、 Rails の開発でも Mac を激推ししたという話は胸熱だった。応援してきた Apple が Evil になってしまい、人一倍残念に思っているのだろう。

Apple はかつて "The computer for the rest of us" というコピーで Macintosh を宣伝していた。しかし今日、 Mac は彼らのコンピューターになってしまったのだ。

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

Vim の設定に関してはペパボ時代に同僚のみなさん( glidenote さん、 banyan さん、 linyows さん)から色々学んでほぼほぼ不満がない状態になっている。正規表現拡張の eregex.vimrails.vimprojectionist.vimvim-surround など tpope プラグインと Shougo プラグイン( unite, vimfiler あたり)で普段のユースケースはカバーされているが、 EasyMotion というプラグインの存在と、同じ人がメンテしている incsearch.vim というものがあることを知って入れていみた。カーソル移動を楽にする Vim プラグインのようだ。これまで ⇧wf⌃d などで高速移動はできるといえばできるが、空白や単語の切れ目ではない位置を狙った移動では結局 hl を連打してしまっていた。 EasyMotion は冒頭の数文字を検索すると飛び先をアンカー表示してくれて、高速にファイル内を移動できるというもの。 Unite のファイル内ジャンプ版という感じかな。

さらに調べると incsearch.vim の方は Vim 本体に取り込まれたみたいで必要ないらしいのだが、 で検索にヒットしたカ所を移動したりする機能は incsearch.vim の機能っぽいので両方セットで使ってみることにした。 EasyMotion は incsearch と組み合わせて使うことでかなり便利になるっぽい(ブリッジに haya14busa/incsearch-easymotion.vim が必要だ)。こんな感じ↓(画像は incsearch-easymotion のリポジトリから拝借)

incsearch-easymotion demo