Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
はてなシステムの考古学 / History of development at Hatena
Search
motemen
March 04, 2017
Technology
3
300k
はてなシステムの考古学 / History of development at Hatena
スライド中のリンクなどは
http://motemen.hatenablog.com/entry/2017/03/yapc-kansai-history-of-hatena
を参照してください
motemen
March 04, 2017
Tweet
Share
More Decks by motemen
See All by motemen
AIに実況させる / AI Streamer
motemen
3
1.7k
技術を育てる組織・組織を育てる技術 / technology and organization
motemen
12
4.9k
はてなのエンジニアリングマネジメント、これまでとこれから / Engineering Management in Hatena, Hatena Engineer Seminar 26
motemen
2
2.1k
入門 Bubble Tea
motemen
1
850
ソフトウェア開発と私 / Software Development and I
motemen
13
6.8k
はてなサービスプラットフォームチームにおける Mackerel / Mackerel in Hatena Platform Team
motemen
1
1.3k
Reading Go Tools - GoCon 2016 Spring
motemen
5
2.8k
Diff'ing Go library API changes
motemen
4
2.7k
Gore: A Tale of Go REPL
motemen
8
6.1k
Other Decks in Technology
See All in Technology
Claude Codeから我々が学ぶべきこと
oikon48
10
2.8k
【新卒研修資料】数理最適化 / Mathematical Optimization
brainpadpr
29
14k
僕たちが「開発しやすさ」を求め 模索し続けたアーキテクチャ #アーキテクチャ勉強会_findy
bengo4com
0
2.5k
AIに頼りすぎない新人育成術
cuebic9bic
3
320
文字列の並び順 / String Collation
tmtms
1
100
UDDのススメ - 拡張版 -
maguroalternative
1
610
歴代のWeb Speed Hackathonの出題から考えるデグレしないパフォーマンス改善
shuta13
3
230
[OCI Technical Deep Dive] OCIで生成AIを活用するためのソリューション解説(2025年8月5日開催)
oracle4engineer
PRO
0
120
Agent Development Kitで始める生成 AI エージェント実践開発
danishi
0
160
意志の力が9割。アニメから学ぶAI時代のこれから。
endohizumi
1
100
AI関数が早くなったので試してみよう
kumakura
0
330
Amazon Q Developerを活用したアーキテクチャのリファクタリング
k1nakayama
2
220
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Optimizing for Happiness
mojombo
379
70k
Side Projects
sachag
455
43k
Thoughts on Productivity
jonyablonski
69
4.8k
Building Adaptive Systems
keathley
43
2.7k
Six Lessons from altMBA
skipperchong
28
4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
A better future with KSS
kneath
239
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Transcript
はてなシステムの考古学 2017-03-04 YAPC::Kansai 2017 OSAKA motemen
提供
こんにちは • id:motemen • 株式会社はてな CTO、 チーフエンジニア • Perl、Go
普段はPerlを書いています • はてなのトップページ • はてな匿名ダイアリー
None
None
趣味でGoを書いてます • ghq / gore / go-for-go-book • はてラボ人間性センター
None
None
アジェンダ • はじめに • 背景 • 時代探訪 • 考察
はじめに
考古学とは言いましたが • コードの年代測定をしたいわけではない • 記録のない遺物がそうそうあるもんでもない
むしろ • ある Perl 企業の15年を追うケース・スタディ • DISCLAIMER: いち Perl エンジニアの観点から
◦ ウェブ開発メイン ◦ インフラ、スマートフォンアプリ成分は少なめ
歴史学 • 人間もサービスもコードベースも代替わり • 飲み話だけでない歴史編纂
背景
㈱ はてな • ウェブサービスの会社 • 「老舗ベンチャー」(2001 〜) • 2016 年上場
• 京都本社、東京本店 • 主な言語: Perl
None
はてなのサービス(一部、カッコ内は年齢) • はてなブログ(5) • はてなブックマーク(12) • はてなニュース(8) • 人力検索はてな(16) •
はてなダイアリー(14) • はてなハイク(10) • はてなスター(10) • はてなアンテナ(15) • はてなフォトライフ(13) • はてなグループ(13) • BrandSafeはてな(3) • Mackerel(3) サービス一覧 - 株式会社はてな
ミッション 「知る」「つながる」「表現する」で 新しい体験を提供し、人の生活を豊かにする
「はてな 採用」
宣伝おわり
時代探訪
時代区分 古代 …… 2001〜2004 中世 …… 2004〜2007 近世 …… 2007〜2011
近代 …… 2011〜2014 現代 …… 2014〜
古代(創業〜2004)
None
先史時代 • エンジニア 2 人〜 • テキストによる記録は希少 • 口承による調査を行った
Perl • ウェブは Perl 企業が多かった ◦ イー・マーキュリー ◦ オン・ザ・エッヂ ◦
ガイアックス
None
アプリケーション基盤の進化 • CGI (2001) ◦ グローバル変数 • Apache::Registry (2001) ◦
my をつけないとやばい ◦ use strict;
OOP, CVS, フレームワーク (2001) • グローバル変数はやめよう ◦ OOP ◦ じゃあフレームワークも作ろう
• CVS も同時期に導入 ◦ CVS 以前のコードはみあたらず(残念)
Hatenaフレームワーク (2001) • Model-View-Controller ◦ ドメインロジック層(Function) ◦ Active Record 風
ORM • mod_perl • HTML::Template / Template-Toolkit • はてなサービスに特化
人力検索サイトはてな (2001)
はてなダイアリー (2002)
中世(2004〜2007)
開拓の時代 • エンジニア 約 10 人 • 「Web 2.0」 •
『ウェブ進化論』 (2006)
Hatena2フレームワーク (2004) • Hatena後継 • mod_perl2 • ヘルパースクリプト、ローカルサーバ • はてな開発の裏側(Shibuya.pm
#5)(2004) ◦ “速ければ1日でサービスイン”
はてなブックマーク (2005)
開発合宿!!! (2014)
はてなグループ (2004) • 日記 + Wiki のグループウェア • 社内Wikiから移行 •
ドキュメントや日誌だけでなく、日記
なんでも書いた結果
開発スタイル • 情報公開 • 「50%ルール」 • 1人1プロダクト + サブ •
立ったまま会議 • フリーアドレス
オープン戦略 • はてなウェブサービス ◦ RSSフィード ◦ AtomPub • はてな技術発表会日記
インフラチーム (2007) • チームらしいチーム • サーバ管理ツール
近世(2007〜2011)
繁栄の時代 • エンジニア 約 20 人
はてな、京都に上ル 4月に本社を移転 - @IT (2008)
はてなブックマーク リニューアル (2008)
B! リニューアル • 機能強化 ◦ ブックマークの検索 ◦ ページの分類 ◦ コンピュータサイエンス的な手法も
• 負債返却
B! リニューアル - 支えたもの • チーム開発 • 新フレームワーク
チーム開発 • 組織でものを作る潮流 • エンジニア 1-4 人 + デザイナ 1-2
人 ◦ アルバイト学生も • 9ヶ月
新社内フレームワーク • Ridge ◦ mod_perl2 / POE / Plack •
DBIx::MoCo • Ten.js • modules-Hatena
新WAFに至る道 • Hatena → Hatena2(→ Hatena2.5) • ほかの候補: Ruby on
Rails / Catalyst • 結局 Perl に
None
サマーインターン (2008) • トレーニング ◦ 課題をパスしないと 後半に進めない • 本番開発 ◦
リリースする
サマーインターン - ねらいと効果 • ねらい ◦ 学生に成功体験を持ち帰ってもらう ◦ 京都でのリクルーティングも •
副次的効果 ◦ 社内ドキュメントの整備 ◦ 社員教育
https://commons.wikimedia.org/wiki/File:Figure_27_04_03.jpg
Ridge + DBIx::MoCo ファミリー • はてなブックマーク • うごメモはてな • はてなスター
• はてなモノリス • はてなハイク • はてなココ • はてなランド • はてなOne • はてな ポータルサイト • プロフィールページ • はてなのお知らせ
コードベースを巡る状況 • 均質化した環境 ◦ Ridge + MoCo というベース ◦ RPM
による CPAN モジュール管理 • 一方で ◦ フレームワーク on 社内フレームワーク ◦ 共有モジュールの別ブランチ化
近代(2011〜2014)
脱伝統の時代 • エンジニア 約 30 人
None
はてなブログ (2011) • はてなダイアリー(当時8歳)のリニューアル
はてなブログ - 技術的背景 • 社内フレームワークのタコツボ化 • 非 .hatena.ne.jp ドメイン ◦
motemen.hatenablog.com ◦ 既存の社内フレームワークの恩恵が薄い
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく (2011)
“薄い”フレームワーク • フレームワーク = 設計指針 • 読むべきコードの最小化 • Plack/PSGI +
Router::Simple • DBI + SQL::NamedPlaceholder • Text::Xslate, JSON::XS
現代の標準的構成 • Plack, Starlet • Carton • daemontools • nginx
• MySQL, Redis
Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜 (2015)
開発フロー • 体制としてのチーム開発がさらに洗練 • 新しいコードベース • 新しいツール
はてなブログの開発フロー (2013)
はてなアプリケーションエンジニア座談会 (2013)
はてなブログチームの開発フローとGitHub (2014)
Workflow at Hatena Mackerel Team (2014)
GitHub Enterprise 導入 (2012) • Pull Request によるコードレビュー • Issue
によるタスク管理 • Wiki は利用せず、はてなグループ
開発フローの伝播 • IRC/Slack 上の口コミ • 異動にともなう輸出入
git-pr-release (2013) • ブログチームのスクリプトを輸出
prchecklist (2015) • (社内)ウェブサービス化
現代(2014〜)
多様化の時代 • エンジニア 約 50 人
None
Mackerel (2014) • サーバ管理知見をサービス化 • 当時の CTO 肝いり • Scala
/ Go / PostgreSQL
Scala In Perl Company (2014)
『実践 ドメイン駆動設計』 • はてな社内で開催したDDD勉強会 の様子をご紹介します (2015) • DDD的な用語が通じやすく
はてなブックマーク 再リニューアル はてなブックマーク in Scala (2015)
Perl も健在 • 開発の高速さ・知見 • 運用経験 • BrandSafeはてな (2014) •
受託サービス複数
その他 • 東京オフィス • シニアエンジニア制度 • Slack 導入 • 社長交代
• 上場
考察
フレームワークから見た歴史 • Hatena • Hatena2 • Ridge + DBIx-MoCo •
“薄い”フレームワーク • Not Only Perl
フレームワークは何をしたのか • サービス開発を加速する ◦ スピード ◦ 量 • 技術スタックを規定する ◦
Apache ◦ Perl
近代以降のフレームワーク • 設計指針 • サービス開発の枠組みとして共有
フレームワークをもたらしたもの • 明示的 ◦ コード(社内・OSS) ◦ 日記・プレゼンテーション • 暗黙的 ◦
それまでの経緯 ◦ 開発者たちの空気
暗黙知と形式知 • 組織の知識は暗黙知と形式知の 間を行き来しながら発展する ◦ 時代の空気とプレゼンテーション
歴史とは何か 「歴史とは歴史家と事実との間の 相互作用の不断の過程であり、 現在と過去との間の尽きることを 知らぬ対話なのであります。」
歴史を語ること=今を語ること • 「現在」のもつ文脈は透明 • 過去から現在を語ることによる相対化 • 10年後、今を知るための足がかりとして
まとめ • はてなの創業から現在までを回顧 • 未来に思いを馳せた • ありがとうYAPC
None