• 広報部

Ruby on Rails開発に必要なスキルとは?!

最終更新: 4月13日




ベンチャーではRuby on RailsやSpring BootでWEBアプリを構築することが多いと思います。


バックエンドのフレームワークのひとつにRuby on Railsがあります。




1.はじめに



Ruby on Rails開発のスキルセットには何が必要だろう?!そんな疑問にお答えするべく、今回は、Ruby on Rails開発についてご紹介します。



Rails5からはAPIモードを構築できるようになり、最近ではフロントエンドとバックエンドを分けてスキルを集約して取り組むようになりました。



Ruby on Railsは設定より規約を重視する思想が色濃く反映されたフレームワークです。10人以下の少人数開発など少数精鋭で、システム全体を把握しながら開発を楽しめる傾向から、日本で愛されている言語・フレームワークです。



Ruby on Railsでのバックエンド開発では、Ruby50%、RSpec45%、Swagger5%と考えると想像し易いかもしれません。



今回は当社で取り組んでいる、Ruby on RailsでのAPI開発におけるスキル習得を中心にご紹介します。





2.ベーシックスキル



1. MVC


Ruby on Railsはフロントエンド/バックエンドを揃えたフルスタック開発が行えます。基本はMVC開発です。


  • ビュー(View)では、マークアップ言語内にRubyのコードを埋め込むERBテンプレートエンジン、あるいはHamlやSlimなどのテンプレートエンジンを使います。

  • モデル(Model)では、ActiveRecordを扱ったり、アダプターを導入してのMySQL、PostgreSQLに対応します。

  • コントローラー(Controller)では、フォームに関するデータを更新したりするためのアクションを記述します。



2. ビュー(View)

jQuery


  • Rails4ではjquery-ujsでのjQueryに依存したビュー開発でしたが、Rails5ではrails-ujsでのjQueryに非依存のビュー開発になりました。Vue.jsやReact.jsと組み合わせるプロジェクトが増えてきています。


ページネーション


  • Gem「kaminari」をインストールすると、モデルのアクションに対するページネーション機能を追加できます。これにより、ビューにページネーションを表示する機能開発を行えます。



3. モデル(Model)


ActiveRecord


  • Ruby on Railsでのデータベース操作は、ActiveRecordを用いることで、SQLを意識することなくデータアクセスするプログラムを扱うことができます。

  • マイグレーションファイルにはテーブルの追加・削除するためのコードを実装でき、ActiveRecordのメソッドを実行することでデータベースの変更を指示することができます。

  • テーブル間のリレーションシップは、モデルの関連付けとなるアソシエーションを、belongs_to、has_many(1:n)、has_one(1:1)、has_many through(n:m)にて定義します。これにより複数のテーブルにまたがるデータ操作をActiveRecordで扱うことができます。

  • ActiveRecordではバリデーションを定義することができ、データベースに反映される前に適切であるかを検証するバリデーションを開発できます。保存時・更新時・削除時に呼び出されるコールバックを開発することができます。



4. コントローラ(Controller)


ルーティング


  • CRUD(読み込み、書き込み、更新、削除)機能のルーティングを「config/routes.rb」に定義し、コントローラーのアクションのメソッドに割り当てます。


REST設計


  • REST設計にて、GET、POST、PUT、PATCH、DELETEを基本としたURIを構築します。


API-JSON形式


  • APIからはJSON形式でデータを返却します。データベースから取得したデータを、renderメソッドを使ってJSON形式で利用者へ結果を返すAPIをコントローラに開発します。



5. デバッグ


REPL


  • デバッグでは、REPLにてデバッグします。

  • 入力されたコードを評価して表示するREPLとして、IRBあるいはpryにてデバッグします。

  • 具体的には、pryであればGemをインストールし、Railsを実行した際にbinding.pryに到達したら画面を停止させてデバッグします。




3.RSpec




1. 単体テスト(Unit Test)


RSpecにて、単体テスト(Unit Test)をコーディングできます。


単体テストでは「ModelSpec」を使用します。関数が想定通りに動作しているかどうかを検証します。モデル/共通メソッド/コントローラの開発では自動テストを導入します。リモートレポジトリにソースコードがプッシュされた段階で単体テストを自動で実行します。



2. 統合テスト(E2E Test)


RSpecにて、統合テスト(E2E Test)をコーディングできます。


統合テストでは「RequestSpec」を使用します。HTTPリクエストを発行してレスポンスの内容が想定通りかどうかを検証します。ブラウザテストでは自動テストが導入します。リモートレポジトリにソースコードがプッシュされた段階で統合テストを自動で実行します。



3. テストデータ


テストデータの作り方としてFactoryBotにてサンプルユーザーをつくることが一般的です。単体テストや統合テストだけでなく、総合テストのような全機能テストを行う際にも、テストデータをFactoryBotでつくりテストします。



4. チーム開発


チーム開発では、ソース管理にGitを用います。


一般的なGitFlowでは、タグやブランチを切り、いきなりmasterブランチにマージするのではなく、developブランチなどで開発し、レビュー承認後にmasterブランチにマージするワークフローにて開発します。


GitHubFlowの場合には、リモートレポジトリへのプルリクエストにてレビュー依頼を行います。




4.ミドルスキル



1. Swagger


Swagger は RESTful APIを構築するためのオープンソースのフレームワークです。多くのプロジェクトではYAML形式で記述しますがJson形式でも記述できます。



2. SQL


データベース操作におけるトランザクション管理では、ActiveRecordだけに頼らず、SQLにてトランザクション管理します。トランザクション管理することで、処理時にエラーがあればロールバックさせることができます。他のインスタンスから更新されないようテーブルに行ロックをかけ、処理が成功すればコミット、処理が失敗すればロールバックするというのがトランザクション管理の基本です。



3. VirtualBox


ローカルで開発することは少なく、開発環境はVirtualboxなどの仮想環境で開発するプロジェクトが多い傾向です。テスト完了後のソースは、いきなりAWSなどの本番環境にデプロイするのではなく、検証環境やステージング環境(本番に近い環境でシステムの動作確認をする環境)で動作確認し、環境依存での不具合リスクを最小化してから本番環境にリリースします。



4. Docker


仮想環境やローカルなどの開発環境を整える際、アプリケーション毎にMySQL等のバージョンを合わせて自動テストを準備する必要があるのは工数を伴ってしまいます。環境構築をスムースに構築できるように各環境にはあらかじめDockerを導入して開発することで効率化します。



5. CI/CD


少人数開発では、DevOpsエンジニアがCICDの構築にも携わります。CI(継続的インテグレーション)では、ソースコードがリモートリポジトリにプッシュされた際に毎回ビルドとテストが実行されて自動検証します。CD(継続的デリバリー)では、CIによるアプリケーションのビルドとテストが成功した後にデプロイ(実際にアプリケーションが実行される環境へのリリース)まで実行します。



6. バックグランドジョブ


バックグラウンドで非同期にジョブを実行する Gem を扱えるとハイスキルの領域になります。メール送信・画像変換・CSVアップロードによる大量SQL実行など、非同期処理による機能構築ができる点がバックエンドの価値創造に繋がります。




5.まとめ



Ruby on Railsは2~3年ごとにメジャーバージョンアップがされていて、現在ではRails6が公開されています。便利なGemの登場もあり、開発に集中できるところがRuby on Railsの魅力です。Railsには思想があるため、合う/合わないということが人に依りあるかもしれません。少人数チームにおいて開発スピードがあるという観点を考えると、WEB業界で最初に取り組む言語として日本で有力と言えそうです。



グロシードでは顧客要件を実現するRuby on Rails開発に取り組んでおります。



フルスタックRuby on Rails開発をはじめ、React.jsやVue.jsと組み合わせたRuby on Railsでのバックエンド開発に注力しております。



44回の閲覧0件のコメント