Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Yapc::Asia 2013

1.651 Aufrufe

Veröffentlicht am

YAPC::Asia 2013 presentation

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

Yapc::Asia 2013

  1. 1. 大きくなったシステムを元に新たな環境を作る取り組み masartz@mixi.inc YAPC::Asia 2013
  2. 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. 3. ○ 去年のおさらい ○ mixiにおけるPerlの使用状況 ○ スマホアプリ開発のための基盤構築の取り組み ○ 外部化したCPANモジュール ○ まとめ Copyright (C) mixi, Inc. All rights reserved. Agenda 3
  4. 4. Copyright (C) mixi, Inc. All rights reserved. 4 去年のおさらい
  5. 5. ○ あるべき姿に向けてどういうアプローチをとっていくか ○ 道筋となる土台を作る ● SeviceProcedureモジュール、CoreInternalAPIサーバー ○ ゴールまでの距離を計測する ● Inspect Packageツール/ビジュアライザ ○ 今以上に悪くならないよう歯止めをかける ● ガイドラインテストツール ○ 最終的にはエンジニアの手によって計画的に改善していく Copyright (C) mixi, Inc. All rights reserved. Review of YAPC::Asia 2012 5
  6. 6. Copyright (C) mixi, Inc. All rights reserved. 6 mixiにおけるPerlの使用状況
  7. 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. 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. 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. 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. 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. 12. ○ ここまでで半分くらい ○ 小休止 Copyright (C) mixi, Inc. All rights reserved. Once the break 12 powered by Cheering〜がんばるあなたを応援します〜 http://apps.mixi.co.jp/apps/cheering.html
  13. 13. Copyright (C) mixi, Inc. All rights reserved. 13 スマホアプリ開発のための基盤構築の取り組み
  14. 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. 15. Copyright (C) mixi, Inc. All rights reserved. System Architecture 15
  16. 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. 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. 18. Copyright (C) mixi, Inc. All rights reserved. 18 外部化したCPANモジュール
  19. 19. ○ useしてるけど、実は使ってないモジュールの検知 ○ 書いたけどやっぱり使わなかった or 使っていた処理が消えた ○ 特に後者は長年メンテしているモジュールだと割とある ○ 中身は正規表現で頑張っているだけ ○ 正しく厳密にやるならPPIを使えばできると思う ○ 8割カバーできればOKと思ってサクっと作ったのがきっかけ Copyright (C) mixi, Inc. All rights reserved. Open Source Software of mixi(Test::UselessModule) 19
  20. 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. 21. ○ 例外ファイルを管理しつつ、独自のルールでテストする ○ 昨年のYAPC::Asia2012でも触れたもの ○ 社内コーディングガイドラインドキュメント -> 自動化ツール ○ ルールファイルを追加して、テスト実行すると検知可能 Copyright (C) mixi, Inc. All rights reserved. Open Source Software of mixi(Test::CodingStyle) 21
  22. 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. 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. 24. Copyright (C) mixi, Inc. All rights reserved. 24 まとめ
  25. 25. ○ 新しい環境を作って得たものをmixi本体に持ち帰れるかが課題 ○ ライブラリ・アーキテクチャ・開発環境 ○ 割愛したスマホ基盤のインフラ部分にもいくつものTryがありました ○ Perlのバージョンアップに戸惑っている方、がんばってやりましょう ○ きっとできるはず ○ 使っているCPANモジュールとそのバージョンに注意 ○ モジュールやプロダクトのオープン化をさらに進めて行きたい ○ 今更感はすごいありますが・・ ○ 文化的な部分もあって、これまで注力していなかった ○ mixi本体の課題解決は特にこの半年は注力していなかった ○ mixiと新環境、両方を運用しつつこれに向かっていかなければいけない ○ その過程で出る課題や解決方法も、アウトプットしていきたい Copyright (C) mixi, Inc. All rights reserved. Conclusion 25
  26. 26. ○ ご清聴ありがとうございました Copyright (C) mixi, Inc. All rights reserved. Thanks 26
  27. 27. Copyright (C) mixi, Inc. All rights reserved. 27

×