## サービス概要
場所とキーワードで買いたい・したい事を探せるMedia
https://pathee.com/
ネット上で目的の店舗を探すことができるMediaで、
少し古い言い方でOnline To Offlineを実現するサービスです
## ポジション
リードエンジニア
エンジニアチームリーダーとして、プロダクトの開発から保守までの責任を持ち、
また1on1などを通してメンバーの成長の補佐と心身のケアに勤めました
## プロジェクト概要
### 立ち上げ期 (2017年1月~2017年7月)
2016年まではサブプロダクトであったメディアの成長が著しいため、
2017年よりメインプロダクトに昇格することになり、
さらなる成長のために機能充実・生産性向上のために全面的に作り直すことになりました
作り直しの第一弾として、メディアのCMSをフルスクラッチで作ることが決まり、私を含めたリードエンジニア2人で3ヶ月ほどで実装しローンチ(2017年4月)
その後、第二段としてメディア本体も同様の技術スタックで開発、私を含めたリードエンジニア2人+1人で3ヶ月ほどで実装しローンチ (2017年7月)
### 運用期1 (2017年8月~2017年12月)
メディア・CMSの拡張・改善を繰り返していた時期
メンバーは5->10名程度で対応
### 拡張期 (2018年1月~2018年6月)
Patheeによる実店舗への送客をより効果的に、マネタイズも実施するものとして、以下の2プロダクトを新規に開発・リリース
1. 店舗向けCMS、Pathee Partner
https://pathee.com/lp/
2. 商品を取り扱った読み物Media、Pathee Epic
https://pathee.com/epic/
### 運用期2 (2018年7月~)
合計各3プロダクトについてそれぞれ5人ぐらいのチームで開発
私自身は、Pathee本体の拡張・改善にチームリーダーとして関わりました
## 使用技術
### バックエンド
- API
- RESTベース
- Swagger
- Python
- Flask
- SQL Alchemy
- Alembic (DB Migration)
- Lint, Formatter
- Flake8
- Black
- isort
- Pre-commit
- MySQL
- Redis
#### 技術選定
これまで会社ではバックエンドはJavaを使っていましたが、
以下の2つの理由によりリードエンジニアの合議によりPythonを利用する方針としました
1. Pathee(Media)等新規事業を高速にTry&Errorを行うために、
改修容易性や習得容易性を考えて軽量系言語を導入しようという話が上がった
2. データ分析を大学で専攻しているインターンエンジニアが在籍しており、
社内でも分析スキルを上げるためにPythonを習得しようということになった
パッケージについては、メンバーのスキルを考慮し、
基本的にメジャーでメンテナンス頻度の高いものを利用する方針としました
フレームワークに関しては軽量フレームワークのFlaskを導入しました
以前のプロジェクトでもバックエンドはAPI専用としていたので、
今プロジェクトでも踏襲することとしました(ので、フロントエンドは必然的にSPAとなりました。これについては後述)
余計な機能が入っていない軽量フレームワークの中で、一番シンプルで情報量があったFlaskに決めました
## フロントエンド
- Javascript
- Lint, Formatter
- Prettier
- ESLint
- Husky
- Axios
- React
- Redux
- Redux Saga
#### 技術選定
既存プロジェクトではフロントエンドはiOSアプリケーションでしたが、
今回はWEBメディアなので、SPAとして単体アプリケーションの方針としました
React, Vue, Angularを試す中で、リードエンジニアの合議によりシンプルで直感的なReactがチームにマッチするという結論になりました
また、State管理は一番メジャーだったReduxを導入
Reduxの取り扱いについては、一番メジャーだったThunkよりSagaのほうが書きやすかったので導入
### インフラ
- Azure
- VM
#### 技術選定
既存プロジェクトの踏襲となります
構築などはインフラエンジニアにお任せしておりました
### 障害検知
- NewRelic
### 開発ツール
- Atom
- Vim
- Sequel Pro
## 開発フロー
- GitHub + JIRAでのIssue管理
- PullRequest + Review
- 1週間単位のスプリント + 振り返り
プロジェクトの後半から導入。Scrum本格導入の前段階として一部のイベントを取り入れ
## チーム
エンジニアチーム
- エンジニア: 2-15名
全員がバックエンド 、フロントエンドを開発
- リードエンジニア: 3名 (自分ともう2名)
- 全体的に合議の上で技術選定や開発方針などを決定
- 新規プロダクト開発の時は一部メンバーがサブチームとして分離
- 最終的に3プロダクト(Media: Pathee, CMS: Pathee Partner, 読み物Media: Pathee Epic)について、
5人程度の3チームに別れ、リードエンジニアがそれぞれチームリーダーとして担当を分離
## その他特記事項
- プロジェクト中盤より業務委託メンバーを入れる中で、技術・チームマネジメントなどの様々な知見を吸収し、
Scrumなどアジャイルな開発手法を中心としたチーム文化の醸成を行っていきました
- 毎週振り返り(KPT)を実施し、少なくとも一つはチームとしての改善点を上げ、改善を積み上げていきました