marshmallowのvalidateオプションの使い方

Marshmallow
ゆうすけ
ゆうすけ

marshmallowライブラリvalidateオプションってどう使うんですか?

資格マフィア
資格マフィア

validateオプションをつけることで、
schemaで受けつけるデータの条件を定義できるぞ

 

✔️ 本記事のテーマ

marshmallowライブラリのvalidateオプションについて

 

✔️ 読者さんへの前置きメッセージ

本記事は「marshmallowライブラリのvalidateオプション」について書いています。

 

この記事を読むことで
「validateオプションの使い方 や 受けつけるデータの条件定義」
について理解できます。

 

marshmallowはschema定義用のPythonライブラリです。

 

marshmallowライブラリでは、
各schemaに対して、その項目で受けつけるデータの条件を定義することができます。

 

本記事では、そんなmarshmallowのデータ条件定義について解説していきます。

 

それでは、解説していきましょう。

 

marshmallowのvalidateオプションとは?

marshmallowのvalidateオプションとは?

一言で説明すると、schemaで受けつけるデータの条件定義です。

 

schemaで対象項目にvalidateオプションをつけることで
データを読み込む際に対象項目の値の条件を定義できます。

 

例えば、
0未満が入ってきたとき、1~31以外の数字が入ってきたとき、100以上が入ってきたとき…
など任意の条件でvalidation errorを発生させることができます。

 

marshmallowのvalidateオプションの使い方

marshmallowのvalidateオプションの使い方

実際にmarshmallowのvalidateオプションを使ってみましょう。

validate=条件

とすることで対象項目に対して、受けつけ条件を定義することができます。

 

試しに、marshmallowで以下のようなschema定義をしましょう。

from marshmallow import Schema, fields


class ParsonSchema(Schema):

    name = fields.Str()
    age = fields.Int()

 

このschemaは name, age という2項目をschemaとしてデータを読み込みます。

 

このようなschemaを定義することで、次のようにJSONを読み込むことができます。

data = ParsonSchema().load({"name": "Taro", "age": 20})

print(data)
# {'name': 'Taro', 'age': 20}

 

ただ、このままでは例えばage=-1というようなデータも読み込むことができます。

data = ParsonSchema().load({"name": "Taro", "age": -1})

print(data)
# {'name': 'Taro', 'age': -1}

 

現実的に「-1歳」なんて年齢は存在しえないので、
schema定義の’age’の項目に、validateオプションによる条件をつけてみます。

from marshmallow import Schema, fields
from marshmallow.validate import Range


class ParsonSchema(Schema):

    name = fields.Str()
    age = fields.Int(validate=Range(min=0))

 

こうすることで、ageが0未満の場合にvalidation errorが発生します。

data = ParsonSchema().load({"name": "Taro", "age": -1})

# marshmallow.exceptions.ValidationError: {'age': ['Must be greater than or equal to 0.']}

 

このように、
validateオプションをつけることで、対象項目の受けつけ条件を定義することができます。

 

marshmallowのvalidateオプションの様々な条件指定

marshmallowのvalidateオプションの様々な条件指定

validateオプションでは様々な方法で条件を指定することができます。
その例を紹介しておきましょう。

  • 最小値を定義する
  • 最大値を定義する
  • XXからXXまでを定義する
  • 境界値をNGとするかOKとするかを定義する

 

最小値を定義する

marshmallowのvalidateオプションの使い方でも解説したように、
validateオプションを使うことで最小値を定義することができます

age = fields.Int(validate=Range(min=0))

最大値を定義する

最小値と同じように、
validateオプションで最大値を定義することもできます

age = fields.Int(validate=Range(max=100))

XXからXXまでを定義する

最小値定義と最小値定義を組み合わせることで、範囲を指定することもできます。

 

例えば、月を定義する際は1月~12月までしかないのでその範囲で条件付けすると良いでしょう。

month = fields.Int(validate=Range(min=1, max=12))

境界値をNGとするかOKとするかを定義する

ここまで紹介してきたmin/maxですが、
これらの境界値を範囲に含めるかどうかを定義することもできます。

age = fields.Int(validate=Range(min=0, min_inclusive=False))

 

このようにすることで、
「最小値を定義してその最小値はOK条件に含めない(=0以下だとvalidation error)」
とすることができます。

 

逆に、最大値をOK条件に含めない(=100以上だとvalidation error)ようにするには
以下のように書きます。

age = fields.Int(validate=Range(max=100, max_inclusive=False))

marshmallowのその他のオプション

marshmallowのその他のオプション

marshmallowには他にもいくつかのオプションがあります。

  • required
  • allow_none
  • missing


ざっと解説しましょう。

requiredオプション

対象項目を必須とするかどうかのオプションです。

 

Trueの場合、対象項目は必須となり、対象項目が存在しないデータを読み込むとerrorが発生します。
Falseの場合、対象項目が欠けていてもerrorになりません。
デフォルトではFalseになっています。

 

なお、requiredオプションの詳しい解説は
marshmallowのrequiredオプションの使い方」の記事に書いています。

allow_noneオプション

null値を許可するかどうかのオプションです。

 

Trueの場合、nullを許可し、Falseの場合、nullが入ってきたらvalidation errorが発生させます。
デフォルトではFalseになっています。

 

なお、allow_noneオプションの詳しい解説は
marshmallowのallow_noneオプションの使い方」の記事に書いています。

missingオプション

対象項目がなかった場合に、どのような値で埋めるかを指定するオプションです。

 

‘missing=0’ や ‘missing=None’ というように値を渡して使います。

 

なお、 ‘missing=True’ のとき、 ‘required=False’ でないと動かしたときerrorが発生します。
(当然といえば当然ですね)

 

なお、missingオプションの詳しい解説は
marshmallowのmissingオプションの使い方」の記事に書いています。

marshmallow(Pythonライブラリ)とは?

marshmallow(Pythonライブラリ)とは?

そもそもmarshmallowとは何なのでしょうか?

 

marshmallowはschema定義用のPythonライブラリです。

 

marshmallowを使うことで、
schemaを定義してPython型以外のデータ(例えば、JSONなど)を読み込むことができます。

 

marshmallowを使えば、
JSONの階層的なデータ構造をそのままPythonへ読み込むことができます。

 

marshmallowの具体的な使い方については
marshmallowの使い方【Pythonライブラリ】」の記事で解説しています。

 

marshmallowやPythonについてスキルをつけるなら

marshmallowやPythonについてスキルをつけるなら

marshmallowを使ったPythonでJSONデータ読み込む方法について解説しました。

 

Pythonをマスターすれば、様々なことを手軽に行うことができます。

 

PythonについてスキルをつけるならUdemyの教材がオススメです。

>> 現役シリコンバレーエンジニアが教えるPython 3 入門 + シリコンバレー流コードスタイル

 

Udemyは買い切りの動画学習サービスです。
一度購入してしまえば、その教材はずっと使うことができます。

 

さらに今なら30日間返金保証がついているので、
一度購入して自分の思っていたものと違った場合は費用がかかりません。

 

上記の教材はPythonの基礎から応用まで徹底的に解説しています。
また、現役シリコンバレーエンジニアによる本格的な解説も魅力的で、
教材の質の高さから4.4以上の評価がついています。

 

また、Pythonについて基礎から学ぶのであれば、オンラインスクールも良いでしょう。

 

オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしています。

 

オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。

 

オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。

✔️オススメのプログラミングスクール ベスト3

プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。

 

気になった方はぜひチェックしてみて下さい〜!

コメント

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