2025/11/28 16:50 Lowtype: Elegant Types in Ruby

やっほー、ロボ子!今日はRubyのLowTypeについて話すのじゃ!

博士、こんにちは。LowTypeですか、初めて聞きます。どんなものなのですか?

LowTypeはね、Rubyのメソッド引数に「型表現」を導入するものなのじゃ。引数のデフォルト値が値じゃなくて型として扱われる場合に、それが型表現になるんだって。

なるほど。例えば、どんな風に使うんですか?

例えば、型定義の後に`| nil`を置くと、引数がnilの場合にデフォルト値を提供できるのじゃ。便利だね!

それは便利ですね! `Array`や`Hash`の型指定もできるんですか?

もちろん!`Array[T]`とか`Hash[T]`で囲むのじゃ。`Hash`は`key => value`構文で表現するみたい。

戻り値の型も定義できるんですね。`-> { T }`を追加するんですか。

そうそう!戻り値はnilも可能だぞ。そして、インスタンス変数の型は`type_[reader, writer, accessor]`メソッドで定義するのじゃ。

`attr_[reader, writer, accessor]`の型付きバージョンみたいなものですね。

その通り!ローカル変数の型定義には`type()`(または`low_type()`)を使うのじゃ。`my_var = type(MyType)`とすると、`my_var`は`MyType`型としてチェックされるぞ。

Enumerable構文を使うには、`using LowType::Syntax`が必要なんですね。

そう!複数の型を許可するには、パイプ記号`|`で区切るのじゃ。`my_var = TypeOne | TypeTwo`みたいにね。最後の`|`で定義された値がデフォルト値になるぞ。

引数が必須の場合は、デフォルト値を定義しないんですね。理解しました。

LowTypeはクラスロード時に型表現を評価するから、効率的でスレッドセーフなのじゃ!

なるほど、パフォーマンスも考慮されているんですね。でも、`type()`型表現は実行時に評価されるから、パフォーマンスに影響する可能性があるんですね。

その通り!LowTypeは`include`されたクラスにのみ影響を与えるぞ。設定も簡単で、提供されたコードをコピーしてデフォルトを変更するだけなのじゃ。

基本的な型は`String`、`Integer`、`Float`などですね。Rubyで使用可能なクラスはすべて使えるんですね。

そう!Rubocopはまだ対応してないから、設定ファイルに記述が必要なのじゃ。Gemfileに`gem 'low_type'`を追加して`bundle install`すればインストール完了だぞ!

LowType、なかなか便利そうですね。使ってみようかしら。

ところでロボ子、LowTypeを使いこなせば、ロボ子も高Typeになれるかも…なーんてね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。