はてなシステムの考古学 / History of development at Hatena

9b741203feda475cbeae8b384de9f415?s=47 motemen
March 04, 2017

はてなシステムの考古学 / History of development at Hatena

スライド中のリンクなどは http://motemen.hatenablog.com/entry/2017/03/yapc-kansai-history-of-hatena を参照してください

9b741203feda475cbeae8b384de9f415?s=128

motemen

March 04, 2017
Tweet

Transcript

  1. はてなシステムの考古学 2017-03-04 YAPC::Kansai 2017 OSAKA motemen

  2. 提供

  3. こんにちは • id:motemen • 株式会社はてな CTO、 チーフエンジニア • Perl、Go

  4. 普段はPerlを書いています • はてなのトップページ • はてな匿名ダイアリー

  5. None
  6. None
  7. 趣味でGoを書いてます • ghq / gore / go-for-go-book • はてラボ人間性センター

  8. None
  9. None
  10. アジェンダ • はじめに • 背景 • 時代探訪 • 考察

  11. はじめに

  12. 考古学とは言いましたが • コードの年代測定をしたいわけではない • 記録のない遺物がそうそうあるもんでもない

  13. むしろ • ある Perl 企業の15年を追うケース・スタディ • DISCLAIMER: いち Perl エンジニアの観点から

    ◦ ウェブ開発メイン ◦ インフラ、スマートフォンアプリ成分は少なめ
  14. 歴史学 • 人間もサービスもコードベースも代替わり • 飲み話だけでない歴史編纂

  15. 背景

  16. ㈱ はてな • ウェブサービスの会社 • 「老舗ベンチャー」(2001 〜) • 2016 年上場

    • 京都本社、東京本店 • 主な言語: Perl
  17. None
  18. はてなのサービス(一部、カッコ内は年齢) • はてなブログ(5) • はてなブックマーク(12) • はてなニュース(8) • 人力検索はてな(16) •

    はてなダイアリー(14) • はてなハイク(10) • はてなスター(10) • はてなアンテナ(15) • はてなフォトライフ(13) • はてなグループ(13) • BrandSafeはてな(3) • Mackerel(3) サービス一覧 - 株式会社はてな
  19. ミッション 「知る」「つながる」「表現する」で 新しい体験を提供し、人の生活を豊かにする

  20. 「はてな 採用」

  21. 宣伝おわり

  22. 時代探訪

  23. 時代区分 古代 …… 2001〜2004 中世 …… 2004〜2007 近世 …… 2007〜2011

    近代 …… 2011〜2014 現代 …… 2014〜
  24. 古代(創業〜2004)

  25. None
  26. 先史時代 • エンジニア 2 人〜 • テキストによる記録は希少 • 口承による調査を行った

  27. Perl • ウェブは Perl 企業が多かった ◦ イー・マーキュリー ◦ オン・ザ・エッヂ ◦

    ガイアックス
  28. None
  29. アプリケーション基盤の進化 • CGI (2001) ◦ グローバル変数 • Apache::Registry (2001) ◦

    my をつけないとやばい ◦ use strict;
  30. OOP, CVS, フレームワーク (2001) • グローバル変数はやめよう ◦ OOP ◦ じゃあフレームワークも作ろう

    • CVS も同時期に導入 ◦ CVS 以前のコードはみあたらず(残念)
  31. Hatenaフレームワーク (2001) • Model-View-Controller ◦ ドメインロジック層(Function) ◦ Active Record 風

    ORM • mod_perl • HTML::Template / Template-Toolkit • はてなサービスに特化
  32. 人力検索サイトはてな (2001)

  33. はてなダイアリー (2002)

  34. 中世(2004〜2007)

  35. 開拓の時代 • エンジニア 約 10 人 • 「Web 2.0」 •

    『ウェブ進化論』 (2006)
  36. Hatena2フレームワーク (2004) • Hatena後継 • mod_perl2 • ヘルパースクリプト、ローカルサーバ • はてな開発の裏側(Shibuya.pm

    #5)(2004) ◦ “速ければ1日でサービスイン”
  37. はてなブックマーク (2005)

  38. 開発合宿!!! (2014)

  39. はてなグループ (2004) • 日記 + Wiki のグループウェア • 社内Wikiから移行 •

    ドキュメントや日誌だけでなく、日記
  40. なんでも書いた結果

  41. 開発スタイル • 情報公開 • 「50%ルール」 • 1人1プロダクト + サブ •

    立ったまま会議 • フリーアドレス
  42. オープン戦略 • はてなウェブサービス ◦ RSSフィード ◦ AtomPub • はてな技術発表会日記

  43. インフラチーム (2007) • チームらしいチーム • サーバ管理ツール

  44. 近世(2007〜2011)

  45. 繁栄の時代 • エンジニア 約 20 人

  46. はてな、京都に上ル 4月に本社を移転 - @IT (2008)

  47. はてなブックマーク リニューアル (2008)

  48. B! リニューアル • 機能強化 ◦ ブックマークの検索 ◦ ページの分類 ◦ コンピュータサイエンス的な手法も

    • 負債返却
  49. B! リニューアル - 支えたもの • チーム開発 • 新フレームワーク

  50. チーム開発 • 組織でものを作る潮流 • エンジニア 1-4 人 + デザイナ 1-2

    人 ◦ アルバイト学生も • 9ヶ月
  51. 新社内フレームワーク • Ridge ◦ mod_perl2 / POE / Plack •

    DBIx::MoCo • Ten.js • modules-Hatena
  52. 新WAFに至る道 • Hatena → Hatena2(→ Hatena2.5) • ほかの候補: Ruby on

    Rails / Catalyst • 結局 Perl に
  53. None
  54. サマーインターン (2008) • トレーニング ◦ 課題をパスしないと 後半に進めない • 本番開発 ◦

    リリースする
  55. サマーインターン - ねらいと効果 • ねらい ◦ 学生に成功体験を持ち帰ってもらう ◦ 京都でのリクルーティングも •

    副次的効果 ◦ 社内ドキュメントの整備 ◦ 社員教育
  56. https://commons.wikimedia.org/wiki/File:Figure_27_04_03.jpg

  57. Ridge + DBIx::MoCo ファミリー • はてなブックマーク • うごメモはてな • はてなスター

    • はてなモノリス • はてなハイク • はてなココ • はてなランド • はてなOne • はてな ポータルサイト • プロフィールページ • はてなのお知らせ
  58. コードベースを巡る状況 • 均質化した環境 ◦ Ridge + MoCo というベース ◦ RPM

    による CPAN モジュール管理 • 一方で ◦ フレームワーク on 社内フレームワーク ◦ 共有モジュールの別ブランチ化
  59. 近代(2011〜2014)

  60. 脱伝統の時代 • エンジニア 約 30 人

  61. None
  62. はてなブログ (2011) • はてなダイアリー(当時8歳)のリニューアル

  63. はてなブログ - 技術的背景 • 社内フレームワークのタコツボ化 • 非 .hatena.ne.jp ドメイン ◦

    motemen.hatenablog.com ◦ 既存の社内フレームワークの恩恵が薄い
  64. ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく (2011)

  65. “薄い”フレームワーク • フレームワーク = 設計指針 • 読むべきコードの最小化 • Plack/PSGI +

    Router::Simple • DBI + SQL::NamedPlaceholder • Text::Xslate, JSON::XS
  66. 現代の標準的構成 • Plack, Starlet • Carton • daemontools • nginx

    • MySQL, Redis
  67. Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜 (2015)

  68. 開発フロー • 体制としてのチーム開発がさらに洗練 • 新しいコードベース • 新しいツール

  69. はてなブログの開発フロー (2013)

  70. はてなアプリケーションエンジニア座談会 (2013)

  71. はてなブログチームの開発フローとGitHub (2014)

  72. Workflow at Hatena Mackerel Team (2014)

  73. GitHub Enterprise 導入 (2012) • Pull Request によるコードレビュー • Issue

    によるタスク管理 • Wiki は利用せず、はてなグループ
  74. 開発フローの伝播 • IRC/Slack 上の口コミ • 異動にともなう輸出入

  75. git-pr-release (2013) • ブログチームのスクリプトを輸出

  76. prchecklist (2015) • (社内)ウェブサービス化

  77. 現代(2014〜)

  78. 多様化の時代 • エンジニア 約 50 人

  79. None
  80. Mackerel (2014) • サーバ管理知見をサービス化 • 当時の CTO 肝いり • Scala

    / Go / PostgreSQL
  81. Scala In Perl Company (2014)

  82. 『実践 ドメイン駆動設計』 • はてな社内で開催したDDD勉強会 の様子をご紹介します (2015) • DDD的な用語が通じやすく

  83. はてなブックマーク 再リニューアル はてなブックマーク in Scala (2015)

  84. Perl も健在 • 開発の高速さ・知見 • 運用経験 • BrandSafeはてな (2014) •

    受託サービス複数
  85. その他 • 東京オフィス • シニアエンジニア制度 • Slack 導入 • 社長交代

    • 上場
  86. 考察

  87. フレームワークから見た歴史 • Hatena • Hatena2 • Ridge + DBIx-MoCo •

    “薄い”フレームワーク • Not Only Perl
  88. フレームワークは何をしたのか • サービス開発を加速する ◦ スピード ◦ 量 • 技術スタックを規定する ◦

    Apache ◦ Perl
  89. 近代以降のフレームワーク • 設計指針 • サービス開発の枠組みとして共有

  90. フレームワークをもたらしたもの • 明示的 ◦ コード(社内・OSS) ◦ 日記・プレゼンテーション • 暗黙的 ◦

    それまでの経緯 ◦ 開発者たちの空気
  91. 暗黙知と形式知 • 組織の知識は暗黙知と形式知の 間を行き来しながら発展する ◦ 時代の空気とプレゼンテーション

  92. 歴史とは何か 「歴史とは歴史家と事実との間の 相互作用の不断の過程であり、 現在と過去との間の尽きることを 知らぬ対話なのであります。」

  93. 歴史を語ること=今を語ること • 「現在」のもつ文脈は透明 • 過去から現在を語ることによる相対化 • 10年後、今を知るための足がかりとして

  94. まとめ • はてなの創業から現在までを回顧 • 未来に思いを馳せた • ありがとうYAPC

  95. None