変数や引数の値の型チェックを簡単にするjsライブラリ「ow」



変数や引数、様々の値の型チェックをする時に便利なjavascriptライブラリ「ow」の紹介です。
 

ow で出来ること 

- 関数内の 引数の型、文字の長さなど、色々なチェックの処理が簡単に書けるようになります。

* ow を使って testFunc() の引数の型、最低文字数を定義


ow のインストール

 ow は プロジェクトルート上から ' npm ' 又は ' yarn ' コマンドを使ってインストールします。ow は TypeScript で開発されているライブラリなので、定義ファイルも用意されています。

# npm
npm install ow
# yarn
yarn add ow


ow の使い方

ow は 主に 型指定 + 4つのメソッドから成り立っています。

 変数や引数などの 型判別をする為には下記のように ' os.{ Type } ' 形式で使用します。

ow.string // 文字列
ow.date // デイト(日付)
ow.array // 配列
ow.object // オブジェクト
ow.number // 数値
ow.regExp // 正規表現
ow.boolean // 真偽

// goes on


また、 型に様々な条件を指定する オブジェクトやメソッドも多数用意されています。

// 型に対する条件の一例
or.string.numeric // 文字列克つ、値が数字
ow.string.maxLength(num) //  文字列克つ、5文字以内
ow.object.hasKeys(key) // オブジェクト型克つ、指定したkeyが存在するか
ow.array.nonEmpty // 配列克つ、要素が空ではない場合


ow の API ドキュメント
 

ow( value, predicate )

 ' ow ' メソッドは 条件が合わない時に 例外 ( throw ) で返す メソッドです。
 第一引数には 判定する値、第二引数には 型や最低文字数など、条件を指定して使います。

 下のスニペットは 関数の引数 ' arg ' が " 文字列 ( String )型 克つ、5文字以上 " でなければ 例外を発生させる条件を指定しています。

const ow = require("ow");

function testFunc(arg) {
  // arg が String克つ 5文字以上
  ow(arg, ow.string.minLength(5));
  // goes on ..
}

// 5文字なのでOK
testFunc('12345');
// 引数が 数値(Int型) なので例外が発生
testFunc(12345);
// 引数が3文字なので例外が発生
testFunc('テスト');

 

ow.isValid( value , predicate )

isValid ' メソッドは Boolean ( 真偽 ) で値を返します。
例外が発生しないので、if 文などの条件式と組み合わせたい時に使うと便利そうです。

// 引数が Int型で 値が1〜99であれば true、そうでなければ false
const numRange = num => ow.isValid(num, ow.number.inRange(1, 99));

numRange(99) // true
numRange(100) // false

 

ow.crete( value, predicate )

' create ' メソッドは 再利用可能なバリデーションを作成する時に利用するメソッドです。条件が合わなければ 例外で返します。

/* numRange.js */
const ow = require("ow");
// 値が 100 から 500じゃなければ例外が発生
module.exports = ow.create(ow.number.inRange(100, 500));


/* index.js */
// 上の numRange.jsを読み込み
const numRange = require('./numRange');

function testFunc(arg) {
  numRange(arg); // ライブラリを呼び出し
  // goes on ..
}

testFunc(99); // BAD: 例外が発生
testFunc(150); // OK 
testFunc('somthing'); // BAD: Stringなので例外が発生

 

ow.any( ...predicate )

' any ' メソッドは 判定したい条件が複数ある時に使うメソッドです。 any メソッド内に記述した条件が1つでも当てはまると ' this ' を返します。
" if 文内の OR 演算子をわかりやすく書ける " とイメージすれば わかりやすいと思います。

function anyExample(arg) {
  // isValidメソッドと組み合わせて Boolで返すようにしています
  return ow.isValid(arg, ow.any(
          ow.number.inRange(100, 200), // 100 ... 200 は許可
          ow.number.inRange(300, 400) // 300 ... 400 は許可
        ));
}

anyExample(200); // True 100 ... 200
anyExample(201); // False 201 .. 299
anyExample(300); // True 300 ... 400


Summary

 プロジェクトで使うメソッドで ow を使えば、バリデーション用に書いていた 例外処理を わかりやすく書いたり、 型や判定メソッドが豊富に用意されているので、Unit テストコードを書く時に使うなど、様々な場面で役に立ちそうです。

GigHub : sindresorhus/ow

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ