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.8k
入門 Bubble Tea
motemen
1
670
ソフトウェア開発と私 / Software Development and I
motemen
13
6.4k
はてなサービスプラットフォームチームにおける 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.5k
Gore: A Tale of Go REPL
motemen
8
5.8k
はてな技術部紹介 2015(公開版) / Hatena Technical Division Orientation 2015 (Public Edition)
motemen
5
20k
Workflow at Hatena Mackerel Team
motemen
9
6.8k
Other Decks in Technology
See All in Technology
ここがすごいよ! AWS Systems Manager!
saichan11
0
1.8k
テスト・設計研修【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
170
LINE WORKSへ簡単通知!Incoming Webhookアプリの紹介
mmclsntr
0
110
累計ダウンロード数1億8000万を超えるアプリケーションプラットフォームのレガシーシステム脱却とモダン化への道
kmitsuhashi
0
120
AWSでRAGを作る法方
sonoda_mj
1
140
エンジニア向け会社紹介資料
caddi_eng
14
230k
How to Think Like a Performance Engineer
csswizardry
4
590
ペパボのオブザーバビリティ研修2024 説明資料
kesompochy
0
1.1k
Git 研修 Basic【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
310
公共領域から学ぶ クラウド移行についてエンジニアが意識していること
kawakawa2222
0
140
AutomatedLabを使って内部ペンテストを勉強しよう! -やられ社内ネットワークの自動構築-
n_etupirka
1
610
RAGのサービスをリリースして1年3ヶ月が経ちました
segavvy
4
950
Featured
See All Featured
The Brand Is Dead. Long Live the Brand.
mthomps
52
36k
Gamification - CAS2011
davidbonilla
78
4.9k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.9k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
35
6.3k
Building Your Own Lightsaber
phodgson
101
5.9k
Practical Orchestrator
shlominoach
185
10k
StorybookのUI Testing Handbookを読んだ
zakiyama
15
4.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.5k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Build your cross-platform service in a week with App Engine
jlugia
227
17k
Build The Right Thing And Hit Your Dates
maggiecrowley
28
2.2k
Optimizing for Happiness
mojombo
373
69k
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