はじめに
はじめまして、MF KESSAI株式会社(以下、弊社)の技術責任者(自称)を務めております篠原(@shinofara)といいます。
弊社の設立は3月と前ですが、先日公式に設立発表 がありました。 このタイミングで弊社の開発に関して、ご紹介いたします。
弊社では現在、BtoB間の決済をよりよくする為のサービスの開発を進めています。 技術ブログに書きたいネタはいっぱいあるのですが、1回では全部書ききれないので分割してお送りします(不定期)。
まずは開発・本番環境、そして、開発体制についてを概要程度でお話しします。
このブログに書く事
使用技術
現在何を使って開発をしていて、そしてなぜそれを選んだのかを述べます。
言語
Go言語(Golang)をメイン言語としております。
/Go言語のロゴ、マスコットは2009年にRenée French(http://reneefrench.blogspot.jp/)さんによって作成・公表されました。 これらはCreative Commons Attribution 3.0 Unported License(http://creativecommons.org/licenses/by/3.0/)で保護されています。 ライセンスの全文はhttps://golang.org/doc/gopher/README をご覧ください。
なぜ、Go言語を採用したのか
サービスの特性上、企業名・取引金額・口座情報と言った、小さなバグでも大きな問題となってしまう可能性が高い情報を扱う必要があります。 セキュリティ対策やインフラなども含めたアーキテクチャ設計、テスト実施などを当たり前に行えることや、バグの少ないコードが書けることを第一に考えました。 最終的に次のような開発者の思いも取り入れて、Go言語を採用する事にしました。
Go言語を採用した理由
- 言語レベルで品質の高いコードを書くためのサポートが有る
- 型が厳密な為、型が無いことで生じる不安と対策に悩まず安心する事が出来る
- 厳密ではあるが、スクリプト言語の様に柔軟性も兼ね備えている
- コンパイル言語なので、デプロイ前に、コードの正当性の検証を行える
- 言語レベルでlint等のツールが揃っている
- 容易にクロスコンパイルが行えるので、動作環境に適応した実行ファイルを作って配布という感じに、シンプルにデプロイする事が出来る
- 新鮮な気分で開発したい
- なんか「Goに入ってはGoに従え」ってのがかっこいい
- Go言語を用いた実務経験のあるエンジニアが在籍していた
インフラ
アプリケーションを動かす為の土台はDockerで、Docker Continerを動かすインフラとしてGCP(Google Cloud Platform)を採用しています。
なぜ、Dockerを採用したのか
今回、新しい会社で開発を進めて行くにあたって一番初めに決めたことは、Dockerをベースとした開発・運用を行うことでした。 言語・フレームワークは当初決めていませんでしたが、Dockerを使えば以下の課題をクリアできると思い採用しました。
- 環境の再現性を高め、共有、展開を行いやすくする為
- デプロイの度に、毎回クリーンな環境で実行させる為
- コンテナを再構築してイメージをデプロイするだけなので、Goなどのアプリケーションレベルのバージョンアップが簡単に行える為
なぜ、GCPを採用したのか
マネーフォワードとしても、僕個人としてもAWSには馴染みがあったのですが、今回はGCPを選択しました。 採用した理由としては以下のとおりです。
- コンテナ・オーケストレーターのkubernetesで動くGoogle Container Engineの存在
- G Suiteのグループ機能とGCP権限管理の連携
- Spannerなどワクワクするサービスが登場するようになってきた(残念ながらまだ使えていません)
このように最初はアプリケーションを動かす環境から考え、そして権限管理と幅広く考えた結果、GCPを採用して進めて行く事になりました。
開発体制
設立準備期間〜6月まで
2月初旬(立ち上げ準備)から6月頃まではインフラ・技術責任者兼、Goエンジニアとしての僕と プロダクト責任者兼、Go言語エンジニアとしてもう1名の合計二人体制で歩んできました。 ベンチャー感がすごいでてます。
6月〜現在
現在、更にフロントエンドエンジニア1名、Go言語エンジニア2名が増えエンジニア5名の体制で開発しております。 フロント・Go言語・インフラなどと書いておりますが、それぞれの得意領域を発揮する事は勿論前提としてあります。 それ以外の領域でも失敗を恐れずどんどん手を出し、そして全力でサポートし合いながら、よりよいサービスをより早く出せるように全力で開発しています。
例えばフロントエンジニアがDockerfileを修正したり、Go言語での開発をしたりなど、必要な場所にはどんどん手を入れていってます(笑)。
そしてこれから
これからサービス・会社ともにどんどん大きくなって行きますが、下記のような開発環境を作り、そして変わらず維持していければと思っております。
- 過去の経緯に囚われず、その時その時で最適な選択していける環境
- 役割を狭めず、興味があればどんどん広げていける環境
- 当たり前の事を当たり前に出来る環境
- 負債回収より新規開発に専念できる環境
今後公開予定のブログ
今回は弊社についてと、ざっくりとした開発に関してでしたので、近いうちに下記内容で公開したいと考えています。
- Go言語での開発編
- Docker,GCPなどのインフラ編
そして、最後に
先程、今後の開発環境を書かせて頂きました。 弊社では、サービスだけではなく環境なども一緒に開発してくれるGopher(Go言語・*Golang*エンジニア)の募集を行っております。
もし少しでも気になりましたら、気軽にご連絡いただければ幸いです。 一緒に開発できる事を楽しみにしています。 https://www.wantedly.com/projects/95011