こんにちは、株式会社 hacomono の工藤です。
弊社では、リアル店舗のCRM・予約・キャッシュレス決済サービス『hacomono』を開発・運用しています。サービス本体や周辺ツールなどの開発において、私たちが普段利用している技術スタックを現状の課題感を交えながら紹介したいと思います。
※ 2020年10月時点の情報です
サーバーサイド
- Ruby
- Ruby on Rails
- RSpec
- rubocop
- Go
- go-swagger
- gorm
- echo
- 連携サービス
- SendGrid
- Pusher
- 決済
- PAY.JP
- Stripe
- その他ツール
- Docker
- BigQuery
- Re:dash
- Circle CI
- GitHub Actions
- reviewdog
創業期は Java を利用していましたが、ここ数年は Ruby を採用しています。hacomono は Rails で開発しています。
開発方針として
- 依存する gem の選定は慎重に。できるだけ必要な部分を自分たちで開発し、不用意なライブラリ依存を避ける。
- プロジェクト間で設計方針のズレをなるべく小さくするようにする。
- 具体的には、Clean Architecture をベースとして自社で方針を固めたものを展開
- テストは RSpec を用いて、Request Spec を中心に揃えていく。
といったことを意識するようにしています。
当面は Ruby/Rails が中心となっていくと思いますが、周辺ツールの開発や社内向けサービスでは Go の採用も始めています。Go はエコシステムが揃っている・コンテナ運用に適している・コーディングの自由度が低い反面、ルールに準拠しやすくチーム開発に適していると考えており、今後も積極的に利用していく予定です。
フロントエンド
- Nuxt.js
- Vue.js
- ES2015+
- TypeScript
- ESLint/prettier
- Webpack
フロントエンドのフレームワークといえば React/Vue/Angular などが有名かと思いますが、弊社では Vue を v1.0 の頃から採用しています。Vue 全振りです。これは Vue の学習コストの低さ (最近はそこまででも無いような気がしますが) とドキュメントの手厚さが決めてでした。現状のチームの規模感ですと、あれもそれもとフレームワークに手を出すことが難しいというのもあります。
そして最近のプロジェクトには Nuxt.js + TypeScript を採用しています。これまではオレオレビルド構成で Vue + vue-router + vuex 環境を構築していたのですが、Nuxt.js のおかげで構成が統一化されて、メンバーへの落とし込みも格段にやりやすくなりました。generate 機能もとても便利です。
一方グローバルでは React のシェアが圧倒的です。弊社も今後の新規開発では React + Next.js といった構成を検討していたりもします。
インフラ
- AWS
- EC2
- S3
- VPC
- RDS (MySQL)
- Route53
- Lambda
- ALB
- GCP
- Cloud SQL
- Cloud Run
- CI/CD
- Jenkins
- Vagrant
- Terraform
- Ansible
- 監視
- Zabbix
- NewRelic
- Sentry
- uptimerobot
- データ分析
- BigQuery
弊社ではインフラを構築する場合は AWS を利用しています。現在 hacomono では、お客様毎に VPC + EC2 + RDS というオーソドックスなシングルテナント構成で提供しています。この構成はセキュリティが担保できるためエンタープライズ要件に対応しやすいというメリットがありますが、一方でインフラの保守性が低くなるため、
- Terraform / Ansible で新規構築フローを自動化
- Jenkins から定期アップデートや Let's Encrypt 証明書更新を自動化
といった施策を事業拡大に合わせて随時進めていっています。
社内向けサービスでは GCP を利用することもあります。AWS は様々なセキュリティ認証を取得しており、BtoB の領域ではやはり AWS を選ばざるを得ないところがありますが、GCP のノウハウも深めていきたいという狙いもあり、社内向けサービスなどでは採用を検討しています。
監視・メトリックス・ログ監視に Zabbix、NewRelic、Sentry、uptimerobot を利用しています。データ分析基盤としては BigQuery を採用しています。
現在弊社には専任のインフラエンジニアがおらず、開発メンバーがプロダクト開発と並行してインフラの改善を進めている状況のため、まだまだやるべき課題が多い領域となっています。
開発環境
- MacBook Pro + デュアルディスプレイ
- Docker
- GitHub
- Circle CI
- GitHub Actions
- VSCode/Atom
- GoLand
- Adobe Creative Cloud
全員 MacBook Pro + ディアルディスプレイで開発しています。
ソースコードは GitHub Organization のプライベートリポジトリで管理し、PR を通してコードレビューなどのコミュニケーションを行っています。テストは CircleCI or GitHub Actions で流しています。
エディタは特に指定しているわけではないですが、フロントエンドの開発だけは VSCode を使うようにしています。Go を書く時は GoLand を利用しています。
社内ツール
- G Suite
- チャット: Slack
- プロジェクト管理: Jira、Trello、marchily
- ドキュメント管理: esa.io、Confluence
- 勤怠管理: ジョブカン
- 日報: marchily
- ビデオ会議: Google Meet、Zoom
- アカウント管理: 1Password
社内のコミュニケーションは Slack と弊社サービスである marchily を利用しています。プロダクト開発分については Jira を活用したスクラム開発を進めています。
新型コロナウイルスの影響で弊社もフルリモートに切り替えたため、Google Meet や Zoom を用いて TV 会議で朝会・昼会・月初会などを開催しています。
ドキュメント管理には Google Drive と esa.io を使っていますが、最近 Jira を採用した関係で Confluence も利用し始めています。この辺りのツールはチームの人数拡大に合わせてまた変化していきそうです。
最後に
ご覧頂いたとおり、各領域で課題や足りたいことがまだまだたくさんあります。hacomono では、技術的な取り組みを一緒に楽しんで取り組んでいける仲間を募集しています。ご興味いただけたら幸いです。