mofmofの技術ブログへ投稿した記事です。
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など楽しそうな技術を使っているメンバーもいます。
興味を持っていただいた方は下のリンクを見てみてくださいね