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
730
ソフトウェア開発と私 / 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.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
5
20k
Workflow at Hatena Mackerel Team
motemen
9
6.9k
Other Decks in Technology
See All in Technology
元旅行会社の情シス部員が教えるおすすめなre:Inventへの行き方 / What is the most efficient way to re:Invent
naospon
2
330
OCI 運用監視サービス 概要
oracle4engineer
PRO
0
4.8k
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
860
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
220
The Role of Developer Relations in AI Product Success.
giftojabu1
0
120
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
1
250
SREによる隣接領域への越境とその先の信頼性
shonansurvivors
2
510
Amazon CloudWatch Network Monitor のススメ
yuki_ink
1
200
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
ハイパーパラメータチューニングって何をしているの
toridori_dev
0
140
Microsoft MVPになる前、なってから/Fukuoka_Tech_Women_Community_1_baba
nina01
0
190
Featured
See All Featured
Being A Developer After 40
akosma
86
590k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Ruby is Unlike a Banana
tanoku
97
11k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
What's new in Ruby 2.0
geeforr
343
31k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
A better future with KSS
kneath
238
17k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Teambox: Starting and Learning
jrom
133
8.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
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