こんにちは、レンティオでエンジニアをしてますカミヤと申します。今回はRentioがどのような技術を採用し、どんなツールを使って開発されているのかについてご紹介したいと思います。
Rentio - カメラと最新家電のレンタルサービス
上述の通り、Rentioはカメラや家電製品をレンタルできるECサイトです。
近年はShopifyのような高性能多機能なASPサービスが登場していますが、Rentioでは一般的な物販ECサイトと異なり、レンタル固有の機能が多く存在するためスクラッチ開発を行っています。
Rentioの技術スタック
まず全体感については次の通りです。
効率的な開発を行うため、レンティオでは開発環境やCI/CD環境の整備、便利なツールの導入を積極的に推進しています。そのおかげもあってか、それなりにモダンな構成を保てているつもりです。
開発言語・ライブラリ
バックエンドのメイン言語はRuby on Railsです。HTMLはSlim、CSSはSCSSでマークアップしています。エラーがあればBugsnag→Slackに通知が来るようにしています。
インフラのところで後述しますがDockerでアプリケーションを動かしています。開発環境用Dockerfileもあるのでdocker-composeでセットアップ&ローカルで動かすことができるようにしてあります。
フロントエンドでは、新しい機能はReactメインで作っています(一部jQueryが残ってしまっていますが...)パッケージ管理はyarn、webpackでまとめています。
CI/CD
GithubにpushするとCircle CIによりRspecのテストが実行されます。Circle CIのPerformance Plan(従量課金)を使っているので、コストを抑えつつ複数インスタンスが実行できます。テストも並列化しているので、そこそこボリュームあるテストも10分かからず完了するのでいい感じです。
ビルドやオーケストレーションはconvoxというツールに任せています。プルリクエストがmasterブランチにマージされると自動でビルドが実行され、コマンド一発でデプロイできるような流れにしています。
インフラ
アプリケーションをDocker&ECS上で動かしています。
ユーザーからアプリケーションへアクセスがあるとCloudFront、WAF、ALBを経由してECSに到達します。キャッシュにはElastiCache上でRedis、Memcachedを立てています。
データベースはAuroraのpostgres互換です。少々大きめのインスタンスにしていることもあってか、パフォーマンス面でも申し分なく、とても安定して稼働してくれている印象です。
分析基盤
ダッシュボード化や分析にはオープンソースのRedashを使っています。
Redashからは前述のpostgresやBigQuery、Google Analyticsなどを参照しています。Redashの利用には必ずSQLを書く必要があるので非エンジニアには敷居が高いのですが、それ以上に高い自由度やデータソースの豊富さから採用を決めました。
また、Redash botも動かしておりSlack Reminderと組み合わせることでKPIの定期監視ができるようにしています(クエリのURLを投稿するとSlack botがそのグラフをキャプチャして投稿してくれる)
RedashもRedash botもECS上で動かしておりサーバー代以外は無料で使えるのもありがたいポイントです。
業務ツール
チャットにSlack、グループウェアにG Suiteを使っています。ドキュメント管理はDocbaseを全社的に採用しています。業務マニュアル等はDocbaseに、保管&共有すべきファイルはGoogle Driveのチームドライブを活用しています(部署ごとの権限設定が便利)技術情報はGithub Wikiを使っています。
開発チームのタスク管理にはGithub Issue、カンバンツールにGithub Projectsを採用しています。
Rentioで採用している技術スタックについて、現状と経緯等をざっとまとめてみました。
冒頭にも書いたとおり、レンティオでは効率的な開発のために開発環境やCI/CD環境の整備、便利なツールの導入を積極的に推進しています!
もちろんここで書ききれないものもたくさんありますので、もし興味をお持ちいただけたらカジュアル面談等で是非ご質問ください。