bttf は、コマンドライン向けの万能な日時ツールです。

2026/05/28 11:58

bttf は、コマンドライン向けの万能な日時ツールです。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Summary:

bttf
は、日付と時間の演算、パース、フォーマットのための強力な Rust ベースのコマンドラインユーティリティであり、MIT または UNLICENSE のどちらかのライセンスで提供されています。これは、レガシーの
date
コマンドへの単純な置き換えを行うものではなく、高精度なタイムゾーン処理(四捨五入付き)、柔軟な相対期間計算、Gitコミット履歴の詳細な分析など、高度な機能を重視しています。日付と時間の論理は Jiff ライブラリに構築され、ロバストなローカライゼーションには ICU4X が活用されており、異なる地域での正確なデータ処理を確保します(古い POSIX システムの制約を模倣せず、
TZ
環境変数のみ POSIX に準拠しています)。ユーザーは、Windows、macOS、Linux のための事前コンパイル済み静的バイナリから、または Cargo(
cargo install bttf
; ローカールームサポートが必要な場合は
--features locale
を使用)を通じて簡単にインストールできます。コアロジックが将来 RFC 5545 サポートから分離する可能性はありますが、現在のバージョンでは特定規格(RFC3339、RFC9557)でのフォーマットやカスタム
strftime
の追加、期間の付加、日付列の生成、ログファイル内のタイムスタンプの再フォーマットなどのロバストな機能を提供しています。注目すべき特徴は、任意のデータ内の日付と時間を検出し、JSON ライン形式にまとめる
tag
コマンドです。Rust で書かれた最先端プロジェクトであるため、完全な安定性に達するまで
bttf
は破壊的変更を起こす可能性があります。採用を検討している方は、詳細についてはユーザーガイドまたは
bttf --help
をご参照ください。

本文

bttf: コマンドラインによる日付時刻計算・解析ツール

bttf
は、日付時刻の計算、解析、フォーマット化などをサポートするコマンドラインツールです。MIT ライセンスと UNLICENSE のデュアルライセンスを採用しています。

ドキュメント

  • 概要: ユーザーガイドを参照し、基本的な概念を理解してください。
  • 詳細:
    bttf --help
    または
    bttf <サブコマンド> --help
    を実行します。
  • 比較: 他のツールとの類似性を確認する比較資料があります。

簡単な例とヒント

現在時刻の表示

$ bttf
Sat, May 10, 2025, 8:02:04 AM EDT

ヒント:

2025 M05 10
のような出力の場合は、ロケールサポートが正しく設定されていない可能性があります。以下のいずれかの方法で対応してください:

  • BTTF_LOCALE
    という環境変数を設定する
  • GitHub リリース版バイナリを使用する
  • ロケール機能が有効な状態でビルドする

形式指定での表示

$ bttf time fmt -f rfc3339 now
2025-05-10T08:08:30.101066734-04:00

$ bttf time fmt -f rfc9557 now
2025-05-10T08:08:33.420946447-04:00[America/New_York]

$ bttf time fmt -f '%Y-%m-%d %H:%M:%S %Z' now
2025-05-10 08:08:48 EDT

複数の相対時刻の表示

$ bttf time fmt -f '%c' now -1d 'next sat' 'last monday' '9pm last mon'
Sat, May 10, 2025, 10:44:39 AM EDT
Fri, May 9, 2025, 10:44:39 AM EDT
Sat, May 17, 2025, 10:44:39 AM EDT
Mon, May 5, 2025, 10:44:39 AM EDT
Mon, May 5, 2025, 9:00:00 PM EDT

タイムゾーン変換と丸め

$ bttf time in Asia/Bangkok now | bttf time round -i 15 -s minute
2025-05-10T19:15:00+07:00[Asia/Bangkok]

期間の追加・算出

$ bttf time add -1w now
2025-05-03T10:34:30.819577918-04:00[America/New_York]

$ bttf time add '1 week, 12 hours ago' now
2025-05-02T22:34:44.114109514-04:00[America/New_York]

$ bttf time add 6mo now
2025-11-10T10:34:49.023321635-05:00[America/New_York]

期間の計算と丸め

$ bttf span since 2025-01-20T12:00
2636h 1m 21s 324ms 691µs 216ns

$ bttf span since 2025-01-20T12:00 -l year
3mo 20d 21h 1m 25s 171ms 886µs 534ns

$ bttf span since 2025-01-20T12:00 | bttf span round -l year -s day
3mo 18d

$ bttf span since 2025-01-20T12:00 | bttf span round -l day -s day
110d

ログファイルのタイムスタンプ置換

$ head -n3 /tmp/access.log
2025-04-30T05:25:14Z    INFO    http.log.access.log0    handled request
2025-04-30T05:25:17Z    INFO    http.log.access.log0    handled request
2025-04-30T05:25:18Z    INFO    http.log.access.log0    handled request

$ head -n3 /tmp/access.log | bttf tag lines | bttf time in system | bttf time fmt -f '%c' | bttf untag -s
Wed, Apr 30, 2025, 1:25:14 AM EDT       INFO    http.log.access.log0    handled request
Wed, Apr 30, 2025, 1:25:17 AM EDT       INFO    http.log.access.log0    handled request
Wed, Apr 30, 2025, 1:25:18 AM EDT       INFO    http.log.access.log0    handled request

指定されたスケジュールの生成とフォーマット

$ bttf time seq day today -c5 -H 9 -w mon,wed,fri | bttf time fmt -f '%c'
Mon, May 12, 2025, 9:00:00 AM EDT
Wed, May 14, 2025, 9:00:00 AM EDT
Fri, May 16, 2025, 9:00:00 AM EDT
Mon, May 19, 2025, 9:00:00 AM EDT
Wed, May 21, 2025, 9:00:00 AM EDT

月の残日と特定月の最終平日の検索

# 今月の残りの全日を表示
$ bttf time seq daily --until $(bttf time end-of-month now) today
2025-05-10T00:00:00-04:00[America/New_York]
...

# 次の 12 ヶ月分の最終平日を表示
$ bttf time seq -c12 monthly -w mon,tue,wed,thu,fri --set-position -1 | bttf time fmt -f '%a, %Y-%m-%d'
Fri, 2025-05-30
Mon, 2025-06-30
...

# 今年末までの指定月の火曜日を表示
$ bttf time seq monthly -w 2-tue --until $(bttf time end-of-year now) | bttf time fmt -f '%a, %F'
Tue, 2025-05-13
Tue, 2025-06-10
...

Git リポジトリの最終コミット情報の一覧表化

$ git ls-files \
    | bttf tag exec git log -n1 --format='%aI' \
    | bttf time sort \
    | bttf time fmt -f '%Y-%m-%d %H:%M:%S %z' \
    | bttf untag -f '{tag}\t{data}'
2025-05-05 21:54:09 -0400       src/tz/timezone.rs
2025-05-05 21:54:09 -0400       src/tz/tzif.rs
...

インストールとビルド

バイナリ入手

  • バイナリ名:
    bttf
  • Crates.io: https://crates.io/bttf
  • 事前コンパイル済みアーカイブ: Windows、macOS、Linux 用に対応。

Cargo を使ったインストール

  • Rust プログラマー向けに
    cargo install
    でインストール可能です。
  • デバッグビルドは予期せず大きくなります。
  • ファイルサイズを縮小するには、strip コマンドを実行してください。

ロケール機能の有効化(オプション)

GitHub バイナリに標準で含まれるロケールサポートを利用したい場合:

cargo install bttf --features locale

ビルド手順

Rust のインストールが必要です。

リリースビルド

git clone https://github.com/BurntSushi/bttf
cd bttf
cargo build --release
./target/release/bttf --version

ロケール機能付きビルド

cargo build --release --features locale

musl ターゲットでの静的リンクビルド(Linux)

  1. musl ライブラリをインストールします。
  2. Rust ツールチェーンに musl サポートを追加し、再ビルドします:
rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl

テストの実行

# ユニットテストと統合テストを両方実行
cargo test

# スナップショットテスト(cargo insta 使用)
cargo insta test
cargo insta review

動機・背景

  • Jiff のコマンドライン露出: Jiff ライブラリ機能のコマンドラインインターフェースとしての目的です。
  • 利便性向上:
    date
    コマンドの複雑なフラグやマニュアル依存性を解消するためです。
  • 汎用性の拡張: データ中の日付時刻を検索し、JSON Lines フォーマットでラップする
    bttf tag
    のような新規機能を実装しました。
  • ライブラリとの連携: Jiff と ICU4X を統合し、Jiff の API を実用的なレベル(1.0 相当)に到達させることを目標としました。

重要なお知らせ

ライセンス

  • MIT ライセンスと UNLICENSE のデュアルライセンスです。

警告

  • 破壊的変更の可能性: 現時点で不審かつ恣意的な破壊的変更をリリースする可能性があります。

互換性に関する事項

  • date
    コマンドとの完全互換性は意図していません。
  • ポジックス (POSIX) への対応(TZ 環境変数を除く)は対象外です。
  • strftime スインタクをサポートしており、GNU date との大きな程度までの互換性があります。
  • 日付互換性の高いプログラムが必要な場合は、POSIX date を使用してください。

同じ日のほかのニュース

一覧に戻る →

2026/05/29 1:49

Claude Opus 4.8

## Japanese Translation: Claude Opus バージョン 4.8 が正式にリリースされ、前世代と比較してコストが同等あるいは優位でありながら、パフォーマンスと信頼性の大幅な向上を示しています。このアップグレードは、Super-Agent ベンチマークにおけるすべての課題を制覇した最初のモデルとなった点で重要なマイルストーンとなります。同時に、高速モードや Genie といった特定のオーケストレーターを通じて比較的低価格帯のプランでも、ハイエンドクラスの GPT-5.5 に匹敵する性能を提供します。重要なのは、以前の問題だったコード生成の不備やツール呼び出しのエラーが解決されており、モデルの誠実性の向上により、コードの不備を見逃す確率が約 4 分の一に抑制されたことです。新しいアーキテクチャは「動的ワークフロー」を導入し、フルコードベース移行など大規模なタスクのために数百もの並列サブエージェントを可能にします。また、「Effort Control」といった機能によりユーザーが応答の深さをカスタマイズでき、Messages API のシステムエントリーを通じて計算リソースを浪費せずにリアルタイムで指示を更新することも可能です。複雑な財務文書や法律文書の処理において、Genie や Hebbia などのオーケストレーターを利用する企業は、大幅に向上した効率性と引用の精度を享受できます。全体として、Opus 4.8 は優れた推論能力、ユーザーの自律性を支える親社会的なアライメント、そして以前の コストパフォーマンス記録を更新し得るエンドツーエンドの完了機能を備えています。

2026/05/29 3:41

持続的なワークフローには PostgreSQL をそのまま使用してください

## Japanese Translation: 記事は、複雑な外部オーケストレーションサーバーを置き換え、永続的なワークフロー管理の中央エンジンとして PostgreSQL を採用することでインフラストラクチャを単純化することを提唱しています。Temporal や AWS Step Functions、Airflow といった専用のオーケストレーターに依存し、隔離されたワーカープール間でタスクを調整する従来のシステムとは異なり、このアプローチではオーケストレーションロジックを直接データベースに埋め込むことで、すべてロジックをリレーショナルデータベースエコシステム内に維持します。アプリケーションサーバーは標準的な workflows テーブルポーリングによってタスクをデキューし、ワーカーは Postgres テーブルに直接チェックポイントを行います。データベースの整合性制約が外部ロック機構なしで重複作業を防ぎます。高い可用性は、ワーカーが相互置換可能であることから達成されます(任意のワーカーがストリーミングレプリケーションと複数 AZ デプロイメントを使用して Postgres から状態を回復できます)。スケーラビリティは基盤となるデータベースの容量とともに拡大し、数千ものワークフローを処理できるよう垂直にスケールするか(CockroachDB などのように)分散化することができます。可観測性はチェックポイントに対する組み込み SQL クエリによって向上し、セキュリティオーバーヘッドは減少します(ワークフローデータが信頼された Postgres エンビロメント外に出ることはありませんので、別のオーケストレーターを強化する必要がありません)。DBOS は実用的な Postgres 裏付けの永続実行ソリューションを提供しており、Quickstart ドキュメント、GitHub リポジトリ、Discord コミュニティにてリソースを利用できます。

2026/05/29 4:02

多種多様な LLM のにおい

## Japanese Translation: 2026 年 5 月 28 日、著者は昨年終わりごろに数学ブログを立ち上げ、大規模言語モデル(LLM)を使用して文章を推敲した経験について考察する。当初は単なる改修のみを意図していたが、やがてインターネット全体にわたって同様の文構造が無数に出現することに気づき、これを「AI 臭」と呼んでいる。このような言語的な人工物の例としては、過度なツッコミポイント、あるいは「ただし、傾きは偶然ではない。それは最適解の形状である」といった連続した短い文や、「X は Y の Z であり」(例:「不愉快さは、選択した勾配を進むことの可視的签名である」)といった硬直的なメタセンテンスがある。また、「人類は対称性を信頼するのは、それが知性の可視化のように感じられるから」といった例も含まれる。また、AI 関与を識別するための視覚的な指標もある:ウェブサイトでは通常、JetBrains Mono フォントを特定の UI パターン(例:正確な段階ごとの箇条書きリスト、同一のボタン、標準化されたカード、点滅するドットのバッジ)と組み合わせて使用することが多い。脚注も別の指標として機能し得る。ガイドは AI ツールに対する非難ではなく、読者がこれらの新たな様式基準を認識することを助け、デジタルコンテンツをより適切に評価できるようにすることを目的としている。著者は LLM を創造的なタスクに使用することに反対しているのではなく、人間の表現と機械生成の出力を区別する検出可能な痕跡を特定することに焦点を当てていることを明記する。 ## Text to translate: Summary: On May 28, 2026, the author reflects on their experience starting a math blog late last year and using Large Language Models (LLMs) to polish their writing. Initially intending only enhancements, they soon noticed that identical sentence structures began appearing ubiquitously across the internet—signals they term "AI smells." These linguistic artifacts include excessive punchlines, consecutive short sentences such as "Yet the tilt is not an accident. It is the shape of the optimum," and rigid meta-sentences like "X is the Y of Z" (e.g., "Cringe is the visible signature of moving along a gradient you chose.") as well as examples like "Humans trust symmetry because it feels like intelligence made visible." Visual markers also help identify AI involvement: websites often use the JetBrains Mono font paired with specific UI patterns such as exact step-by-step bullet lists, identical buttons, standardized cards, and blinking-dot badges. Footnotes may serve as another indicator. Rather than condemning AI tools, the guide aims to help readers recognize these emerging stylistic standards so they can better evaluate digital content. The author clarifies that they are not against using LLMs for creative tasks; instead, the focus is on identifying detectable traces that distinguish human expression from machine-generated output.