Hatena Engineer Seminar 37 jj1uzh
by
jj1uzh
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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 ご清聴 ありがとうございます