Rust にトレイトという機能があります。 自分でトレイトを作るときに、そのトレイトに関連するジェネリックな型が欲しくなることがしばしばあります。そんなときの選択肢として associated type (関連型) generic type (ジェネリクス、型パラメータ) の2つがあると思います(2番に関しては、正しい呼称かどうか自信がないです。trait Foo<T> {} と定義したときの T のことを指しています)。そして、どちらを使っても自分のやりたいことを実現できるな……と気づくことがあります。そのようなときに、どちらを使うのが良いのか分からなくなることがよくあるので、忘れないようにエントリとしてまとめておきます。 TL;DR associated type は トレイトと実装対象の型 (Self) との関係が 1 : 1 になる。 generic type だと トレイト :