はじめに
マネーフォワードCTOの浅野です。 ご多分に漏れず、弊社もエンジニアブログを始める事にしました。
最初に自己紹介を少し書くと、僕は人工知能とか自動売買だとかそういう自律型エージェントに興味があり、そういう趣味を仕事にしつつこれまでのエンジニア人生を歩んで来ました。マネーフォワードを立ち上げるきっかけとなったのも、世の中の情報を自動で取得してきて新たな価値を生み出すという仕組みを創ってみたかったからというのが大きいです。もともと金融系エンジニアなので、資産運用に関するサービスも拡張していきたいと思ってます。
さて、初回の記事は採用技術の概要など薄く広い内容ですが、弊社には多くのスーパーエンジニアがひしめき合っているので、実際に役に立つすごい記事はきっと彼らが書いてくれるでしょう! 今後にご期待下さい!(丸投げ)
サーバー構成や技術・ミドルウェアについて
まずは定番のサーバー構成や、何の技術を使っているかの紹介をしていこうと思います。
-インフラ
サーバーはAWSを始め、国内クラウドサーバーを複数組み合わせて耐障害性を高めています。その分、通信経路の暗号化や応答速度、セキュリティなど、留意すべき箇所が増えてしまいますが、大事なデータをお預りしている以上、耐障害性の強化は重要なテーマとして取り組んでいます。
また、本番サーバーと同等の構成のステージング環境および開発環境が揃っている為、本番サーバーへリリースする前に充分なテストを行う事が可能になっています。
インフラ面は弊社のスーパー料理人インフラエンジニアがいるおかげで困ることはありません!
-WEBアプリケーション
Ruby on Railsを採用しています。Rubyは2.1系、Railsは3.2系がメインですが、一部Rails4.0を使っていたりします。 ただ、一般的なRailsアプリケーションではなく、独自の構成にカスタマイズしてセキュリティ面を向上させて構築しています。
-スマホアプリ
iOSとAndroidの両方に対応をしていますが、それぞれObjective-CとJavaを使ってネイティブ実装をしています。 初期の頃はTitaniumを利用していたのですが、拡張性と速度の観点からネイティブ再実装を行い、現在はそれぞれ別のコードで管理を行っています。
-データベース
MySQLの5.6系を採用しています。 DBサーバーは結構スペックが高いものを選んでいるおかげで、現在はまだMaster-Slaveのシンプルな構成でなんとかなっています。 マネーフォワードのデータ構造特性上シャーディングも行いやすい為、今後より多くのデータが溜まってきたらこのあたりにも手を入れていく予定です。
-アカウントアグリゲーション
マネーフォワードの技術の要となっているアカウントアグリゲーションですが、ここはJava7で実装を行っています。 セキュリティに最大限考慮した実データと鍵の分散管理機構、拡張性に優れたプラットフォーム、コード割れ窓理論に基づいた警告を一切許さないコーディングルール、全金融機関のテストを効率よく流せる仕組み、リニューアルが行われた際に即時対応を行えるバグトラッキングシステムとの連動など、新規開発と運用保守の双方に配慮した仕組みを作り上げています。
このパートだけやたら熱い語り口なのは僕が担当しているからです。 そろそろJava8試してみたいですねぇ・・・
-ソースコード管理
githubクローンのgitlabを社内に立てて、マージリクエストによるレビュー体制を整えています。 また、git-flowが使えるA successful Git branching modelを採用しており、効率のよいチーム開発が出来るようになっています。
-ビルド・デプロイ
Jenkinsを導入してあり、ボタン1つで各開発環境から本番環境までビルド&デプロイが出来るようになっています。 週2回の定期リリース+hotfixにおける緊急リリースもスムーズに行えるようJobが整備されており、冗長化しているサーバー群を半分ずつリリースを行うホットデプロイにも対応しています。
-サーバー監視
XymonとCactiとGrowthForecastを導入しており、それぞれ適切なシチュエーションで監視を行っています。各サーバーからのログ収集にはfluentdを採用しています。
また、独自監視ツールも作成してあり、サーバーが落ちると夜中だろうがTwilioを通して担当者へ電話がかかってきます。こいつのせいでおかげで夜中に何度も緊急対応を行うことが出来ました。良かった良かった。眠いけど。
まとめ
開発環境という観点においては会社としてきちんと整備していこうという文化があり、より良いものがあればどんどん取り入れていくようにしています。現在の開発体制も最初から整っていたものはほとんどなく、みんなの協力で少しずつ進化させてきました。 また、今回紹介した各パートにはそれぞれエキスパートが在籍しているため、詳しい事は今後少しずつ彼らがこのブログで紹介していく予定です。お楽しみに!
そして現在もスーパーエンジニアは絶賛募集中です。「こういう環境で開発がしてみたい!」と思うエンジニアの方は是非応募お願いします! 一緒に世の中を変えるプロダクトを創っていきましょう!