Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
【shownet.conf_2023】TTDB と Rails の10年間の振り返りとこれから...
Search
ShowNet
PRO
October 02, 2023
Technology
3.4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【shownet.conf_2023】TTDB と Rails の10年間の振り返りとこれからshownet
shownet.conf_ での講演資料(TTDB)
ShowNet
PRO
October 02, 2023
More Decks by ShowNet
See All by ShowNet
【swonet.conf_ 2026】SC1-01_オープニングセッション
shownet
PRO
0
68
【swonet.conf_ 2026】SC1-02_トポロジー図の歩き方
shownet
PRO
0
100
【swonet.conf_ 2026】SC1-03_ShowNetで探る、液冷(水冷)システムの実装可能性
shownet
PRO
0
84
【swonet.conf_ 2026】SC1-04_"高密度化/自動化への挑戦"と"繋がる当たり前"の共存
shownet
PRO
0
62
【swonet.conf_ 2026】SC1-05_ShowNet 2026で見えた次世代伝送の方向性
shownet
PRO
0
69
【swonet.conf_ 2026】SC1-06_ルーティングセキュリティと広帯域化で具現化する対外接続の未来
shownet
PRO
0
59
【swonet.conf_ 2026】SC1-07_ShowNetバックボーンを支えるテクノロジー
shownet
PRO
0
70
【swonet.conf_ 2026】SC1-08_広帯域化するWi-Fiと多様化する通信需要
shownet
PRO
0
60
【swonet.conf_ 2026】SC1-09_実践の場で育む技術と未来
shownet
PRO
0
54
Other Decks in Technology
See All in Technology
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
8
7.8k
AI時代のAPI品質を支えるガードレール / API Guardrails for API quality in the AI era
yokawasa
1
210
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
140
GoCon2026 - Open Source, Open World
sanposhiho
3
3.1k
コーディングエージェントでM5Stack系の開発を少し試した時の話 / M5 Japan Tour 2026 Autumn 東京
you
PRO
0
130
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
600
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
260
AI時代だからこそ、スケールしないことをやろう
yutashigemura
1
130
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
370
Reactの設計論
uhyo
14
7.7k
スクラムで身についていた動き方を、XPで捉え直してみた
codmoninc
PRO
1
340
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
290
Featured
See All Featured
30 Presentation Tips
portentint
PRO
1
390
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
660
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
820
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
How to make the Groovebox
asonas
2
2.4k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Transcript
TTDB と Rails の10年間の 振り返りとこれから shownet.conf_ 2023 Interop Tokyo 2023
ShowNet NOCチームメンバー 高嶋健人
agenda • ShowNet と TTDB • 10年間でやったこと (2014 – 2023)
• 開発し続けるための仕組みや考え方 • TTDB と Ruby / Rails の拡張 • TTDB のこれから/今後について 2
ShowNet と TTDB
ShowNetの特徴 • 約2週間という短期間で大規模イベントネットワークを構築 • NOC/STM/コントリビュータ: 約500人 • 約500人でのタスク管理と情報共有/集約 • 機器数:
400台以上 • 機器のポートやIPアドレスの管理 • 短期間で大量の機器への設定 • 出展社へのインターネット接続サービスの提供 • 出展社ごとの接続情報の管理
TTDB:トラブルチケットデータベース • ShowNet構築・運用支援のためのシステム • 各種情報の連携・統合管理 • トラブルチケット • 出展社情報 •
ネットワーク機器情報 • 2003年から機能拡張しながら利用
Ruby on Rails • Ruby on Rails • Ruby 製の
Webアプリケーションフレームワーク • 2005/12/13 Rails v1.0.0 リリース • 現在(2023/9時点)は Rails v7.0 • TTDB • 2006年ごろ(?)〜: Ruby on Rails を利用して開発・運用 • (Rails の機能拡張するコードのライセンスファイルを発掘)
TTDB の歴史 • 1990年代: OSS チケットシステム • 2000年ごろ(?): 掲示板 (Perl)
• 2003年〜: 現在のチケットシステム形で TTDB 利用開始 • 2006年ごろ(?)〜: Ruby on Rails で開発・運用 • 2012年: 1年だけ Node.js 版 TTDB で運用 • 2014年〜: (TTDB 担当としてNOCチームに参加)
10年間でやったこと (TTDB 2014 – 2023) レガシーな Rails アプリのリアーキテクトと、継続的な機能追加
レガシーな Rails アプリのリアーキテクト • 2014年時点で数年メンテナンスされていない状態 • バージョンが古い • Ruby 1.8
/ Rails 2.3 (EoL) • UI 表示崩れ • 当時の最近のブラウザで表示が崩れる • スマホ未対応 • 開発環境で $ rails server するのもひと苦労
レガシーな Rails アプリのリアーキテクト • Ruby などのバージョンが古すぎてそのままアップデートで きない • やったこと •
新しく別の Rails アプリを作成してコードを移植 • 機能やコードの基礎部分はそのままに作り直し • UI 刷新・スマホ/タブレット対応
レガシーな Rails アプリのリアーキテクト • Rails / Ruby のアップデート • いきなり最新バージョンに上げれないので少しずつバージョンを
上げる • テストでエラーになる箇所を修正しながらアップデート • 複数メジャーバージョンアップで非互換の変更がたくさん • アップデートパス • Rails: v2.3 -> v3.2 -> v4.0 -> v4.1 • Ruby: v1.8 -> v1.9 -> v2.0 -> v2.1
レガシーな Rails アプリのリアーキテクト • レールに乗せる • 独自実装の機能を OSS のライブラリに置き換え •
認証(devise)、認可(pundit)、 ページネーション(kaminari)、 UI フレーム ワーク(twitter bootstrap)、etc… • あるものは作らない、ないものは作る • UI 刷新 • UI フレームワーク(Bootstrap)で作り直し • HTML の DOCTYPE の変更 (HTML 4.01 -> HTML5) • テンプレートエンジン(rhtml -> slim)の置き換え
レガシーな Rails アプリのリアーキテクト • テストコードの追加 • テストの自動化 • コードを移植するタイミングで、テストコードを追加 •
レガシーコードからの脱却 • 「レガシーコード」の定義 • 「テストのないコード」 • (レガシーコード改善ガイドより)
Rails / Ruby の継続的なアップデート • メンテナンスポリシーの策定・運用 • Ruby / Rails
/ gem / npm / Node.js はなるべく最新を利用する • テストが通ることでアップデート後の動作を担保 • ShowNet 構築中にアップデート することも • 2023年は Hotstage 直前に rails 7.0.5 がリリース
Rails / Ruby アップデート • TTDB で利用した Rails / Ruby
のバージョン Rails Ruby Node.js 2014年6月 4.1.1 2.1.2 2015年6月 4.2.2 2.2.2 2016年6月 4.2.7 2.3.1 2017年6月 5.1.1 2.4.1 2018年6月 5.2.0 2.5.1 2019年6月 5.2.3 2.6.3 2020年2月(開催中止) 6.0.2.1 2.6.5 12.13.0 2021年4月 6.0.3.6 2.7.3 14.16.1 2022年6月 7.0.4 3.1.2 16.17.1 2023年6月 7.0.5 3.2.2 18.14.1
継続的な機能追加 • その年々で変化する要件 • ShowNet は、3-5年後に利用される技術に先駆けて挑戦している • まだ世の中にない仕組みが必要になることも多い • 機能実装だけでなく運用設計から必要
• 2017年 サービスチェイニング • 出展社ごとに適用するサービスの管理 • 2022年 リモートオペレーション対応 • SSO のための SAML IdP • 認可の前提の要件の変化
10年間、開発し続けるための 仕組みや考え方 継続的なアップデート、式年遷宮、テスト、ドキュメント
継続的なアップデートの必要性 • 最近のミドルウェアのライフサイクル • 毎年メジャーアップデート級の大きなアップデート • 2年で EoL (Ruby、Node.js など)
• 脆弱性対応のセキュリティパッチリリース • 依存するライブラリの数: 約800 (gem/npm) • 月に1つはセキュリティパッチリリースされる • アップデートを溜めるほど対応の難易度が上がる • 複数メジャーバージョンアップ対応は大変 • ライブラリやミドルウェアのバージョンの依存関係のパズル
継続的なアップデートの必要性 • 多岐にわたるアップデート対象 • Webアプリケーションフレームワーク: Rails • UIフレームワーク: Bootstrap •
ミドルウェア: Ruby / Node.js • DB: RDB(PostgreSQL) / Redis • OS、コンテナベースイメージ、仮想化基盤、etc… • EoL スケジュールとの戦い
継続的なアップデート方法 • 優先度をつけてアップデートしつづける • セキュリティパッチ • なるべく早く適用 • GitHub dependabot
alert などでなるべく早く検知 • 主要ライブラリ(Ruby/Rails) • パッチバージョンが出たら適用 • 差分が大きいほどアップデート内容の確認が大変 • その他のライブラリ(gem/npm) • 定期的にアップデート(月1回など)
式年遷宮 • ソフトウェアの式年遷宮 • 定期的にソフトウェアの一部を部分的に作り直すこと • 式年遷宮の目的 • 定期的に作り直す事によって耐用年数を伸ばすことができる •
定期的に作り直す事によって技術継承できる • Ruby/Rails の新しい機能や新しいライブラリなどを利用する ことで、過去に解決できなかった問題を解決できるように なることも多い
式年遷宮 • TTDB では毎年、部分的に作り直し • Rails の新しいバージョンの仕組みに置き換え • 例. asset
pipeline -> webpacker -> jsbundling-rails • 機能単位での置き換え • 例. 機器情報の論理モデル、チケット関連、UIナビゲーション、etc… • 作り直しのリスク • 必ずしもうまく作り直しが成功するわけではない • 失敗しても影響が少ないように「部分的」に作り直す
テスト • テストコードでテストを自動化 • 機能変更やRails/Rubyアップデートで、だいたいエラーなく動く ことを担保 • RSpec テストケース: 約3,000
• テストポリシー • どこで何のテストをするか 決めておく
ドキュメント • 目的 • 開発メンバーのオンボーディング • 設計上の判断の記録 • 内容 •
現状のシステム構成やポリシー • 機能追加変更の設計資料 • 将来、システムや機能を「捨てやすく」できる • 捨てやすく = 作り直ししやすく
ドキュメント: 設計資料 • Design Docs (or ADR) 風のフォーマット • 何を・なぜ・どのように作るかを記したもの
• 問題点・課題 • 機能開発・改善の背景 • 選定した解決手段と、選定しなかった解決手段 • 選定の根拠、トレードオフ • ワークフローへの影響 • 既存のワークフローからの変更点と影響
TTDB と Ruby / Rails の拡張
TTDB で実装した Ruby/Rails拡張 • 2006年ごろから Ruby や Rails に足りなかった機能拡張を実 装して利用
• IPAddr / Hash クラス • Rails Cache • 認証/認可 • has_and_belongs_to_one
Ruby/Rails拡張: IPAddr クラス • Ruby: IPAddr クラス • Ruby で
IP アドレスを扱うためのクラス • TTDB で Prefix や CIDR を利用できるように拡張 (2010年以前) • ipaddr-ext gem • TTDB で利用していた IPAddr クラスの拡張をまとめた ruby gem • https://github.com/interop-tokyo-shownet/ipaddr-ext IPAddr.new('2001:0db8::1') => #<IPAddr: IPv6:2001:0db8:0000:0000:0000:0000:0000:0001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff> > IPAddr.new('2001:0db8::/32').to_s_with_prefix => "2001:db8::/32"
Ruby/Rails拡張: Rails Cache • Rails 4.1 時点では、Rails Low-Level Cache で利用できない
キャッシュがあった • ActiveRecord::Relation のキャッシュキーが未対応 • キャッシュする仕組みを独自実装 • updated_at が最新のデータ1件のみ参照する仕組み • Rails 5.2 から導入された cache_versioning とほぼ同等の機能 • Rails 5.0 (2016/6リリース)で ActiveRecord::Relation 対応されたので 徐々に廃止中
ShowNet で遭遇した Ruby / Rails のバグ • Rails Low-Level Cache
で大きオブジェクトを読み込むとエラーに なる • Rails 7.0 / Ruby 3.2 • 回避策 • Rails は 7.1 で修正予定 (Cache で Marshial を使わなくなる) • TTDB では、cache fetch 時に該当エラーが出たら、DB から値を取得す るように対応 • 似たような Issue • Ruby 3.2.1 500 errors | mastodon • https://github.com/mastodon/mastodon/issues/23644
TTDB のこれから 今後について
未解決の問題 • ネットワーク機器のさらなる高密度化/仮想化への対応 • 機器情報仮想化/多様化対応のデータモデル再設計 • ポート情報のモジュールタイプとフォームファクタの分離 • ラック図の高密度化 •
運用負荷を上げずに、情報の密度を上げる仕組み • ポート割当て自動化、接続情報の俯瞰 • UI改善、パフォーマンスチューニング
TTDBのこれから • ShowNet の構築・運用を支援する機能の継続的な開発 • 機能開発を続けるための、継続的なアップデート • Rails 7.1、Ruby 3.3、Node.js
v20、etc… • 毎年変化する要件への対応
まとめ • TTDBの10年間でやったことの振り返り • レガシーな Rails アプリのリアーキテクト • 継続的な機能追加 •
開発し続けるための仕組みや考え方 • 継続的なアップデート • 式年遷宮 • テスト • ドキュメント • TTDBのこれから • ShowNet の構築・運用を支援する機能の継続的な開発