Chrono Mock
言語日本語

よくある質問

短い回答です。このツールがやらないことについての回答も含まれます。

コンピューターの時計は変更されますか。

いいえ。今後もありません。それがこのツールの存在意義だからです。ずらされた時刻が見えるのは、1 つのプロセスとそれが起動する子プロセスだけです。ドメインへのログオン、証明書、Windows Update、ほかのすべてのアプリは、ずっと本当の日付を見続けます。

管理者権限は必要ですか。

実行には必要ありません。zip 版はインストーラーが不要で、レジストリには何も書き込まず、USB メモリに入れたフォルダーからそのまま動きます。任意の .msi は、コンピューター上のすべてのアカウント向けにインストールするため、インストール時に 1 回だけ管理者権限が必要です。

自分のアプリで動きますか。

正直に言えば、この種のツールにそれを事前に約束できるものはありません。だからこのツールは、それを測定します。すべてのセッションは、判定(有効、一部有効、無効)、アプリが実際に読んだ時刻チャネルの一覧と各チャネルの呼び出し回数、そしてカバーされなかったチャネルの一覧で終わります。

アプリは、何もフックしていない経路 - サーバー、データベース、ランタイム層など - から時計を読むことがあります。そうなった場合は、テストに合格したと思い込ませるのではなく、そのことが伝えられます。

.NET、Java、Python のアプリで動きますか。

部分的に動作し、その違いは重要です。3 つとも実験的と位置づけています。テスト用の対象では動作しますが、広範にはテストされておらず、信頼できる情報源はこの段落ではなく内蔵の監査です。

  • .NET - 壁時計とセッションのタイムゾーンをカバーします。Stopwatch は、スケーリングを明示的に有効にしない限り、実際の高分解能カウンターのままです。
  • Java - 壁時計、経過時間、セッションのタイムゾーンをカバーします。ゾーンは GMT+05:30 のような名前の固定オフセットとして渡されます。
  • Python - time.time と datetime をカバーします。perf_counter、そして Python 3.13 以降の monotonic は、明示的に有効にしない限り高分解能カウンターに依存します。

Electron や Chromium のアプリで動きますか。

はい。別の仕組みを使います。これらの時計はインジェクションが届かないサンドボックス化されたレンダラーの中にあるため、アプリはデバッグポートときれいな使い捨てプロファイルで起動され、アプリ自身の JavaScript の時間関連 API がセッションの時計に載せ替えられます。タイマーが実際にいることが多い Web Worker の内部も対象です。

知っておくべき制約が 1 つあります。Electron アプリケーションのメインプロセスはセッションが届かない Node で動くため、実際の時計のままで、レポートにもそう記されます。ページとそのワーカーはセッションのタイムゾーンを読みます。

Chromium と Electron モードのしくみ - 何に届き、何に届かないか、そしてなぜデバッグポートが気をつけるべき点なのか。

時間を実時間より速く進められますか。

はい。整数の倍率を選べば、アプリの時計はその速さで進みます。x1440 なら 1 日が 1 分になるので、30 日間の試用期間は約 30 分で切れます。時計を止めたり、セッション中に前後へジャンプしたりすることもできます。

カウントダウンとタイマーは別の軸にあり、それらを速めるのは別のスイッチです。それらをスケールすると、多くのアプリが前提にしている挙動が変わってしまうためです。

日付を変えずに、タイムゾーンだけ変えられますか。

はい。セッションは独自の固定オフセットを持ち、システムのタイムゾーンは元の場所に残したまま、そのプロセスにだけ見えます。ほとんどのツールが省いてしまう部分で、タイムゾーンが 5 つ離れた顧客でだけ起きるバグを再現する方法です。

夏時間はどうなりますか。

セッションのタイムゾーンは夏時間のない固定オフセットです。ポーランドに設定したセッションは、時計が 3 月を指していても 7 月を指していても、選んだオフセットのままです。そのため、実際の切り替えをまたぐ実行は、そのゾーンが本来示すはずの時刻から 1 時間ずれます。

したがって、アプリを夏時間の切り替えに通すことは、このツールではまだできません。日付電卓は、推測するのではなくそのことを明記します。

ウイルス対策ソフトが検知するのはなぜですか。

別のプロセスにライブラリをインジェクトすることは、文書化された正当な Windows の手法ですが、マルウェアも使うからです。これは手法に反応した誤検知であり、このツールがあなたのマシンに対して行う何かが原因ではありません。インジェクトされるライブラリは chrono_hook.dll で、公開されたソースから GPL-3.0 のもとでビルドされており、自分で再ビルドすることもできます。Chromium と Electron のモードはインジェクションをまったく行いません。

対処法はダウンロードページに書いてあります。

試用期間の延長やライセンスの回避に使えますか。

いいえ。そのために作られたものではありません。Chrono Mock は、自分が責任を負うソフトウェア、つまり自社のライセンスの期限切れ、自社の更新ロジック、自社の月末レポートをテストするためのものです。他人の試用期間を延ばす方法を示す例、シナリオ、ページは、ここには今後も存在しません。

ライセンス保護のあるソフトウェアは、実際にはこのツールが最も失敗しやすいケースです。改ざん対策のコードは、傍受しにくい経路をあえて選んで時刻を読むことが多く、時計の巻き戻しは、そうしたソフトウェアが検出するように書かれている条件だからです。逆方向の機能が計画されています。自分自身のアプリに対して一連の時刻操作を実行し、どれが保護機構に捕まったかを報告するモードです。

継続的インテグレーションで使えますか。

はい。コマンドライン版は、インストールするランタイムのない、約 2.4 MB の別ダウンロードです。すべてのコマンドが --json を話し、パイプラインが分岐に使える終了コードで終了し、セッションは証拠をファイルに書き出せます。

RunAsDate とどこが違いますか。

RunAsDate は壁時計の関数を 5 つフックし、それをうまくこなします。このツールは 44 の時刻チャネルを監視してそのうち 30 をセッションの時計に載せ替え、時計を速め、プロセスに独自のタイムゾーンを与え、子プロセスにも追従し、実際にどのチャネルをカバーしたかを後から伝えます。さらにオープンソースで、RunAsDate はクローズドなフリーウェアです。一方 RunAsDate は、すでに動いているアプリケーションにアタッチできますが、このツールにはできません。

詳しい比較では、RunAsDate のほうが向いている場面も説明しています。

これは Windows 版の libfaketime ですか。

考え方としてはそうです。マシン全体ではなく、1 つのプログラムのために時間を動かすという同じ発想です。実際には別の実装です。libfaketime は Windows に存在しない LD_PRELOAD に依存しているからです。まさにそのことを説明したページがあります。

無料ですか。何かをどこかに送信しますか。

GPL-3.0 のもとで無料のオープンソースです。アカウントなし、テレメトリなしで、インターネットには一切接続しません。ネットワークケーブルを抜いた状態でもツール全体が動作します。

ウィンドウには、外部につながるコントロールが 2 つあります。自分で見つけてもらうのではなく、ここで明示しておきます。タイトルバーにあるDonate ボタンと GitHub ボタンです。どちらかを押すとブラウザーにアドレスが渡され、接続するのはブラウザーです。どちらの場合も Chrono Mock が接続を開くことはなく、アプリについて測定した内容がどこかへ送られることもありません。