時系列が関係あるような機能の動作確認をする際に、現在日時を変更したくなるケースがありますが、OSの時間を変更するとちょっと怖いです。
ローカル端末上で実行中のアプリだけに日時を変更する方法を記載します。
フロントエンド
React.jsやVue.jsなどで作っているWebアプリケーションの日時を変更したいです。
new Date() した際の日時を変更する mockdate というライブラリを使います。
まずは、ライプラリをインストールします。
npm install -D mockdate
# or
yarn add -D mockdate
あとは、main.ts
など、アプリを起動する処理の直前に以下を指定します。
import MockDate from "mockdate";
MockDate.set("2022-06-29 19:30:00"); // JSTで設定
これだけで、フロントエンドアプリ内の現在日時を変更することができます。
バックエンド
Dockerコンテナ上で実行しているバックエンドAPIサーバの現在日時を変更したいです。
libfaketime というライブラリを利用します。
まずはDockerfile
にて、以下のような感じでインストール処理を記載します。
WORKDIR /tmp
RUN git clone https://github.com/wolfcw/libfaketime.git
WORKDIR /tmp/libfaketime/src
RUN sudo make install
あとは、Dockerコンテナ内の環境変数に以下を設定します。
LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1
FAKETIME=2022-06-29 09:30:00 # UTCで指定
docker-composeを使うのであれば、docker-compose.yml
に以下のように設定すればOKです。
services:
app:
environment:
- LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1
- FAKETIME=2022-06-29 09:30:00 # UTCで指定
今回は、バックエンドAPIサーバはPython+Djangoアプリでしたが、 datetimeを使って現在日時を取得する際に、上記の日時に置き換わってくれていました。