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

# はじめに

[mediba を支える技術（2016年度）](https://qiita.com/medi-sugimoto/items/fb0209c87ad5dcd22dba)
[mediba を支える技術（2017年度）](https://qiita.com/medi-sugimoto/items/0a17fcd1e1f27a0c7247)
[mediba を支える技術（2018年度）](https://qiita.com/medi-sugimoto/items/7c555e9b454f8daff06c) 

と3年間、@medi-sugimotoが書いてくれていましたが、今年はバトンタッチしました。
技術戦略部、auサービス開発部を兼任しております、@mdb-hijikataです。

---

# 事業組織 (2019年09月1日 現在)

18年度〜19年度上期では、事業/プロダクトを組織の基準とし、
``エンジニア職/ビジネス職が一体となって事業/プロダクトの伸張に貢献していく組織体系``
となっています。

<img width="678" alt="Screen Shot 2018-12-18 at 14.40.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/80867/ee4e3733-a2b9-c45e-fc76-4b757723e072.png">
（社内情シスや、海外事業やバックオフィス等、サービス開発に直接絡まない部分については省いています。）

去年までの ``各事業部側でビジネスの責任を、システム本部側でシステムについての責任を負うスタンス`` とは違い、システム組織と事業組織を一緒にすることで、システム側にも事業に対するコミットメントを、事業側もシステムに対する責任をお互いに負いながら共に事業を進めていく事業体制に大きく変化しました。


## コミュニケーションデザイン本部
自社運営サービスの運営、グロースを主に担う。

### ポータル事業
* medibaの花形サービス。[こちら](https://ceblog.mediba.jp/post/180773073202/%E6%8A%80%E8%A1%93%E8%B2%A0%E5%82%B5%E3%82%92%E8%BF%94%E5%8D%B4%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E6%8C%91%E3%82%93%E3%81%A7%E3%81%84%E3%82%8B%E6%9C%80%E4%B8%AD%E3%81%A8%E6%9C%AA%E6%9D%A5%E3%81%AE%E8%A9%B1 "技術負債を返却しようと挑んでいる最中と未来の話")で進めていたアーキテクトの刷新プロジェクトが無事終了しました。😊
* ブラウザゲーム、占いなどをフックにして毎日見たくなるサービスとなるようグロースを進めています。
    * au Webポータル（ <https://portal.auone.jp> ）
    * au占い（ <https://sp.fortune.auone.jp> ）
    * UQライフ（ <https://www.uqwimax.jp/support/mobile/app/life/> ）

### ゲームパートナー事業
* ゲームアプリ配信に関わるメディアをおもに扱う事業（スマホゲーム自体を作るというよりもプラットフォームに近いです）
    * auゲーム（ <https://game.auone.jp> ）
    * ゲームギフト（ <https://gamegift.jp/> ）

## auパートナー本部
KDDIからの受託、および協業サービスの運営、グロースを主に担う。

### ポイント事業

* ポイント貯める（ <https://enjoy.point.auone.jp> ）

### auパートナー事業

* auスマートパス系（ <https://pass.auone.jp> ）
* その他各auサービス

## 技術戦略部

事業にコミットする各エンジニア職種のマネージャーが集い、採用や組織づくり、キャリアプランの策定を担います。
各事業の事業形態にあった技術選択ができるよう、アーキテクチャや言語、フレームワークの指定や各プロセスの承認機能は持たず、後押しと共有を加速させることを目的としています。

# 開発の進め方

## チーム制

medibaでは、ほとんどのサービス・プロジェクトで組織を横断したチーム制での開発を行っています。
<img width="677" alt="Screen Shot 2018-12-18 at 14.40.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/80867/df74bdc7-6278-3231-c1d2-0a7b623a81d5.png">
多くのチームで、アジャイル、スクラムでの開発を行っており２週間スプリントのチームが多いです。

開発プロセスに[モブプログラミングプロセスを導入](https://ceblog.mediba.jp/post/184870366542/%E3%83%A2%E3%83%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AF%E3%81%98%E3%82%81%E3%81%BE%E3%81%97%E3%81%9F)するなど、新たな手法への取り組みも進んでいます。

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

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

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

# 横断技術
使う技術・ツールの選定に関しては、サービス・プロジェクトごとで構成されるチームに基本的には委ねられています。
課題であった、各プロダクト間での採用技術の違いについては、だいぶ解決の方向に向かっているように思います。

## 開発言語
### サーバーサイド
* **PHP**
    * **Laravel**, Yii2
* **Golang**

昨年との比較では、YiiからLaravel、PHPからGolangに比重が移ってきています。
Rubyは（ほぼ）なくなりました。

### フロントエンド
* Web
    * **Vue.js & Nuxt.js**
    * **React + Redux**, Backbone.js, Anguler.js
    * **TypeScript**
    * Sass

Vue.js & Nuxt.js, Typescriptには特に力を入れて取り組んでいます。

* アプリ開発
    * **Kotlin**, **Swift**, Java, Objective-C
    * Cordova, Xamarin

Cordova, Xamarinはなんだかんだ辛いところもあるように思います。。。


## 利用サービス・利用ツール
### CI周り
* ソース管理
    * GitHub -> GitHub Enterprise
* 構成管理
    * **Docker**, Amazon EC2
    * **Ansible**, Chef
    * **Vue-Cli**
* CI/CD
    * **TravisCI**, jenkins
* デプロイ
    * **Capistrano**, Fabric, CodeDeploy
* タスクランナー
    * gulp
* モジュールバンドラー
    * **Webpack**
* 監視・アラート
    * Mackerel, datadog, twilio

### セキュリティ・試験周り
* アプリケーション脆弱性
    * 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)

### 仕様承認会、S-in判定会
開発着手前に、仕様がビジネス/システム観点で矛盾や不備、見落としがないか？
検証完了〜リリースまでの間に、残件や致命的な不具合の漏れがないか？
を確認するための承認/判定会を実施しています。


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

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

# さいごに

大きな変化の合った2018年度から、2019年度上期はその変化の目的を認識し、下期以降のさらなる推進、変革に向かっていくための期間でした。

medibaのMissionである**「ヒトに“HAPPY”を」**を実現、推進すべくその実現に向けたサービスの創出/成長、またそれに寄与するための自己/組織成長に向けて会社として組織だて、また各個人が向かっていける環境を整備し続けています。

個人、サービスの成長につながる会社組織や体制、ルールを作ることで、よりよい技術活用に繋げられるよう邁進していきたいと思います。