設定ひとつでClaude Codeに現在日時を自動認識させる方法

昨日の夜に始めた作業の続きを、今朝Claude Codeで再開したとします。「今日中にこれを終わらせたい」と伝えると、AIは昨日の日付を「今日」として話を進めることがあります。日付が変わったことに、気づいていないのです。
私たちはこのブログを毎日1本更新していて、その運用にClaude Codeを使っています。「今日の分の記事」「昨日公開した記事」という言い方を毎日するので、日付の勘違いは実害になります。昨日の記事を今日の分として数えられたら、連続更新の管理が狂う。だから引き継ぎ資料には「本数と日数は、記憶の数字を信じず毎回数え直すこと」と書いてきました。
対策は設定1つです。毎回のプロンプト送信時に、現在日時が自動でAIに伝わるようにする。今日、私たちの環境に実際に入れて、日時が毎回届くところまで確認しました。
AIは時計を持っていない
まず前提から。AIモデル自体は、時計を内蔵していません。「いま何時?」に答えるための情報源を、モデルは自分では持っていないのです。
それでもClaude Codeは、セッションを始めた直後に日付を聞けば正しく答えます。開始時点の日付は、手がかりとして持っているようなのです。ところが実際に使っていると、この手がかりには落とし穴が2つあることが分かります。
1つ目は、開始時の日付のまま、途中で認識が更新されないこと。夜に始めたセッションが日をまたいでも、AIの中の「今日」は昨日のままで話が進むことがあります。私たちが冒頭のような勘違いに出会うのは、たいていこの場面です。
2つ目は、会話の記録に残った古い日付に引っ張られることがあること。前日のやりとりを引き継いで作業を再開すると、会話の中には昨日の日付が何度も出てきます。AIは会話の文脈からも「今日」を推測するので、古い日付が並んでいると、そちらに流れやすくなります。
「AIに date コマンドを実行させれば正しい日時が取れるのでは?」と思った方、そのとおりです。実際、確認を頼めば取ってくれます。ただしAIは、毎回のやりとりで自発的に時計を確認したりはしません。人間が腕時計を見るような習慣は、AIにはないのです。
対策は「毎回のプロンプトに日時を差し込む」
対策の方向は単純です。人間側が毎回「今日は8月27日です」と書き添えれば、まず間違えません。でも、毎回書くのは面倒ですし、いつか書き忘れます。
そこで、プロンプトを送信するたびに、現在日時を自動で添える仕組みを作ります。Claude Codeには「フック」という機能があり、これがそのまま使えます。
フックは、Claude Codeの動作の節目に、自分で決めたコマンドを自動実行させる仕組みです。公式ドキュメントに一覧がありますが、今回使うのは UserPromptSubmit という種類。名前のとおり、ユーザーがプロンプトを送信した瞬間、AIが処理を始める前に発火します。
そしてここが肝心なところです。公式ドキュメントによると、UserPromptSubmit で実行したコマンドの出力(標準出力)は、そのままAIが読める文脈として追加されます。コマンドが「現在日時は8月27日19時58分」と出力すれば、その一文がプロンプトに添えられた状態でAIに届く。人間が毎回手で書くのと同じことを、機械にやらせるわけです。
設定はフック1つ、中心はコマンド1行
実際に入れた設定がこちらです。置き場所は、ホームフォルダの .claude/settings.json というファイルです。
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "TZ=Asia/Tokyo date '+現在日時: %Y-%m-%d %H:%M:%S (%a) JST。「今日」「昨日」「明日」などの相対日付は、過去の会話に出てくる日付ではなく、この現在日時を基準に判断すること。'"
}
]
}
]
}
}
このファイルがまだ無ければ、上の内容をそのまま新規作成すれば動きます。すでにファイルがある場合は、末尾に貼り足さないでください。 JSONというデータ形式は、1つのファイルに1つのかたまりしか書けない決まりです。既存の設定の中に hooks の部分を組み込む形になるので、編集前にファイルのコピーを取り、編集後にJSONとして読めるかを確認するところまでがワンセットです。
入れ子が深く見えますが、自分で中身を考えるのは command の1行だけです。残りは決まり文句の入れ物だと思ってください。1行の中身を分解します。
dateは、Macや一般的なLinux環境に標準で入っている、現在日時を表示するコマンドですTZ=Asia/Tokyoは「日本時間で」という指定。海外のサーバーで動かしても日本時間になります'+現在日時: ...'の部分は表示の書式です。%Y-%m-%d %H:%M:%Sが「2026-08-27 19:58:29」のような日時に置き換わります
書式の後半には、日時とは関係ない日本語の文を入れてあります。date コマンドの書式には任意の文字を混ぜられるので、AIへの注意書きそのものを出力に含めました。「相対日付は、過去の会話ではなくこの現在日時を基準に判断すること」と。日時の数字だけを渡す形でも動きますが、会話には古い日付が残ったままです。だから数字を置くだけでなく、「こちらを基準にせよ」まで明示する設計にしました。
Windowsはdateの代わりにPowerShellで書く
ここまでの書き方はMacとLinux向けです。date コマンドのこの書式はWindowsでは通用しないので、command の中身をPowerShell向けに書き換えます。設定するファイルと場所は同じです。
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"shell": "powershell",
"command": "Write-Output ('現在日時: ' + (Get-Date -Format 'yyyy-MM-dd HH:mm:ss') + '。「今日」「昨日」「明日」などの相対日付は、過去の会話に出てくる日付ではなく、この現在日時を基準に判断すること。')"
}
]
}
]
}
}
やっていることはMac版と同じで、現在日時に注意書きをつなげて出力しているだけです。Get-Date がWindowsで日時を取るコマンドで、パソコンの時計のタイムゾーンをそのまま使います。日本で使っているWindowsなら日本時間です。
"shell": "powershell" という1行が増えている点にも触れておくと、公式ドキュメントによれば、WindowsのフックはGit Bashが入っていればGit Bashで、無ければPowerShellで実行されます。環境によって実行先が変わると、片方でしか動かないコマンドは事故のもとです。この1行で「PowerShellで実行する」と固定しています。
どこに入れるかで、効く範囲が変わる
設定ファイルの置き場所は1つではありません。公式ドキュメントの整理では、主な置き場所は3つです。
~/.claude/settings.json: 自分のパソコンの全プロジェクトに効く.claude/settings.json(プロジェクト内): そのプロジェクトだけ。リポジトリで共有できる.claude/settings.local.json(プロジェクト内): そのプロジェクトだけ。共有されない
日時の認識はどのプロジェクトでも欲しいものなので、今回はホームフォルダ側の ~/.claude/settings.json に入れました。逆に、チーム全員に同じフックを配りたいなら、プロジェクト内の settings.json に書いてリポジトリごと共有する手もあります。ただしフックは、メンバーそれぞれの環境で実際にコマンドを実行する仕組みです。共有するなら、中身のレビューを通してからにしてください。
1つ補足すると、ブラウザ上で動くクラウド版のClaude Codeは、手元のパソコンの ~/.claude/settings.json を読みません。手元のパソコンで動かすターミナル、エディタ連携、デスクトップアプリのローカルセッションで効く設定だと思ってください。
入れた直後の送信から、もう効いていた
設定を保存して、次のメッセージを送った時点で確認できました。プロンプト送信のたびにフックが動き、「現在日時: 2026-08-27 19:41:39 (Thu) JST。「今日」「昨日」「明日」などの相対日付は、過去の会話に出てくる日付ではなく、この現在日時を基準に判断すること。」という一文が、そのままAIに届いています。再起動も不要でした。
これで、日をまたいだ作業でも、数日前のセッションを再開しても、毎回のやりとりにその時点の日時がそえられます。会話に古い日付が残っていても、新しい判断材料が毎回届く。勘違いの余地を大きく減らせます。
入れる前に知っておきたい注意点
便利な仕組みですが、3点だけ注意を。
フックは毎回実行されます。 プロンプトを送るたびに動くので、重い処理を書くと毎回の応答が遅くなります。date のような一瞬で終わるコマンドに留めるのが無難です。
フックは任意のコマンドを自動実行する仕組みです。 裏を返すと、中身を理解していないコマンドを他人のブログやSNSからコピーして貼るのは危険だということです。今回の date は日時を表示するだけで、ファイルには何も書き込みませんが、この原則は覚えておいてください。
設定ファイルの書式を壊すと、フック以外の設定も巻き添えになります。 settings.json には他の設定も同居しているからです。先ほど書いたとおり、コピーを取ってから編集し、終わったらJSONとして読めるかの確認を。手編集に不安があれば、Claude Code自身に「このフックを足して。バックアップと検証もして」と頼む手もあります。私たちも今回はそうしました。
試すときは順番があります。まず設定を入れる前に、日をまたいだセッションで「今日は何日?」と聞いて、ずれ方を確かめておく。それから設定を入れて、同じ質問をもう一度。前後を比べられる形にしておくと、この仕組みの効果をいちばん実感しやすくなります。