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
720
ソフトウェア開発と私 / Software Development and I
motemen
13
6.5k
はてなサービスプラットフォームチームにおける Mackerel / Mackerel in Hatena Platform Team
motemen
1
1.1k
Reading Go Tools - GoCon 2016 Spring
motemen
5
2.7k
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
5
20k
Workflow at Hatena Mackerel Team
motemen
9
6.9k
Other Decks in Technology
See All in Technology
GitHub Universe: Evaluating RAG apps in GitHub Actions
pamelafox
0
170
Amazon_CloudWatch_ログ異常検出_導入ガイド
tsujiba
4
1.5k
Jr. Championsになって、強く連携しながらAWSをもっと使いたい!~AWSに対する期待と行動~
amixedcolor
0
190
30万人が利用するチャットをFirebase Realtime DatabaseからActionCableへ移行する方法
ryosk7
5
340
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
49k
顧客が本当に必要だったもの - パフォーマンス改善編 / Make what is needed
soudai
24
6.7k
「視座」の上げ方が成人発達理論にわかりやすくまとまってた / think_ perspective_hidden_dimensions
shuzon
2
660
よくわからんサービスについての問い合わせが来たときの強い味方 Amazon Q について
kazzpapa3
0
220
いまならこう作りたい AWSコンテナ[本格]入門ハンズオン 〜2024年版 ハンズオンの構想〜
horsewin
9
2.1k
「最高のチューニング」をしないために / hack@delta 24.10
fujiwara3
21
3.4k
なんで、私がAWS Heroに!? 〜社外の広い世界に一歩踏み出そう〜
minorun365
PRO
6
1.1k
ガバメントクラウド単独利用方式におけるIaC活用
techniczna
3
270
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
1
40
Why Our Code Smells
bkeepers
PRO
334
57k
How to Think Like a Performance Engineer
csswizardry
19
1.1k
Making Projects Easy
brettharned
115
5.9k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
355
29k
The Cult of Friendly URLs
andyhume
78
6k
Fontdeck: Realign not Redesign
paulrobertlloyd
81
5.2k
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