共有フォルダに、46万件たまっていた
長く使われている部署の共有フォルダを調べたら、7年以上更新されていないファイルが約46万件あった。
誰も消さないまま積み上がった結果だ。容量を圧迫しているし、必要なファイルを探すときの邪魔にもなる。かといって、中身を見ずに一括で消すわけにはいかない。契約や台帳のように、法律上の理由で残しておかなければならないものが混ざっているかもしれないからだ。
つまり、46万件を1件ずつ「これは消していいか」判断する必要がある。人力では現実的でない。
最初に考えたのは「AIに46万件を渡したらどうなるか」
こういうとき、まずAIに全部渡して仕分けてもらう、というのが素直な発想だと思う。実際、最初はそれを考えた。
ただ、社内で使っているAIは使った分だけ費用がかかる従量課金だ。この環境では「どれだけの量を読ませたか」がそのまま請求になる。
46万件のファイル一覧というのは、それだけで数千万文字になる。文庫本にすれば数百冊分だ。それを丸ごと読ませて、しかも1件ずつ判断させる——試すまでもなく現実的ではなかった。
そこで方針を変えた。AIに全部を読ませない。
機械にできることは、機械にやらせる
考え方はシンプルで、判断が要らないところにAIを使わないということだ。
① 期間での足切りは、AIを使わない
「7年以上更新されていない」という条件は、日付を比べるだけで判定できる。ここに判断の余地はない。だからWindowsに標準で入っている仕組み(PowerShell)で共有フォルダを走査して、条件に合うファイルの一覧を作った。この時点でAIは1文字も読んでいない。
② ファイルの中身は読ませない
判断に使うのは、一覧表に並んだファイルのパス・名前・拡張子・サイズ・日付だけ。ファイルを開いて中身を読むことはしない。
正直これは妥協でもある。中身を読めばもっと正確に判断できる。ただ、ファイル名とフォルダの場所を見れば、たいていのことは分かる。「〇〇_旧」「バックアップ」「コピー」といった名前や、一時ファイルの拡張子は、それだけで十分に判断材料になった。
③ まず「集計」から始める
いきなり1件ずつ見ていくのではなく、最初に全体の傾向を出させた。拡張子ごとの件数、フォルダごとの件数、明らかに不要そうなパターンの件数。
これをやると「この場所は丸ごと消せる」という塊が見えてくる。46万件を1件ずつ判断するのと、まず塊を把握してから残りを個別に見るのとでは、必要な労力がまったく違う。
前回の記事では、AIに書類の中身を読ませて判断させる仕組みを作った(スキャンした書類の仕分け)。同じAIでも、使い方は正反対だ。件数が多いときは、いかにAIに触らせないかを考えることになる。
AIに任せたのは「グレーの判断」
では何をAIにやってもらったか。3つに分類する作業だ。
| 分類 | 中身 |
|---|---|
| A:消してよさそう | 一時ファイル、コピーの残骸、「旧」「バックアップ」などが付いたもの |
| C:絶対に消さない | 契約・台帳・請求・決算・人事など、保存義務がありそうなもの |
| B:要確認 | AとC、どちらとも言い切れないもの |
そして分類のルールとして、いちばん強く決めたのがこれだ。
迷ったら全部B(要確認)に入れる。
AIに「たぶん消していいと思います」と判断させない、ということだ。確信が持てないものはすべて人間が見る側に回す。
これを徹底すると、Bの山は当然大きくなる。効率だけを見れば損に見える。それでも間違って消したファイルは戻ってこない。判断を間違えたときの被害が大きい作業では、迷いを「安全側」に倒すルールを最初に決めておくのが結局いちばん早いと思う。
それでも、すぐには消さない
分類が終わっても、いきなり削除はしない。手順はこうしている。
① 一覧を作る(機械)
② 3つに分類する(AI)
③ 目で見て承認する(人)
④ 別の場所へ移して隔離する(自動)
⑤ 数か月置いて、問題が出なければ削除する(人)
ポイントは**④の「隔離」**だ。消すのではなく、別の場所に移すだけ。名前に「削除予定」と時期を付けておく。
こうしておけば、「あのファイルどこ?」と言われたときに戻せる。数か月経って誰も困らなければ、そのとき初めて本当に消す。
取り返しがつく状態を挟む——これは前回書いた「完了マーカー」と同じ発想だ。自動化を組むときは、失敗したときにどう戻るかを先に決めておくと安心して進められる。
夜通し流しっぱなしには、できなかった
大量のファイルを動かす作業というと、「夜のうちに流しておけば朝には終わっている」と思うかもしれない。自分も最初はそう考えていた。
ところが、その手が使えなかった。
作業している環境は仮想のパソコンで、これも動いている時間に応じて費用がかかる。加えて、退社時にパソコンを停止するのは社内のルールだし、2時間操作しないと自動でシャットダウンされる設定にもなっている。
つまり、自分がパソコンを使っている時間しか処理が進まない。放っておけば勝手に止まる。
ここで効いたのが、1回あたり5,000件で区切って動かす仕組みだった。すでに移動が終わったものは次回自動で飛ばされるので、何度実行しても二重に動くことはない。途中で止まっても、もう一度実行すれば続きから進む。
止まることを前提に作る。 これができたおかげで、普段の仕事をしている裏でバッチを流しておく、という進め方ができた。自分は別の作業をしていて、その裏でファイルが少しずつ運ばれていく。
移動のログも毎回残していて、どのファイルがどこへ行ったかが全部記録されている。その記録を逆にたどれば元の場所に戻せるようにしてある。
つまずいた細かい罠
ひとつだけ、笑ってしまった罠を紹介したい。
一部のフォルダを処理の対象から外そうとしたのに、指定がまったく効かなかった。何度書き直しても素通りしてしまう。
原因は、フォルダ名に「★」や「●」といった記号が入っていたこと。見た目は同じ記号でも、実際には微妙に違う文字だったり、こちらが入力した記号と一致していなかったりする。
解決策は単純で、フォルダのパスをエクスプローラーから直接コピーして貼り付ける。自分で打ち込まない。
以前にも「Excelの列名に見えない改行文字が入っていた」「データの値にクォートが付いていた」で同じ目に遭った。見た目が同じでも中身が違うという問題は本当に多い。手で打つより、実物からコピーするほうが確実だ。
20日かけて、全部運び終えた
結果として、約20日で46万件すべての移動が完了した。
丸一日流し続けていたわけではない。普段の作業の裏で動かしていただけなので、実際に処理が進んでいたのは仕事をしている時間の一部だけだ。それでも、少しずつでも積み上がれば終わる。
ここでも効いたのは「一度で終わらせようとしない」ことだった。もし「今日中に全部片付ける」という進め方をしていたら、途中で止まるたびにやり直しになって、たぶん完走できなかったと思う。
なお、自分のアクセス権では触れないフォルダもいくつかあった。これらは権限を持っている担当者にそのまま引き継いで、こちらからは手を出さないことにしている。
権限をもらって自分で進めることもできたかもしれないが、他部署の資料を自分の判断で動かすのは筋が違うと考えた。自動化を進めていると、つい全部を自分で巻き取りたくなる。ただ、線を引くところは引いたほうがいい。仕組みを作る話と、誰が責任を持つかの話は別物だと思っている。
まとめ
大量のデータを扱うときに学んだことを4つ。
- AIに全部を読ませない。 機械的なルールで絞れるところは機械に任せ、AIは判断が要る部分だけに使う
- 迷いは安全側に倒す。 「たぶん大丈夫」を許さないルールを最初に決めておく
- 取り返しがつく状態を挟む。 いきなり消さない、いきなり全部やらない
- 止まることを前提に作る。 連続で動かせない環境は珍しくない。中断できる作りにしておくと、普段の仕事の裏で進められる
1つ目は従量課金の環境だとそのまま費用に効いてくるが、実はそれ以上に、AIに考えさせる範囲を絞ったほうが判断の質も上がると感じている。46万件を丸ごと見せられて的確に判断できる相手は、たぶん人間にもAIにもいない。
そして今回いちばん実感したのは4つ目だ。「夜中に流しておけば終わる」という前提で書かれた記事は多いが、現実の職場にはそれを許さない事情がある。時間で課金される環境、退社時にPCを止めるルール、放置すると落ちる設定。そういう制約の中では、一気に終わらせる仕組みより、いつでも中断して再開できる仕組みのほうが強い。