地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

Sledgeをモダンにしてみる

Sledge は、2003年に Livin' On The EDGE が公開した Perl 製の Web アプリケーションフレームワークです。mod_perl 1.x の上で動き、ドキュメントは EUC-JP で書かれています。GitHub に移されて眠っていたこのリポジトリを、Ubuntu 26.04 と Perl 5.44 の上で起こし、Kubernetes で運用できるところまで持っていきました。作業は AI と一緒に進めています。やったことを順に書きます。

github.com

ascii.jp

Perl 5.44 で動かす

Ubuntu 26.04 の標準の perl は 5.40 なので、Perl 5.44.0 をソースからビルドする Dockerfile を用意しました。 既存のテストを流すと、48ファイル中7ファイルが落ちました。原因は Digest::SHA1 や UNIVERSAL::require への依存、Class::Trigger の内部構造の変化、UTF-8 の二重エンコードなどです。 Makefile.PL も、Perl 5.26 で @INC から . が消えた影響で動かなくなっていました。

mod_perl をやめて PSGI で動かす

mod_perl 1.x は今の Perl では(頑張らないと)動かないので、Sledge::Pages::PSGI を追加して Starlet で配信するようにしました。 既存コードには %ENV を直接読む箇所が多いため、リクエストの間だけ CGI 互換の環境変数を用意しています。 既存のアプリは、基底クラスを差し替えるだけで PSGI アプリになります。

gihyo.jp

コンテナと Kubernetes に載せる

開発用と本番用のイメージを1つの Dockerfile から作り、本番用は非 root で動かします。 Kubernetes のマニフェストには probe と preStop を入れ、Starlet が処理中のリクエストを終えてから止まるようにしました。 kind 上でローリングアップデートを試したところ、9,783 リクエストがすべて 200 で返りました。

セッションを今の水準に合わせる

セッション ID は時刻と rand() から作られていて、推測される恐れがありました。OS の乱数源から作るように変えています。 保存形式は Storable から JSON に変え、Cookie には HttpOnly と SameSite=Lax を既定で付けます。 保存先には Valkey と暗号化 Cookie を足し、Pod をいくつ並べてもセッションを共有できるようにしました。

設定は環境変数から読む

Sledge::Config::Env を作り、ConfigMap と Secret をそのまま設定として読めるようにしました。必須の項目が欠けていれば起動時に落ちます。 ハマったのは Service リンクでした。sledge-ws という Service を作ると SLEDGE_WS_PORT=tcp://... が勝手に注入され、設定名とぶつかりました。 enableServiceLinks: false で止めています。

ログは JSON で出す

Sledge::Logger で、1行1 JSON のログを標準エラー出力に書くようにしました。 リクエスト ID を前段から引き継ぎ、アクセスログにもアプリのログにも付けます。 処理されなかった例外はログに残し、利用者には詳細を見せずに 500 を返します。

OpenTelemetry で計装する

Perl SDK 標準の BatchSpanProcessor は、IO::Async のイベントループでスパンを送ります。prefork の Starlet ではこのループが回らないので、スパンは一つも届きませんでした。 そこで、レスポンスを返し終えた後に同期的に送るプロセッサーを自作しています。 kind で動かすと、アイドル中のワーカーにスパンが残り続ける問題も見つかり、リクエストごとに送る設定を既定にしました。

github.com

WebSocket を足す

Starlet では1本の接続が1つのワーカーを占有するので、WebSocket は Mojolicious で作った別プロセスで受けます。セッションとログ、トレースは Sledge と共有しています。 一番時間を使ったのは Mojolicious の癖です。ハンドシェイクが確立する前に送信すると、接続が落ちます。 20クライアントをつないだままサーバーを入れ替えると、全員が 1001 で閉じられて自動で再接続し、取りこぼしは1クライアントあたり最大2件でした。

ドキュメントを英語にする

EUC-JP で書かれていた README や POD を英訳し、新しく英語の README.md を書きました。 英訳の前は、POD の構文チェックが文字コードの問題で通っていませんでした。 日本語が残っているのは、文字化けを確かめるテストデータの2ファイルだけです。

動かしてみて

20年以上前のコードでも、テストが残っていたおかげで、どこが壊れたかをすぐに特定できました。最終的にテストは61ファイル・576件まで増えています。 意外だったのは、ハマった箇所の多くが Sledge の外にあったことです。Mojolicious、OpenTelemetry SDK、Kubernetes と、新しい側の道具の前提でつまずきました。古いコードを今の環境に載せるときは、古い側より新しい側を疑って、挙動を一つずつ実際に確かめるのが近道でした。

東京(埼玉)へ来て半年が経った

ryuichi1208.hateblo.jp

早いもので半年が経過しました。その中での最近の気づきとかをメモ的に残しておきます。

半年で行ったところ

仙台からだと行くのがめんどい(直行便がないとか車で遠すぎるとか)場所に色々といけました。一番のお気に入りは横浜の海あたりで割と行っている。あと北陸あたりが仙台からだと新幹線乗り換えるか車で半日くらいかかる場所が行きやすくなって良いです。

  • 沖縄 × 2
  • 宮古島
  • 横浜 × 4
  • ディズニー × 5
  • 佐渡島
  • 福井石川富山
  • 広島

羽田空港までが1.5時間くらいかかるので飛行機に乗るのが若干面倒になってしまいました。どうしたものか。

東京にも行きやすくなったので東京で泊まってみたいホテルリストを作って泊まって行ったりしている。第一弾は雅叙園。東京駅の上のホテルとかセルリアンとかにも泊まってみたい。

仙台には2回くらい帰りました。

宮古島は完全にハマったのでまたすぐ行こうと思います。

ryuichi1208.hateblo.jp

なんだかんだ車は便利

最近は電車を使わず車での移動が多かったりします。駐車料金ってバカたかいイメージがあったんですけど意外と提携してるところが多くて3000円買ったら2時間無料とかになるパターンが多かったり夜間は最大料金が設定されていたりとそこまでかからなかったりしています。あと良いところとして大きい駐車場だとgoogleマップで結構口コミが書かれていて入口が狭いとか動線が微妙みたいな前評判がを調べていけたりするので便利です。地方都市に行くと口コミなんてなくて提携先が激狭で擦りかけるとか割とあったので人口多いところのメリットだなと感じています。

とはいえ首都高はまだ怖いです。その速度で合流してくるの!?みたいな場面に何度遭遇したことか...

走っていて楽しい場所

この辺はリピートしてます。おすすめ。

  • 湾岸線
  • スクランブル交差点
  • レインボーブリッジ
  • ベイブリッジ
  • C1をぐるぐると

東京は思ったより狭かった

引っ越す前の東京の範囲はこんな感じ。

埼玉も神奈川も千葉もほぼ東京みたいなもんだろうと思って生きてきましたが大宮とか横浜とか一部が栄えてるだけでほぼ仙台と変わらないことに引っ越してから気づきました。また東京でも東京だと思う場所って意外と少なくて車を走らせていると交通量が多いが東京なのだろうかと思う場面が多かったりします。最新の東京のイメージはこんな感じです。

こち亀にあったこの会をやっと理解できてよかったです。

自転車旅

第二弾を計画中です。次は横浜まで行こうかなと。

東京の学び方

おすすめです。

ネパリコ

xを見ていると定期的に流れてきては行きたくなるを繰り返している。平日は距離的に行けないので土日に行くしかないのだが土日は渋谷店はやっていなくて駒沢店によく行っています。

www.instagram.com

って思っていたら渋谷店も土日再開してることに気づきました!!嬉!!味は同じなんでしょうけど懐かしいのでそのうち行こうと思います。

最近のは全部駒沢店

そういえば関東でネパリコに次ぐ2位を見つけました。

芸能人に遭遇できていない

芸能人にあったお店みたいな情報を仕入れて行ってみたりしているがまだ会えていない。熊本プロレスによみうりランドであったくらい。おすすめの場所あれば教えてください。

テレビに出たい

出れていない

まとめ

東京は楽しい

宮古島へ行ってきた

5泊6日で宮古島へ行ってきた。一言で言うと最高だった。

ホテル

キャノピーとヒルトンに泊まってきた。隣同士の建物で見える景色は変わらなかった。中もお風呂以外は違いはわからなかった。ヒルトンの方には外にテーブルと椅子があったので便利だった気がする。くらいの違い。それ以外は変わらなかった。どっちのプールも入れるしどっちのビーチも近いしでなんで同じところに立てたんだろう。

ご飯

ホテルで朝食バイキングが無料でついてきたので毎朝それを食べていた。お昼はお腹いっぱいで食べれなくて夜をどこかに食べにいく感じだった。一番美味しかったのはこの鉄板焼き屋で水槽があって魚が泳いでいた。キャビアとウニと肉の寿司が出てきてこんな混ぜたらよくわからんだろ...って思っていたら全部ちゃんと味してすごかった。

台風が来る予定とかで席が空いていたので偶然入れたが普通にいくには予約が必要そうな気がする。ドレスコードとか書いてあって会社のTシャツに半ズボンで断られるかなと思ったが入れてもらえたので良かった。

shumiyakojima.studio.site

ねこ

ねこがたくさんいて楽しかった。

まもるくん

買ってしまった。前職の時に存在は教えてもらってたので知ってはいたけど実物を見ると怖くて面白い。可愛くて貯金箱を買ってしまったがどこにおくんだろうかこれ

車

40 ~ 50 km/h規制で全体的にのんびり走っている人が多いなという感じだった。追い越し禁止ゾーンも結構あって運転は注意が必要かもと思った。

レンタカーは久々に鍵を回すタイプの車が回ってきてスマートキーじゃない車は辛いとなった。

海

これが宮古ブルーかと見せつけられた。仙台の海は綺麗な日がほとんどないのでずっと羨ましかった。埼玉には海がなくて困っている。

ぬいぐるみと背景にピントを合わせたかったがiPhoneだと無理だった写真

ウミガメにも会えた

読み終えることはできなかった。

空港でのHGVの勧誘

www.hgvc.co.jp

毎回話は聞かないようにしてるんだけど株主になったと言うこともあってどんなものなのかと言うのを聞いてみた。タイムシェアでホテルを売ってるみたいな事業らしい。どこのお金持ちの遊びなんだ...って気持ちになりながらも今度説明会に行ったらハワイ3泊来れると言うので行ってみる。HGVの事業自体伸びてる感じはしないので苦戦してるんじゃないかと言う気はする。頑張ってほしい。

note.com

終わりに

次は石垣島にでも行ってみようかなと思います。その前にハワイもらえたらハワイかな。その前に八丈島にも行ってみたい。

PyCon JP 2026 に行ってきた

広島は これぶりに久々に行ってきた。

ryuichi1208.hateblo.jp

久々のプログラミング言語カンファレンス

2026.pycon.jp

私はSREをこれまでやってきていたりその前もインフラエンジニアだったりするのでPythonみたいに特定の言語のカンファレンスに参加するみたいなことはあまりなかったのですが仕事でもPythonを書く機会が多かったりしたので参加してみました。

会場はYAPC::Hiroshimaの時と同じ場所で懐かしい気持ちになりました。

ryuichi1208.hateblo.jp

参加してみての感想

全体を通したセッションの印象は、言語のコアな仕様を深掘りする話よりも現場での実践事例(ユースケース)が多めで、レベル感も比較的やさしめに設計されていると感じました。数百件のプロポーザルが集まった中(公表はされていない?)でのこのラインナップだったので、初心者や多様な層を迎え入れるためにコミュニティ側が意識してバランス調整をされていたのかもと思いました。

現地でPythonが好きと語る人たちと接していて印象的だったのは、熱量の理由です。単に文法やライブラリの利便性といった技術仕様だけでなく、多様性を重んじ、初心者も等しく歓迎するオープンなコミュニティ文化への強い帰属意識が根底にあるのだと気づかされました。SREという少し隣の領域から参加したからこそ、このコミュニティの熱気と居心地の良さは新鮮な体験でした。

LTもした

ちなみにめっちゃ早口で頑張ったけど15秒くらい足りずに強制終了でした。5分に気持ちを込めて話すのは難しいが楽しいですね

asyncioのを使っている中でブロッキング処理を入れてしまった際にどうやって検知していくのだみたいな話をまとめてしてみました。この辺は実務でも痛い目を見てきているので知見はそこそこにありました。懇親会でもLT見てくれてた人から感想を貰えたりしたので話して良かったかなと思います。

イベント外

Day 0

元同僚が来ていたのでお好み焼き屋に行ってきました。美味しかったです。

Day 1

Findyさんのところにお邪魔してお好み焼き屋に行ってきました。美味しかったです。

Day 2

広島にいる知り合いのエンジニアとお好み焼き屋に行ってきました。美味しかったです。あとなんか鉄板焼きも食べました。

Day 3

戻り日。宮島がとても好きなので行ってきましたが相変わらず最高でした。いつか秋に来たい。

終わりに

SRE NEXTとかCloud関連のカンファレンスとかとは違った雰囲気で面白かったです。Python自体ももっと詳しくなっていきたいという気持ちはあるのでコミュニティとも関わりを持ちつつやっていければいいなと思います。