Submit Search
Upload
Hatena::Letの式年遷宮
•
3 likes
•
6,388 views
Takafumi ONAKA
Follow
2021-11-25 Hatena Engineer Seminar #17
Read less
Read more
Technology
Report
Share
Report
Share
1 of 45
Download now
Download to read offline
Recommended
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
RSpecしぐさ
RSpecしぐさ
Takafumi ONAKA
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
Recommended
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
RSpecしぐさ
RSpecしぐさ
Takafumi ONAKA
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
MagicOnion入門
MagicOnion入門
torisoup
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話
Katsunori Kanda
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Koichiro Matsuoka
マイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャ
ota42y
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
Takayuki Shimizukawa
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01
Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01
Yuta Shimizu
デザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリング
kei takakuda
More Related Content
What's hot
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
MagicOnion入門
MagicOnion入門
torisoup
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話
Katsunori Kanda
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Koichiro Matsuoka
マイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャ
ota42y
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
Takayuki Shimizukawa
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
What's hot
(20)
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
MagicOnion入門
MagicOnion入門
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
マイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャ
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Similar to Hatena::Letの式年遷宮
Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01
Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01
Yuta Shimizu
デザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリング
kei takakuda
長野にある小水力発電所は Elixir & Nerves え動いているってご存知でしたか?
長野にある小水力発電所は Elixir & Nerves え動いているってご存知でしたか?
Yutaka Kikuchi
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
Ember コミュニティとわたし
Ember コミュニティとわたし
Ryunosuke SATO
データベース勉強会 In 広島 mongodb
データベース勉強会 In 広島 mongodb
Ryuji Tamagawa
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
Daisuke Tamada
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
Ryutaro YOSHIBA
Kotlin skeleton
Kotlin skeleton
Kenji Otsuka
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
Yoshiki Shibukawa
Yapc2012ltthon
Yapc2012ltthon
Junya Murabe
TREASUREDATAのエコシステムで作るロバストなETLデータ処理基盤の作り方
TREASUREDATAのエコシステムで作るロバストなETLデータ処理基盤の作り方
Kentaro Yoshida
20190410 cnjp rancher-flexvolume
20190410 cnjp rancher-flexvolume
t8kobayashi
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
Yuto Komai
DB思い出話いろいろ(仮)
DB思い出話いろいろ(仮)
Takahiro Kitayama
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
susumu tanaka
Dockerizeして 大変だった話、幸せになった話
Dockerizeして 大変だった話、幸せになった話
Akira Miki
Redmine Ansible
Redmine Ansible
ITO Yoshiichi
そうだApi公開しよう feat. 有志のエンジニア
そうだApi公開しよう feat. 有志のエンジニア
recotech
Play jjug2012spring
Play jjug2012spring
Takafumi Ikeda
Similar to Hatena::Letの式年遷宮
(20)
Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01
Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01
デザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリング
長野にある小水力発電所は Elixir & Nerves え動いているってご存知でしたか?
長野にある小水力発電所は Elixir & Nerves え動いているってご存知でしたか?
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Ember コミュニティとわたし
Ember コミュニティとわたし
データベース勉強会 In 広島 mongodb
データベース勉強会 In 広島 mongodb
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
Kotlin skeleton
Kotlin skeleton
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
Yapc2012ltthon
Yapc2012ltthon
TREASUREDATAのエコシステムで作るロバストなETLデータ処理基盤の作り方
TREASUREDATAのエコシステムで作るロバストなETLデータ処理基盤の作り方
20190410 cnjp rancher-flexvolume
20190410 cnjp rancher-flexvolume
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
DB思い出話いろいろ(仮)
DB思い出話いろいろ(仮)
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
Dockerizeして 大変だった話、幸せになった話
Dockerizeして 大変だった話、幸せになった話
Redmine Ansible
Redmine Ansible
そうだApi公開しよう feat. 有志のエンジニア
そうだApi公開しよう feat. 有志のエンジニア
Play jjug2012spring
Play jjug2012spring
More from Takafumi ONAKA
不正のトライアングルとコードベースの治安維持
不正のトライアングルとコードベースの治安維持
Takafumi ONAKA
技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方
Takafumi ONAKA
グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発
Takafumi ONAKA
pt-query-digest は Perl!!
pt-query-digest は Perl!!
Takafumi ONAKA
アプリケーションを作るときに考える25のこと
アプリケーションを作るときに考える25のこと
Takafumi ONAKA
cpanfileがRubyでパースできることに気づいた俺たちは
cpanfileがRubyでパースできることに気づいた俺たちは
Takafumi ONAKA
Perl使いの国のRubyist
Perl使いの国のRubyist
Takafumi ONAKA
ApplicationTemplateのススメ
ApplicationTemplateのススメ
Takafumi ONAKA
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
Takafumi ONAKA
クローズドソースから始めるオープンソース
クローズドソースから始めるオープンソース
Takafumi ONAKA
短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術
Takafumi ONAKA
Application Bootstrap
Application Bootstrap
Takafumi ONAKA
ドリコム×ピクシブ 社会人交換留学説明資料
ドリコム×ピクシブ 社会人交換留学説明資料
Takafumi ONAKA
すこやかRails
すこやかRails
Takafumi ONAKA
マジカルsvnとキュアgit
マジカルsvnとキュアgit
Takafumi ONAKA
Github Enterprise じゃなくてもいいじゃん
Github Enterprise じゃなくてもいいじゃん
Takafumi ONAKA
ターミナルで画像確認するヤツ作った
ターミナルで画像確認するヤツ作った
Takafumi ONAKA
Webアプリケーションは難しい
Webアプリケーションは難しい
Takafumi ONAKA
Rails3.2ってどう変わるの?
Rails3.2ってどう変わるの?
Takafumi ONAKA
ドリコム的Railsアプリ開発流儀
ドリコム的Railsアプリ開発流儀
Takafumi ONAKA
More from Takafumi ONAKA
(20)
不正のトライアングルとコードベースの治安維持
不正のトライアングルとコードベースの治安維持
技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方
グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発
pt-query-digest は Perl!!
pt-query-digest は Perl!!
アプリケーションを作るときに考える25のこと
アプリケーションを作るときに考える25のこと
cpanfileがRubyでパースできることに気づいた俺たちは
cpanfileがRubyでパースできることに気づいた俺たちは
Perl使いの国のRubyist
Perl使いの国のRubyist
ApplicationTemplateのススメ
ApplicationTemplateのススメ
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
クローズドソースから始めるオープンソース
クローズドソースから始めるオープンソース
短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術
Application Bootstrap
Application Bootstrap
ドリコム×ピクシブ 社会人交換留学説明資料
ドリコム×ピクシブ 社会人交換留学説明資料
すこやかRails
すこやかRails
マジカルsvnとキュアgit
マジカルsvnとキュアgit
Github Enterprise じゃなくてもいいじゃん
Github Enterprise じゃなくてもいいじゃん
ターミナルで画像確認するヤツ作った
ターミナルで画像確認するヤツ作った
Webアプリケーションは難しい
Webアプリケーションは難しい
Rails3.2ってどう変わるの?
Rails3.2ってどう変わるの?
ドリコム的Railsアプリ開発流儀
ドリコム的Railsアプリ開発流儀
Recently uploaded
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
Hiroshi Tomioka
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
Recently uploaded
(9)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hatena::Letの式年遷宮
1.
Hatena::Letの式年遷宮 2021-11-25 Hatena Engineer
Seminar #17 大仲 能史 a.k.a. id:onk
2.
自己紹介 • 大仲 能史
a.k.a. id:onk • 株式会社はてな チーフエンジニア • ノベルチーム所属 • チームではWebアプリケーションエンジニア、 技術グループ全体ではマネージャ業をやっています
3.
今日の話
4.
式年遷宮
5.
式年遷宮とは • 伊勢神宮では、20年に一度、社殿と神宝を新調して大御神にお遷り 願う • 土地が2倍用意されていて、20年おきに隣に建てて移す •
社殿や御神宝を、変わることなく継承し続ける祭祀 • 建物そのものがレガシー (オリンピックで聞いた方) なのではなく、 維持する体制を維持する
6.
ソフトウェアにおける 式年遷宮
7.
ソフトウェア式年遷宮とは • 2013年にid:kenjiskywalkerによって提唱された概念 • 2013年 •
伊勢神宮&出雲大社の式年遷宮の年 • インフラのB/Gデプロイメントを 式年遷宮に見立てた https://blog.kenjiskywalker.org/2013/08/11/shikinen-sengoo-infrastracture/
8.
ソフトウェア式年遷宮とは • 2014-2016年に一般に広まる • id:antipop •
JAWS DAYS 2014 Immutable Infrastructureトラックのパネルディスカッション • id:ryotarai • クックパッドのサーバプロビジョニング事情 - クックパッド開発者ブログ • id:mirakui • クックパッドの継続的な成長のために開発と運用が何をしてきたのか、その失敗と 成功について - Speaker Deck
9.
ソフトウェア式年遷宮とは • 2018年 id:edvakfによる拡大解釈 •
放置しがちな社内システムこそ式年遷宮していこう - pixiv inside • インフラだけじゃなくソフトウェアも式年遷宮する • 定期的に作り直すことで、メンテナビリティが向上し、新規開発 からの学びも得られる
10.
ソフトウェア式年遷宮とは • 2020年 id:daiksyにより更に意味が加えられる •
プロダクトを10年運用する チームをつくる / DevSumi2020 - Speaker Deck • 全てをフルスクラッチで作り直す前に、周期的に手を入れ続ける • プロダクトを構成する要素単位で作り直すことでブラックボックスや 負債になりかけた要素をモダンにし、エンジニアの技術継承を行う • 作り直した後、遷宮参加者はその要素に一番詳しい状態になる
11.
今日の話 • ソフトウェア式年遷宮とは • Hatena::Letの歴史 •
遷宮のリアル • まとめ
12.
Hatena::Letとは • ブックマークレットをかんたんに作成・公開できるラボサービス
13.
Hatena::Letの歴史 • 2009-11-07 • サービス開発合宿でid:secondlifeとid:cho45が開発 •
余談:同じ開発合宿で作られたのがHatena::Haiku • 2010-05-15 • ラボサービスとして公開
14.
Hatena::Letの歴史 • 2010-07 • id:secondlife退職 •
2011-12 • id:cho45退職 • id:sampleが引き継ぐ • 2017-10 • id:sample退職 • 有志のオーナー不在に • SPFチームがオーナーとしてメ ンテナンス ※公開情報が見つからないので仮名。
15.
Hatena::Letの歴史 • 2018-04 • id:onk入社 •
2018-08 • オーナー引き継ぎ • 引き続きメンテナンスモード • 2020-05 • さようならPerl、こんにちはRuby
16.
遷宮した
17.
遷宮という選択に至るまで • リリース当時 (2009)
の技術 • はてラボサーバ • はてながAWSを使い出したのは2011年 • はてラボDB • 共通DBモデル • Hatenaフレームワーク (Perl) • Ridge + MoCo • ざっくり言うとRails 1.5ぐらいに相当
18.
遷宮という選択に至るまで • 2009年に作られたまま、細々とメンテナンスされている • EC2移転や共通DB脱出は行われた •
DBのスキーマはベストではない • Ridge+MoCoのままメンテナンスするのはコストが高い • Ridge: last commit 2013-01-10 • MoCo: last commit 2012-04-10 • 失われた技術スタック
19.
サービスを作るときの軸 • サービスを作るときは以下の 2
軸で考えることが多い。 届ける速度と、ユーザに価値があるかどうか https://www.slideshare.net/takafumionaka/25-137790052
20.
サービスを作るときの軸 • 第 1
象限は「やる」 • 第 3 象限は「やらない」 • 第 4 象限は「誘惑」 • すぐできるけど、そんなに価値はない • 他の優先課題があるかもしれない • 壺に石→砂→水を詰めるってコピペがあるよね? https://www.slideshare.net/takafumionaka/25-137790052
21.
サービスを作るときの軸 • 第 2
象限を一番考えなきゃいけなくて、 価値があるからぜひ作りたい。けど作るの が難しい機能 • これを実現するのがプログラマとしての腕の 見せ所になる https://www.slideshare.net/takafumionaka/25-137790052
22.
サービスを作るときの軸 • フレームワークは「価値があることをすぐ作 れるようにする」のが役目 • 第
2 象限を第 1 象限に変える • もしくは第 4 象限を魅力的品質まで高める ことで第 1 象限に変える • そこに寄与しないなら不要 https://www.slideshare.net/takafumionaka/25-137790052
23.
遷宮という選択に至るまで • 全てを掌握して、メンテしていきたい • 特にDBリファクタリングをしたい •
今のフレームワークは価値に寄与していない • 簡単にDBを変更できるか? => 現在においてはNo • 魅力的品質を生んでいるか? => 現在においてはNo
24.
遷宮用の技術選定 • インフラはノータッチ • Sinatra
+ ActiveRecord • ERB • static fi lesはノータッチ
25.
やったこと • MoCo =>
ActiveRecordに変換 • 10テーブル程度だったので、気合い • そこそこARの中を知ってないと難しかったと思う • PKが無いテーブルを、PK必須なORMで扱う • ナチュラルキーPKな関連テーブルを、サロゲートキーを期待す るORMで扱う
26.
やったこと • ActiveRecord投入は僕の常套手段 • 他のリポジトリでもやっている •
メンテ用のREPLやORMが欲しい • データを理解するための最短手段 => 空でER図が書けるようになるまで写経する • 学問に王道なし https://developer.hatenasta ff .com/entry/2018/11/21/120000
27.
やったこと • Ridge =>
Sinatraに変換 • RESTfulではないURLが使われているが全て維持した • 掌握が先、変更は後 • 久々に sinatra app を作った - id:onk のはてなブログ
28.
やったこと • Xslate =>
ERBに変換 • 20ファイル程度だったので、そこまで手間じゃない • XslateからERBならそのまま翻訳できる • ここが簡単であって欲しいのでサーバ側でHTMLをレンダリング する手段を選んだ
29.
はじめからやり直したい症候群 https://www.hyuki.com/kokoro/#hajime
30.
全部読むと分かった面白ポイント • 「;」区切りのクエリパラメータが存在している • https://onk.hatenablog.jp/entry/2020/12/18/202554 •
Validではあるが、実際URL Escapeしてしまうクローラが存在し ていた • I18n対応していた • メニューやボタンの文言が英語に
31.
全部読むと分かった面白ポイント • IE6SP2対応 • URL長の制限がキツい(488文字)ため、minifyしても `javascript:(function(){...})()`
形式だと、よくあふれる • 一定長以上だとscriptタグを挿入するブックマークレットになる仕 組みになっている • Mixed contentsやContent Security Policyの影響を受ける
32.
数値で見る遷宮 • $ git
show xxx ̶stats • Hello, Ruby! • 55 fi les changed, 2827 insertions(+), 32 deletions(-) • Bye Perl • 111 fi les changed, 10478 deletions(-) • だいたい 1/3 ぐらいのコード量に
33.
遷宮後にやったこと • ActiveRecordで良かった! • ignore_columnsやcallbackを駆使して、本番DBリファクタリングを 実現可能だった •
レールから外れたデータベースを扱う - onk.ninja • 主キーが無いテーブルや複合主キーはサロゲートキーを追加する • timestampsを見慣れたxxx_atにリネーム • ナチュラルキーを倒したり、テーブルごと作り直したりも
34.
遷宮後にやったこと • URLをリソース志向にシフト • POST時にクエリパラメータとBodyが両方あったらどう扱われる のか、みたいな悩みどころがあった。ので減らした •
ForkはGETではなくPOSTを使う • クローラがGETリンクを見つけて、クリックしていた • 毎日2000回ぐらい、クローラが(リダイレクトされて)ログイン 画面を表示して、諦めていた
35.
遷宮後にやったこと • インフラをマネージド化 • Perl時はEC2
+ EC2(MySQL) • 今はALB + ECS + Aurora + ElastiCache(Redis)
36.
遷宮後にやったこと • JSのminifyにはterserを使うように移行 • もともとの仕組み
(JavaScript::Squish) だと、ES2015以降の書 き方をしたときに、例えばテンプレートリテラルが途中で消える 等の問題があった
37.
コミュニケーションの喜び • ユーザさんは問い合わせせずに、サービス上で不具合の動作確認を してくれる • 再現する最小コードを投稿してくれるの凄すぎる •
TOPページを眺めていたら見つけた
38.
コミュニケーションの喜び • 対応しておくと反応がある
39.
コミュニケーションの喜び • 更に対応しておくと反応がある • 文通のような楽しみ
40.
今後の展開 • Greasemonkeyにどこまで近づくか • 例えばGreasy
Forkという競合サービスがある • インストール数とかを取得できるようになると公開する楽しさが 増える • 検索したいって声にも上手に対応したい
41.
今後の展開 • graphql-rubyを導入してフロントエンド刷新 • DB改善が終わったので、すごく扱いやすくなった •
Rubyなのはそのままでも良いかなぁ • Hatena::Letを作ったid:secondlifeも、はてなでRubyを使い続 けていた人なので、意志を継いでいく(?) • Perl の会社で使われる Ruby の利用法とは!? - 日本Rubyカン ファレンス2006
42.
今後の展開 • インフラ構成で遊ぶ • 現在はALB
+ ECS + Aurora + ElastiCache(Redis) • こうしてみる? • CloudFront + API Gateway + Cloud Map + ECS + Aurora + DynamoDB • CloudFront + API Gateway + Lambda + Aurora + DynamoDB • 300req/min未満ならAPI GatewayはALBよりお得 • コストが低くなると持続可能性が高まる • ちょっと面白い構成はどんどん試しておきたい
43.
社の標準スタックの一歩隣を行く • 正しいラボサービスの姿 • 最近のはてなの標準技術スタックは
gqlgen + Next.js • 似ているが少し違う技術を使うことで、知識の幅を広げる • これは僕が18年選手&Hatena::Letがアプリケーションとして小さいから 選ぶ方法 • 慣れていないor複雑な要件があるなら、同じ技術を複数アプリケーショ ンで使う方が予想外の要件で荒波に揉まれることになり、深みが出る
44.
はてラボとは はてラボは、はてなの実験的サービス置き場です。 2006年2月に「はてな社員の個人的アイデアに形を与え、未完成のサービスに改善 を重ねながら本サービスに育てる」という目的で開始しました。 現在では、本サービス化を目指すだけではなく •稼働中の本サービスに導入することが難しい新規機能を先行して実装する •本サービスとは異なるルールやポリシーに基づいてサービスを提供する •本サービスとして継続提供することが難しくなったサービスを、規模を縮小した 形で提供し、ラボならではの挑戦的な施策を導入し再生を図る といった、広義の実験的プロジェクトや実証実験の場としても使われています。 https://hatelabo.jp/ より抜粋
45.
「式年」遷宮の必要はあるか • ヨシヨシできていれば問題無い、という話はある • Webサービスはヨシヨシしないとスネる
- pblog • そこそこヨシヨシしていてもスネる(=負債は溜まっていく) • 業務ですら全ての行に目を入れ続けるのは不可能で、知識が欠けていく • 運営チームがドメイン知識を再獲得するための遷宮 • やる範囲を見極めつつ、コア機能こそ式年遷宮する必要があるのだろう • 列車を走らせ続けながらパーツを交換するイメージ
Download now