BLOG

ブログ

2023/07/10 技術系

【Ruby】digメソッドについて

この記事を書いた人 M.B

はじめに

深い階層のハッシュや配列に対して、ネストした要素に安全にアクセスすることができるdigというメソッドがあります。
とても便利で使いどころのあるメソッドなので、今回はdigメソッドの使い方とその利点を紹介します。

digメソッドとは

Ruby 2.3から使えるようになっているdigメソッドは、ハッシュや配列などのデータ構造に対し、指定したキーまたはインデックスを使用して要素にアクセスするメソッドです。
ネストしたオブジェクトを再帰的に参照して返します。

digメソッドは以下のように記述します。

data.dig(key1, key2, ..., key_n)

dataは対象のデータ構造、key1, key2, ..., key_nはアクセスしたい要素のキーまたはインデックスを指します。

instance method Hash#dig

instance method Array#dig

ネストしたデータ構造へのアクセス

digメソッドは、深いネストのデータ構造に対してとても効果的です。
例として以下のようなハッシュと配列の組み合わせのデータ構造について考えてみます。

data = {
  user: {
    name: "hanako",
    address: {
      country: "Japan",
      region: "Kyushu"

    },
    orders: [
      { id: 1, product: "A" },
      { id: 2, product: "B" }
    ]
  }
}

このデータ構造から特定の要素にアクセスするのに、digメソッドを使ってみましょう。
例えばユーザーの名前にアクセスするには下記のようにします。

name = data.dig(:user, :name)

nameの結果は"hanako"となります。

安全なデータ取得

digメソッドの利点は、存在しない要素にアクセスする場合でもエラーが発生せず、nilが返されることです。これにより、データが存在しない可能性がある場合でも安全に要素にアクセスできます。

例えば、配列の要素にアクセスする場合、インデックスが範囲外の場合でもNoMethodErrorエラーをスローせず、nilを返します。

array = [1, 2, 3]
result = array.dig(5)

resultの結果はnilとなります。

また、ハッシュdata_errordigメソッドを使わずにアクセスした場合、下記はエラーになります。

data_error = {
  user: {
    name: "taro"
  }
}

data_error[:user][:address][:prefecture]
#=> NoMethodError: undefined method `[]' for nil:NilClass

digメソッドを利用することでエラーハンドリングを簡素化し、コードの可読性と安全性を向上させることができます。

まとめ

digメソッドは、実際の開発で便利に使われています。
APIレスポンスの処理などネストした形式で提供されるデータを取得するような開発シーンにおいても、digメソッドは非常に役立つメソッドです。



株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!

アーカイブ