SlideShare a Scribd company logo
1 of 25
Download to read offline
YAPC::Asia 2012
大きくなったシステムの疎結合化への取り組み

                  masartz@mixi.inc
2


     Self Introduction

○   星野 将(id:masartz)
○   株式会社ミクシィ
○   技術部たんぽぽGたんぽぽT
     ○   No More 「刺身の上にタンポポをのせる仕事」
          - 単純作業の繰り返しで開発者の時間を浪費しないために




                         Copyright (C) mixi, Inc. All rights reserved.
3


    Agenda

○   mixiサービスの歴史と現状
○   疎結合化のアーキテクチャ
○   ライブラリ管理
○   ガイドラインとテスト
○   まとめ




                 Copyright (C) mixi, Inc. All rights reserved.
4




                                mixiサービスの歴史と現状




Copyright (C) mixi, Inc. All rights reserved.
5


    mixi’s History

○   サービス開始(2004年)から表も裏もperlであることは変わっていない
○   あるときオープンソース化したことで、そこのライブラリは変更した




○   特徴
    ○   ライブラリ・モジュール群が複雑に絡まりあっている
          ●   影響範囲が広いor読めない
          ●   開発効率が落ちる or 予期せぬ障害が発生する
    ○   レガシーな記述や歴代のコーディングスタイルが混在している
          ●   メンテナンスコストも高い
          ●   ack しまくり


                        Copyright (C) mixi, Inc. All rights reserved.
6


    mixi’s History

○   しかし、、、それを一口に悪と言うだけでは良くない
     ○   長く続いているサービスでは仕方ないこと
     ○   たくさんの開発者がいるサービスでは避けられないこと
○   皆様にも共感いただける内容になっているのではないかと思います




                     Copyright (C) mixi, Inc. All rights reserved.
7




                                      疎結合のアーキテクチャ




Copyright (C) mixi, Inc. All rights reserved.
8


     Architecture of loose coupling

○   Service Procedure
○   Web+DB vol.62 に掲載
○   モジュール間を仲介するための疑似的なRPC
○   直接useすることで生じる依存関係を解決する
     ○   ×:Mixi::Diary -> Mixi::User::get_profile
     ○   ○:Mixi::Diary => Mixi::ServiceProcedure::call(‘user.profile.get’)
                       => Mixi::User::Adapter::Profile -> Mixi::User::get_profile
○   横断的なインターフェースの一覧がYAMLで管理される
     ---
     methods:
       getEntryBody : Mixi::Voive::Adapter::Entry
       inertComment : Mixi::Voice::Adapter::Comment
○   内部実装の変更をProcedureで吸収or確認することができる



                                   Copyright (C) mixi, Inc. All rights reserved.
9


    Architecture of loose coupling

○   各レベルのAPI一覧




○   InternalAPI ( 別の名前空間向け)
○   CoreInternalAPI ( 内部切り出しのサービス向け) ←今回の話はコレ
○   InternalGraphAPI ( 公式アプリなど向け)


○   GraphAPI ( SAPなど向け)
                             Copyright (C) mixi, Inc. All rights reserved.
10


     CoreInternal API

○   mixiのサービスは1つのリポジトリによって運用されている
○   メリット
     ○   既存資産
     ○   開発ノウハウ
○   デメリット
     ○   リポジトリの肥大化
     ○   影響範囲の拡大
     ○   新しいトライへの障壁
○   このデメリットの部分に対する一つの解として、
    必要な情報のみをAPIとして提供するための機構がCoreInternal




                        Copyright (C) mixi, Inc. All rights reserved.
11


     CoreInternal API




○   ミニマムなサービスを手軽に構築することを目的とする
    wwwサーバー、DBサーバー、memcacheなどのリソースも専用化する
○   APIサーバーはhttp通信
     ○   現時点では生のPlackサーバー
○   リクエスト/レスポンス
     ○   JSONRPC


                        Copyright (C) mixi, Inc. All rights reserved.
12


    CoreInternal API

○   導入実績
     ○   社内用ベータサービスなどで実験導入中
     ○   既存システムに混じっていた小規模サービスの切り出し(途中)
○   課題
     ○   リソースの専用化と資源配分
     ○   負荷面のパフォーマンス計測
     ○   既存資産が活用できない
○   使いどころ
     ○   新規サービスをミニマムで構築する場合
     ○   言語や環境の縛りを超える場合




                       Copyright (C) mixi, Inc. All rights reserved.
13


    Once the break

○   ここまでで半分ちょっと




                     Copyright (C) mixi, Inc. All rights reserved.
14




                                                ライブラリ管理




Copyright (C) mixi, Inc. All rights reserved.
15


     Library Maintenance

○   Inspect Package
     ○   http://alpha.mixi.co.jp/2011/10767/
○   名前空間ごとの技術的負債のスコアを算出する
     ○   結合度、複雑度etc




○   導入された以降、いくつかの改善対応が行われる
     ○   Service Procedureを用いたリファクタリングetc
○   究極的なゴールは結合度・複雑度がゼロになること
○   その始点として現在の数値がいくつなのかを「見える化」するツール


                                 Copyright (C) mixi, Inc. All rights reserved.
16


     Library Maintenance

○   対応が進むと、経過差分が見たくなる
○   社内wikiではいくつかのチームがコマンド実行->結果貼り付けをルーチン化
○   そういう作業を自動化するのがたんぽぽの業務
     ○   過去に遡った履歴の取得
     ○   取り組んだチーム管轄以外も含めて全ての名前空間分を収集




○   時間軸:過程も含めた「見える化」を行える
○   モジュール間の横軸:全社的な状況把握と対応の優先度づけを行える

                           Copyright (C) mixi, Inc. All rights reserved.
17




                                                ガイドラインとテスト




Copyright (C) mixi, Inc. All rights reserved.
18


    Guideline and Test

○   コードレビュー業務とコーディングガイドライン
     ○   http://alpha.mixi.co.jp/2012/10870/
○   コードレビューによって、一定の安定度・統一性が保たれてきた
○   しかし最近は、中央集権的だったコードレビューの一部
    (特定名前空間のみ対象)を各チーム内に権限移譲
     ○   組織:小さな組織で小さなサイクルを回すため
     ○   コード:疎結合化により、コード修正の影響範囲の局所化が進んでいるため


○   通常レビュー、チーム内レビュー問わず同様の品質を保つ必要がある
○   →ガイドラインを整理する/ガイドラインに沿ったレビューをする
○   ー→ガイドラインを厳守するためのテストを書いて自動化する
      = 品質担保をできる限り自動化する




                                 Copyright (C) mixi, Inc. All rights reserved.
19


    Guideline and Test

○   自動化できるガイドライン項目を洗い出す
○   内容に沿ったテスト内容を書く
    ○   現状では正規表現系が主
○   リポジトリの主要ディレクトリ配下全てを再帰的に対象とする
○   既存のモジュールでテストが落ちるものをブラックリスト化する
○   上記内容を設定ファイルっぽくしたファイルを作っていく
           <モジュール>                                                   <設定ファイル>




                         Copyright (C) mixi, Inc. All rights reserved.
20


     Guideline and Test

○   設定ファイルっぽいテスト項目ファイル群をまとめてテスト実行
○   テスト項目(の一部)
     ○   @EXPORTの使用
     ○   requireの使用
     ○   非推奨モジュールの使用
     ○   ループ用途でのmap,grep使用
     ○   etc…
○   中には140個程度のpmがブラックリストに列挙されたものもある

○   大事なのは、既存に引っ張られずに、悪さに歯止めをかけること
     ○   新しいものをダメにしない
     ○   ダメなものを洗い出して、直していく
     ○   「いつか良くなるだろう」は甘え




                          Copyright (C) mixi, Inc. All rights reserved.
21




                                                まとめ




Copyright (C) mixi, Inc. All rights reserved.
22


    Conclusion

○   システムが長く運用される上で、肥大化・複雑化することは仕方ない
○   「リーダブルコード」の『ネストを浅くする』の項
     ○   例えば1日1回if文を追加する
     ○   例えば1日1回モジュールをuseする
○   →普段何気なく行っていることの結果起きること




                     Copyright (C) mixi, Inc. All rights reserved.
23


    Conclusion

○   あるべき姿に向けてどういうアプローチをとっていくか
     ○   道筋となる土台を作る
          ●   SeviceProcedureモジュール、CoreInternalAPIサーバー
     ○   ゴールまでの距離を計測する
          ●   Inspect Packageツール/ビジュアライザ
     ○   今以上に悪くならないよう歯止めをかける
          ●   ガイドラインテストツール




○   最終的にはエンジニアの手によって計画的に改善していく


                             Copyright (C) mixi, Inc. All rights reserved.
24


    Thanks

○   ご清聴ありがとうございました




               Copyright (C) mixi, Inc. All rights reserved.
25




Copyright (C) mixi, Inc. All rights reserved.

More Related Content

What's hot

Rustで3D graphics programming
Rustで3D graphics programmingRustで3D graphics programming
Rustで3D graphics programmingKiyotomoHiroyasu
 
地理学卒論・修論生のためのQGIS講座_座学編
地理学卒論・修論生のためのQGIS講座_座学編地理学卒論・修論生のためのQGIS講座_座学編
地理学卒論・修論生のためのQGIS講座_座学編Inoshachu, NPO
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWayTakayuki Shimizukawa
 
NUIプログラミング演習2015
NUIプログラミング演習2015NUIプログラミング演習2015
NUIプログラミング演習2015Jun Iio
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUISYoshitaka Seo
 
モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み #devsumi
モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み #devsumi モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み #devsumi
モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み #devsumi 株式会社MonotaRO Tech Team
 
QGIS(v2.2)初級編 さわってみようQGIS
QGIS(v2.2)初級編 さわってみようQGISQGIS(v2.2)初級編 さわってみようQGIS
QGIS(v2.2)初級編 さわってみようQGISYasuto Furukawa
 
Source treeの紹介
Source treeの紹介Source treeの紹介
Source treeの紹介ko ty
 
【kintone hive 上海】ウィングアーク上海講演資料_160918
【kintone hive 上海】ウィングアーク上海講演資料_160918【kintone hive 上海】ウィングアーク上海講演資料_160918
【kintone hive 上海】ウィングアーク上海講演資料_160918Cybozucommunity
 
PyCon JP 2015 keynote
PyCon JP 2015 keynotePyCon JP 2015 keynote
PyCon JP 2015 keynoteHaruo Sato
 
楽天テクノロジーカンファレンス2009
楽天テクノロジーカンファレンス2009楽天テクノロジーカンファレンス2009
楽天テクノロジーカンファレンス2009gaooh
 
Unity道場 ロボティクス 秋のLT祭り 2021
Unity道場 ロボティクス 秋のLT祭り 2021Unity道場 ロボティクス 秋のLT祭り 2021
Unity道場 ロボティクス 秋のLT祭り 2021Ryo Kabutan
 
【Unity道場 建築スペシャル2】BIMの“I”の使い方
【Unity道場 建築スペシャル2】BIMの“I”の使い方【Unity道場 建築スペシャル2】BIMの“I”の使い方
【Unity道場 建築スペシャル2】BIMの“I”の使い方UnityTechnologiesJapan002
 

What's hot (15)

Rustで3D graphics programming
Rustで3D graphics programmingRustで3D graphics programming
Rustで3D graphics programming
 
HKkintone20170128v1
HKkintone20170128v1HKkintone20170128v1
HKkintone20170128v1
 
地理学卒論・修論生のためのQGIS講座_座学編
地理学卒論・修論生のためのQGIS講座_座学編地理学卒論・修論生のためのQGIS講座_座学編
地理学卒論・修論生のためのQGIS講座_座学編
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
 
NUIプログラミング演習2015
NUIプログラミング演習2015NUIプログラミング演習2015
NUIプログラミング演習2015
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUIS
 
Git超入門
Git超入門Git超入門
Git超入門
 
モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み #devsumi
モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み #devsumi モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み #devsumi
モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み #devsumi
 
QGIS(v2.2)初級編 さわってみようQGIS
QGIS(v2.2)初級編 さわってみようQGISQGIS(v2.2)初級編 さわってみようQGIS
QGIS(v2.2)初級編 さわってみようQGIS
 
Source treeの紹介
Source treeの紹介Source treeの紹介
Source treeの紹介
 
【kintone hive 上海】ウィングアーク上海講演資料_160918
【kintone hive 上海】ウィングアーク上海講演資料_160918【kintone hive 上海】ウィングアーク上海講演資料_160918
【kintone hive 上海】ウィングアーク上海講演資料_160918
 
PyCon JP 2015 keynote
PyCon JP 2015 keynotePyCon JP 2015 keynote
PyCon JP 2015 keynote
 
楽天テクノロジーカンファレンス2009
楽天テクノロジーカンファレンス2009楽天テクノロジーカンファレンス2009
楽天テクノロジーカンファレンス2009
 
Unity道場 ロボティクス 秋のLT祭り 2021
Unity道場 ロボティクス 秋のLT祭り 2021Unity道場 ロボティクス 秋のLT祭り 2021
Unity道場 ロボティクス 秋のLT祭り 2021
 
【Unity道場 建築スペシャル2】BIMの“I”の使い方
【Unity道場 建築スペシャル2】BIMの“I”の使い方【Unity道場 建築スペシャル2】BIMの“I”の使い方
【Unity道場 建築スペシャル2】BIMの“I”の使い方
 

Viewers also liked

「自動テストを頑張って書こう」という話ではないLT
「自動テストを頑張って書こう」という話ではないLT「自動テストを頑張って書こう」という話ではないLT
「自動テストを頑張って書こう」という話ではないLTMasaru Hoshino
 
The Schwartz plugin by yokohama.pm #3
The Schwartz plugin by yokohama.pm #3The Schwartz plugin by yokohama.pm #3
The Schwartz plugin by yokohama.pm #3Masaru Hoshino
 
Reuters: Pictures of the Year 2016 (Part 2)
Reuters: Pictures of the Year 2016 (Part 2)Reuters: Pictures of the Year 2016 (Part 2)
Reuters: Pictures of the Year 2016 (Part 2)maditabalnco
 
The Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post FormatsThe Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post FormatsBarry Feldman
 
The Outcome Economy
The Outcome EconomyThe Outcome Economy
The Outcome EconomyHelge Tennø
 

Viewers also liked (7)

Memcache Queue
Memcache QueueMemcache Queue
Memcache Queue
 
「自動テストを頑張って書こう」という話ではないLT
「自動テストを頑張って書こう」という話ではないLT「自動テストを頑張って書こう」という話ではないLT
「自動テストを頑張って書こう」という話ではないLT
 
YAPC::Asia2015
YAPC::Asia2015YAPC::Asia2015
YAPC::Asia2015
 
The Schwartz plugin by yokohama.pm #3
The Schwartz plugin by yokohama.pm #3The Schwartz plugin by yokohama.pm #3
The Schwartz plugin by yokohama.pm #3
 
Reuters: Pictures of the Year 2016 (Part 2)
Reuters: Pictures of the Year 2016 (Part 2)Reuters: Pictures of the Year 2016 (Part 2)
Reuters: Pictures of the Year 2016 (Part 2)
 
The Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post FormatsThe Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post Formats
 
The Outcome Economy
The Outcome EconomyThe Outcome Economy
The Outcome Economy
 

Similar to Yapc::Asia_2012

Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshopDaisuke Sugai
 
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)Insight Technology, Inc.
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Yahoo!デベロッパーネットワーク
 
エンジニアという職業について
エンジニアという職業についてエンジニアという職業について
エンジニアという職業についてHisatoshi Kikumoto
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]David Buck
 
ソーシャルデザインパターン -評判と情報収集-
ソーシャルデザインパターン -評判と情報収集-ソーシャルデザインパターン -評判と情報収集-
ソーシャルデザインパターン -評判と情報収集-Koichi Hamada
 
Autonomous を支える技術、Oracle Database 18c デモンストレーション
Autonomous を支える技術、Oracle Database 18c デモンストレーションAutonomous を支える技術、Oracle Database 18c デモンストレーション
Autonomous を支える技術、Oracle Database 18c デモンストレーションオラクルエンジニア通信
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話
DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話
DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話Kamonohashi
 
Participation report of data stax accelerate 2019
Participation report of data stax accelerate 2019Participation report of data stax accelerate 2019
Participation report of data stax accelerate 2019MKT-INTHEFOREST
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)NTT DATA Technology & Innovation
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発Satoshi Takano
 
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~Yuki Ando
 
国産 PaaS 、NIFTY Cloud C4SA の中身
国産 PaaS 、NIFTY Cloud C4SA の中身国産 PaaS 、NIFTY Cloud C4SA の中身
国産 PaaS 、NIFTY Cloud C4SA の中身Takahiro Oohata
 

Similar to Yapc::Asia_2012 (20)

Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
 
エンジニアという職業について
エンジニアという職業についてエンジニアという職業について
エンジニアという職業について
 
20181228 ncf to_azure_batch
20181228 ncf to_azure_batch20181228 ncf to_azure_batch
20181228 ncf to_azure_batch
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
ソーシャルデザインパターン -評判と情報収集-
ソーシャルデザインパターン -評判と情報収集-ソーシャルデザインパターン -評判と情報収集-
ソーシャルデザインパターン -評判と情報収集-
 
Autonomous を支える技術、Oracle Database 18c デモンストレーション
Autonomous を支える技術、Oracle Database 18c デモンストレーションAutonomous を支える技術、Oracle Database 18c デモンストレーション
Autonomous を支える技術、Oracle Database 18c デモンストレーション
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
Bambooによる継続的デリバリー
Bambooによる継続的デリバリーBambooによる継続的デリバリー
Bambooによる継続的デリバリー
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話
DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話
DLLAB Engineer Days:AIチームが履歴やリソース管理で疲弊してたので開発基盤作ってOSS化した話
 
Participation report of data stax accelerate 2019
Participation report of data stax accelerate 2019Participation report of data stax accelerate 2019
Participation report of data stax accelerate 2019
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発
 
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
 
国産 PaaS 、NIFTY Cloud C4SA の中身
国産 PaaS 、NIFTY Cloud C4SA の中身国産 PaaS 、NIFTY Cloud C4SA の中身
国産 PaaS 、NIFTY Cloud C4SA の中身
 

Recently uploaded

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (9)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

Yapc::Asia_2012

  • 2. 2 Self Introduction ○ 星野 将(id:masartz) ○ 株式会社ミクシィ ○ 技術部たんぽぽGたんぽぽT ○ No More 「刺身の上にタンポポをのせる仕事」 - 単純作業の繰り返しで開発者の時間を浪費しないために Copyright (C) mixi, Inc. All rights reserved.
  • 3. 3 Agenda ○ mixiサービスの歴史と現状 ○ 疎結合化のアーキテクチャ ○ ライブラリ管理 ○ ガイドラインとテスト ○ まとめ Copyright (C) mixi, Inc. All rights reserved.
  • 4. 4 mixiサービスの歴史と現状 Copyright (C) mixi, Inc. All rights reserved.
  • 5. 5 mixi’s History ○ サービス開始(2004年)から表も裏もperlであることは変わっていない ○ あるときオープンソース化したことで、そこのライブラリは変更した ○ 特徴 ○ ライブラリ・モジュール群が複雑に絡まりあっている ● 影響範囲が広いor読めない ● 開発効率が落ちる or 予期せぬ障害が発生する ○ レガシーな記述や歴代のコーディングスタイルが混在している ● メンテナンスコストも高い ● ack しまくり Copyright (C) mixi, Inc. All rights reserved.
  • 6. 6 mixi’s History ○ しかし、、、それを一口に悪と言うだけでは良くない ○ 長く続いているサービスでは仕方ないこと ○ たくさんの開発者がいるサービスでは避けられないこと ○ 皆様にも共感いただける内容になっているのではないかと思います Copyright (C) mixi, Inc. All rights reserved.
  • 7. 7 疎結合のアーキテクチャ Copyright (C) mixi, Inc. All rights reserved.
  • 8. 8 Architecture of loose coupling ○ Service Procedure ○ Web+DB vol.62 に掲載 ○ モジュール間を仲介するための疑似的なRPC ○ 直接useすることで生じる依存関係を解決する ○ ×:Mixi::Diary -> Mixi::User::get_profile ○ ○:Mixi::Diary => Mixi::ServiceProcedure::call(‘user.profile.get’) => Mixi::User::Adapter::Profile -> Mixi::User::get_profile ○ 横断的なインターフェースの一覧がYAMLで管理される --- methods: getEntryBody : Mixi::Voive::Adapter::Entry inertComment : Mixi::Voice::Adapter::Comment ○ 内部実装の変更をProcedureで吸収or確認することができる Copyright (C) mixi, Inc. All rights reserved.
  • 9. 9 Architecture of loose coupling ○ 各レベルのAPI一覧 ○ InternalAPI ( 別の名前空間向け) ○ CoreInternalAPI ( 内部切り出しのサービス向け) ←今回の話はコレ ○ InternalGraphAPI ( 公式アプリなど向け) ○ GraphAPI ( SAPなど向け) Copyright (C) mixi, Inc. All rights reserved.
  • 10. 10 CoreInternal API ○ mixiのサービスは1つのリポジトリによって運用されている ○ メリット ○ 既存資産 ○ 開発ノウハウ ○ デメリット ○ リポジトリの肥大化 ○ 影響範囲の拡大 ○ 新しいトライへの障壁 ○ このデメリットの部分に対する一つの解として、 必要な情報のみをAPIとして提供するための機構がCoreInternal Copyright (C) mixi, Inc. All rights reserved.
  • 11. 11 CoreInternal API ○ ミニマムなサービスを手軽に構築することを目的とする wwwサーバー、DBサーバー、memcacheなどのリソースも専用化する ○ APIサーバーはhttp通信 ○ 現時点では生のPlackサーバー ○ リクエスト/レスポンス ○ JSONRPC Copyright (C) mixi, Inc. All rights reserved.
  • 12. 12 CoreInternal API ○ 導入実績 ○ 社内用ベータサービスなどで実験導入中 ○ 既存システムに混じっていた小規模サービスの切り出し(途中) ○ 課題 ○ リソースの専用化と資源配分 ○ 負荷面のパフォーマンス計測 ○ 既存資産が活用できない ○ 使いどころ ○ 新規サービスをミニマムで構築する場合 ○ 言語や環境の縛りを超える場合 Copyright (C) mixi, Inc. All rights reserved.
  • 13. 13 Once the break ○ ここまでで半分ちょっと Copyright (C) mixi, Inc. All rights reserved.
  • 14. 14 ライブラリ管理 Copyright (C) mixi, Inc. All rights reserved.
  • 15. 15 Library Maintenance ○ Inspect Package ○ http://alpha.mixi.co.jp/2011/10767/ ○ 名前空間ごとの技術的負債のスコアを算出する ○ 結合度、複雑度etc ○ 導入された以降、いくつかの改善対応が行われる ○ Service Procedureを用いたリファクタリングetc ○ 究極的なゴールは結合度・複雑度がゼロになること ○ その始点として現在の数値がいくつなのかを「見える化」するツール Copyright (C) mixi, Inc. All rights reserved.
  • 16. 16 Library Maintenance ○ 対応が進むと、経過差分が見たくなる ○ 社内wikiではいくつかのチームがコマンド実行->結果貼り付けをルーチン化 ○ そういう作業を自動化するのがたんぽぽの業務 ○ 過去に遡った履歴の取得 ○ 取り組んだチーム管轄以外も含めて全ての名前空間分を収集 ○ 時間軸:過程も含めた「見える化」を行える ○ モジュール間の横軸:全社的な状況把握と対応の優先度づけを行える Copyright (C) mixi, Inc. All rights reserved.
  • 17. 17 ガイドラインとテスト Copyright (C) mixi, Inc. All rights reserved.
  • 18. 18 Guideline and Test ○ コードレビュー業務とコーディングガイドライン ○ http://alpha.mixi.co.jp/2012/10870/ ○ コードレビューによって、一定の安定度・統一性が保たれてきた ○ しかし最近は、中央集権的だったコードレビューの一部 (特定名前空間のみ対象)を各チーム内に権限移譲 ○ 組織:小さな組織で小さなサイクルを回すため ○ コード:疎結合化により、コード修正の影響範囲の局所化が進んでいるため ○ 通常レビュー、チーム内レビュー問わず同様の品質を保つ必要がある ○ →ガイドラインを整理する/ガイドラインに沿ったレビューをする ○ ー→ガイドラインを厳守するためのテストを書いて自動化する = 品質担保をできる限り自動化する Copyright (C) mixi, Inc. All rights reserved.
  • 19. 19 Guideline and Test ○ 自動化できるガイドライン項目を洗い出す ○ 内容に沿ったテスト内容を書く ○ 現状では正規表現系が主 ○ リポジトリの主要ディレクトリ配下全てを再帰的に対象とする ○ 既存のモジュールでテストが落ちるものをブラックリスト化する ○ 上記内容を設定ファイルっぽくしたファイルを作っていく <モジュール> <設定ファイル> Copyright (C) mixi, Inc. All rights reserved.
  • 20. 20 Guideline and Test ○ 設定ファイルっぽいテスト項目ファイル群をまとめてテスト実行 ○ テスト項目(の一部) ○ @EXPORTの使用 ○ requireの使用 ○ 非推奨モジュールの使用 ○ ループ用途でのmap,grep使用 ○ etc… ○ 中には140個程度のpmがブラックリストに列挙されたものもある ○ 大事なのは、既存に引っ張られずに、悪さに歯止めをかけること ○ 新しいものをダメにしない ○ ダメなものを洗い出して、直していく ○ 「いつか良くなるだろう」は甘え Copyright (C) mixi, Inc. All rights reserved.
  • 21. 21 まとめ Copyright (C) mixi, Inc. All rights reserved.
  • 22. 22 Conclusion ○ システムが長く運用される上で、肥大化・複雑化することは仕方ない ○ 「リーダブルコード」の『ネストを浅くする』の項 ○ 例えば1日1回if文を追加する ○ 例えば1日1回モジュールをuseする ○ →普段何気なく行っていることの結果起きること Copyright (C) mixi, Inc. All rights reserved.
  • 23. 23 Conclusion ○ あるべき姿に向けてどういうアプローチをとっていくか ○ 道筋となる土台を作る ● SeviceProcedureモジュール、CoreInternalAPIサーバー ○ ゴールまでの距離を計測する ● Inspect Packageツール/ビジュアライザ ○ 今以上に悪くならないよう歯止めをかける ● ガイドラインテストツール ○ 最終的にはエンジニアの手によって計画的に改善していく Copyright (C) mixi, Inc. All rights reserved.
  • 24. 24 Thanks ○ ご清聴ありがとうございました Copyright (C) mixi, Inc. All rights reserved.
  • 25. 25 Copyright (C) mixi, Inc. All rights reserved.