medibaを支える技術（17年度版）

# はじめに

こんにちは [mediba advent calendar 2017](http://qiita.com/advent-calendar/2017/mediba) 1日目担当の @medi-sugimoto です。

（一応改めましてのご挨拶）
17年度の上期まで、広告システム部の部長をさせていただいていたのですが、よりメディアに注力していこうという全体方針を受けて、広告システム開発部についてはアライアンス開発部と組織名の変更をさせていただきました。引き続きよろしくお願いいたします。

去年に引き続き初日を担当させいただくにあたり、medibaの事業全体と、そこで使われている主要な技術について俯瞰的かつ主観的な視点で書かせてもらえたらと思います。

# 事業組織の話 (2017年10月1日 現在)

まずだいぶざっくりではありますが、組織としてこんな感じです。

<img width="697" alt="スクリーンショット 2017-10-06 13.33.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/80867/415e0bc5-1785-21c8-15ee-22fc8c7cbff3.png">

（社内情シスや、海外事業やバックオフィス等、プロダクト開発に直接絡まない部分については省いています。）

基本的に各事業部側でビジネスの責任を、システム本部側でシステムについての責任を負ってるかたちです。この辺の業務分担については、大きく変更はないですが、2017年の方針「全社一丸」もあり、より混じり合っていく流れにはなっています。

我々の所属するシステム本部はというと
メディアシステム開発部、新規サービス開発部、アライアンス開発部の各開発部は、事業部側と連携を密にとり、サービス目的の達成に注力する部門。
IS部（インフラストラクチャー部）、FE部（フロントエンド開発部）、クリエイティブ統括部は、横断部門としてサービス毎に適宜メンバーをアサインし、サービス成長を支えるています。
昨年記載した際には、フロントエンド開発・デザイン制作を制作部として一つの部門としていましたが、デザイン制作については、より専門性を持って進められるよう編集部と合流しクリエイティブ統括部として横断部署となりました。

## ゲームパートナー事業
* ゲームメディアをおもに扱う組織（スマホゲームを作っているわけではないです）
	* auゲーム（ <https://game.auone.jp> ）
	* ゲームギフト（ <https://gamegift.jp/> ）
	* VBX（ <https://vbx-app.com/> ）

### 開発の特徴
mediba成長期待の起爆剤。ゲームビジネスを通して事業一体型の開発を理想としビジネスの本質をシステムに落とし込んで行くことをミッションにしています。
素早いリリースを通して効率的なPDCAが回る開発体制と、auゲームのポイント付与などに関わる安定的なサービス提供の両立を目指しており、昨年買収し後に合併した、ゲームギフトの開発ノウハウやナレッジ、業務フローを取り入れることで、よりビジネスの成功に寄与出来る開発組織とするべく日々の業務を進めています。

## メディア事業		
* KDDIからの受託や、auの冠を背負うサービスをおもに見る組織。
	* au webポータル（ <https://auone.jp> ）
	* auスマートパス系（ <https://pass.auone.jp> ）
	* au占い（ <https://sp.fortune.auone.jp> ）
	* ポイント貯める（ <https://enjoy.point.auone.jp> ）
	* ウィジェットなど
* mediba独自に開発を行っている新規事業についても、この部門が管轄しています。
	* ZTOKYO（ <https://ztokyo.net> ）
	* Camily（ <https://camily.jp> ）
	* MANT（ <https://mant.jp> ）
	* ScoreMatch（ <https://scorematch.net> ）

### 開発の特徴
システム本部としては、複数の開発部門にまたがって事業を作っていく体制となりました。

#### ポータル系
花形。キャリアのポータルサイトを支える安定したシステム構築と、高トラフィック対応、キャッシュコントロール、コスト最適化などが求められます。
社内の技術的知見の有効活用、人的リソース確保の視点からPHPで構築されているサービスが多いです。インフラについても、安定性からオンプレで構築されていた物も多くありましたが現在AWSへの移行も進んでいます。安定稼働という視点から技術的挑戦は難しい部分もありますが最近ではGolangに取り組んでいたりも。
（開発部としては、メディア開発部のライフメディアグループが主に担当しています）

#### スマートパス系
縁の下の力持ち。KDDIからの受託案件をおもに扱い、ニアショアによるコスト削減、リモートスクラムなどの新たな試みを行っています。medibaの収益基盤そのものの下支えも行っています。案件のコントロールや、システム安定性・経験に即したシステム運用のノウハウが期待される一方で、利益率・コスト意識も求められています。
（メディア開発部/auメディアG）

#### 課金サービス系
高いセキュリティ意識（個人情報・ポイント・デジタルコンテンツ販売）、低コスト・短納期での開発が求められています。
開発スピードを維持するためにRubyを採用するケースや、レスポンス速度を重視しScalaを選択したり、社内でのナレッジを活かすためにPHPを使うなど、言語としては幅広く利用しています。小さな実装ミス・運用ミスが大きな事故・障害となるシステムであり、システムだけでなく、サービス含めた全体を通した高い安定性が求められています。インフラについては、AWSを利用。
基本的に "新しいものはいいものだ" の視点から技術的挑戦を行うことも多いですが、中の人は遺産に苦しめられていたりも…。
（アライアンス開発部）

#### 独自サービス系
期待のホープ。とにかく早く作る。安く作ることが求められます。何があっても壊れないものを作るのではなく、壊れたらいかに早く直せるかに主眼をおいている感じです。
仕様がFixする前にプロジェクトが動き出すことも多く、仕様変更にも対応できる柔軟性とハートが求められます。Android・iOSアプリ、ウェブサービスなど開発するサービスは多方面に及ぶため、広く深い技術領域、サービス視点・ユーザー視点に立った開発センスも必要とされます。
（新規サービス開発部）

# 開発の進め方

## チーム制

medibaでは、ほとんどのサービス・プロジェクトで組織を横断したチーム制での開発を行っています。

<img width="684" alt="スクリーンショット 2017-10-03 11.07.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/80867/8d3bcee4-5a00-e1ec-b1f6-6e5528a6c60d.png">


多くのチームで、アジャイル、スクラムでの開発を行っており２週間スプリントのチームが多いです。

サービスの数があまりにも多いため、横断部門にかぎらず複数のチームを兼務しているメンバーも多くいます。これについては、開発速度の低下にも繋がるため、改善が必要な部分となっています。

## ツール
開発推進していく上で重要なツールとしては以下のものを利用しています。

* タスク管理
	* JIRA,waffle.io, Backlog
* ドキュメント管理
	* Backlog, Redmine
* コミニュケーションツール
	* Talknote, Slack

![スクリーンショット 2017-10-04 18.58.58.png](https://qiita-image-store.s3.amazonaws.com/0/80867/3423219f-0467-c737-bf57-251a57e39f40.png)

# 横断技術
使う技術・ツールの選定に関しては、サービス・プロジェクトごとで構成されるチームに基本的には委ねられています。そして個別最適化を意識するあまり、利用技術の発散が一つの課題だったりもしています。

その中でも横断的に利用しているものについて、まとめさせてもらいました。（チームそれぞれの部分も多くすべてを把握しているわけではないですが‥）なんとなく主力っぽいのを **太字** に。

## 開発言語
### サーバーサイド
* **PHP**
	* **Yii2**, **Laravel**, Zendframework
* Scala
	* Akka-Http, Play2
* **Golang**
	* (...知らない)
* Ruby
	* Rails

### フロントエンド
* アプリ開発
	* Java, Objective-C, **Swift**
	* **Cordova**, **Xamarin**
* ウェブ
	* **Vue.js**, Backbone.js, Anguler.js, React, **jQuery**
	* Sass

## 利用サービス・利用ツール
CI/CDやセキュリティ周りについては、現在絶賛自動化を進めている真っ只中です。一部サービスだけではなく、いかに全体に波及させていくかも課題になっています。
ここについては、17年度上期にDevOpsチームを立ち上げて、専門性を持たせて進めていく体制となりました。

### CI周り
* ソース管理
	* GitHub -> GitHub Enterprise
* 構成管理
	* **Docker**, Amazon ECS
	* **Ansible**, Chef
* CI/CD
	* **TravisCI**, jenkins
* デプロイ
	* **Capistrano**, Fabric, CodeDeploy
* タスクランナー
	* Grunt, gulp

### セキュリティ・試験周り
* アプリケーション脆弱性
	* OWASP ZAP
* ミドル脆弱性
	* vuls
* 性能試験
	* **Gatling**, Jmeter, ApacheBench
* レスポンス速度
	* Sitespeed.io

## 情報共有の活性化
### グランドデザインレビュー
開発開始前のアーキテクチャを中心としたレビュー会
全てのエンジニアがこの会に参加可能で、他システムのアーキテクチャをチェックする場としてだけではなく、ナレッジの共有の場としても活用されています。

#### レビュー項目
* サービス概要、スケジュール、体制
* 需要予測、訴求方法、運用体制
* システム構成、利用技術
* キャッシュ設計
* データフロー
* リプレイスリスク、ユーザー移行
* 複雑な処理のシーケンス...etc
![image (2).jpg](https://qiita-image-store.s3.amazonaws.com/0/80867/e4fa0cb2-436e-c6a7-168c-9d9fe565ccc9.jpeg)


### Developers' Community ( fire & gold )
火曜日と金曜日30分程度の短い時間、不定期で開催される社内勉強会です。
技術Tipsや研究・調査の発表、社外勉強会のフィードバック、技術相談、障害の共有。システム本部横断の取り組みについてレビューしたりする場となっています。
![IMG_3858.jpg](https://qiita-image-store.s3.amazonaws.com/0/80867/0b15fe2e-fd53-10dc-8ee2-4ee4d6f0d5ed.jpeg)

### Dev7++
年に1度のペースで開催されている IT企業7社（+α） での招待制ライトニングトークイベントです。
若手から管理職、CTOからバリバリの技術者まで旬なネタをビール片手語り合うイベントで、日頃業務では関わる機会の少ない他企業のエンジニアとの交流は、新たな刺激となっています。
![d7s.png](https://qiita-image-store.s3.amazonaws.com/0/80867/7f301d9f-e601-12da-bcb0-e5db17fc7667.png)

### mediba Creator x Engineer ブログ
2015/10/1からブログを公開し始めました。デザイン、フロントエンド、バックエンドの技術 を中心に投稿しております。
各部で持ち回り様々なネタを可能な限り公開していくことで、社外への貢献活動の一環とし て行っています。また、情報を外に発信し社内外のフィードバックを受けることで各自のスキ ルアップに繋げていくこと目的としています。
（ <http://ceblog.mediba.jp/> ）

# さいごに

リライトしてみて気づいたのですが、昨年12月のアドベントカレンダーに投稿した前回から、広告事業の縮小・ゲーム事業の拡大など事業状況、それに伴うシステム組織の構成変更など、組織や体制については大きな変化が見られたものの、スクラムやチームによる開発、選定技術の推進など開発周りについては、それほど書き換えることもなく、技術的な停滞として懸念すべきことなのか、安定として推奨すべきことなのか悩ましいなぁと感じたりしました。

個人で言うと「あの時書いていたこと、今年もだなと...。」ということで、また気持ちを新たにしています。**DRY(Don't Repeat Yourself)**

> 今年一年間を振り返ってみたのですが、技術的に何にも成長できてないな（書くこと無いなー）なんて思い、来年に向けて気持ちを新たにしているところです。

以上、杉本でした。