開発

[rust] New Type Patternを使ってみる

DDDの考えを取り入れることでテストコードや抽象化が一段と捗った気がします。

この部分にあまり力を入れてこなかったので新たにテスト用にinsta、抽象化に向けてnutypeを追加しました。

instaは所謂スナップショットテスト向けのcrateで公式サイトや各所で情報が出ているので使い方の理解は簡単だと思います。

TUIの画面周りのテストはこれで大部分カバーできると思います。

nutypeはNew Type Pattern向けのcrateでこちらの記事に影響を受けて使い始めました。

New Type PatternはRust の実装パターンの一つで既存の型への薄いラッパーのようなものです。既存の型を新しい型で包むことによってカプセル化して内部を隠蔽します。

例えばIDを扱う型を考えてみましょう。IDの値が数字だけならu32など数値系の型を使うかアルファベットなども入るようでしたらString型を使うことになると思います。

IDが数値のみという設計で実装して、もし後にセキュリティなどの理由で記号も含めるような仕様変更があった場合、直接このようなプリミティブな型を使用していると修正が大変になるかもしれません。

New Type Patternであれば

// struct ID(u32);
struct ID(String);Code language: JavaScript (javascript)

のようにID型の中身を変更することである程度対応できるようになります。

またIDという型の名前を使うことで可読性も上がります。

nutypeではさらにバリデーションやサニタイゼーションも行うことができるので桁数のチェックや含むことが可能な記号の種類のチェック等も型につけることができるようになります。

ということでちょっと使い始めましたが、ちょっとした値の受け渡しもこれを使うと定義の手間やバリデーションによるパフォーマンスの影響もあると思うので使い所は考えたほうが良いかもしれません。

GitHubにコードをアップロードしています。0.1.1バージョン

コードのコメントに書かれているfirst_stepなどをcargoコマンドに渡すと実行できます。

# Example
$ cargo run --example first_step
Code language: Bash (bash)
管理人

Recent Posts

期間限定!書籍無料キャンペーン2026

書籍発売1.5周年を記念して2…

2週間 ago

情報セキュリティマネジメント試験取得への道

スキルアップを図るべく情報セキ…

3か月 ago

ファイナンシャルプランナー3級試験取得への道

スキルアップを図るべくファイナ…

4か月 ago

RustでDDDの要素を取り入れてみる

前回SOLID原則というものを…

7か月 ago

期間限定!書籍無料キャンペーン2025

「mdBookではじめるKin…

7か月 ago