SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
大きくなったシステムを元に新たな環境を作る取り組み
masartz@mixi.inc
YAPC::Asia 2013
○ 星野 将(id:masartz)
○ 株式会社ミクシィ
○ 技術部たんぽぽG
○ No More 「刺身の上にタンポポをのせる仕事」
- 単純作業の繰り返しで開発者の時間を浪費しないために
○ https://securityinsight.jp/interview/27-whitehats/490-matsuoka_takeshi
Copyright (C) mixi, Inc. All rights reserved.
Self Introduction
2
○ 去年のおさらい
○ mixiにおけるPerlの使用状況
○ スマホアプリ開発のための基盤構築の取り組み
○ 外部化したCPANモジュール
○ まとめ
Copyright (C) mixi, Inc. All rights reserved.
Agenda
3
Copyright (C) mixi, Inc. All rights reserved.
4
去年のおさらい
○ あるべき姿に向けてどういうアプローチをとっていくか
○ 道筋となる土台を作る
● SeviceProcedureモジュール、CoreInternalAPIサーバー
○ ゴールまでの距離を計測する
● Inspect Packageツール/ビジュアライザ
○ 今以上に悪くならないよう歯止めをかける
● ガイドラインテストツール
○ 最終的にはエンジニアの手によって計画的に改善していく
Copyright (C) mixi, Inc. All rights reserved.
Review of YAPC::Asia 2012
5
Copyright (C) mixi, Inc. All rights reserved.
6
mixiにおけるPerlの使用状況
○ 2004年2月:mixiのサービス開始
○ 当時のPerlの最新バージョン:5.8.8
○ ~ このまま7年ほど過ごす~
○ 2011年頃からOSとPerlのアップデートプロジェクトが開始
○ OSをアップデートする
● そのためのPerlをアップデートする
○ /usr/bin/perl からの脱却
● /usr/local/perl-5.14.4/bin/perl の使用
○ 今後のバージョンアップもスムーズに行えるハズ
● 実際に、5.14.1 -> 5.14.4 へのマイナーバージョンアップは実施済み
○ モジュール管理にcartonを利用
○ などなど対応した2013年9月現在は5.14.4で稼働中
Copyright (C) mixi, Inc. All rights reserved.
mixi’s Perl version
7
バージョンアップの対応手順
○ perl 5.14 + アップデートしたCPANモジュールの環境のテストをフル実行
○ jenkins を回しまくる
○ 落ちた所を順次潰す -> 再実行 のループ
○ 網羅QAテスト
○ 単体テストの網羅率が100%ではない && 単体では見つからない部分
○ 本番環境に段階的に投入
○ 最初は1台のサーバーにのみ投入し、影響範囲を最小化する
移行期間の開発作業
○ オプションで環境選択してApacheを立ち上げ
○ 同じくオプションつきでブランチをjenkinsでテスト実行
○ 移行後半にはtrunkのfull testを両バージョンで実施
○ どっちかの環境で引っかかる問題が出たりする
○ HTTP::Status の RC_OK と HTTP_OK の互換性
Copyright (C) mixi, Inc. All rights reserved.
How to version up of Perl
8
対応した問題の一部
○ CPANモジュール部分
○ Regexp::Optimizerにパッチを送る
○ Storable が正規表現リテラルをシリアライズしない
○ XML::Feedパッケージ内のレイアウト変更
● XML::Feed::RSS(0.23) => XML::Feed::Format::RSS(0.3)
○ List::MoreUtils::all の挙動変化
● perl -e “warn List::MoreUtils::all { 0 } qw()“
● 0.22 : Warning
● 0.33 : 1
○ Perlのコアな部分
○ かっことしての qw(...) の使用(例: Class::Accessor::Fast)
● ×:__PACKAGE__->mk_accessors qw/ hoge / ;
● ○:__PACKAGE__->mk_accessors( qw/ hoge / );
Copyright (C) mixi, Inc. All rights reserved.
How to version up of Perl
9
バージョンアップしたPerl5.14の使い方
○ 基本的に増えた機能はどれも使ってOK
○ Defined-or演算子 //
○ 他だと package ブロック文法( package Foo {}) とか say とかが稀に
○ まだ積極的に色々使っている段階ではない
○ experimentalな機能は使用不可
○ push $array_ref , $value
○ ルールで縛っているだけなので、うっかり書いたのに気づけないのは課題
○ 【宣伝その1】5.14より先のPerlについては明日11:20から
藤原洋記念ホールで発表がある
「これからのPerlプロダクトのかたち」で!
Copyright (C) mixi, Inc. All rights reserved.
How to use Perl 5.14
10
mixiのコアライブラリの切り出し
○ 設計レイヤにおけるcommon library層のモジュール群が対象
○ 専用の名前空間をトップレベルで設ける
○ そこの名前空間ごと別リポジトリ化する
○ 対象モジュール
○ Encoding
○ DB操作(分散環境を考慮したconnect から SQL発行まで)
○ Log出力
○ Convert( YAML , JSON => perl-object)
○ その他いわゆるUtil的なものなど( String , Hash …)
○ 機能単位の疎結合化をしたり、新サービスを作るとき使うために
Copyright (C) mixi, Inc. All rights reserved.
mixi’s core library
11
○ ここまでで半分くらい
○ 小休止
Copyright (C) mixi, Inc. All rights reserved.
Once the break
12
powered by Cheering〜がんばるあなたを応援します〜
http://apps.mixi.co.jp/apps/cheering.html
Copyright (C) mixi, Inc. All rights reserved.
13
スマホアプリ開発のための基盤構築の取り組み
○ mixiのスマホアプリ?
○ nohana?
○ Innovation Center発だから違うよ!
○ http://nohana.jp/
○ 色んな所でアプリ作ってます
○ 多くのアプリを作るための基盤を提供する
○ ミクシィ社が提供する共通アカウント管理サービスを実現する
○ 【宣伝その2】詳しくは明日14:50から藤原洋記念ホールで発表がある
「スマフォアプリ開発を支える認証認可アーキテクチャ 」で!
Copyright (C) mixi, Inc. All rights reserved.
What’s mixi’s Smartphome Application
14
Copyright (C) mixi, Inc. All rights reserved.
System Architecture
15
○ 各機能別層と外部とのI/FとなるAPI層の2つに大別される
○ 全体としてPSGI互換
○ API層
○ 外部(SDKやApplication Backend)との通信を行う
○ 通信方式はRESTful API
● REST通信の実現はRouter::Simple
○ 細かい所だと use common::sense
○ 薄いレイヤーなので、非常にシンプル
○ 各機能別層
○ アカウント基盤、Push基盤、etc…
○ API層との通信をJSON-RPCで行う(基盤同士の通信も同様)
○ RPCの通信モジュールは既存mixiのServiceProcedureよりも簡略化したもの
○ CoC(設定よりも規約)のポリシーで設計
○ それぞれの基盤のリポジトリが別れるため、明確に規約で縛って関係性を構
築した方がスムーズだった
Copyright (C) mixi, Inc. All rights reserved.
Basis Application
16
○ スマホ基盤開発においては全面的にGithub Enterpriseを使用
○ mixi.jpの開発はgit + gitweb
○ 数十人の開発者が多くのリポジトリ管理をしている
○ github.comのプライベートリポジトリとの比較
○ メリット
● 他のチームやプロジェクトのリポジトリへの閲覧・PR
● 任意のメンテタイミング + ネットワークセキュリティ
○ デメリット
● リポジトリへのアクセス手段が限定される
● 他社と協業する際に社内ネットワークにアクセスさせることになる
○ =>ケースバイケースで使い分けている
○ 【宣伝その3】続きは明日13:00から多目的教室3で発表がある
「GitHubでつくる、たのしい開発現場」で!
Copyright (C) mixi, Inc. All rights reserved.
Develop Environment
17
Copyright (C) mixi, Inc. All rights reserved.
18
外部化したCPANモジュール
○ useしてるけど、実は使ってないモジュールの検知
○ 書いたけどやっぱり使わなかった or 使っていた処理が消えた
○ 特に後者は長年メンテしているモジュールだと割とある
○ 中身は正規表現で頑張っているだけ
○ 正しく厳密にやるならPPIを使えばできると思う
○ 8割カバーできればOKと思ってサクっと作ったのがきっかけ
Copyright (C) mixi, Inc. All rights reserved.
Open Source Software of mixi(Test::UselessModule)
19
○ sample_test.t
○ Todo
○ CLI ツール
○ 例外モジュールの追加方法
○ Repository
○ https://github.com/masartz/p5-test-uselessmodule
Copyright (C) mixi, Inc. All rights reserved.
Open Source Software of mixi(Test::UselessModule)
20
○ 例外ファイルを管理しつつ、独自のルールでテストする
○ 昨年のYAPC::Asia2012でも触れたもの
○ 社内コーディングガイドラインドキュメント -> 自動化ツール
○ ルールファイルを追加して、テスト実行すると検知可能
Copyright (C) mixi, Inc. All rights reserved.
Open Source Software of mixi(Test::CodingStyle)
21
○ 「これ以上負債を増やさないためにどうするか」というアプローチ
○ Test::Perl::Criticとの比較
○ 独自のルールを簡単に書ける
● 正規表現、PPIなど可
○ キモはblacklistとexcept_listの管理
● すぐには直せないものがたくさんあってもルールを追加できる
○ mixiはぶっちゃけどれくらいのファイル数なのか?
○ libの配下で「find . -type f -name "[^.]*" | wc -l」
○ 12000ファイル!
○ 変更のないファイルを見ないよう後に改修
○ Test::Perl::Criticも重いので、同じ仕組みを導入してる
Copyright (C) mixi, Inc. All rights reserved.
Open Source Software of mixi(Test::CodingStyle)
22
○ 汎用的なモジュールか?
○ 実際、mixi以外の基盤プロダクトで使ってもらったフィードバック
○ Perl::Criticのルールの範囲内でなんとかなる
○ 独自のルールを適用する場合、管理する前に引っかかる箇所を全部直す
○ まとめると、「そんなに必要ない」
○ これはこれで全く正しい対応
○ それができないようなプロダクトだけで使えばいい
○ mixi並の規模で、全体把握ができない or 力技の修正が効かない
○ 案件が逼迫していてメンテ・リファクタリソースがない
○ Repository
○ https://github.com/mixi-inc/p5-Test-CodingStyle
Copyright (C) mixi, Inc. All rights reserved.
Open Source Software of mixi(Test::CodingStyle)
23
Copyright (C) mixi, Inc. All rights reserved.
24
まとめ
○ 新しい環境を作って得たものをmixi本体に持ち帰れるかが課題
○ ライブラリ・アーキテクチャ・開発環境
○ 割愛したスマホ基盤のインフラ部分にもいくつものTryがありました
○ Perlのバージョンアップに戸惑っている方、がんばってやりましょう
○ きっとできるはず
○ 使っているCPANモジュールとそのバージョンに注意
○ モジュールやプロダクトのオープン化をさらに進めて行きたい
○ 今更感はすごいありますが・・
○ 文化的な部分もあって、これまで注力していなかった
○ mixi本体の課題解決は特にこの半年は注力していなかった
○ mixiと新環境、両方を運用しつつこれに向かっていかなければいけない
○ その過程で出る課題や解決方法も、アウトプットしていきたい
Copyright (C) mixi, Inc. All rights reserved.
Conclusion
25
○ ご清聴ありがとうございました
Copyright (C) mixi, Inc. All rights reserved.
Thanks
26
Copyright (C) mixi, Inc. All rights reserved.
27

Más contenido relacionado

La actualidad más candente

地理学卒論・修論生のためのQGIS講座_座学編
地理学卒論・修論生のためのQGIS講座_座学編地理学卒論・修論生のためのQGIS講座_座学編
地理学卒論・修論生のためのQGIS講座_座学編
Inoshachu, NPO
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa
 
楽天テクノロジーカンファレンス2009
楽天テクノロジーカンファレンス2009楽天テクノロジーカンファレンス2009
楽天テクノロジーカンファレンス2009
gaooh
 

La actualidad más candente (14)

クラウドワークスを使ったバーチャル開発術
クラウドワークスを使ったバーチャル開発術クラウドワークスを使ったバーチャル開発術
クラウドワークスを使ったバーチャル開発術
 
Yahoo!ブラウザーにおける市場環境の分析と戦略化
Yahoo!ブラウザーにおける市場環境の分析と戦略化Yahoo!ブラウザーにおける市場環境の分析と戦略化
Yahoo!ブラウザーにおける市場環境の分析と戦略化
 
地理学卒論・修論生のためのQGIS講座_座学編
地理学卒論・修論生のためのQGIS講座_座学編地理学卒論・修論生のためのQGIS講座_座学編
地理学卒論・修論生のためのQGIS講座_座学編
 
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
 
モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み #devsumi
モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み #devsumi モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み #devsumi
モノタロウECプラットフォームを支える開発運用モダナイゼーションの取り組み #devsumi
 
【kintone hive 上海】ウィングアーク上海講演資料_160918
【kintone hive 上海】ウィングアーク上海講演資料_160918【kintone hive 上海】ウィングアーク上海講演資料_160918
【kintone hive 上海】ウィングアーク上海講演資料_160918
 
Unity道場 ロボティクス 秋のLT祭り 2021
Unity道場 ロボティクス 秋のLT祭り 2021Unity道場 ロボティクス 秋のLT祭り 2021
Unity道場 ロボティクス 秋のLT祭り 2021
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
 
【Unity道場 建築スペシャル2】BIMの“I”の使い方
【Unity道場 建築スペシャル2】BIMの“I”の使い方【Unity道場 建築スペシャル2】BIMの“I”の使い方
【Unity道場 建築スペシャル2】BIMの“I”の使い方
 
Git超入門
Git超入門Git超入門
Git超入門
 
animation_prototype_campfire_design
animation_prototype_campfire_designanimation_prototype_campfire_design
animation_prototype_campfire_design
 
楽天テクノロジーカンファレンス2009
楽天テクノロジーカンファレンス2009楽天テクノロジーカンファレンス2009
楽天テクノロジーカンファレンス2009
 
PyCon JP 2015 keynote
PyCon JP 2015 keynotePyCon JP 2015 keynote
PyCon JP 2015 keynote
 
Source treeの紹介
Source treeの紹介Source treeの紹介
Source treeの紹介
 

Destacado (7)

「自動テストを頑張って書こう」という話ではないLT
「自動テストを頑張って書こう」という話ではないLT「自動テストを頑張って書こう」という話ではないLT
「自動テストを頑張って書こう」という話ではないLT
 
Memcache Queue
Memcache QueueMemcache Queue
Memcache Queue
 
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 a Yapc::Asia 2013

S02 t3 python_study_web
S02 t3 python_study_webS02 t3 python_study_web
S02 t3 python_study_web
Takeshi Akutsu
 
20140320ニフティクラウドmeet-up!セミナー資料1
20140320ニフティクラウドmeet-up!セミナー資料120140320ニフティクラウドmeet-up!セミナー資料1
20140320ニフティクラウドmeet-up!セミナー資料1
NIFTY Cloud
 
mixiのiOSアプリ開発
mixiのiOSアプリ開発mixiのiOSアプリ開発
mixiのiOSアプリ開発
Kenji Kinukawa
 
mixi 新プラットフォーム発表会
mixi 新プラットフォーム発表会mixi 新プラットフォーム発表会
mixi 新プラットフォーム発表会
mixiPR
 
20130802第6回iocj情報交換会 info scoop最新情報
20130802第6回iocj情報交換会 info scoop最新情報20130802第6回iocj情報交換会 info scoop最新情報
20130802第6回iocj情報交換会 info scoop最新情報
infoScoop
 

Similar a Yapc::Asia 2013 (20)

S02 t3 python_study_web
S02 t3 python_study_webS02 t3 python_study_web
S02 t3 python_study_web
 
Smfl20201001
Smfl20201001Smfl20201001
Smfl20201001
 
メディアアプリでよく見る無限スクロールするタブの動きへの考察
メディアアプリでよく見る無限スクロールするタブの動きへの考察メディアアプリでよく見る無限スクロールするタブの動きへの考察
メディアアプリでよく見る無限スクロールするタブの動きへの考察
 
20140320ニフティクラウドmeet-up!セミナー資料1
20140320ニフティクラウドmeet-up!セミナー資料120140320ニフティクラウドmeet-up!セミナー資料1
20140320ニフティクラウドmeet-up!セミナー資料1
 
Nifty cloud mbaas
Nifty cloud mbaasNifty cloud mbaas
Nifty cloud mbaas
 
さくらのIoTプラットフォーム「sakura.io」を使ってみよう
さくらのIoTプラットフォーム「sakura.io」を使ってみようさくらのIoTプラットフォーム「sakura.io」を使ってみよう
さくらのIoTプラットフォーム「sakura.io」を使ってみよう
 
HoloLab_20191016_ceatec
HoloLab_20191016_ceatecHoloLab_20191016_ceatec
HoloLab_20191016_ceatec
 
コミュニティ紹介
コミュニティ紹介コミュニティ紹介
コミュニティ紹介
 
初心者向けSpigot開発
初心者向けSpigot開発初心者向けSpigot開発
初心者向けSpigot開発
 
mixiのiOSアプリ開発
mixiのiOSアプリ開発mixiのiOSアプリ開発
mixiのiOSアプリ開発
 
kintoneアプリをjavascriptでいじってみよう
kintoneアプリをjavascriptでいじってみようkintoneアプリをjavascriptでいじってみよう
kintoneアプリをjavascriptでいじってみよう
 
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).
 
mixi 新プラットフォーム発表会
mixi 新プラットフォーム発表会mixi 新プラットフォーム発表会
mixi 新プラットフォーム発表会
 
OpenCV on mobile
OpenCV on mobileOpenCV on mobile
OpenCV on mobile
 
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったかエンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
 
20130802第6回iocj情報交換会 info scoop最新情報
20130802第6回iocj情報交換会 info scoop最新情報20130802第6回iocj情報交換会 info scoop最新情報
20130802第6回iocj情報交換会 info scoop最新情報
 
今こそ聞きたい開発環境
今こそ聞きたい開発環境今こそ聞きたい開発環境
今こそ聞きたい開発環境
 
Approach of Prototyping for making Application User Interface about iOS
Approach of Prototyping for making Application User Interface about iOSApproach of Prototyping for making Application User Interface about iOS
Approach of Prototyping for making Application User Interface about iOS
 
IAチャンネル:nissenのIA最適化事例その1
IAチャンネル:nissenのIA最適化事例その1IAチャンネル:nissenのIA最適化事例その1
IAチャンネル:nissenのIA最適化事例その1
 
What is tmcn for isit
What is tmcn for isitWhat is tmcn for isit
What is tmcn for isit
 

Último

Último (12)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

Yapc::Asia 2013

  • 2. ○ 星野 将(id:masartz) ○ 株式会社ミクシィ ○ 技術部たんぽぽG ○ No More 「刺身の上にタンポポをのせる仕事」 - 単純作業の繰り返しで開発者の時間を浪費しないために ○ https://securityinsight.jp/interview/27-whitehats/490-matsuoka_takeshi Copyright (C) mixi, Inc. All rights reserved. Self Introduction 2
  • 3. ○ 去年のおさらい ○ mixiにおけるPerlの使用状況 ○ スマホアプリ開発のための基盤構築の取り組み ○ 外部化したCPANモジュール ○ まとめ Copyright (C) mixi, Inc. All rights reserved. Agenda 3
  • 4. Copyright (C) mixi, Inc. All rights reserved. 4 去年のおさらい
  • 5. ○ あるべき姿に向けてどういうアプローチをとっていくか ○ 道筋となる土台を作る ● SeviceProcedureモジュール、CoreInternalAPIサーバー ○ ゴールまでの距離を計測する ● Inspect Packageツール/ビジュアライザ ○ 今以上に悪くならないよう歯止めをかける ● ガイドラインテストツール ○ 最終的にはエンジニアの手によって計画的に改善していく Copyright (C) mixi, Inc. All rights reserved. Review of YAPC::Asia 2012 5
  • 6. Copyright (C) mixi, Inc. All rights reserved. 6 mixiにおけるPerlの使用状況
  • 7. ○ 2004年2月:mixiのサービス開始 ○ 当時のPerlの最新バージョン:5.8.8 ○ ~ このまま7年ほど過ごす~ ○ 2011年頃からOSとPerlのアップデートプロジェクトが開始 ○ OSをアップデートする ● そのためのPerlをアップデートする ○ /usr/bin/perl からの脱却 ● /usr/local/perl-5.14.4/bin/perl の使用 ○ 今後のバージョンアップもスムーズに行えるハズ ● 実際に、5.14.1 -> 5.14.4 へのマイナーバージョンアップは実施済み ○ モジュール管理にcartonを利用 ○ などなど対応した2013年9月現在は5.14.4で稼働中 Copyright (C) mixi, Inc. All rights reserved. mixi’s Perl version 7
  • 8. バージョンアップの対応手順 ○ perl 5.14 + アップデートしたCPANモジュールの環境のテストをフル実行 ○ jenkins を回しまくる ○ 落ちた所を順次潰す -> 再実行 のループ ○ 網羅QAテスト ○ 単体テストの網羅率が100%ではない && 単体では見つからない部分 ○ 本番環境に段階的に投入 ○ 最初は1台のサーバーにのみ投入し、影響範囲を最小化する 移行期間の開発作業 ○ オプションで環境選択してApacheを立ち上げ ○ 同じくオプションつきでブランチをjenkinsでテスト実行 ○ 移行後半にはtrunkのfull testを両バージョンで実施 ○ どっちかの環境で引っかかる問題が出たりする ○ HTTP::Status の RC_OK と HTTP_OK の互換性 Copyright (C) mixi, Inc. All rights reserved. How to version up of Perl 8
  • 9. 対応した問題の一部 ○ CPANモジュール部分 ○ Regexp::Optimizerにパッチを送る ○ Storable が正規表現リテラルをシリアライズしない ○ XML::Feedパッケージ内のレイアウト変更 ● XML::Feed::RSS(0.23) => XML::Feed::Format::RSS(0.3) ○ List::MoreUtils::all の挙動変化 ● perl -e “warn List::MoreUtils::all { 0 } qw()“ ● 0.22 : Warning ● 0.33 : 1 ○ Perlのコアな部分 ○ かっことしての qw(...) の使用(例: Class::Accessor::Fast) ● ×:__PACKAGE__->mk_accessors qw/ hoge / ; ● ○:__PACKAGE__->mk_accessors( qw/ hoge / ); Copyright (C) mixi, Inc. All rights reserved. How to version up of Perl 9
  • 10. バージョンアップしたPerl5.14の使い方 ○ 基本的に増えた機能はどれも使ってOK ○ Defined-or演算子 // ○ 他だと package ブロック文法( package Foo {}) とか say とかが稀に ○ まだ積極的に色々使っている段階ではない ○ experimentalな機能は使用不可 ○ push $array_ref , $value ○ ルールで縛っているだけなので、うっかり書いたのに気づけないのは課題 ○ 【宣伝その1】5.14より先のPerlについては明日11:20から 藤原洋記念ホールで発表がある 「これからのPerlプロダクトのかたち」で! Copyright (C) mixi, Inc. All rights reserved. How to use Perl 5.14 10
  • 11. mixiのコアライブラリの切り出し ○ 設計レイヤにおけるcommon library層のモジュール群が対象 ○ 専用の名前空間をトップレベルで設ける ○ そこの名前空間ごと別リポジトリ化する ○ 対象モジュール ○ Encoding ○ DB操作(分散環境を考慮したconnect から SQL発行まで) ○ Log出力 ○ Convert( YAML , JSON => perl-object) ○ その他いわゆるUtil的なものなど( String , Hash …) ○ 機能単位の疎結合化をしたり、新サービスを作るとき使うために Copyright (C) mixi, Inc. All rights reserved. mixi’s core library 11
  • 12. ○ ここまでで半分くらい ○ 小休止 Copyright (C) mixi, Inc. All rights reserved. Once the break 12 powered by Cheering〜がんばるあなたを応援します〜 http://apps.mixi.co.jp/apps/cheering.html
  • 13. Copyright (C) mixi, Inc. All rights reserved. 13 スマホアプリ開発のための基盤構築の取り組み
  • 14. ○ mixiのスマホアプリ? ○ nohana? ○ Innovation Center発だから違うよ! ○ http://nohana.jp/ ○ 色んな所でアプリ作ってます ○ 多くのアプリを作るための基盤を提供する ○ ミクシィ社が提供する共通アカウント管理サービスを実現する ○ 【宣伝その2】詳しくは明日14:50から藤原洋記念ホールで発表がある 「スマフォアプリ開発を支える認証認可アーキテクチャ 」で! Copyright (C) mixi, Inc. All rights reserved. What’s mixi’s Smartphome Application 14
  • 15. Copyright (C) mixi, Inc. All rights reserved. System Architecture 15
  • 16. ○ 各機能別層と外部とのI/FとなるAPI層の2つに大別される ○ 全体としてPSGI互換 ○ API層 ○ 外部(SDKやApplication Backend)との通信を行う ○ 通信方式はRESTful API ● REST通信の実現はRouter::Simple ○ 細かい所だと use common::sense ○ 薄いレイヤーなので、非常にシンプル ○ 各機能別層 ○ アカウント基盤、Push基盤、etc… ○ API層との通信をJSON-RPCで行う(基盤同士の通信も同様) ○ RPCの通信モジュールは既存mixiのServiceProcedureよりも簡略化したもの ○ CoC(設定よりも規約)のポリシーで設計 ○ それぞれの基盤のリポジトリが別れるため、明確に規約で縛って関係性を構 築した方がスムーズだった Copyright (C) mixi, Inc. All rights reserved. Basis Application 16
  • 17. ○ スマホ基盤開発においては全面的にGithub Enterpriseを使用 ○ mixi.jpの開発はgit + gitweb ○ 数十人の開発者が多くのリポジトリ管理をしている ○ github.comのプライベートリポジトリとの比較 ○ メリット ● 他のチームやプロジェクトのリポジトリへの閲覧・PR ● 任意のメンテタイミング + ネットワークセキュリティ ○ デメリット ● リポジトリへのアクセス手段が限定される ● 他社と協業する際に社内ネットワークにアクセスさせることになる ○ =>ケースバイケースで使い分けている ○ 【宣伝その3】続きは明日13:00から多目的教室3で発表がある 「GitHubでつくる、たのしい開発現場」で! Copyright (C) mixi, Inc. All rights reserved. Develop Environment 17
  • 18. Copyright (C) mixi, Inc. All rights reserved. 18 外部化したCPANモジュール
  • 19. ○ useしてるけど、実は使ってないモジュールの検知 ○ 書いたけどやっぱり使わなかった or 使っていた処理が消えた ○ 特に後者は長年メンテしているモジュールだと割とある ○ 中身は正規表現で頑張っているだけ ○ 正しく厳密にやるならPPIを使えばできると思う ○ 8割カバーできればOKと思ってサクっと作ったのがきっかけ Copyright (C) mixi, Inc. All rights reserved. Open Source Software of mixi(Test::UselessModule) 19
  • 20. ○ sample_test.t ○ Todo ○ CLI ツール ○ 例外モジュールの追加方法 ○ Repository ○ https://github.com/masartz/p5-test-uselessmodule Copyright (C) mixi, Inc. All rights reserved. Open Source Software of mixi(Test::UselessModule) 20
  • 21. ○ 例外ファイルを管理しつつ、独自のルールでテストする ○ 昨年のYAPC::Asia2012でも触れたもの ○ 社内コーディングガイドラインドキュメント -> 自動化ツール ○ ルールファイルを追加して、テスト実行すると検知可能 Copyright (C) mixi, Inc. All rights reserved. Open Source Software of mixi(Test::CodingStyle) 21
  • 22. ○ 「これ以上負債を増やさないためにどうするか」というアプローチ ○ Test::Perl::Criticとの比較 ○ 独自のルールを簡単に書ける ● 正規表現、PPIなど可 ○ キモはblacklistとexcept_listの管理 ● すぐには直せないものがたくさんあってもルールを追加できる ○ mixiはぶっちゃけどれくらいのファイル数なのか? ○ libの配下で「find . -type f -name "[^.]*" | wc -l」 ○ 12000ファイル! ○ 変更のないファイルを見ないよう後に改修 ○ Test::Perl::Criticも重いので、同じ仕組みを導入してる Copyright (C) mixi, Inc. All rights reserved. Open Source Software of mixi(Test::CodingStyle) 22
  • 23. ○ 汎用的なモジュールか? ○ 実際、mixi以外の基盤プロダクトで使ってもらったフィードバック ○ Perl::Criticのルールの範囲内でなんとかなる ○ 独自のルールを適用する場合、管理する前に引っかかる箇所を全部直す ○ まとめると、「そんなに必要ない」 ○ これはこれで全く正しい対応 ○ それができないようなプロダクトだけで使えばいい ○ mixi並の規模で、全体把握ができない or 力技の修正が効かない ○ 案件が逼迫していてメンテ・リファクタリソースがない ○ Repository ○ https://github.com/mixi-inc/p5-Test-CodingStyle Copyright (C) mixi, Inc. All rights reserved. Open Source Software of mixi(Test::CodingStyle) 23
  • 24. Copyright (C) mixi, Inc. All rights reserved. 24 まとめ
  • 25. ○ 新しい環境を作って得たものをmixi本体に持ち帰れるかが課題 ○ ライブラリ・アーキテクチャ・開発環境 ○ 割愛したスマホ基盤のインフラ部分にもいくつものTryがありました ○ Perlのバージョンアップに戸惑っている方、がんばってやりましょう ○ きっとできるはず ○ 使っているCPANモジュールとそのバージョンに注意 ○ モジュールやプロダクトのオープン化をさらに進めて行きたい ○ 今更感はすごいありますが・・ ○ 文化的な部分もあって、これまで注力していなかった ○ mixi本体の課題解決は特にこの半年は注力していなかった ○ mixiと新環境、両方を運用しつつこれに向かっていかなければいけない ○ その過程で出る課題や解決方法も、アウトプットしていきたい Copyright (C) mixi, Inc. All rights reserved. Conclusion 25
  • 26. ○ ご清聴ありがとうございました Copyright (C) mixi, Inc. All rights reserved. Thanks 26
  • 27. Copyright (C) mixi, Inc. All rights reserved. 27