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で新しいプロジェクトを立ち上げ、かつ超大規模なところまで想定しなければ、とりあえず入れておくには良いのではないかと思う。
一緒に働きましょう
トリビューではエンジニア、営業などなど、色々な職種を募集中です。 少しでも興味あれば、お話しましょう。