Slide 1

Slide 1 text

はてな匿名ダイアリーの すべて、お話しします…… id:jj1uzh 2026-06-30 Hatena Engineer Seminar #37 1

Slide 2

Slide 2 text

id:jj1uzh ● サービスプラット フォームチーム ● アプリケーション エンジニア ○ WebとAndroid ● 新卒3年目 2

Slide 3

Slide 3 text

話すこと ● はてな匿名ダイアリー(anond)の アプリケーションをPerlからGoに移植した ○ 背景、成果、方法、学び 3 はてな匿名ダイアリーのすべて、お話しします……

Slide 4

Slide 4 text

背景/anondについて ● 2006年サービス開始のラボサービス ○ anond.hatelabo.jp ● Perl(httpd/mod_perl) ● 独自Webフレームワーク 4 はてな匿名ダイアリーのすべて、お話しします……

Slide 5

Slide 5 text

背景/anondについて ● 2006年サービス開始のラボサービス ○ anond.hatelabo.jp ● Perl(httpd/mod_perl) ● 独自Webフレームワーク 5 はてな匿名ダイアリーのすべて、お話しします…… ● アプリケーションに手を入れづらい ● Perl・ライブラリのバージョンアップなど メンテナンスに時間を割きづらい

Slide 6

Slide 6 text

背景/コーディングエージェントの進化 6 はてな匿名ダイアリーのすべて、お話しします…… ● アプリケーションの移植は 現実的では **なかった** ● コーディングエージェントの進化で 状況が変わった

Slide 7

Slide 7 text

7 Goに移植しよう!

Slide 8

Slide 8 text

方針 8 はてな匿名ダイアリーのすべて、お話しします…… ● SQLクエリ、ロジックは基本的に変更なし ● 外観もできるだけ維持

Slide 9

Slide 9 text

方針/技術選定 9 はてな匿名ダイアリーのすべて、お話しします…… ● Perl ○ httpd/mod_perl・独自Webフレームワーク ○ 独自ORM ● Go ○ Echo ○ sqlc ● アプリケーション以外はそのまま

Slide 10

Slide 10 text

方針/コーディングエージェント 10 はてな匿名ダイアリーのすべて、お話しします…… ● Claude Codeで統一 ○ それまでは、チーム内でコーディングエージェントの 使い方がバラバラだった ○ PRのレビューや簡単なタスクにはCopilotも

Slide 11

Slide 11 text

11 Goに移植した

Slide 12

Slide 12 text

生まれ変わったanondをご覧ください 12 はてな匿名ダイアリーのすべて、お話しします……

Slide 13

Slide 13 text

生まれ変わったanondをご覧ください 13 はてな匿名ダイアリーのすべて、お話しします……

Slide 14

Slide 14 text

移植サマリー 14 はてな匿名ダイアリーのすべて、お話しします…… ● Perl 約22,000行 ⇒ Go 約15,000行 ○ Goはテスト込みで 約25,000行 ● およそ 2人・2か月(開始から完全切替まで)

Slide 15

Slide 15 text

移植サマリー/開発・実行環境の改善 15 はてな匿名ダイアリーのすべて、お話しします…… ● ビルド時間 ○ コンテナイメージ作成のフローがキャッシュなしで 10分 ⇒ 2-3分に短縮

Slide 16

Slide 16 text

移植サマリー/開発・実行環境の改善 16 はてな匿名ダイアリーのすべて、お話しします…… ● 実行環境・パフォーマンス ○ レスポンス時間: 約150ms ⇒ 約50ms ○ コンテナメモリ使用量: 約1.8GB ⇒ 約40MB ■ コンテナ数も減少 ○ ※Perl vs Goというよりはアーキテクチャの違い

Slide 17

Slide 17 text

移植サマリー/Perl版からあった不具合の解消 ● LaTeX記法・コードブロック ● カテゴリ・キーワードページ 17 はてな匿名ダイアリーのすべて、お話しします……

Slide 18

Slide 18 text

18 どうやった

Slide 19

Slide 19 text

移植HOWDUNNIT/流れ ● Perlコード調査 ● Project・Issue作成 ● 実装・テスト・動作確認 19 はてな匿名ダイアリーのすべて、お話しします……

Slide 20

Slide 20 text

移植HOWDUNNIT/Perlコード調査 ● 「アプリケーションの機能をまとめて。...」 ● 「エンドポイントごとの詳細をまとめて。...」 20 はてな匿名ダイアリーのすべて、お話しします……

Slide 21

Slide 21 text

移植HOWDUNNIT/Perlコード調査 ● 「アプリケーションの機能をまとめて。...」 ● 「エンドポイントごとの詳細をまとめて。...」 21 はてな匿名ダイアリーのすべて、お話しします…… ● 独自フレームワークでもOK ○ 「設定より規則」寄り & 継承を駆使 ○ ファイルの行き来が多い ○ 規則さえ分かればAIには簡単

Slide 22

Slide 22 text

移植HOWDUNNIT/Issue作成 ● Issueを作ってProjectに 22 はてな匿名ダイアリーのすべて、お話しします……

Slide 23

Slide 23 text

移植HOWDUNNIT/実装 ● Claude Codeで実装 ● コーディング時のスキル・プラグインは? ○ ⇒ 特になし ○ 素の状態でじゅうぶん賢い ○ 決定的な方法でコード品質を担保する 23 はてな匿名ダイアリーのすべて、お話しします……

Slide 24

Slide 24 text

移植HOWDUNNIT/実装 ● Claude Codeで実装 ● 決定的な方法でコード品質を担保する 24 はてな匿名ダイアリーのすべて、お話しします…… ● Lint ○ golangci-lint ● テスト ○ E2EもAIに作ってもらう

Slide 25

Slide 25 text

移植HOWDUNNIT/レビュー ● 書いた(書かせた)人間のチェック ● GitHub上のCopilotレビュー ● 別の人間のレビュー 25 はてな匿名ダイアリーのすべて、お話しします……

Slide 26

Slide 26 text

移植HOWDUNNIT/テスト・動作確認 26 はてな匿名ダイアリーのすべて、お話しします…… ● E2E ○ testcontainers ● Visual Regression Testing ○ Perl・Go両方を動かし、 playwright-cliで要素・スクショ比較 ● 脆弱性チェック ○ 匿名性とXSSを重点的に

Slide 27

Slide 27 text

27 学び

Slide 28

Slide 28 text

学び ● VRTは便利だけど…… ● 目視確認・テスト条件の網羅性不足があった ○ タスク分解→AI実装→レビューの繰り返しのため、 全体像の把握がおろそかになりがち ○ 「エントリ文章内の記号が二重でエスケープされる」 ○ 「モバイル表示は2ページ目以降で  人気エントリセクションを表示しない、の見逃し」 28 はてな匿名ダイアリーのすべて、お話しします……

Slide 29

Slide 29 text

学び ● コード外の見逃し ○ ログ形式が変わったことで、 ログクエリによる集計が失敗 29 はてな匿名ダイアリーのすべて、お話しします……

Slide 30

Slide 30 text

30 まとめ

Slide 31

Slide 31 text

まとめ ● コーディングエージェントの進化で、 レガシーコードの移植が現実的になった ● 決定的な品質担保(Lint・テスト)で 非決定的なAIがより活きてくる ● 目視確認、テストの作り方は依然重要 31 はてな匿名ダイアリーのすべて、お話しします……

Slide 32

Slide 32 text

32 ご清聴 ありがとうございます