ispecを支える技術

はじめに

はじめまして。 CTOの山田です。この記事では、ispecが様々なパートナー様とプロジェクトを行う上で、どのような技術を使っているのかを解説していきたいと思います。

ispecは、パートナー様の新規事業の立ち上げの際に、開発・データ分析・デザインなどのアセットをご提供させていただいています。その中でも開発は、トレンドが目まぐるしく変化する中で、そのトレンドをキャッチアップし、追従していくことで、よりクオリティの高いものをパートナー様、ユーザー様に届けることを目指しています。

そこで、現在使用している技術を紹介していこうと思います。

使用技術

Rails

開発スピードが求められるときは、Railsを選定することが多いです。フルスタックフレームワークなので、ActiveRecordやRubyそのものの柔軟性の高さを十分に活かして開発できるという点では、Railsを採用するメリットは今でも大きくあると思っています。ただ、コードの品質の担保をするためにアーキテクチャを導入する、といったことはしにくいので、本当に開発速度を出したいときに使用します。

また、マイクロサービスアーキテクチャを採用したときに、初期開発で全てをマイクロサービスとして切り出すのは非常に難しいので、切り分けが難しいところは一旦Railsで開発する、といったことをすることもあります。

Gin

開発スピードがそこまで求められない場合や、マイクロサービスアーキテクチャを採用した際に、別ドメインとして切り出せるサービスがある場合は、Go言語のフレームワークであるGinを採用します。

認証用のAPIや、通知などの機能は、全てこのGinで開発し、Railsのメインサーバーとやりとりをするといったことをしています。

Hanami

HanamiはRubyのフレームワークで、RubyでDDDをしたい人向けに作られたものです。Clean Architectureの設計に近い構成をしており(依存関係逆転などはできない)、ビジネスロジックをInteractorにまとめたり、データソースへのアクセスをRepositoryに集約したりと、かなり品質を保てるような設計を実現できます。

Railsほど開発スピードはもとめられないけど、よしな力を十分に保ったまま綺麗な設計でコードを書きたい、なんてときは、Hanamiを採用しています。

Flask

FlaskはPythonのマイクロフレームワークです。かなり薄いフレームワークなので、アーキテクチャを柔軟に設計できるというのと、機械学習をはじめとしたアルゴリズムを使用しやすいという点で、採用をすることがあります。機械学習やアルゴリズムのコードを実装するエンジニアが、通信やデータベース周りのことを意識せずに開発ができるような設計をすることも可能なので、そういったフレームワーク的な柔軟性が求められるときに、Flaskを採用します。

ReactorKit

ReactorKitは、FluxアーキテクチャをiOSアプリ開発で採用する際に使っているライブラリです。 RxSwiftを理解している事が前提になってしまっていることもあり、学習コストがやや高いですが、アプリケーションを継続的にアップデートしていく際に発生する「他人が書いたコードのキャッチアップコスト」を低く抑え、コードがスパゲッティ化する事を防いでくれるため、中規模以上のiOS開発では早期に採用しています。

Realm

データのキャッシュとして利用しているライブラリです。 C向けのサービス(コンテンツ配信系)などで、細かいユーザ体験がとても大切になってくるものでは積極的に提案・採用するようにしています。 導入時にやや時間的なコストがかかる事が難点ですが、アーキテクチャの工夫で一度導入をしてからは、拡張性が高くなるように設計しています。

Vue.js

Vueは、導入コスト・学習コストともにあまり高くはないSPAに使用されるフロントエンドのフレームワークです。 SPAの実装をする際に、特にC向けのサービスや、部分的にSPAを使いたいときなどに使用します。

Angular

AngularはSPAを実装するためのフルスタックのフレームワークです。RxJSを前提とした開発など、学習コストは少し高いものの、フルスタックフレームワークなので様々な機能が標準ライブラリとして提供されています。社内向けの基幹システムなどの大規模なシステムの開発などに使用することが多いです。

gRPC

マイクロサービス間での通信、あるいはWebフロントでリアルタイムに情報を表示したいときには、gRPCを使用します。後者の場合は、gRPC Webを使うために、Envoyを前段に立てて通信をするといったことをしています。

Terraform

インフラは、どのプロジェクトでも基本的にTerraformを使用して構築をしています。プロジェクト間で使用したモジュールを使いまわせるように、ちょっとしたモジュールもだいたい全てTerraform Registoryに置いてバージョン管理ができるようにしています。

Terraformを使った弊社のインフラ構成の一つをこちらで紹介しているので、合わせて一読くださいませ。

Amazon ECS

弊社のプロジェクトは全てDockerで動くことを前提としているのですが、その中でもサーバー間での通信を必要としないようなシンプルなアプリケーションは、ECSでデプロイをしています。 再利用可能なTerraformモジュールを使って、インフラ構築のコストを限りなく低くしています。

Amazon EKS

複数のサーバーを立てて、それらが相互に通信するようなアプリケーションにはEKSを使用しています。Terraformで最低限のクラスター構築のための構成を書き、デプロイ周りはKubernetesに全て移譲しています。

Github Actions

CIツールの一つとして、Github Actionsを使用しています。まだリリースされて間もないですが、ボイラープレートの少ないシンプルなymlファイルを書いてサクッとCIを回せるので、最近はよく採用しています。

現在はこれらの技術がプロジェクトで使用されていますが、今後はReactやSSR、GraphQLなどの技術を採用予定です。

おわりに

弊社は新規プロジェクトが始まるたびに、新しい技術を導入し、素振りをしてプラクティスを貯めています。半年後にはこのリストも更新されていることでしょう。 ただ、最終的な目標はプロジェクトを通じてクライアント様とユーザー様の体験を最大化することです。その目的意識を忘れず、今後も最新技術のキャッチアップをしていきながら、プロジェクトを進めていきたいと考えております。

最新技術を試したいアナタへ

ispecでは、弊社の技術スタックをどんどん広げてくれるエンジニアを募集しています。

アナタが今気になっている技術、プロジェクトで採用してみませんか?