icare-dev team
199
2
0

Carelyで利用しているRuby Gemについて

Published at October 22, 2019 2:33 p.m.
Edited at July 6, 2021 5:42 p.m.

株式会社iCAREのエンジニアの安田です。

今日は、弊社サービスCarelyがどんな技術で構成されているかをご紹介したいと思います。

Carelyのおおまかな構成

Carelyの構成は、大まかに言って次のような構成になっています。

サーバー、ネットワーク: AWS
サーバーサイドアプリケーション: Ruby On Rails
フロントエンドアプリケーション: Vue.js + Buefy(Bulmaを使ったVue.jsのUIコンポーネント)

今日はその中でサーバーサイドアプリケーションに焦点を絞ってお話をしたいと思います。

サーバーサイドアプリケーションで利用しているRuby Gemについて

ここでは主にどんなRuby Gemを使っているかご紹介したいと思います。

認証、権限

まずCarelyはユーザー登録を必要とするサービスのため、認証システムが必要ですが、その部分は
devise
で実装されています。
最近では2段階認証を導入していますが、そこでは
devise-two-factor
を利用しています。

ユーザーは、ユーザーの種類によって権限が異なり、それぞれアクセスできるデータやページに制限がありますが、その制御はPundit
https://github.com/varvet/pundit
を使って実装しています。

フロントエンドとのデータのやり取り

フロントエンド(Vue.js)とのデータのやり取りはGraphQLによる実装が進んでいます。
その部分は
graphql-ruby
を使っています。
N+1問題の回避のためには
graphql-batch
を使っています。

ただ、全てのエンドポイントでGraphQLの導入が進んでいるわけではないため、フロントエンドとのやり取りの一部分はREST(的)形式をとっています。コントローラで取得したレコードをjbuiderを使ってjson形式にしてフロントエンドに返している箇所も存在します。

HTML, JS, CSS

viewファイルは、基本
slim
で記述されています。(メールテンプレートなどはerbのほうが記述しやすいためでerbを利用しています。)
ただ、最近の実装におけるビュー部分は、Vue.jsのコンポーネントに移りつつあるので、Slimを書く機会は減りつつあります。

js, cssのバンドラーとしてはwebpacker
を使っています。
ただ古いものに関しては、
sprockets(asset pipeline)
からあえて移行せずに、そのままasset pipelineを使って管理されているものもあります。

その他

ActiveRecordの無意味な値(例: 1,2)を有意味な値(例: ‘男’, ‘女’)に変換したり、その部分を国際化(i18n)対応させるにあたっては
enumerize
が使われています。

バックグラウンド処理では
sidekiq

ファイルアップロードは基本的に
refile
を使っています。
ただしrefileについてはgemの更新がほとんどされていないため、別のgemへの差し替えを検討中です。

共有フォルダ機能shrineというGemを使っています。

使い方等はこちらにまとまっています。

URLでのリソースアクセス時にidではなくuuidを利用している(連番のidだと他のURLを推測できてしまうため)のですが、そのためには
friendly_id
を利用しています。

あとはページネーションには
kaminari
を使っていますが、これもBuefyのぺージャに置き換わりつつあります。

最後に

その他にもたくさんのgemを利用していますが、ご紹介はここまでにしたいと思います。
いかがでしたでしょうか?
個人的にはここまで書いてきて、「標準的だな、手堅いな」って感じで、ちょっと記事としての面白みには欠けるかな、って思ってしまいました。
GraphQLあたりはちょっと攻めてる感あるかな。どうなんだろう?