使い方ガイド

日本語

クイックスタート

# ファイルを送信:パスワード自動生成、リンクとパスワードを表示
$ ttl send secret.pdf
No password provided. Generate one? [Y/n]:
Generated password: aB3kL9mXq7Rt
·✧★◉ Thank goodness, secret.pdf is in orbit (1.2 MB)
IMPORTANT! Save your password — required to download and decrypt the file.
Password: aB3kL9mXq7Rt
https://ttl.space/aBcDeFgHiJ

# ダウンロード:パスワードを対話的に入力
$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)

CLIが暗号化、アップロード、ダウンロード、復号を処理します。サーバーがパスワードや平文データを見ることはありません。

インストール

Homebrew (macOS)

$ brew install tweenietomatoes/ttl/ttl

Scoop (Windows)

$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl
$ scoop install ttl

ビルド済みバイナリ

# お使いのプラットフォーム用をリリースページからダウンロード
$ curl -Lo ttl.tar.gz \
  https://github.com/tweenietomatoes/ttl/releases/download/v1.6.0/ttl_1.6.0_linux_amd64.tar.gz
$ tar xzf ttl.tar.gz && sudo mv ttl /usr/local/bin/

Go install

$ go install github.com/tweenietomatoes/ttl/cmd/ttl@latest

ソースから

$ git clone https://github.com/tweenietomatoes/ttl
$ cd ttl && go build -o ttl ./cmd/ttl/
$ sudo mv ttl /usr/local/bin/

確認

$ ttl version
ttl 1.6.0

ファイルの送信

基本的な送信

# パスワード自動生成、デフォルト7日間のTTL
$ ttl send report.xlsx

ターミナルでパスワードが指定されていない場合、CLIは次のように確認します:

No password provided. Generate one? [Y/n]:

Enterキーを押すか y と入力すると自動生成されます。

カスタムパスワード

$ ttl send -p mySecretPass -t 1h document.pdf

閲覧後に消滅

# 最初のダウンロードが始まった時点で使用済み。中断後に再開できるのはそのダウンロードだけです
$ ttl send -b photo.jpg

カスタムTTL

$ ttl send -t 5m temp-credentials.txt   # 5分で期限切れ
$ ttl send -t 30m meeting-link.txt      # 30分で期限切れ
$ ttl send -t 6h backup.tar.gz          # 6時間で期限切れ
$ ttl send -t 1d daily-report.pdf       # 1日で期限切れ
$ ttl send -t 3d project-archive.zip    # 3日で期限切れ
$ ttl send -t 5d design-assets.zip      # 5日で期限切れ
$ ttl send report.xlsx                  # 7日で期限切れ(デフォルト)

ファイルのダウンロード

対話的操作(ターミナル)

$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)

パスワードは安全に読み取られ、ターミナルに表示されません。元のファイル名が復元されます。出力ディレクトリに同じ名前のファイルが既にある場合は、上書きせずに name (1).ext として保存されます。

トークンのみ

# 完全なURLの代わりに10文字のトークンだけで使用できます
$ ttl get aBcDeFgHiJ

出力ディレクトリ

$ ttl get -o ~/Downloads aBcDeFgHiJ

デフォルトでは、ファイルは現在のディレクトリに保存されます。別のディレクトリを指定するには -o / --output を使用してください。

パスワードフラグを使用

$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ

ブラウザ

リンクを直接開くことで、ブラウザでもファイルのダウンロードと復号ができます。Webインターフェースは同じファイル形式とアルゴリズム(Argon2id、XChaCha20-Poly1305)を使用し、パスワードの入力を求めます。ソフトウェアのインストールは不要です。

パスワードの取り扱い

パスワードは暗号化鍵のシードです。デバイスの外に送信されることはなく、サーバーに送られることもありません。指定方法は6通りあります:

1. 自動生成(送信時のみ)

$ ttl send notes.txt
No password provided. Generate one? [Y/n]: y
Generated password: aB3kL9mXq7Rt

[0-9A-Za-z] から暗号学的にランダムな12文字のパスワードを生成します。send 時のみ利用可能です(対話的に、または --json モードでは自動的に)。

2. 対話的プロンプト

$ ttl send notes.txt
No password provided. Generate one? [Y/n]: n
Enter password: ********
Confirm password: ********

$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********

パスワードは表示されず、シェル履歴にも保存されません。send 時はまず自動生成するかどうかを選択します。get 時は直接入力を求められます。

3. フラグ: -p / --password

$ ttl send -p mySecretPass file.zip
$ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password は ps aux の出力に表示され、シェル履歴(~/.bash_history)に保存される場合があります。共有環境やスクリプトでの使用は避けてください。代わりに --password-stdin または --password-file を使用してください。

4. 標準入力: --password-stdin

# echoからパイプ
$ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz

# パスワードマネージャーからパイプ
$ pass show ttl/key | ttl send --password-stdin data.zip

# 環境変数からパイプ
$ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ

# ヒアドキュメント
$ ttl send --password-stdin report.pdf <<<"mySecretPass"

stdinの最初の行を読み取ります。スクリプト、CI/CDパイプライン、自動化に便利です。stdinがターミナルでなく、パスワードソースが指定されていない場合、CLIはエラーで終了します(--json使用時を除く、その場合パスワードは自動生成されます)。

5. ファイル: --password-file

$ ttl send --password-file /run/secrets/key report.xlsx
$ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ

ファイルの最初の行を読み取ります(末尾の改行は除去)。Dockerシークレット(/run/secrets/)、Vaultエージェントファイルなどのパターンと互換性があります。

6. 自動検出ファイル: ttl.password

明示的なパスワードが指定されない場合、CLIはバイナリの隣にあるttl.passwordファイル、次に~/.ttl/passwordを検索します。最初の行がパスワードとして使用されます。

明示的なパスワードソースは一度に1つしか使用できません。-p / --password、--password-stdin、--password-fileは組み合わせられません。自動検出されるttl.passwordファイルは、これらが何も指定されていない場合のみ確認されます。最小長: 8文字。

オプションリファレンス

送信フラグ

フラグ説明デフォルト
-p, --password P暗号化パスワード対話的入力
--password-stdin標準入力からパスワードを読み取り
--password-file Fファイルからパスワードを読み取り
-t, --ttl DUR有効期限7d
-b, --burn閲覧後に消滅(1回のみダウンロード可能)オフ
-u, --uploader-only自分のAPIキーでのみダウンロード可能(Orbit、別名 --private)オフ
--timeout DUR転送タイムアウトなし
--server URLサーバーURLhttps://ttl.space
-h3, --http3HTTP/3(QUIC)を試行、TCPにフォールバックオフ
--jsonJSON出力をstdoutに書き出し(スクリプトとAIエージェント向け)オフ

取得フラグ

フラグ説明デフォルト
-p, --password P復号パスワード対話的入力
--password-stdin標準入力からパスワードを読み取り
--password-file Fファイルからパスワードを読み取り
-o, --output DIR出力ディレクトリ現在のディレクトリ
--timeout DUR転送タイムアウトなし
-h3, --http3HTTP/3(QUIC)を試行、TCPにフォールバックオフ
--jsonJSON出力をstdoutに書き出し(スクリプトとAIエージェント向け)オフ

TTL値

無料: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d

Orbit追加: 14d 15d 28d 30d permanent

タイムアウト

デフォルト: なし。止まった転送は自動で再開し、先に進めない場合は中止します。制限を設けるには --timeout 30m や --timeout 2h を指定します。

使用例

スクリプト: バックアップとアップロード

#!/bin/bash
tar czf /tmp/backup.tar.gz /data
echo "$BACKUP_KEY" | ttl send --password-stdin -t 6h /tmp/backup.tar.gz
rm /tmp/backup.tar.gz

リンクをクリップボードにコピー(macOS)

$ ttl send -p mypass123 file.pdf | pbcopy

リンクをクリップボードにコピー(Linux)

$ ttl send -p mypass123 file.pdf | xclip -sel clip

消滅: ワンタイムシークレット

$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env
# リンクは1回だけ有効、5分で期限切れ

JSONモード(スクリプト & AIエージェント)

# 送信:JSONモードではパスワードが自動生成されます
$ ttl --json send report.pdf
{"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"uploader_only":false,"is_permanent":false,"password":"aB3kL9mXq7Rt"}

# 取得
$ ttl --json get -p aB3kL9mXq7Rt xK9mQ2vLpA
{"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"}

# エラーはok:falseを返します
{"ok":false,"error":"Link not found"}

--json モードでは、すべての出力がstdoutに構造化JSONとして出力されます。送信時にパスワードが指定されていない場合、自動生成されてレスポンスに含まれます。終了コードは成功時0、エラー時1です。

Orbitプラン

Orbitはより大きなファイル(10 GB)、より長い保持期間(30日または無期限)、自分だけがダウンロードできるファイル(あなたのAPIキーでのみダウンロード可能)、ファイル管理(一覧と削除)を利用可能にします。詳しい比較: Features。

APIキーは自動検出されます: TTL_API_KEY環境変数、バイナリの隣のttl.key、または~/.ttl/key。ttl activateでキーを保存するか、これらの場所に手動で書き込んでください。

# キーを有効化:入力は画面に表示されないため、シェル履歴に残りません
$ ttl activate
Enter Orbit API key: ********
Orbit plan activated. Key saved to /usr/local/bin/ttl.key
# 非対話: ttl activate --key-stdin  |  ttl activate --key-file F

# プランと使用状況を確認
$ ttl plan
Plan: orbit
Max file size: 10.0 GB
Max TTL: 30 days (or permanent)
Uploads per day: 1000000

Usage:
  Uploads today: 3
  Active storage: 1.2 GB / 500.0 GB

# 延長TTLで送信
$ ttl send -t 30d large-backup.tar.gz
# 永続ファイル(Orbitのみ): 有効期限なし、削除するか、サブスクリプションが終了するまで保持
$ ttl send -t permanent archive.tar.gz
# 非公開ファイルを送信:あなたのAPIキーでのみダウンロード可能(Orbitのみ)
$ ttl send -u payroll.xlsx

# 最近のアップロードを一覧
$ ttl list
  xK9mQ2vLpA    4.2 MB  2026-03-16 10:30 → 2026-04-15 10:30  [active]
  https://ttl.space/xK9mQ2vLpA
  rT7bNw3KpF  912.0 KB  2026-03-15 14:20 → 2026-03-17 14:20  [active (burn)]
  https://ttl.space/rT7bNw3KpF

# ファイルを早期削除
$ ttl delete xK9mQ2vLpA
Deleted: xK9mQ2vLpA

# 保存されたキーを削除
$ ttl deactivate
Key file removed: /usr/local/bin/ttl.key

HTTP API

アップロードとダウンロードにはCLIの暗号化パイプライン(Argon2id + XChaCha20-Poly1305 + チャンクAEAD)が必要です。スクリプトにはttl send / ttl getまたは--jsonモードを使用してください。以下のエンドポイントはOrbitファイル管理用です。

ファイル一覧(Orbit)

$ curl https://ttl.space/v1/files -H "X-API-Key: ttl_orbit_..."
{"files":[{"token":"xK9mQ2vLpA","link":"https://ttl.space/xK9mQ2vLpA","size_bytes":1048576,"created_at":1711800600,"expires_at":1714392600,"burn":false,"expired":false,"uploader_only":false,"is_permanent":false,"is_note":false,"perm_grace_until":0}],"has_more":false}

# 次のページ:has_more が true の場合のみ。前のレスポンスの next_cursor を渡す
$ curl "https://ttl.space/v1/files?cursor=1711800600123456" -H "X-API-Key: ttl_orbit_..."

このキーでアップロードされたファイルを新しい順に、1ページあたり20件返します。has_more が true の場合、レスポンスには next_cursor も含まれます。これを ?cursor= として渡すと次のページを取得できます。Orbitプランが必要です。

ファイル削除(Orbit)

$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."

成功時に204 No Contentを返します。Orbitプランが必要です。ファイルはこのキーに属している必要があります。

エラーレスポンス

ステータス意味
401無効または期限切れのAPIキー
403機能にはOrbitプランが必要です
404ファイルが見つからないか、このキーに属していません
429リクエスト制限を超過
500サーバー内部エラー、後で再試行してください
502ストレージが一時的に利用できません、後で再試行してください

制限事項

制限無料Orbit
最大ファイルサイズ2 GB10 GB
最大TTL7日30日または無期限
1日あたりのアップロード10無制限
1日あたりのアップロード容量(IPあたり)10 GB無制限
同時アップロードIPあたり1IPあたり1、かつAPIキーあたり1
ストレージ容量✗500 GB
ファイル一覧✗✓
早期削除✓✓
自分だけがダウンロードできるファイル✗✓
最小パスワード長8文字
IPあたりのリクエスト10秒あたり30
IPあたりの接続同時10

暗号化

ファイルはアップロード前にお使いのデバイス上で暗号化されます。サーバーは暗号文のみを保存し、ファイルを復号することはできません。

コンポーネントアルゴリズム / 値
鍵導出Argon2id (time=3, memory=64 MiB, parallelism=1)
暗号方式XChaCha20-Poly1305 AEAD

暗号文に対するいかなる変更も、復号の失敗を引き起こします。サーバーは暗号文を公開する前に、暗号化キーから導出された一方向トークンを使用して、ダウンロード者が正しいパスワードを知っていることを検証します。