AIに書類チェックを任せてみた

AIに書類チェックを任せてみた|信用できるかは「分からない」と言えるかで決まった

「Claudeで作れないか」と言われた 上司から相談があった。書類のチェックを自動化できないか、という話だ。 前提として、すでに似た仕組みは動いていた。書類を共有フォルダにアップロードするとき、その場でCopilotに読ませて、決まった観点でチェックする——という運用だ。1件ずつなら、これで足りている。 問題はすでにアップロードされた分だった。Copilotからは共有フォルダの中のファイルに手が届かない。つまり「入口」は見張れても、すでに積まれたものをまとめて確認する手段がなかった。 そこを埋められないか、というのが相談の中身だった。 作ったもの 構成は素っ気ないくらい単純だ。 8:50 / 17:50 PowerShell ↓ 新しく増えたフォルダを検出して、一覧をファイルに書き出す 9:00 / 18:00 Claude(スケジュール実行) ↓ その一覧を読んで、PDFをチェック ↓ 結果をまとめて共有フォルダに出力 ↓ 処理済みとして記録 1日2回、誰も操作しない。 朝出社したら、前日分のチェックが終わっている。 なぜこの形になったのか、2つだけ書いておく。 ① 一度に全部やらせたら、途中で止まった 最初は素直に「フォルダの中を全部見て」と頼んだ。途中でタイムアウトして止まった。 考えてみれば当然で、対象は月に1000件近くまで増えていく。しかも毎日増え続けるので、放っておけば量は膨らむ一方だ。一度で終わらせようとする限り、いつか必ず破綻する。 そこで方針を変えた。すでに処理したフォルダを記録しておいて、前回から増えた分だけを渡す。 その「増えた分を見つける係」をPowerShellに任せている。 これで止まらなくなったし、読ませる量が減るので費用も下がる。46万件のファイルを整理したときにも同じ結論に辿り着いていた。 止まることを前提に作る。一度で終わらせようとしない。 別の業務で、また同じ教訓を踏んだことになる。大量のものを扱うときは、たぶんこれが唯一の正解なのだと思う。 なお読ませるのも原則1ページ目だけにしている。必要な情報はそこにしかないからだ。 ② 直接つながらないので、ファイルでバトンを渡す PowerShellとClaudeのスケジュール実行は、互いを呼び出せない。そこで10分ずらして動かし、あいだをファイル1つで繋いだ。8:50に一覧が書き出され、9:00にそれを読む。 書類の仕分けを作ったときも、完了の合図をファイルで渡していた。直接つながらないものを、ファイル1つで安全につなぐ——同じ手を2回使ったことになる。地味だが、これが一番壊れにくい。 いきなり、人の見落としを見つけた テスト段階で、予想していなかったことが起きた。 すでに人の目を通っていた書類から、チェック漏れが見つかった。 レ点を入れるべき欄が空欄のまま、というものだ。 考えてみると当然かもしれない。人は書類を読むとき、「ここにはレ点があるはずだ」と無意識に補ってしまう。何十枚も見ていればなおさらだ。機械はそれをしない。 空欄は空欄として見る。 ここで感じたのは、人の代わりをさせているのではないということだった。人が得意なところと、機械が得意なところは違う。今回埋まったのは、人がどうしても苦手な種類の見落としだった。 でも、いちばん安心したのは別のところ 成果としては上の話が分かりやすい。ただ、実際に使っていて安心したのは違う点だった。 判断が付かないものについて、勝手に決めずに聞いてくる。 これは意図してそう設計した。チェックのルールに、こう書いてある。 判断が付かない項目、および書類にその項目自体が存在しない場合は、推論せずに確認すること。 なぜこうしたか。**検査という仕事で怖いのは、間違えることより「間違えたことに気づけないこと」**だからだ。 もしAIが「たぶん問題ないでしょう」と埋めてしまったら、こちらはそれを信じる。逆に「たぶん不備です」と言われて、それが的外れなら、確認の手間が増えて信用を失う。どちらも困る。 分からないものを分からないと言ってくれるなら、残りは信じられる。 信頼性というのは正確さの話だと思っていたけれど、実際に使ってみると**「言わないことを決められるか」**のほうが効いた。 これは以前46万件のファイルを仕分けたときに決めたルールと同じ構造だった。 迷ったら全部「要確認」に入れる。AIに「たぶん消していいと思います」と判断させない。 別の業務で、同じ原則がまた効いた。たぶんこれは、AIに判断を任せるときの一般的な作法なのだと思う。 最初は、盛大に誤検出した もっとも、最初からうまくいったわけではない。 初期に多かったのが「存在しない項目を不備として報告してくる」というものだった。書類にはいくつか種類があって、種類によってある項目とない項目が違う。それを知らないまま「この項目が空欄です」と指摘してくる。 これはAIが賢くないのではなく、こちらが伝えていなかっただけだ。何ができて何ができないかは最初に一通り調べてあったけれど、業務のルールは調べても出てこない。自分で伝えるしかない部分だった。 だからルールを書き足した。 書類に存在する項目のみをチェック対象とすること。 これで解消した。AIへの頼み方をまとめた記事に「同じことを二度説明したら、それは文書にすべきサイン」と書いたけれど、まさにその通りだった。誤検出が出たら、まず自分の指示を疑う。 「作って終わり」ではなく、育てる期間がある 正直に書いておくと、この仕組みはまだ完成していない。 チェックすべきパターンが多く、新しい書式が出てくるたびにルールを足していく必要がある。当面は、出てきた誤検出を見ながら人が教え続けることになる。 これは面倒に聞こえるかもしれないが、人に仕事を引き継ぐときも同じだと思う。最初から完璧に引き継げる仕事はない。何度か一緒にやって、例外を伝えて、だんだん任せられるようになる。相手がAIでも変わらなかった。 そして——誰も見ていない ここまで書いておいて、いちばん大事なことを書く。 ...

2026年9月9日 · 1 分
アーティファクトでBoxの管理画面を作った

アーティファクトでBoxの管理画面を作った|チャットでは動くのに、中では動かないもの

アーティファクトの使い道が、また一段広がった 以前、書類の仕分けを自動化した記事で、Claudeの「アーティファクト」という機能の使い道について書いた。要約するとこうだ。 繰り返しやっている作業のボタンを1つ作ってみる。アーティファクトは、AIへの指示を「アプリの操作」に変換する道具として使える。 今回はその続きになる。ボタン1つではなく、画面の横に出しっぱなしにしておく管理画面を作ってみた。 きっかけは、社内のClaudeにBoxとつながる機能(コネクタ)が入ったことだった。 作ったもの 2つ作った。 ① ファイル一覧・更新監視の画面 Boxのフォルダをブラウザ上で開いて、中身を見られるようにしたもの。 フォルダをクリックして階層を掘り下げられる(パンくず表示つき) ファイル名・サイズ・更新日時を一覧表示、列見出しをクリックで並べ替え 名前で絞り込み検索 前回見たときからの差分を検出して、更新・新規のファイルに色を付ける ② Box AIで一括分析する画面(本命だった) こちらは少し説明が要る。Box AIというのは、Box自身が持っているAI機能のことだ。Claudeとは別物で、Boxに置いてあるファイルをBoxの中で読んで答えてくれる。 なぜそれを使いたかったかというと、ファイルの中身をClaudeに送らなくて済むからだ。社内のClaudeは使った分だけ費用がかかるので、大量のファイルをそのまま読ませると高くつく。Box AIに読ませて要約だけ受け取れば、こちら側の負担はぐっと減る。46万件のファイルを整理したときに学んだ「必要な分だけ読ませる」の応用でもある。 作ったのは、フォルダ内のファイルに対してまとめてBox AIに指示を出す画面。「要点を抽出して」「リスクがありそうな箇所を挙げて」といった指示を自由に書いて、結果を一覧で見る——そんなものを想定していた。 契約書の要点抽出や、議事録からのアクション整理に使えるはずだった。 ところが、本命が動かなかった ②を動かしてみたら、すべてのファイルでエラーになった。Access denied——アクセスが拒否された、という意味だ。 調べていくと、原因は権限の設定だった。少し細かい話になるが、大事なところなので書いておく。 Box AIを外部のアプリから呼び出すには、2段階の許可が必要だった。 会社としてBox AIを有効にする → これは有効になっていた(Boxの画面から直接使えたので) アプリごとにBox AIの利用を許可する → こちらが未設定だった つまり「自分はBoxの画面からBox AIを使えるが、Claudeという"アプリ"にはBox AIを使う許可が下りていない」という状態だった。 ここで時間を使ったのは、最初にフォルダの閲覧権限を疑っていたことだ。ファイル名や更新日時は取れているのだから権限はあるはずなのに、と混乱した。切り分けの決め手になったのは「Boxの画面から手で操作すると成功する」という事実で、そこから「人ではなくアプリの側の権限だ」とたどり着いた。 そして、この権限はたぶん下りない 原因が分かったので、管理者への依頼文書を作った。ここまではSalesforceの設定を依頼したときと同じ流れだ。 ただ、今回は事情が違った。 この設定は、契約全体に対して有効になる。 外部アプリへの許可は、利用者ごとや部署ごとに切り分けられない。つまり依頼を受ける側から見ると、 「この会社(あるいはグループ全体)で、この外部アプリにBox AIを使わせてよいか」 という判断になる。こちらの感覚では「試しに使ってみたいだけ」でも、受け取る側にとっては全社の話なのだ。 そう考えると、一人の試用のために全体の設定を変えてもらうのは、筋として重い。通らない可能性のほうが高いと考えたほうが自然だと思った。 だから「使えないまま運用する」形にした ここが今回いちばん考えたところだ。 選択肢は2つあった。 A:許可が下りるまで待つ(下りなければ、作ったものは無駄になる) B:使えないままでも回る形にする Bを選んだ。 具体的には、Box AIで処理できなかったファイルに対して「Claudeのチャット用の指示文をコピー」というボタンを置いた。押すと、そのファイルに対する指示文とフォルダの情報が丸ごとコピーされる。あとはチャットに貼り付ければ、同じことができる。 自動ではない。ひと手間かかる。それでも、画面を見て「これを分析したい」と思ったその場から、2クリックで先に進める。 「使えるようになったら本気を出す」をやめた この判断は、たぶんこのブログでいちばん伝えたいことに近い。 社内でAIを使っていると、自分では動かせない壁に何度もぶつかる。権限、契約、管理者の判断。どれも自分の努力とは関係のないところで決まる。 そのたびに「解決したら再開しよう」と止めていたら、たぶん何も進まない。実際、以前に書いたできたこと・できなかったことの記事でも、ネットワーク上のフォルダが見えないという制約を、別のツールに運ばせることで回避した。あのときと考え方は同じだ。 制約は消えるのを待つものではなく、そのまま抱えて設計に織り込むもの——これが数か月かけて身についた感覚だと思う。 もちろん、依頼は出してある。通れば儲けもの、くらいの気持ちでいる。 アーティファクト内での制約(実際に踏んだもの) もうひとつ、作ってみて初めて分かったことがある。チャットでできることが、アーティファクトの中では必ずしもできない。 同じClaudeなのに、動く場所によって挙動が違うのだ。実際に踏んだものを書いておく。 制約 内容 ファイルの中身をそのまま取得できない 画像やPDFなどのデータを直接扱うツールは、アーティファクト内から呼び出すとエラーになる 連続で呼ぶと止まる 短時間にたくさん呼び出すと「リクエストが多すぎます」と拒否される。件数の上限を設けて回避した 画面内から呼び出すClaudeは精度が落ちる アーティファクトの中からもClaudeを呼べるのだが、使われるのは軽量なもので、チャットで対話するときほど賢くない。込み入った判断は任せられない(※Box AIとは別の話) 3つ目は特に注意が要る。「チャットでうまくいったから、画面に組み込めば同じことができるだろう」と考えると、たぶん失敗する。アーティファクトは"賢い判断"を任せる場所ではなく、“決まった操作"を並べる場所だと考えたほうが良さそうだ。 ...

2026年9月2日 · 1 分
Excelでは開けるのに、プログラムでは読めなかった

Excelでは開けるのに、プログラムでは読めなかった|月次の照合作業を自動化した話

月に一度、2つのデータを突き合わせる作業 月次でやっている確認作業がある。 システムに登録された案件のデータと、正しい情報がまとまった台帳。この2つを突き合わせて、登録した時点で正しい請求先が書かれていたかを1件ずつ確認する。書かれていなかったものは後で直さなければならないので、洗い出しておく必要がある。 判断はそう単純ではない。番号で書かれているものもあれば、会社名だけ書かれているものもある。書き方が少し違うだけで実質は合っているケースもある。そもそも確認の対象外にしている取引先もある。 つまり**「これは合っている、これは違う」を人の目で判断していく作業**で、件数がまとまると相当に骨が折れる。これをなんとかしたかった。 最初の壁:Excelでは開けるのに、プログラムでは読めない 作業の入り口は、システムからデータをExcel形式で書き出すこと。これをプログラムで読み込んで処理する——そのはずだった。 ところが、読み込もうとするとエラーになる。**「このファイルは壊れています」**と言われる。 不思議なのは、同じファイルをExcelで開くと普通に開けることだ。中身も正常に見える。壊れているようにはまったく見えない。 「じゃあこっちの書き方が悪いんだろう」と思って何度も試したが、どうやっても読めない。ここでかなり時間を使った。 Excelファイルは、実は「圧縮ファイル」だった 原因を調べる過程で、自分が知らなかったことを知った。 **Excelファイル(.xlsx)は、中身が複数のファイルに分かれていて、それをひとまとめに圧縮した"箱"**なのだ。ZIPと同じ仕組みで、拡張子を.zipに書き換えれば中を覗くこともできる。 そして箱の中には、「どこに何が入っているか」を示す目次が付いている。 今回のファイルは、この目次の部分が壊れていた。 Excelは寛容だった:目次が怪しくても、中身を自力で探しに行って開いてくれる プログラムは正直だった:目次を信じて読もうとするので、「目次が壊れている=このファイルは壊れている」と判断して止まる つまりどちらも正しい動作で、「Excelで開けるから正常なファイル」とは限らないということだった。 目次を作り直して読ませた 対処は、箱の目次を無視して中身を頭から順に探し出し、目次を付け直すという方法をとった。 ファイルの中には、部品の始まりを示す決まった印がある。それを全部拾い出して、正しい構造に組み立て直す。そうすればプログラムからも普通に読めるようになる。 正直、この対処は自分ひとりでは絶対にたどり着けなかった。「Excelでは開けるのにプログラムでは読めない」という症状を伝えたら、Claudeが「ファイルの構造そのものが壊れている可能性がある」という筋を出してくれた。 自分にはそもそも「Excelファイルの中に目次がある」という知識がなかったので、疑うことすらできなかった。 前にも書いたが、非エンジニアがいちばん助かるのは「自分が知らないから疑えないこと」を出してもらえる場面だと思う(ClaudeとCopilotの比較でも同じことを書いた)。 本題:人の曖昧な判断を、ルールに落とす ファイルが読めるようになってからが本題だった。 これまで目でやっていた照合を、機械に任せるにはルールを言葉にしなければならない。やってみて気づいたのは、自分がやっていた判断は「合っている/違う」の2つではなかったということだ。 整理してみると、実際にはこうなっていた。 判定 どういう状態か 一致 正しい番号がきちんと書かれている 不一致 番号は書かれているが、正しいものと違う 名称のみ記載 番号はないが、取引先の名前は書かれている 名称のみ(ニュアンス) 名前の書き方が少し違うが、実質は合っていそう 記載なし 何も書かれていない 対象外 もともと確認の対象にしていない取引先 自分で無意識にやっていた判断を並べてみると、あいだの段階がいくつもあった。これに気づけたのが一番の収穫だったかもしれない。 「ニュアンス一致」という段階を作った いちばん悩んだのが4つ目の**「書き方が少し違うが、実質は合っていそう」**というケースだ。 会社名の書き方は揺れる。「株式会社」が付いているかどうか、略称で書かれているか、前後に余計な文字が付いているか。人が見れば同じだと分かるが、文字として完全に一致はしない。 これを「不一致」に入れてしまうと、要確認の山に大量の"実は問題ない案件"が混ざる。かといって「一致」にしてしまうと、本当に違うものを見逃すかもしれない。 そこで、専用の段階をひとつ作った。「たぶん合っているが、機械が断定はしない」という置き場所だ。 これは前回の記事で書いた「迷ったら要確認に入れる」と同じ考え方だ。白黒つけられないものを無理にどちらかへ寄せず、グレーの箱を用意する。 曖昧なものを扱うときは、これがいちばん事故が少ないと思う。 出てくるのは、色分けされた1つのExcel 処理が終わると、Excelファイルが1つ出てくる。中は9枚のシートに分かれている。 全体の集計(何件中、何件が要確認か) 全件の一覧(判定ごとに色分け) 要確認のものだけを集めたシート そのほか、判定ごとのシート 判定は色で分けてある。合っているものは緑、はっきり違うものは濃い赤、何も書かれていないものは赤、対象外はグレー。 狙いは全件を見なくて済むようにすることだ。以前は全部に目を通していたが、今は「要確認」のシートだけ開けばいい。 これも前に書いた話とつながる。書類の仕分けの記事で「人が見る場所を1か所に絞ることのほうが価値がある」と書いたが、今回も同じだった。自動化の成果は"作業が消えること"だけでなく、“見るべき場所が減ること"にもある。 今は「照合して」と伝えれば、このExcelが出てくるところまで自動になっている。 まとめ この作業から学んだことを3つ。 「Excelで開けるから正常」とは限らない。 システムが書き出したファイルは、見た目が普通でも中身が壊れていることがある 自分の判断を書き出すと、思っていたより段階が多い。 「合っている/違う」の2択でやっているつもりで、実は5〜6段階の判断をしていた グレーの箱を用意する。 白黒つけられないものを無理に寄せず、専用の置き場所を作ったほうが結果的に速い そして毎回思うのだが、詰まったときに効くのは「自分が知らないことを疑ってもらえる」ことだった。Excelファイルの中に目次があるなんて、この作業をするまで知りもしなかった。知らないことは疑えない。そこを埋めてもらえるかどうかが、非エンジニアが自動化を進められるかの分かれ目になっていると思う。

2026年8月15日 · 1 分
Salesforceの未連携チェックを自動化した

Salesforceの未連携チェックを自動化した|CSV連携でハマった6つの罠

「朝にしかできない仕事」だった Salesforceに登録された作業実績が、別の仕組みに正しく連携されているか。連携に失敗したものが残っていないか。これを毎日確認する仕事があった。 厄介だったのは、この確認が朝にしかできなかったことだ。 データを集計するバッチ処理が夜間に走る。だから前日分の結果が出揃うのは朝。そして確認した内容は朝礼で共有する必要がある。つまり毎朝、出社してから朝礼までのあいだに、Salesforceを開いてレポートを出して、未連携のものを拾い出す——という作業が固定で入っていた。 自動化の価値は「時短」だけではなかった こういう話を書くとき、たいていは「作業時間が何分減りました」という数字を出すものだと思う。ただ、今回いちばん効いたのはそこではなかった。 朝のいちばん忙しい時間帯を、この作業のために空けておかなくてよくなった。 作業そのものの時間が長いわけではない。それでも「朝礼に間に合わせなければならない」という制約があると、その時間は他のことに使えない。別の急ぎが入れば焦るし、遅れれば朝礼に響く。時間の"長さ"ではなく"時間帯"を拘束されることの負担は、実際にやっている人にしか分かりにくい部分だと思う。 自動化してからは、朝礼の前にはもうTeamsに一覧が届いている。自分が何時に出社しようが関係ない。この安心感が、削減できた分数よりずっと大きかった。 同じように「たいした時間じゃないから」と我慢している作業がある人は、時間の長さではなく"いつやらなければいけないか"で見直してみるといいかもしれない。 作ったもの 構成はシンプルだ。 Salesforce のレポート(毎日 自動実行) ↓ CSVを添付したメールが届く Power Automate ├ メールを受け取る(差出人と添付で判定) ├ CSVを1行ずつの形に分解する ├ 連携に失敗している行だけを抜き出す ├ 必要な4項目だけを取り出す └ 表の形にしてTeamsに投稿 Salesforceにはレポートを定期実行して結果をメールで送る機能がある。まずこれで毎日CSVが自分宛に届くようにして、そのメールをPower Automateが受け取って処理する、という流れだ。 なぜCSVとメールなのか 見ての通り、かなり古典的なやり方だ。今どきシステム同士を繋ぐならもっとスマートな方法がある。それでもこうした理由は2つある。 ひとつは、Claudeから直接Salesforceを触ることが、この時点ではできなかったこと。以前に社内環境で「何ができて何ができないか」を調べたときの結論がそのまま効いている(詳しくはこの記事に書いた)。 もうひとつは、メール経由なら管理者に頼まずに自分で組めたこと。システム同士を直接つなぐ設定には管理者の権限が要る。一方「レポートをメールで受け取る」「届いたメールを処理する」だけなら、一般ユーザーの権限で完結する。 つまりこれは、制約の中で自分だけで完結させるための選択だった。理想の構成ではないが、動くものが今日できることのほうが大事だと判断した。 ハマった6つの罠 ここからが本題。Power Automateの式を書く部分で、想像の3倍くらい詰まった。同じところで止まる人が絶対にいると思うので、全部書いておく。 罠1:文字化けする 届いたCSVの中身が文字化けした。原因はSalesforce側のCSV出力がShift-JISという古い文字の形式になっていたこと。 解決:Salesforceのレポート設定でエンコードをUnicode(UTF-8)に変更した。処理する側で頑張るより、出す側を直したほうが早い。 罠2:CSVが1行の塊のまま分解できない CSVを行ごとに分けようとしたのに、全部がひと繋がりのまま出てくる。改行で区切っているつもりが区切られない。 原因は改行の正体がCR+LFという2文字の組み合わせだったこと。単純な改行文字で切ろうとしても一致しない。 解決:区切り文字を直接指定する形にした。 split(base64ToString(items('For_each')?['contentBytes']), decodeUriComponent('%0D%0A')) 呪文にしか見えないと思うが、意味が分からなくても問題ない。自分も細部は分かっていない。「CSVが1行にまとまってしまう」ときはこの形と覚えておけば足りる。 罠3:フィルターが全件を通してしまう 「連携に失敗した行だけ」を抜き出したいのに、全部の行が通ってしまう。条件が効いていない。 原因は、CSVの中の値が 0 ではなく "0" だったこと。前後にダブルクォートが付いていて、見た目は同じでも別物として扱われていた。 解決:比較する前にクォートを取り除く。 @and(greater(length(split(item(), ',')), 8), equals(trim(replace(split(item(), ',')[8], '"', '')), '0')) 「見た目は合っているのに一致しない」ときは、たいてい目に見えない何かが混ざっている。前にも列名に改行が紛れ込んでいて同じ目に遭った。この手の問題は本当に気づきにくい。 罠4:Teamsに「True」とだけ届く 通知が動いた。喜んで見たら、Teamsに投稿されていたのは True の1単語だった。 原因は、投稿する内容を選ぶところでメールのHTML本文のほうを間違って選んでいたこと。似た名前の項目が並んでいて、正しいものを選べていなかった。 解決:選択肢の検索欄で「テーブル」と検索して、目当ての出力を選び直した。Power Automateは選択肢が大量に並ぶので、目で探さず検索するのが確実だった。 ...

2026年8月15日 · 1 分
スキャンした書類の仕分けをAIに任せた

スキャンした書類の仕分けをAIに任せた|「格納しておいて」の一言で終わる仕組み

紙をスキャンした後に残る、地味な作業 複合機で紙の書類をスキャンする。これ自体は数秒で終わる。問題はそのあとだ。 出てきたPDFを開いて中身を確認し、書類番号と案件番号を読み取って、その番号でファイル名を付け直す。年月と案件ごとのフォルダを作って、そこに入れる。しかも一度にまとめてスキャンすると、1つのPDFの中に何件分もの書類が入っているので、それを1件ずつに切り分ける必要もある。 一件あたりは大した手間ではない。ただ、件数がまとまると地味に時間を取られるし、何よりファイル名を打ち間違えたり、入れる場所を間違えたりする。後から探せなくなるので、間違えると余計に面倒なことになる。 今はどうなっているか 先に結果を書くと、今はこうなっている。 「格納しておいて」と一言入力すると、全部終わる。 PDFを開いて中身を読み、番号を拾い、必要なら1件ずつに分割し、年月と案件番号のフォルダを作って、正しい名前を付けて格納する。おかしなデータがあれば処理せずに報告してくる。処理した履歴も残る。 チャットに打ち込む代わりにボタンを1つ押すだけでも起動できるし、時間を決めて勝手に走らせることもできる。 ただし、この「時間を決めて走らせる」には条件がある。動くのはパソコンが起動しているあいだだけだ。自分の環境では退社時にPCを停止するルールがあり、放置すると自動でシャットダウンもされるので、「夜のうちに走らせておく」ことはできない(この事情は46万件のファイル整理の記事で詳しく書いた)。 ちなみに同じ自動化でも、クラウド側で動くものは自分のPCが落ちていても動き続ける。以前に作った記入漏れの通知やSalesforceの未連携チェックはそちらなので、帰宅後も朝も勝手に動いている。「手元のPCで動くもの」と「クラウドで動くもの」の違いは、自動化を組むうえで意外と大事だった。 これまでの記事とは、AIの役割が違う このブログでこれまで書いてきた自動化は、どれもAIが相談相手だった。Power Automateの組み方を教えてもらったり、エラーの原因を一緒に探してもらったり。手を動かして仕組みを作るのは自分で、動かすのはPower Automateだった。 今回は違う。AIが処理そのものをやっている。 PDFを読んで「これは何番の書類か」を判断するのも、「この2つは別の書類だから切り分ける」と決めるのも、AIの担当だ。ここが今までと決定的に違うところで、正直やってみるまで「そんなことまでできるのか」と半信半疑だった。 仕組み:運搬・判断・確認を分ける とはいえ、AIに全部やらせているわけではない。実際の構成はこうなっている。 ① 複合機 → ネットワーク上のフォルダにスキャン(今まで通り) ② Power Automate Desktop ファイルを作業用フォルダへ運ぶ ③ Claude(黒子) 中身を読んで、名前を決めて、振り分ける ④ Power Automate Desktop 完成したものを所定の場所へ運ぶ ⑤ 人 中身を確認する 役割をひとことで言うと、運搬はPower Automate、判断はAI、最終確認は人。 なぜ分けたかというと、それぞれ得意なことが違うからだ。ファイルを決まった場所から決まった場所へ移すだけの作業は、Power Automateのほうが速いし確実で、しかもタダで動く。一方、中身を読んで判断する仕事はAIにしかできない。そして、間違いがあったときに責任を取れるのは人だけだ。 もうひとつ現実的な理由もある。AIが動いている場所からは、ネットワーク上の共有フォルダが見えなかった。この制約は以前に調べてあった(できたこと・できなかったことの記事に書いた通り)。だから「見える場所まで運んでくる」役をPower Automateに任せる必要があった。 制約から始まった分担だったが、結果的にこの形がいちばん理にかなっていたと思う。 AIにしかできなかったこと 具体的に、AIが担当している判断はこのあたりだ。 書類の中身を読んで番号を拾う 書類は手書きと印字が混ざっている。決まった位置に決まった文字があるわけではない。「この書類の番号はどれか」を読んで判断する必要がある。 何件分が入っているかを見分けて切り分ける まとめてスキャンした1つのPDFの中に、複数の書類が入っている。どこからどこまでが1件なのかは、中身を読まないと分からない。実際に39ページのPDFから7件の書類を切り出すところまで動いている。 おかしなものを見つけて止まる 作業した月と報告した月が食い違っているものは、処理せずに「これは変です」と報告してくる。機械的に処理していたら、間違った場所に入って後で分からなくなるやつだ。 一番の学びは「安全弁」の設計だった この仕組みを作る中で、一番勉強になったのは技術的なことではなく設計の考え方だった。 問題はこうだ。③のAIの処理が終わる前に、④の運搬が走ってしまったらどうなるか。まだ途中までしかできていないものが、完成品として所定の場所にコピーされてしまう。 これを防ぐために入れたのが完了マーカーだ。 AIは処理をすべて終えたとき、最後に「終わりました」という意味の空ファイルを1つ置く。④の運搬は、そのファイルがあるときしか動かない。無ければ何もせず、そのまま終了する。 仕組みとしては拍子抜けするほど単純だが、これがあるとないとでは安心感がまるで違う。自動化を複数つなげるときは、「前の工程が本当に終わったか」を次の工程が確認できる形にしておく——これは他の作業にもそのまま使える考え方だと思う。 ちなみにこの完了マーカーを置くルールは、AIの作業フォルダに置いた指示書に書いてある。毎回口頭で頼まなくても、そのフォルダで作業するときは自動的にそのルールが効く。 なぜ「全部自動」にしなかったのか 最後に人の確認を残しているのは、半分は制約、半分は意図的な選択だ。 制約というのは、AIを完全に自動で起動させることが今の環境ではできないこと。だから「運搬を動かす → AIに一声かける → 完成したら運搬を動かす」という半自動の形になっている。 ただ、仮に全部つながったとしても、最後の確認は人が残すと思う。読み取った番号が1文字違っていても、機械は気づかない。確認する場所を1か所だけ残しておけば、そこで全部止められる。 自動化というと「人の手を完全に無くすこと」だと思われがちだけど、実際に作ってみて感じたのは、人が見る場所を1か所に絞ることのほうが価値があるということだった。以前は全部の工程で気を張っていたのが、今は最後の確認だけになった。減ったのは作業時間だけでなく、気を配る対象の数でもある。 「アーティファクト」の使い道がやっと分かった ここで、ずっと持て余していた機能の話をしたい。 ...

2026年8月15日 · 1 分
共有フォルダの46万件を整理する

共有フォルダの46万件を整理する|AIに「全部読ませない」ための設計

共有フォルダに、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万件すべての移動が完了した。 丸一日流し続けていたわけではない。普段の作業の裏で動かしていただけなので、実際に処理が進んでいたのは仕事をしている時間の一部だけだ。それでも、少しずつでも積み上がれば終わる。 ここでも効いたのは「一度で終わらせようとしない」ことだった。もし「今日中に全部片付ける」という進め方をしていたら、途中で止まるたびにやり直しになって、たぶん完走できなかったと思う。 ...

2026年8月15日 · 1 分
ClaudeとCopilotを非エンジニアが使い比べた

ClaudeとCopilotを非エンジニアが使い比べた|Power Automateで自動化して分かった差

※この記事の「Copilot」について ここで比較しているのは、Officeなどの中にいるアシスタントとしての Microsoft Copilot です。2026年6月に一般提供が始まった Copilot Cowork(時間のかかる作業をまるごと任せられる仕組み)とは別の製品です。 そちらをお探しの方は、Copilot CoworkとClaude Coworkの違いのほうをご覧ください。 会社にはClaudeもCopilotもある 毎日、SharePoint上の台帳を開いて、記入漏れがある行を探して、担当者に声をかける。地味だが誰かがやらないと後で困る、そういう仕事があった。 これを自動化しようと考えた。決まった時刻に台帳をチェックして、未入力があればTeamsに通知が飛ぶようにする。 最初は、Claudeに直接やらせるつもりでいた。ところがこれができない。SharePoint上にあるExcelは、Claudeからは直接読めなかったからだ。手元にコピーすれば読めるのだが、それを毎日手でやるなら自動化の意味がない。 (この「どこに置いてあるファイルなら読めるのか」は最初に調べてあった。詳しくは前回の記事に書いている) そこで方針を変えた。**ファイルを触る部分はMicrosoft Power Automateにやらせる。**AIにできないことは、別のツールに任せればいい。 ただ、こちらはプログラミングの経験がない。Power Automateも初めて触る。となると、誰かに聞きながら進めることになる。 幸い、会社にはAIが2つある。Microsoft CopilotとClaudeだ。せっかくなので両方に相談しながら作ってみた。この記事は、そのとき何が違ったかの記録になる。 先に断っておくと、これは「自分がこの作業をやったときの話」であって、どちらが優れているという一般論ではない。実際、後半に書くようにCopilotのほうが向いている場面もある。 作ったもの まず何を作ったのかを簡単に。 毎日決まった時刻に、SharePoint上にある当月の台帳(Excel)を自動で開く 記入漏れの行を抽出する(案件番号はあるのに、記入者の欄が空、または「未確認」のままのもの) 対象外の取引先は除外する 該当があれば、Teamsに一覧を投稿する。ゼロ件なら何も送らない 文章にすると4行だが、これを作るのに何日かかかっている。理由は後述するが、途中で「これは無理かもしれない」と思う場面が何度かあった。 つまずいた場所:見えない文字が入っていた 一番苦労したのは、フィルターがどうしても効かないことだった。 台帳から「記入者の欄が空の行」を取り出そうとすると、結果がゼロ件になる。実際には空の行がいくつもあるのに、だ。設定を見直しても、書き方を変えても、うまくいかない。 原因が分かったときは脱力した。Excelの列名(見出し)の中に、改行文字が紛れ込んでいたのだ。 見た目には分からない。セルを見ても普通の見出しにしか見えない。ところがプログラムから見ると、その列の名前は「記入者」ではなく「記入者+改行」という別物になっていて、だから「記入者という名前の列」を探しても見つからなかった、という話だった。 これは非エンジニアには絶対に思いつかない類の原因だ。「自分の書き方が間違っている」としか思えないし、実際そう思って何時間も設定をいじっていた。 最終的には、列名を指定する代わりにデータ全体を文字列として検索する方法で回避した。正攻法ではないが動く。 ここで差が出た①:曖昧な質問に答えられるか この「原因不明で詰まっている」状態こそが、2つのAIの差がはっきり出た場面だった。 こちらが投げられる質問は、正確には程遠い。 「フィルターが効かない。空の行があるはずなのに0件になる。なんで?」 専門用語で症状を説明できないから、こういう聞き方になる。何が起きているか分かっていないのだから当然だ。 Copilotは、この手の質問で意図を取り違えることがあった。 一般的な設定手順の説明が返ってきたり、こちらが既に試したことをもう一度勧められたりする。そして何より、やり取りが続くと前の話を見失う。「さっき言った条件で」が通じなくなると、また最初から説明することになる。原因究明は往復回数が多くなるので、これは地味に効いた。 Claudeは、曖昧なまま投げても文脈を保ったまま付き合ってくれた。 「その症状なら、列名に見えない文字が入っている可能性がある」といった、こちらが思いつかない仮説を出してくる。しかも「じゃあどう確認するか」まで具体的な手順で示してくれる。 改行文字の件も、自力では絶対にたどり着けなかった。「素人の曖昧な訴えから、原因の候補を出す」——非エンジニアが一番助けてほしいのは、まさにここだと思う。 ここで差が出た②:画面を見せて聞けるか もうひとつ、そして個人的にはこちらのほうが決定的だった差がある。スクリーンショットを見せて聞けるかどうかだ。 Power Automateのような専門ツールは、画面の各部分に名前がある。でも初めて触る人間はその名前を知らない。だから言葉で説明できない。 「右上の……なんか歯車みたいなやつの下に出てくる、青い文字の部分」 こんな説明で伝わるはずがない。だから画面を撮って「これのどこを押せばいい?」と貼るのが一番早い。 ここでの差は大きかった。Copilotは画面の状況をうまく把握できないことがあり、貼った画像とかみ合わない回答が返ってくることがあった。Claudeは画面を読み取って、「その画面なら、左側の◯◯を開いて、△△を選ぶ」と具体的に案内してくれた。 言葉を知らなくても質問できる、というのは非エンジニアにとって想像以上に大きい。用語を調べる時間がまるごと消えるからだ。 違いは「道筋が見えているかどうか」 ここまで読むとClaude一択に見えるかもしれないが、そうではない。両方を使ってみて、自分なりに整理できた軸がある。 Claudeが効くのは、ゴールは決まっているのに道筋が分からないとき。 今回がまさにそれだった。「記入漏れを自動で知らせたい」というゴールははっきりしている。でも、そこへどう辿り着けばいいのかは何も分かっていない。フィルターが効かない理由も分からない。こういう状態で、こちらが理解していないことまで推論して「たぶんこれが原因では」と提案してくれるのがClaudeの強みだった。 Copilotが効くのは、道筋が分かっているとき。 Officeの中に常駐していて、作業している横で逐一手を貸してくれる。やることが決まっている作業を速くする、加速装置のような存在だ。 Officeの中で完結する作業:Excel、Word、Teamsの画面からそのまま呼び出せる。別の窓を開いて往復しなくていい 社内の情報を踏まえた作業:会議の要約、これまでのやり取りを前提にした下書き 短い定型作業:メールの下書き、文章の整え——わざわざ相談するまでもないもの つまり、Claudeは「道筋を一緒に探す相手」、Copilotは「決まった道を速く進むための装置」。優劣ではなく、そもそも役割が違う。加速装置は、既に動いている人を速くすることはできるが、止まっている人を動かすことはできない。 そう考えると、時間軸での使い分けも見えてくる。分からないうちはClaudeに相談して道筋を決め、やることが固まったらCopilotで手を動かす。 自分の中では、この流れが自然になりつつある。 結果として、どうなったか 出来上がったフローは本番で動いている。 決まった時刻に台帳を読んで、記入漏れがあればTeamsに一覧が届く。手作業で確認していた時間はゼロになった。抽出の正確さも、手で数えた結果と一致することを何度か確認している。 ...

2026年8月11日 · 1 分
Claude Coworkでできたこと・できなかったこと

Claude Coworkでできたこと・できなかったこと|社内導入で最初にやった動作確認

派手なことをやる前に、地味な確認をした 会社でClaudeのトライアルが始まって、最初に手をつけたのは業務の自動化ではなかった。ひたすら地味な動作確認だった。 どのフォルダなら読めるのか。Excelは開けるのか。作ったファイルはどこに置けるのか。チャットの履歴は取ってこられるのか。ひとつずつ試して、結果を書き留めていく作業に丸一日使っている。 なぜ最初にこれをやったかというと、AI活用の記事をいくら読んでも、自分の会社の環境で同じことができるとは限らないからだ。会社にはそれぞれのファイル置き場があり、セキュリティの設定があり、契約している範囲がある。記事の通りにやってみて「うちの環境ではできませんでした」が何度も続くと、たいてい心が折れる。 だから先に地図を作ることにした。結果的に、これが一番効いた。以降に作った自動化は全部、このときの調査結果を前提に設計している。 この記事では、そのとき分かったことをそのまま公開する。同じように社内でAIを触り始めた人が、遠回りせずに済めばいいと思っている。 大前提:Coworkは「PCの中の別の小部屋」で動いている 個別の話に入る前に、ひとつだけ理解しておくと全部が繋がる前提がある。 Claude Coworkは、パソコンの中に用意された隔離された作業スペースの中で動いている。技術的にはLinuxのサンドボックスと呼ばれるものだが、イメージとしては「自分のPCの中に、もう一つ小さな部屋がある」と思えばいい。 この小部屋は、外の世界から切り離されている。だから何でも勝手に触られる心配がない代わりに、こちらが「この棚は見ていいよ」と許可したものしか手が届かない。 これを分かっていないうちは、「できる/できない」が脈絡のない豆知識の羅列に見えてしまう。逆に分かってしまえば、ほとんどの制約は「その小部屋から手が届く範囲か」で説明がつくようになる。 できたこと 自分の環境で実際に動いたのは、次のような操作だった。 やりたいこと 結果 補足 指定した作業フォルダの読み書き ✅ ローカルもOneDriveも可。複数のフォルダを指定できる Excelファイルの読み取り・加工・保存 ✅ 手元に保存されているファイルであれば可 PDF・Word・Excel・PowerPointの作成 ✅ 日本語フォントも書式もそのまま反映された Teamsの個人チャット・グループチャットの検索と閲覧 ✅ 過去のやり取りを探してもらえる Box上のテキスト系ファイルの読み書き ✅ Boxへのアップロードもできた ウェブ検索 ✅ — ファイル作成については、想像していたより出来がよかった。表の罫線、セルの色、列幅、文字色まで指定通りに反映される。報告書のドラフトを作らせて、そのまま体裁を整えた状態で出してもらえるレベルだ。 このとき意識してやったのは、「何を使って作られたか」まで記録に残すことだった。PDFはweasyprint、Wordはpython-docx、Excelはopenpyxl、PowerPointはpython-pptx——ここまで書いておくと、次に同じことをやるときに調べ直さずに済む。地味だが後々かなり効いた。 この横文字はAIが裏側で使っている道具の名前で、意味が分からなくても全く問題ない。自分も中身は分かっていない。「こういう名前を控えておくと後がラクになる」とだけ知っていれば十分だ。 できなかったこと 一方で、はっきり無理だったものもある。 やりたいこと 結果 理由・状況 指定していないローカルフォルダを読む ❌ そういう仕様。安全のための制限 ネットワーク共有フォルダを直接指定する ❌ ただし回避策あり(後述) Excelのマクロ(VBA)を動かす ❌ 小部屋の中にExcelそのものが無いため SharePoint上のExcelを直接読む ❌ 手元にコピーすれば読める SharePointへのファイルのアップロード ❌ 読み取り専用の扱いだった Teamsのチャンネル投稿を取得する ❌ 接続設定の権限による。管理側に要望中 ブラウザ(Chrome)を自動で操作する ❌ 「Claude in Chrome」の導入待ち。実装されれば解決する見込み このうち「マクロが動かない」は、言われてみれば当然なのだが最初は驚いた。小部屋の中にはExcelというソフト自体が入っていないので、ファイルの中身は読めても、Excelの機能を使う処理は動かせない。ファイルを「データとして」扱うのと、「Excelで開く」のは別物だということだ。 一番ハマったのは「見えているのに見えない」問題 調査の中で一番わかりにくく、原因究明に時間を取られたのがこれだった。 同じファイルなのに、どうやってアクセスするかによって、見えたり見えなかったりする。 ...

2026年8月6日 · 1 分