コンテンツにスキップ

ドライブの管理

ドライブ は、研究室のファイルを置く場所です。管理者は、ドライブに どれだけ 置かれているかを見て、 場所ごとに容量の上限を決められます。中身(ファイルの名前や内容)は、この画面には出ません。 マイドライブと、 自分がメンバーでない非公開チャンネルのドライブの中は、管理者でも開けません。

管理 →「ドライブ」

デスクトップ版・ブラウザ版の設定 →「管理」→「ドライブ」(管理者だけ)。

欄 内容
ドライブ全体 合計の使用量と、その内訳(現在のバージョン・古いバージョン・ゴミ箱)、ファイルとフォルダの件数。全体の上限があればその割合の棒
会話の添付 メッセージ・キャンバス・ページに付けたファイルのうち、ドライブに入っていないものの合計(参考。容量の上限には数えません)
場所ごと 研究室ドライブ・チャンネルのドライブ・各人のマイドライブの使用量(内訳つき、チャンネルは「うち投稿のファイル」も)、件数、上限、最後に変わった時刻。アーカイブしたチャンネル・無効にした人には印が付きます
人ごと その人が置いたファイルのバージョンの合計(研究室ドライブやチャンネルのドライブに置いた分も含みます)

使用量には、現在のバージョンのほかに 古いバージョン(上書きで残った前のもの)と ゴミ箱 の分も入ります。完全に削除されるまで、 ディスクを使っているためです。古いバージョンは新しいものから 10 個まで、置き換えられてから 30 日、ゴミ箱は 30 日で自動で消えます。

容量の上限

場所ごとの「上限」の欄に GB で入れて「保存」します(小数も可。空欄にすると上限なし)。変更は監査ログに drive.quota_changed として残り、その場所を開いている人の画面にもすぐ反映されます。

  • 上限を超えると、追加 だけが止まります:アップロード、コピー、古いバージョンを戻す、別の場所からの移動。 名前の変更・同じ場所の中の移動・ゴミ箱へ・完全に削除はいつでもできます(減らす操作は止めません)。
  • 今の使用量より小さい上限にしても、中身は消えません(減らすまで追加できなくなるだけです)。
  • DM などドライブに入らないチャットの添付は上限に数えません(1 ファイル 100 MB の上限だけです)。チャンネルに投稿して 「投稿のファイル」に入ったファイルは、そのチャンネルのドライブに数えます。ただし上限を超えていても 投稿は止めません (止まるのはドライブへのアップロードなどだけです。上限を超えた場所には印が付きます)。

全体の上限とマイドライブの既定の上限

サーバの infra/.env で決めます(変えたら app を再起動)。

変数 意味 既定
DRIVE_TOTAL_QUOTA_BYTES ドライブ全体(すべての場所の現在のバージョン・古いバージョン・ゴミ箱の合計)の上限(バイト) なし
DRIVE_USER_DEFAULT_QUOTA_BYTES 自分の上限を決めていないマイドライブの上限(バイト)。研究室ドライブに置いてほしいときに なし
DRIVE_VERSIONS_MAX / DRIVE_VERSIONS_DAYS 古いバージョンを残す数と日数 10 / 30
DRIVE_COPY_MAX_ITEMS / DRIVE_COPY_MAX_BYTES 1 回のコピーの上限(件数とバイト) 500 / 1 GB
DRIVE_ZIP_MAX_ENTRIES / DRIVE_ZIP_MAX_BYTES 1 つの ZIP の上限(件数とバイト) 10,000 / 20 GB

ディスクの空きはアプリからは見えません

アプリが数えるのはドライブに置かれた量だけで、サーバのディスクの空きは分かりません。ディスクがいっぱいになる前に 止められるよう、全体の上限はディスクの空きより十分小さく 決めてください(例:空き 217 GB のサーバで 150 GB。 バックアップの一時の領域・大きなファイルのアップロードの完了の間の 2 倍・PostgreSQL の伸びを残すため)。 空きはサーバで df -h を確かめます(バックアップと復元)。

チャンネルに投稿したファイル

公開・非公開チャンネルのメッセージに付けたファイルは、そのチャンネルのドライブの「投稿のファイル › 投稿した月」にも入ります (使い方。DM は除く)。ファイルは 1 つだけで、メッセージとドライブで兼ねるので、ディスクも容量も 1 回分です。

  • ワークスペース全体:管理 →「ドライブ」の「チャンネルに投稿したファイルをチャンネルのドライブに保存する」(既定はオン)。
  • チャンネルごと:チャンネルのオーナーが、チャンネルの ⋯ →「投稿したファイルをチャンネルのドライブに保存」で「ワークスペースに従う / 保存する / 保存しない」を選べます。
  • どちらも、変えて効くのは それからの投稿だけ です。入ったファイルが出ていくことも、前のファイルが入ることもありません。

前からある添付を入れる(任意)

この機能より前(v0.1.79 より前)にチャンネルに投稿した添付は、自動ではドライブに入りません。入れたいチャンネルがあれば、 サーバのコマンドで入れられます(写さず、今の添付をドライブの項目にするだけなので、ディスクは増えません)。まず --dry-run で チャンネルごとの件数・大きさ・容量の上限との比べを見てから流してください。

docker compose -f docker-compose.yml -f docker-compose.prod.yml exec app python -m app.cli channel-files-backfill --all --dry-run
docker compose -f docker-compose.yml -f docker-compose.prod.yml exec app python -m app.cli channel-files-backfill --channel seminar --since 2025-04-01
  • --channel <名前>(何度でも)か --all(すべての公開・非公開チャンネル)、--since <日付> でその日からの投稿だけ、--limit <件数> で 1 回の上限。
  • 何度流しても、入れたものは飛ばします。止めても続きから流せます。
  • 入れたファイルは、投稿した月のフォルダに入ります。そのあと、中身の検索(下)が少しずつ読み進めます。

メンバーは、ドライブのファイルやフォルダを、ログインしない学外の人にリンクで渡せます(使い方)。 管理 →「ドライブ」の「外部共有リンク」で、次のことができます。

設定 内容 既定
外部共有リンクを使えるようにする 切ると、今あるリンクもすべてすぐに止まります(消えないので、戻せばまた使えます)。新しいリンクも作れません オン
リンクの期限の最長 7・30・90・180・365 日、または「最長なし」(期限のないリンクも作れるようになります)。新しいリンクの既定は 7 日 90 日
パスワードを必須にする 新しいリンクにはパスワードが要るようになります(今あるリンクは変わりません) オフ

設定の変更は監査ログに workspace.settings_updated として残ります。

すべての有効なリンク

取り消していないリンクが、どの場所のものでも並びます:項目の名前・場所(チャンネル名、マイドライブなら持ち主の名前)・誰向けか・ 期限・回数・最後に使われた時刻・作った人・状態。中身は出しません(項目の名前だけ。取り消すのに要るためです)。 「記録」で使われ方(日時・IP アドレス・ブラウザ)が、「取り消す」でそのリンクの取り消しができます(監査ログ drive.link_revoked、 by_admin)。リンクの作成・変更・取り消しはすべて監査ログに残ります(drive.link_created / drive.link_updated / drive.link_revoked。 URL とパスワードは残しません)。

  • 場所ごとのスイッチ:チャンネルのオーナー(研究室ドライブは管理者、マイドライブは本人)は、ドライブの場所の ⋯ → 「この場所で外部共有リンクを許す」でその場所のリンクを止められます(drive.location_links_changed)。
  • リンクは、作った人がその項目を読めなくなる(チャンネルを抜けた・ゲストにした・無効にした)と自動で止まります。アカウントを 削除(匿名化)すると、その人のリンクはすべて取り消されます。アーカイブしたチャンネルのリンクも、アーカイブの間は止まります。
  • 使われ方の記録は 180 日で自動で消えます。

サーバの担当者へ:アクセスログ

リンクの URL(/s/…)と、ページが読む API(/api/v1/shares/…)のパスには、リンクの鍵(トークン)が入っています。 Taylis のアプリのログでは伏せ、同梱の Caddy はアクセスログを書きません。ホストの nginx の後ろで動かしているときは、nginx の アクセスログに URL がそのまま残る ので、リバースプロキシの設定 にある伏せた形式の ログに切り替えてください。

変数(infra/.env) 意味 既定
DRIVE_SHARE_DEFAULT_DAYS 新しいリンクの既定の期限(日、最長を超えない) 7
DRIVE_SHARE_UNLOCK_HOURS パスワードを入れたブラウザが開き続けられる時間 12
DRIVE_SHARE_EVENTS_DAYS 使われ方の記録を残す日数 180
DRIVE_SHARE_RATE_LIMIT_PER_IP / DRIVE_SHARE_BAD_RATE_LIMIT_PER_IP 公開のページの 1 分あたりの回数(全体 / 知らない・止まったリンク、IP ごと) 120 / 20
DRIVE_SHARE_DOWNLOAD_RATE_LIMIT_PER_LINK 1 つのリンクの 1 分あたりのダウンロード 60
DRIVE_SHARE_PASSWORD_ATTEMPTS_PER_LINK / DRIVE_SHARE_PASSWORD_RATE_LIMIT_PER_IP パスワードの試行(リンクごと 10 分あたり / IP ごと 1 分あたり) 10 / 20

Nextcloud からの移行

研究室の Nextcloud のファイルを、フォルダの形と更新日時のままドライブへ移せます。サーバの担当者がコマンドで行います。 Nextcloud は 読むだけ で、何も書き換えません。何度でも実行でき、2 回目からは 変わったものだけ を移すので、Nextcloud を 使い続けながら、試し → 本番 → 切り替えの日の差分、と分けて進められます。

用意するもの

  • Nextcloud の URL と、移すファイルを持っているアカウントの アプリパスワード(Nextcloud の「設定 → セキュリティ」で作る。 ログインのパスワードではありません。終わったら消せます)。または、Nextcloud のサーバの data/<ユーザー>/files の写し。
  • 移す先のチャンネル(「教員だけ」などは非公開チャンネル)とメンバー、マイドライブに移す人のアカウント。先に Taylis で作ります。 無いチャンネルや人を指定すると、何も書かずに止まります。
  • サーバの外のバックアップ先(下)。

対応表

Nextcloud のフォルダを、どの場所(研究室ドライブ・チャンネルのドライブ・マイドライブ)のどのフォルダに置くかを、テキストの ファイル(TOML)に書きます。いちばん長く一致した行が使われ、[[skip]] のフォルダは移しません。

[[map]]
source = "/研究室共有"
target = "workspace:/"                  # 研究室ドライブのいちばん上

[[map]]
source = "/研究室共有/教員"
target = "channel:faculty:/"            # 非公開チャンネル faculty のドライブ

[[map]]
source = "/kano/個人"
target = "user:kano:/"                  # kano さんのマイドライブ

[[skip]]
source = "/研究室共有/古いバックアップ"

Nextcloud の共有(人・グループごと)は Taylis の「場所」にそのまま写せないので、人が決めます。--list-shares を付けると、 今の共有の一覧(共有したもの・共有されたもの、相手、権限、期限、パスワードの有無)が出るので、それを見ながら書きます。 公開リンクは引き継げません。要るものだけ、移した後に Taylis で作り直して新しい URL を送ってください。

進め方

  1. 試し読み(--dry-run):何も書かずに、件数・大きさ・場所ごとの使用量と上限・名前が変わるもの(大文字小文字だけ違う名前などは 「名前 (1)」)・対応表に無いフォルダ(大きさつき) を表にします。この表を見て対応表を決めます。対応表に無いものは移しませんが、 黙って捨てることもありません(表に出ます)。
  2. リハーサル:使い捨ての環境に流して、中身と、かかる時間を確かめます。
  3. 本番:夜に流します。1 ファイルずつ確定するので、止まっても同じコマンドで続きから。大きいときは --limit-bytes 200G で毎晩に分けます。 文書のプレビューは後で少しずつ作ります(generate-previews --drive。会話の添付のプレビューを先に通します)。 ファイルの中身の検索は、サーバが空いている時に自動で読み進めます(急ぐときは下の「中身の検索の読み込み」)。
  4. 切り替えの日:Nextcloud を読むだけにして、差分を流し、もう一度の試し読みで「すべて変わらない・新しいもの 0・失敗 0」になることで、 件数と大きさが合っていることを確かめます。
  5. Nextcloud を止めるのは、サーバの外のバックアップを 1 回取り、それを別の機械で戻せたことを確かめた後 です。止めた後も、Nextcloud の データはしばらく読むだけで残してください(Nextcloud のバージョン履歴とゴミ箱は移しません)。

移るもの・移らないもの:

移るもの 移らないもの
フォルダの形(空のフォルダも)、ファイル、更新日時、上げた人(--user で対応づけたとき) Nextcloud のバージョン履歴とゴミ箱、共有の設定と公開リンク、コメント・タグ・お気に入り

Taylis で消した・ゴミ箱に入れたもの、Taylis で新しいバージョンを足したもの(Nextcloud でも変わったとき)は、もう一度の実行でも上書きしません(表に出ます)。 Nextcloud で消したファイルは Taylis に残します(表に出ます)。コマンドの詳しい手順はリポジトリの infra/README.md「Nextcloud からの移行」にあります。

中身の検索の読み込み

ドライブの検索は、ファイル名に加えて PDF・Word / Excel / PowerPoint・テキスト・Markdown・CSV の 中の文字 も探します (使い方)。サーバは、アップロードされたファイル(今のバージョン)の文字を裏で 1 つずつ読み、 検索の索引に入れます。会話の添付のプレビューが待っている間は読まず、読む処理は優先度を下げて動かします。

  • 前からあるファイル(この機能より前のもの、Nextcloud から移したもの)も、サーバが空いている時に自動で読み進めます。 すぐに済ませたいとき・進み具合を見たいときは、夜にコマンドで読ませます(何度流しても、読んでいないものだけを読みます)。

    docker compose -f docker-compose.yml -f docker-compose.prod.yml exec app python -m app.cli drive-index --limit 500
    

    結果に「読んだ数・索引に入れた数・飛ばした数(スキャン・パスワード付き・大きすぎる・文字でない)・失敗の数」と、 「more files are left」(まだ残りがある)が出ます。残りがあれば同じコマンドをもう一度流します。 - Word / Excel / PowerPoint(docx・xlsx・pptx とマクロ付き・テンプレート、OpenDocument も)は、ファイルの中から文字の部分だけを 直に読みます。プレビューを待たず、大きさの上限もありません(1 GB を超える動画入りの PowerPoint でも、読むのはスライドの文字の 数百 KB だけです)。PowerPoint はスライドごと、Excel はシートごとに、検索の結果に「12 枚目」「シート 2」と出ます。 - 古い形式の Word / Excel / PowerPoint(doc・xls・ppt)と RTF はプレビューの PDF から読むので、プレビューができてから読みます。 Nextcloud から移したファイルは、先に generate-previews --drive でプレビューを作ってください(drive-index の結果に 「プレビューを待っているファイルの数」が出ます)。プレビューを作れない大きさ(50 MB 超)のものは待たずに飛ばします。 - 読めないもの:スキャンした PDF(文字の読み取り(OCR)はまだしません)、パスワード付きの PDF・Office のファイル、100 MB を超える PDF・テキスト、50 MB を超える古い形式の Office のファイル。1 つのファイルで索引に入れるのは最初の 1 MB の文字までです。 - 失敗したものをもう一度:drive-index --retry-failed(プレビューの失敗や大きさで飛ばしたファイルも、プレビューを作り直した後・ 上限を上げた後に読み直します)。 - 上限は環境変数で変えられます:DRIVE_TEXT_MAX_BYTES(1 ファイルの文字、既定 1 MiB)、DRIVE_TEXT_MAX_INPUT_BYTES(読む PDF・ テキストの大きさ、既定 100 MB)、DRIVE_TEXT_MAX_XML_BYTES(Office のファイルの中で読む XML、既定 64 MB)、 DRIVE_TEXT_TIMEOUT_SECONDS(1 ファイル、既定 120 秒)、DRIVE_TEXT_ENABLED=false で読むのを止めます (止めても、もう読んだ分は探せます)。

更新の後に(2026-10-25 の版から)

この版から Word / Excel / PowerPoint をプレビュー無しで読みます。更新すると、それまで「プレビューを待っている」まま読まれなかった ファイル(50 MB を超える PowerPoint など)と、プレビューの失敗で飛ばしたファイルを、サーバが空いている時に自動で読みます。 すぐに済ませるなら、更新の後にもう一度流します(大きな PowerPoint でも 1 件 1 秒もかかりません)。

docker compose -f docker-compose.yml -f docker-compose.prod.yml exec app python -m app.cli drive-index --limit 500

結果の「old Office file(s) … wait for their PDF preview」は古い形式(doc・xls・ppt・rtf)だけの数になり、大きすぎるものは数えません。

写真の撮影日と縮小版(アルバム)

アルバム は、写真の撮影日時・位置情報の有無と、全画面で使う縮小版(長い辺 2048 px)を使います。新しく上げた 写真はサーバが自動で読みますが、アルバムの機能より前からドライブにある写真と動画(Nextcloud から移したものも)は、コマンドで 読ませます。何度流しても、読んでいないものだけを読みます。

docker compose -f docker-compose.yml -f docker-compose.prod.yml exec app python -m app.cli drive-photos --dry-run
docker compose -f docker-compose.yml -f docker-compose.prod.yml exec app python -m app.cli drive-photos --limit 500
  • まず --dry-run で数を見て、夜に --limit 500 ずつ流します(1 枚 0.2〜0.5 秒ほど)。「more are left」と出たらもう一度流します。
  • HEIC / HEIF の写真も読み、サムネイルもここで作ります(v0.1.80 から。サーバのイメージの ffmpeg 7.1 を使います)。
  • --rebuild は、復元などで縮小版を失った画像も作り直します。縮小版とサムネイルは容量に数えません。

更新の後に流すコマンド

上げたバージョン 流すもの
v0.1.74(2026-10-25)から(Office を直に読む) drive-index --limit 500(上)
v0.1.79(2026-10-28)から(投稿のファイル) 任意:前からの添付を入れたいチャンネルに channel-files-backfill(上)
v0.1.80(2026-10-29)から(アルバム・HEIC) drive-photos --dry-run → drive-photos --limit 500(上)

バックアップ

ドライブのファイルは、会話の添付と同じオブジェクトストレージに入り、毎日のバックアップに入ります。 前の日から変わっていないファイルは、前のバックアップへのハードリンクとして、チェックサムも引き継ぐので、100 GB あっても変わらない夜は 数秒で済みます。

ドライブを使うなら、サーバの外へのバックアップは必須です

サーバの中のバックアップは「昨日のファイルに戻す」ためのもので、ディスクの故障やサーバの喪失には効きません。研究室のファイルの正本を ドライブに置くなら、サーバの外へのバックアップ(restic で大学の NAS・別のサーバ・外付けのディスクへ、 暗号化して毎晩)を設定し、別の機械で戻せることを確かめて ください。

使用量の数え直し

場所ごとの使用量と件数は、ファイルを足したり消したりするたびに数えています。万一ずれたときは、サーバのコマンドで 確かめて直せます(サーバの infra のフォルダで)。

docker compose -f docker-compose.yml -f docker-compose.prod.yml exec app python -m app.cli drive-usage --verify
docker compose -f docker-compose.yml -f docker-compose.prod.yml exec app python -m app.cli drive-usage --rebuild

--verify はずれている場所を表示し(ずれがあれば終了コード 1)、--rebuild はずれている場所の数をバージョンと項目から数え直します。