parse-duration-ms — 期間文字列をミリ秒に変換する小型ライブラリ

Library

概要

parse-duration-ms は、時間・期間を表す人間向けの文字列(例: “1h”, “90m”, “2 days 5 hours 30 minutes”)をミリ秒(Number)へ変換するためのシンプルなユーティリティです。設定値や環境変数、コマンドライン引数などで期間を文字列として受け取り、内部処理やライブラリの API に渡すためにミリ秒へ変換したい場面で便利に使えます。Sindresorhus によるミニマル設計で、依存が無い(または非常に少ない)ことが想定され、クライアント・サーバーどちらでも導入しやすい点が魅力です。

GitHub

リポジトリの統計情報

  • スター数: 5
  • フォーク数: 0
  • ウォッチャー数: 5
  • コミット数: 2
  • ファイル数: 11
  • メインの言語: JavaScript

主な特徴

  • 文字列で表現された期間をミリ秒へ変換する小型ユーティリティ
  • “1h”, “90m”, “2 days 5 hours 30 minutes” のような複数形式に対応
  • 依存が少なくバンドルサイズが小さいため簡単にプロジェクトへ導入可能
  • pretty-ms と組み合わせることで相互変換が容易(pretty-ms は逆変換用)

技術的なポイント

parse-duration-ms は非常に用途が限定された関数ライブラリで、その実装アプローチは典型的かつ効果的です。まず入力文字列を正規表現で分割して、「数値部分」と「単位部分」を抽出し、単位ごとに定義されたミリ秒換算テーブルで数値を乗算して合計する、という単純明快な手順を取ります。対応が期待される単位には、ミリ秒(ms)、秒(s)、分(m)、時(h)、日(d)、週(w)、年(y) やそれらの英語表記(複数形を含む表記)や略記が含まれるのが一般的で、README の使用例からも “hours”, “minutes”, “days” のような英語単語を扱えることが読み取れます。

実装は小さな関数一つに凝縮されていることが多く、トランスパイルやバンドラー経由でクライアント側にも安全に配布できます。ESM スタイルの import で利用できるようにパッケージが提供されている点(README の使用例より)も、モダンな開発環境に適合します。エッジケースとしては、複数セグメントの合算(例: “2 days 5 hours 30 minutes”)や単位間の混在、空白の有無や小文字・大文字の混在が想定されます。実装上は浮動小数点や小数表記(例: “1.5h”)に対応するために parseFloat を使って数値を取得することが多く、無効なパース結果に対しては NaN を返すか 0 を返すか、あるいは例外を投げるかは設計次第ですが、ライトウェイトなユーティリティとしては安全側(NaN を返す)に留める実装が一般的です。

パフォーマンス面では、正規表現とオブジェクト参照の組み合わせなので非常に高速であり、数百万回の変換が必要な高負荷パスでない限り問題になりません。テストや型定義(TypeScript の型を含めるかどうか)はリポジトリのファイル構成次第ですが、Sindresorhus のコレクションは小さくてもドキュメントやテストが整備されていることが多く、導入時の安心材料になります。pretty-ms と組み合わせれば、数値→人間可読表記→数値といった双方向のフォーマット運用が容易になります。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .editorconfig: file
  • .gitattributes: file
  • .github: dir
  • .gitignore: file
  • .npmrc: file

…他 6 ファイル

まとめ

小さく依存が少ない、設定値の期間処理に最適な実用的ユーティリティです。

リポジトリ情報:

READMEの抜粋:

parse-duration-ms

Parse duration strings to milliseconds

Useful for parsing timeout values, cache TTLs, rate limits, and other duration-based configuration in a human-friendly format.

See pretty-ms for the inverse.

Install

npm install parse-duration-ms

Usage

import parseDuration from 'parse-duration-ms';

parseDuration('1h');
//=> 3600000

parseDuration('90m');
//=> 5400000

parseDuration('2 days 5 hours 30 minutes')...