Techioz Blog

Ruby RBS: ハッシュのスキーマの宣言

概要

私のチームと私が取り組んでいるアプリケーションでは、Ruby ハッシュをデータ転送オブジェクト (DTO) として多用しています。また、現在、RBS と Steep の組み合わせを試して、開発プロセスに顕著な利点がもたらされるかどうかを確認したいと考えています。残念ながら、ハッシュパラメータの厳密なスキーマを宣言する方法が見つからないようです。例を示します。

次の Ruby コードがあるとします。

module Foo

  def some_func(args)
    x, y, z = args.values_at(:x, :y, :z)

    # do something with the params above
  end

end

そこで、上記の args ハッシュの構造を記述する *.rbs ファイルを作成したいと思います。これも可能でしょうか?

TypeScript でも同様のことが非常に簡単に実行できます。TypeScript ではハッシュ テーブルもよく使用されます。

type Args = {
  x: number,
  y: string,
  z: Array<number>
}

function some_func(args: Args): void;

解決策

はい、RBS (Ruby Signature) を使用して Ruby コード内のハッシュ パラメーターの構造を記述することは確かに可能です。 RBS は Ruby の静的型チェッカーであり、型注釈と型チェックを提供することで開発プロセスの改善に役立ちます。

この例では、args ハッシュの構造を記述する RBS ファイルを作成できます。その方法は次のとおりです。

# foo.rbs

module Foo
  # Declare the type for the args parameter in the `some_func` method
  type some_func_args = {
    x: Integer,
    y: String,
    z: Array[Integer]
  }

  # Declare the method signature for some_func
  def some_func(args : some_func_args) -> void
end
steep check

Steep は、foo.rbs ファイルの型情報を使用して、メソッド呼び出しが宣言された型と一致するかどうかを確認します。

この設定では、TypeScript がオブジェクトの型チェックを行うのと同様に、some_func メソッドの args パラメーターに対して静的な型チェックを行うことができます。これは、開発プロセスの早い段階で型関連の問題を発見し、コード全体の品質と保守性を向上させるのに役立ちます。