1
/
5

Railsの勉強会で「Trailblazer」の話をしました

Tech Lead Engineerから最新技術を学べ!Ruby on Rails編という勉強会にスピーカーとして呼んでいただいた。

「Rails✕◯◯でコアでマニアックな技術」というなかなかハードルの高いお題で、それをクリアできたかはちょっと自信がないが、トリビューで使っている技術の紹介も兼ねて「Trailblazer」について少し話をしてきました。

トリビューのウェブアプリケーションはバックエンドがRails、フロントエンドがReact/Reduxというプレーンな構成です。
Railsと合わせてTrailblazerを使うことで、Railsがお世話してくれない「ビジネスロジック」をどう定義、記述するかというところを明確にできるため、トリビューぐらいの中規模アプリケーションではとても重宝しています。

たとえば、「記事の作成」というような処理であれば、下記でバリデーションや保存の処理まで記述できます。(もちろんモデルにバリデーションの定義をすることなく)

class ArticlesController < ApplicationController
  def create
    result = run Article::Create

    return render :new if result['validation.invalid']

    redirect_to article_path(result[:model])
  end
end

class Article::Create < BaseOperation
  step Model(Article, :new)
  step :assign_user!
  step Contract::Build(constant: Article::Contract::Create)
  step Contract::Validate()
  failure :handle_validation_error!, fail_fast: true
  step Wrap(TransactionBlock) {
    # some steps in the same transaction here.
    step Contract::Persist()
  }
  failure :handle_internal_error!

  private

  def assign_user!(options, current_user:, **)
    options[:model].user = current_user
  end
end

その他の処理はサンプルコードを用意したので、よければ参考にしていただければ幸いです。(指摘もあればしてほしい)

なかなかrcがとれないが、v2.1になり、インターフェースの整理やマクロの追加/拡張、周辺ライブラリの追加などもあって、よりシンプルに記述量少なく記述ができるようになりました。
Railsで新しいプロジェクトを立ち上げ、かつ超大規模なところまで想定しなければ、とりあえず入れておくには良いのではないかと思います。

一緒に働きましょう

トリビューではエンジニア、営業などなど、色々な職種を募集中です。
少しでも興味あれば、お話しましょう。

株式会社トリビューからお誘い
この話題に共感したら、メンバーと話してみませんか?
株式会社トリビューでは一緒に働く仲間を募集しています
2 いいね!
2 いいね!

同じタグの記事

今週のランキング

小尾 勇太さんにいいねを伝えよう
小尾 勇太さんや会社があなたに興味を持つかも