TypeScript入門 第10回

TypeScript

TypeScriptのReadonlyとImmutable設計を理解する

ソフトウェア開発では

データを書き換えない

という設計がとても重要です。

この考え方を

Immutableイミュータブル

と呼びます。

TypeScriptでは、このImmutable設計を実現するために

readonly

という機能が用意されています。

この記事では
• readonlyとは
• Immutable設計とは
• 実務での使い方

を解説します。

Immutableとは?

Immutableとは

一度作ったデータを変更しない設計

のことです。

let user = {
  name: "Taro"
}

user.name = "Hanako"

このように値を変更する設計を

Mutableミュータブル

と呼びます。

しかし大規模なアプリケーションでは

  • バグの原因になる
  • 状態管理が複雑になる

という問題があります。

そこで

Immutable設計

が使われます。

readonlyとは?

TypeScriptでは

readonly

を使うことで、値を変更できないプロパティを作ることができます。

interface User {
  readonly id: number
  name: string
}

使用例

const user: User = {
  id: 1,
  name: "Taro"
}

もし

user.id = 2

と書くと

エラー

になります。

配列のreadonly

配列にもreadonlyを使えます。

const numbers: readonly number[] = [1,2,3]

この場合

numbers.push(4)

はエラーになります。

Readonly Utility Type

以前紹介した

Utility Types

にもreadonlyがあります。

interface User {
  id: number
  name: string
}
type ReadonlyUser = Readonly<User>

結果

{
 readonly id: number
 readonly name: string
}

Immutableなオブジェクト更新

Immutable設計では

オブジェクトを書き換えません。

代わりに

新しいオブジェクトを作る

方法を使います。

const user = {
  name: "Taro",
  age: 30
}

更新

const newUser = {
  ...user,
  age: 31
}

この方法を

Immutable Update

と呼びます。

Reactでも使われる設計

Immutable設計は

フロントエンドでよく使われます。

特に

  • React
  • Redux
  • 状態管理ライブラリ

などです。

理由

状態変更を安全に管理できる

からです。

Immutableのメリット

Immutable設計には次のメリットがあります。

バグが減る

データを書き換えないため、予期しない変更が起きません。

状態管理が簡単

状態の変化を追いやすくなります。

デバッグしやすい

どこでデータが変更されたか分かりやすくなります。

実務でのおすすめ設計

TypeScriptでは、次のルールがよく使われます。

基本はImmutable

つまり

  • readonlyを使う
  • オブジェクトを書き換えない
  • 新しいオブジェクトを作る

という設計です。

まとめ

Immutable設計とは

データを変更しない設計

です。

TypeScriptでは

readonly

を使うことで

Immutableなコードを書くことができます。

メリット

  • バグを減らせる
  • 状態管理が楽になる
  • 安全なコードになる

そのため

モダンJavaScript / TypeScriptでは非常に重要な設計です。

コメント

タイトルとURLをコピーしました