スライド中のリンクなどは http://motemen.hatenablog.com/entry/2017/03/yapc-kansai-history-of-hatena を参照してください
はてなシステムの考古学2017-03-04 YAPC::Kansai 2017 OSAKAmotemen
View Slide
提供
こんにちは● id:motemen● 株式会社はてな CTO、チーフエンジニア● Perl、Go
普段はPerlを書いています● はてなのトップページ● はてな匿名ダイアリー
趣味でGoを書いてます● ghq / gore / go-for-go-book● はてラボ人間性センター
アジェンダ● はじめに● 背景● 時代探訪● 考察
はじめに
考古学とは言いましたが● コードの年代測定をしたいわけではない● 記録のない遺物がそうそうあるもんでもない
むしろ● ある Perl 企業の15年を追うケース・スタディ● DISCLAIMER: いち Perl エンジニアの観点から○ ウェブ開発メイン○ インフラ、スマートフォンアプリ成分は少なめ
歴史学● 人間もサービスもコードベースも代替わり● 飲み話だけでない歴史編纂
背景
㈱ はてな● ウェブサービスの会社● 「老舗ベンチャー」(2001 〜)● 2016 年上場● 京都本社、東京本店● 主な言語: Perl
はてなのサービス(一部、カッコ内は年齢)● はてなブログ(5)● はてなブックマーク(12)● はてなニュース(8)● 人力検索はてな(16)● はてなダイアリー(14)● はてなハイク(10)● はてなスター(10)● はてなアンテナ(15)● はてなフォトライフ(13)● はてなグループ(13)● BrandSafeはてな(3)● Mackerel(3)サービス一覧 - 株式会社はてな
ミッション「知る」「つながる」「表現する」で新しい体験を提供し、人の生活を豊かにする
「はてな 採用」
宣伝おわり
時代探訪
時代区分古代 …… 2001〜2004中世 …… 2004〜2007近世 …… 2007〜2011近代 …… 2011〜2014現代 …… 2014〜
古代(創業〜2004)
先史時代● エンジニア 2 人〜● テキストによる記録は希少● 口承による調査を行った
Perl● ウェブは Perl 企業が多かった○ イー・マーキュリー○ オン・ザ・エッヂ○ ガイアックス
アプリケーション基盤の進化● 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 に
サマーインターン (2008)● トレーニング○ 課題をパスしないと後半に進めない● 本番開発○ リリースする
サマーインターン - ねらいと効果● ねらい○ 学生に成功体験を持ち帰ってもらう○ 京都でのリクルーティングも● 副次的効果○ 社内ドキュメントの整備○ 社員教育
https://commons.wikimedia.org/wiki/File:Figure_27_04_03.jpg
Ridge + DBIx::MoCo ファミリー● はてなブックマーク● うごメモはてな● はてなスター● はてなモノリス● はてなハイク● はてなココ● はてなランド● はてなOne● はてな ポータルサイト● プロフィールページ● はてなのお知らせ
コードベースを巡る状況● 均質化した環境○ Ridge + MoCo というベース○ RPM による CPAN モジュール管理● 一方で○ フレームワーク on 社内フレームワーク○ 共有モジュールの別ブランチ化
近代(2011〜2014)
脱伝統の時代● エンジニア 約 30 人
はてなブログ (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 人
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