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
はてなのエンジニアリングマネジメント、これまでとこれから / Engineering Management in Hatena, Hatena Engineer Seminar 26
motemen
2
1.9k
入門 Bubble Tea
motemen
1
770
ソフトウェア開発と私 / Software Development and I
motemen
13
6.6k
はてなサービスプラットフォームチームにおける Mackerel / Mackerel in Hatena Platform Team
motemen
1
1.2k
Reading Go Tools - GoCon 2016 Spring
motemen
5
2.8k
Diff'ing Go library API changes
motemen
4
2.6k
Gore: A Tale of Go REPL
motemen
8
5.9k
はてな技術部紹介 2015(公開版) / Hatena Technical Division Orientation 2015 (Public Edition)
motemen
6
21k
Workflow at Hatena Mackerel Team
motemen
9
7k
Other Decks in Technology
See All in Technology
株式会社EventHub・エンジニア採用資料
eventhub
0
4.3k
Swiftの “private” を テストする / Testing Swift "private"
yutailang0119
0
130
君も受託系GISエンジニアにならないか
sudataka
2
430
偶然 × 行動で人生の可能性を広げよう / Serendipity × Action: Discover Your Possibilities
ar_tama
1
1.1k
クラウドサービス事業者におけるOSS
tagomoris
1
410
現場で役立つAPIデザイン
nagix
33
12k
マルチモーダル理解と生成の統合 DeepSeek Janus, etc... / Multimodal Understanding and Generation Integration
hiroga
0
380
Developers Summit 2025 浅野卓也(13-B-7 LegalOn Technologies)
legalontechnologies
PRO
0
660
PL900試験から学ぶ Power Platform 基礎知識講座
kumikeyy
0
130
TAMとre:Capセキュリティ編 〜拡張脅威検出デモを添えて〜
fujiihda
2
240
Data-centric AI入門第6章:Data-centric AIの実践例
x_ttyszk
1
400
組織貢献をするフリーランスエンジニアという生き方
n_takehata
1
1.3k
Featured
See All Featured
The Cult of Friendly URLs
andyhume
78
6.2k
A designer walks into a library…
pauljervisheath
205
24k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
For a Future-Friendly Web
brad_frost
176
9.5k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Facilitating Awesome Meetings
lara
52
6.2k
Building Adaptive Systems
keathley
40
2.4k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Writing Fast Ruby
sferik
628
61k
Six Lessons from altMBA
skipperchong
27
3.6k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
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