mofmofでは新規サービスをゼロから開発することが多くあります。

その際にshwldがどのように技術選定をしているのかを書いてみます。

こちらの記事がとても参考になる内容で、私なりにも書いてみようと思いこの記事を書いています。 https://zenn.dev/moga/articles/my-technology-selection

2022年2月 現在での内容です。

前提

mofmofでは3ヶ月くらいでMVPを提供することが多いです。

MVPとしてリリース後、継続して開発することも多く、作って終わらず中長期的に成長させられる安定した技術を優先して選定しています。

メンバーにはRuby on Railsを得意とする人が多いため、Railsを優先的に選定します。

とはいえ、アサインされた人や案件によりその都度、最適なものを選んでいます。

この記事では、shwldが選定する場合について書いています。

インフラ、プラットフォーム

  • Heroku
    • 実績も多く社内の知見もあるため、優先的に選定されます
  • AWS
    • 案件によってはこちらを使うこともありますが、Herokuでも問題なければHerokuを優先して使います
    • S3だけ使う事が多いです
  • Firebase
    • 作りたいものがアプリの場合、認証を利用することがあります
    • それ以外のリソースはあまり案件利用はしていません
  • GCP
    • AWSに強い希望がなければ自分はこちらを使いたいです。Herokuにはストレージがないのでこちらを利用したりします

アプリケーション

  • Ruby on Rails
    • ほぼすべての案件で利用しています。安定択
    • 変更へ柔軟に対応できるようViewについては、ActionViewはあまり選定していません
    • これによりアプリへの対応など臨機応変に対処できるようになっています。
  • React + TypeScript
    • ActionViewの変わりにReactでのSPAを利用します。
    • リポジトリを分けると開発スピードが落ちるため、最初はモノレポでDeviseで認証済のルートにアタッチして使う事が多いです。この構成ならあとからリポジトリを分けてNext.jsに乗っかるなども容易にできるためバランスがいいと感じています
  • GraphQL (Apollo Client/GraphQL Ruby)
    • React + TypeScriptを利用する際にRailsと話をしやすくするために導入しました。
    • Graphql Code Generatorとの組み合わせは一度使ってしまうと離れられない魅力があります
  • Expo, ReactNative
    • アプリも欲しい場合に選定しています
    • バックエンドがGraphQLの場合にReactNativeならApollo Clientが使えるうえ、技術者が習得すべき技術スタックもReactだけで良いというメリットが有りFlutterでも良いですが、自分はこちらを推しています
    • インフラとしてのExpoも配信やプッシュ通知などで利用します
    • EASによりCI/CD環境を作りやすくて良いです

React + TypeScript + GraphQL Rubyの構成はわりと社内で流行っており、7~8案件くらいはこの構成で実装されている実績があります。

スピードではRailsのActionViewにはかないませんが、バランス良く堅牢にかけるよい構成だと思います。おすすめです。

今後

Ruby on RailsでGraphQLサーバーを書く事自体に課題感はあまりないのですが、TypeScriptでサーバーを書いてみたいと思い、最近はPrismaやNexus、NestなどNodeでサーバー周りを触ってみています。

サーバーがNodeになるとReact TypeScriptを中心としてReactNativeでアプリもかけるため、言語の統一ができる。

RubyとTypeScript2つの言語を扱うコンテキストスイッチを減らせる。

フロントエンドと同じ言語であることから、ユニバーサルなコードは共有できるというメリット。

そして、何よりTypeScriptの型を利用できるため期待しています。

最後に

mofmofではエンジニアを募集しています。

この記事に書いた構成以外にもFlutterやElectron、HoloLensなど楽しそうな技術を使っているメンバーもいます。

興味を持っていただいた方は下のリンクを見てみてくださいね