どうも最近おないた気味なエンジニアの@mikedaです。
今回はJOBLISTのシステム構成と開発フローについて書きます。
まず前提として、FWはRuby on Railsです。
システム構成
サービスインフラはAWS上に構築されていて、全体としてはざっくりこんな感じです。
- appサーバ上ではnginxとunicornが稼働
- データストアはMySQL、Redis(セッション他)、Elasticsearch(検索)
- 画像はS3に格納してCDN(CloudFront)経由で配信
- AWS上の各コンポーネントはmulti-AZ冗長化
- メール配信はPostfix -> SES。将来的には機能が豊富なSendgridに移行するかも
- 監視はmackerelとNewRelic
- itamae、roadwork等を使ってだいたいgithubでコード管理
- フロント周りはjquery、coffeescript、scss、hamlなベーシックな感じ
要件が満たせるなら極力運用が楽なマネージドサービスを使っています。
ElasticsearchはAmazon Elasticsearch ServiceじゃなくEC2で自前運用ですが、
構築時は1系しか使えなかったのと独自辞書使いたかったのが理由です。
開発フロー
タスク管理にはzenhubを使っています。
タスクは全てgithubのissueにして担当者をアサイン、zenhub上で優先順位を調整します。
開発はこんな感じで進めます。
- ローカルで開発
- githubにpush。Pull Request作成
- werkerで勝手にCIが実行されて、失敗するとslackに通知が来る
- CIとPull Requestのレビューが通ったらマージ
- capistranoでデプロイ
- issueをclose
デザインについても基本は同じです。
コーディングの前にデザイナさんとissue上で調整して、
固まったらSketchのデザインをzeplinにアップロードしてもらい、
開発者がzeplin見ながらコーディングします。
まとめ
JOBLISTのシステム構成と開発フローについてざっくり書きました。
インフラの構築、運用も全て自分たちでやってます。
基本的にはあまり変わったことはしていなくて、よくあるちょいモダン環境だと思います。
現状は、
- 自分(@mikeda)のスキルセット
- 新しく入る人、突発的に手伝ってくれる人が極力少ない学習コストで作業に入れること
に最適化していますが、最適な技術は提供するサービスと状況、運用するメンバー次第だと思っているので、必要があればバシバシ変えていくつもりです。
ということで。