はじめに
本記事は、JavaScriptでよく使われる軽量日付ライブラリ「Day.js」を、CDN(コンテンツ配信ネットワーク)経由で手軽に導入・利用する方法を分かりやすく解説します。
対象は、ウェブページに素早く日付処理を追加したい方や、ビルド環境を使わずに開発したい方です。基本的なHTMLとJavaScriptの知識があれば読み進められます。
この記事を読むと次のことが分かります。
- Day.jsの特徴と選ばれる理由
- CDNを使った導入手順(実際の読み込みコード例あり)
- npm/yarnとの違いと使い分け
- 日付の表示・加減算・フォーマットなどの基本操作例
- CDN利用時の注意点(キャッシュやバージョン管理など)
- 他の代表的な日付ライブラリとの比較
- どんなケースにCDN経由がおすすめか
各章では実例を交えて丁寧に説明します。まず次章でDay.jsの特徴を見ていきましょう。
Day.jsとは?ライブラリの特徴と選ばれる理由
概要
Day.jsは、JavaScriptで日付や時刻を扱うための軽量ライブラリです。取得・解析・フォーマット・比較・加算・減算といった基本操作を直感的に行えます。Moment.jsの代替として人気があり、配布サイズは約2KBと非常に小さい点が特徴です。
主な特徴
- 軽量で高速:読み込みが速く、ページ表示を遅くしにくいです。
- シンプルなAPI:直感的な関数名で扱いやすいです。
- 不変(immutable):操作をしても元の値を壊さず安全に使えます。
- プラグインで機能拡張可能:タイムゾーンやロケール等は必要に応じて追加できます。
- CDNで簡単に利用可能:スクリプトタグ一つで導入できます。
選ばれる理由(具体例で説明)
- 小規模サイトやCDNでの利用:ファイルサイズが小さいため、静的ページやシンプルなウィジェットに向きます。
- Moment.jsからの移行が簡単:APIが似ているため既存コードの書き換えが少なくて済みます。
- 必要な機能だけを追加したい場合:基本は軽く、必要なプラグインだけ読み込めます。
簡単な例
例えば、今日から7日後の日付を文字列にする場合は次のように書けます。
dayjs().add(7, 'day').format('YYYY-MM-DD')
どんな場面に向くか
フロントエンドで軽く日付処理をしたいとき、CDNで手早く導入したいとき、Moment.js互換の書き方を保ちたいときに特に向きます。必要に応じてプラグインで機能を追加して使ってください。
CDNを使ったDay.jsの導入方法
概要
CDN(Content Delivery Network)を使うと、HTMLに1行追加するだけでDay.jsが使えます。npmやyarnの設定が不要で、静的サイトや試作に向きます。ユーザーのブラウザに同じCDN経由のファイルがあればキャッシュが効き、表示が速くなります。
導入手順(簡単)
- HTMLのかの終了直前にタグを追加します。
例(unpkg):
<script src="https://unpkg.com/dayjs@1.11.10/dayjs.min.js"></script>
- スクリプト内でdayjsを直接呼び出します。例:
<script>
const today = dayjs().format('YYYY-MM-DD');
console.log(today);
</script>
プラグインを使う場合
プラグインも同様にCDNから読み込み、dayjs.extend()で有効化します。例:
<script src="https://unpkg.com/dayjs@1.11.10/plugin/utc.js"></script>
<script>
dayjs.extend(dayjs_plugin_utc);
console.log(dayjs().utc().format());
</script>
主要なCDN例
- unpkg: https://unpkg.com
- jsDelivr: https://cdn.jsdelivr.net/npm/dayjs@1.11.10/dayjs.min.js
- cdnjs: https://cdnjs.com (提供がある場合)
注意点
- バージョンを明示して指定すると、意図しないアップデートを防げます。
- SRI(integrity属性)やcrossorigin属性で配布の安全性を高められます。簡単に使いたい場合や小規模サイトには特に便利です。
(この章では実用的な導入手順と例を中心に説明しました)
npm/yarnとの違い・使い分け
概要
CDNは手軽さと導入の速さが魅力です。HTMLにタグを置くだけで使えます。npm/yarnはパッケージ管理とビルド環境に向き、モダンな開発で力を発揮します。
主な違い(短く)
- 配布方法:CDNはブラウザ経由で読み込み、npm/yarnはプロジェクトにインストールします。
- モジュール利用:npm/yarnは
import/requireでESモジュールやCommonJSとして扱えます。CDNはグローバル変数(例:dayjs)で使うことが多いです。 - ビルド最適化:npm/yarnはTree Shakingで未使用コードを除去できます。これにより最終バンドルが小さくなります。
使い分けの目安
- すばやく試す、静的な数ページサイト、学習用途:CDN推奨です。導入が簡単で即時に動作確認できます。
- SPAや大規模なフロントエンド、TypeScript利用、依存管理をしたい場合:npm/yarnを選んでください。モジュール単位で細かく制御でき、バージョン管理やテストとの連携が楽になります。
具体例
- プロトタイプ:HTMLにを置き、
dayjs()を直接呼ぶ。 - 本番アプリ:
npm install dayjsして、import dayjs from 'dayjs'で必要なプラグインだけインポートし、Tree Shakingを活かします。
補足ポイント
- オフライン環境や厳格なバージョン固定が必要ならnpm/yarnの方が安心です。
- 小さなサイトでも複数ライブラリを追加するなら、管理の観点でnpm/yarnに切り替える利点があります。
(次章でDay.jsの基本操作を説明します)
Day.jsでできる基本的な日付操作
日付の取得・生成
Day.jsでは簡単に現在時刻や特定の日時を作れます。
– dayjs():現在時刻を取得します。例:dayjs()
– dayjs('2025-01-01'):文字列から生成します。ISO形式が扱いやすいです。
日付情報の取得
年や月、日などの情報はメソッドで取得します。
– year():年を返します。例:dayjs().year() → 2025
– month():月を返します(0〜11)。注意して使ってください。
– date():日を返します。
フォーマット
見た目を整えるにはformat()を使います。フォーマット文字列で自由に表示できます。
– 例:dayjs().format('YYYY-MM-DD HH:mm:ss') → 2025-06-01 14:30:00
加算・減算
add()とsubtract()で日時を計算します。メソッドチェーンで直感的に書けます。
– dayjs().add(7, 'day'):7日後
– dayjs().subtract(1, 'month'):1か月前
比較
isBefore()、isAfter()、isSame()で比較します。
– dayjs('2025-01-02').isAfter('2025-01-01') → true
イミュータブル(不変)について
Day.jsのインスタンスは不変です。add()やsubtract()は元のオブジェクトを変えず、新しいオブジェクトを返します。元の日時を残したまま計算したいときに便利です。
CDN利用時の注意点・活用ポイント
バージョン指定は明確に
CDNで読み込む際は、必ずバージョンを明示してください。例えば https://cdn.jsdelivr.net/npm/dayjs@1.11.7/dayjs.min.js のように固定すると、将来の互換性変化で動作が壊れるリスクを減らせます。指定しないと自動で最新が配信され、挙動が変わる可能性があります。
ネットワーク障害へのフォールバック
CDNが使えない場合を想定して、ローカルの代替ファイルを用意します。HTMLでは タグでまずCDNを読み込み、onerrorや別タグでローカル版を読み込む実装が簡単です。オフラインや企業ネットワークでの失敗対策になります。
キャッシュを活用して高速化
CDNは世界中のエッジで配信されるため、読み込みが速くなります。Cache-Controlやバージョン付きURLを組み合わせると、ブラウザキャッシュによる再読み込みが減りパフォーマンスが向上します。
プラグインは個別に読み込む
Day.jsのプラグインは本体とは別ファイルで配布されます。必要な機能だけをCDNから個別に読み込み、順序に注意してください(プラグインは本体より後に読み込みます)。
npm/yarnとのハイブリッド運用
CDNとnpmを混在させると管理が複雑になります。小規模な静的サイトではCDNが便利です。開発やCIが必要な大規模プロジェクトではnpmを推奨します。用途に合わせて選んでください。
他の代表的な日付ライブラリとの比較
概要
主要な日付ライブラリを簡単に比べると、Day.jsは軽量で拡張しやすくCDN利用に向きます。date-fnsは関数単位で使うため不要なコードを減らせます。Luxonはタイムゾーンや国際化に強く、Moment.jsはサイズが大きく非推奨の扱いです。
Day.js(概要と向き先)
軽くて使い始めが早い点が魅力です。プラグインで機能を追加するため、必要な機能だけ読み込みます。CDNで小さなウィジェットや静的ページに手早く導入する場面に向きます。
date-fns(関数型)
関数を個別にインポートするため、バンドルサイズを小さく保てます。例:addDays(date, 3)のように純粋関数で扱います。大規模なSPAでツリーシェイキングを活かしたい場合に便利です。
Luxon(タイムゾーン/国際化)
Intlを活用し、複雑なタイムゾーン処理やロケール対応が必要なアプリに強みを発揮します。サーバーサイドやスケジューリング機能で効果を発揮します。
Moment.js(現状)
機能は豊富ですがサイズが大きくパフォーマンス面で不利です。既存プロジェクトでは残ることがありますが、新規開発では移行を検討してください。
使い分けの目安
- 軽さ・手早さを重視しCDNで使う:Day.js
- バンドル最適化を重視:date-fns
- タイムゾーンや国際化が中心:Luxon
- 既存の大規模コードベース:Moment.jsから段階的に移行を検討
具体的な用途に合わせてライブラリを選ぶと使いやすくなります。
まとめ:CDN経由のDay.jsはこんな人におすすめ
おすすめの利用シーン
- 個人開発やプロトタイピングで、素早く日付操作を試したい方。例:静的なデモページやサンプルコードで即座に日付表示を整えたい場合。
- 学習用途で、環境構築をせずにDay.jsの使い勝手を確認したい方。
- サーバーレスや静的サイト(HTMLだけのサイト)で、手軽に高機能な日付操作を取り入れたい場合。
- npm/yarn環境を準備できないときや、ページ読み込みで即時利用したいとき。
利点のまとめ
- 導入が早く、HTMLにを追加するだけで使えます。
- 必要なときだけ読み込めば、余計な環境設定を省けます。
導入時の簡単なヒント
- バージョンは明示して指定しましょう(例:cdn.jsdelivr.net/…/dayjs.min.js)。
- プラグインを使うときは、coreの後に読み込んでください。
- オフライン環境や厳密な依存管理が必要ならnpm/yarnを検討してください。












