見出し画像

kintoneの添付ファイルは「ためる」のが得意で「出す」のが苦手。その穴を埋めるプラグインをつくってみた。

「先月ぶんの契約書、まとめて送っておいて」

kintone でファイルを管理していると、この一言で手が止まります。レコードを開く、ファイル名をクリックする、ダウンロードフォルダを開く、フォルダに振り分ける、また一覧に戻る。20件あれば20往復です。

添付ファイルフィールドは、ドラッグ&ドロップで置けて、レコードにひもづいて、検索でたどり着ける。「ためる」までは本当によくできています。ところが「まとめて取り出す」となった瞬間に、標準機能の守備範囲から外れます。

この記事では、前半で kintone の添付ファイルまわりの仕様をひととおり整理し、後半で、その足りない部分を埋めるために作ってみたプラグイン「添付ファイル出力 for kintone」を紹介します。そもそも標準では何ができて何ができないのかを先に押さえておくと、プラグインを入れるべきかどうかの判断もしやすくなるはずです。


まずは仕様のおさらい。添付ファイルフィールドでできること

添付ファイルフィールドは、1つのフィールドに複数のファイルを添付できます。[参照]から選ぶか、枠にドラッグ&ドロップするだけ。難しいことは何もありません。

押さえておきたい数字は2つです。

・1ファイルあたりの上限は1GB
・ファイル数そのものに上限はなく、ディスク容量に達するまで添付できる

そのディスク容量は「契約ユーザー数 × 5GB」。ここで注意したいのが、これは kintone 単体ではなく cybozu.com 全体への割り当てだという点です。同じドメインで Garoon などを使っていれば、その使用量も合算されます。しかもユーザーごとに区切られているわけではなく、ドメイン全体の共有。誰か1人が大量に入れれば、その分だけ全体の残りが減ります。画像や動画を扱うアプリだと、思っているより早く効いてきます。

配置の自由度は高めです。テーブル(サブテーブル)の中にも置けますし、一覧の表示フィールドに追加してファイル名を並べることもできます。

意外と知られていないのが「更新」の考え方です。同じ名前のファイルを添付しても、kintone の内部では別のIDが割り当てられ、別ファイルとして扱われます。上書き=バージョン管理ではないので、差し替えたいときは古いファイルを削除してから添付し直す運用になります。世代管理を厳密にやりたいなら、そもそも kintone 側で持つのが正解か、一度立ち止まって考えたほうがいい部分です。

添付ファイルフィールドの基本仕様。「ためる」側は非常に優秀です

標準機能でぶつかる、3つの壁

ためるのが得意な一方で、取り出す側には壁があります。代表的なものが3つ。

壁1:一括ダウンロードの機能がない

kintone の標準機能に、添付ファイルをまとめてダウンロードする仕組みはありません。ファイル名をクリックすれば1つずつ落とせますが、それだけです。100点あれば100回クリックすることになります。「添付ファイルを一括ダウンロードできますか?」は、kintone の定番の質問と言っていいくらいよく出てきます。

壁2:CSVの書き出しに添付ファイルは含まれない

レコードの書き出し(ファイルに書き出す)は便利ですが、添付ファイルフィールドは書き出しの対象外です。値としても、実体としても出てきません。つまり「CSVで全部吸い出しておけば、ファイルもついてくる」は成り立ちません。アプリを引っ越すときにここでつまずくパターンは、わりとよくあります。

壁3:取り出したあとの整理が終わらない

これが地味に一番つらいところです。仮に全部落とせたとしても、ダウンロードフォルダには平らにファイルが並ぶだけ。どのレコードのファイルなのか、どの取引先のものなのかは、ファイル名から推測するしかありません。結局そこから手でフォルダを作って振り分けることになります。「ダウンロードする手間」より「整理し直す手間」のほうが長い、という逆転がよく起きます。

さらに、テーブルの中に添付したファイルは見落とされがちです。どの行に紐づいていたファイルなのか、取り出した時点で情報が消えてしまいます。

どれも運用の工夫では越えられない、仕様側の壁です

一覧から、範囲を選んでそのまま出す

ここからが後半です。この「取り出す口がない」問題を埋めるために、「添付ファイル出力 for kintone」を作ってみました。パソコン版のレコード一覧画面で動作します。

やることはシンプルで、レコード一覧のツールバーに「添付DL」ボタンを、表の左端にチェックボックス列を追加します。増えるのはこの2つだけで、一覧の見た目は kintone 標準のまま。表の上に操作用の帯を作らないので、表の位置が下にずれることもありません。

出力範囲は3つから選べます。

・絞り込み結果の全件
・いま画面に出ている行
・チェックした行だけ

ポイントは、一覧の検索・絞り込みをそのまま出力条件として使えることです。「今月ぶん」「この取引先だけ」と一覧側で絞り込んでからボタンを押せば、その結果がそのまま対象になります。改めて条件を指定し直す必要はありません。ちなみに「表示されているレコード」を選んだときは、すでに画面が持っているデータをそのまま使うので、レコード取得のリクエストは1本も発生しません。

チェックの選択はページを送っても保たれます。2ページ目・3ページ目で選んだ行もまとめて出力できます(絞り込みを変えたときは解除されます)。列見出しの「▾」からは「添付があるレコードだけ選択」もできるので、添付ゼロの行を1つずつ避ける作業も不要です。

なお、1回の出力で対象にできるのは5,000レコードまで。これを超える場合は一覧側で絞り込みを足してください。カスタマイズビューやカレンダービューでは、標準の一覧テーブルがないためチェックボックス列は出ませんが、ボタンと「絞り込み結果の全件」は使えます。

解いたら、そのまま使える形で出す

このプラグインでいちばん時間をかけたのが、ここです。

ZIPを解いたときのフォルダ階層とファイル名を、あらかじめ自分で決められます。設定画面で部品をドラッグして並べるだけ。

使える部品はこのあたりです。

・{フィールド値}(会社名、案件名など)
・{日付}(出力日または日付フィールドの値/年・年月・年月日から選択)
・{レコード番号}
・{フィールド名}
・{テーブル名} {行番号}
・{元ファイル名}
・固定文字 と /(ここで階層が1段深くなる)

たとえば「{日付} / {フィールド値:顧客名} / {フィールド名} /」と並べると、こうなります。

2026-08/株式会社ABC商事/現場写真/DSC_0012.jpg

契約書アプリなら「会社名 / 契約開始月_契約書名」で、こんな形になります。

├ 株式会社ABC商事/
│ ├ 2026-04_業務委託基本契約書/
│ │ ├ 業務委託基本契約書.pdf
│ │ ├ 別紙1_業務範囲.pdf
│ │ └ 捺印済スキャン.jpg
│ └ 2026-05_ソフトウェア保守契約書/
│   └ ソフトウェア保守契約書.pdf
└ 大和テクノ株式会社/
  └ 2026-04_秘密保持契約書/
    └ 秘密保持契約書.pdf
同じファイル群でも、フォルダ構成を先に決めておくと出力結果がこれだけ変わります

解いた時点で整理が終わっています。あとから振り分ける作業が、まるごと消えます。ZIPファイルそのものの名前も、アプリ名・テンプレート名・一覧名・日付・固定文字を組み合わせて決められます。

細かいところですが、実務で効いてくるのはこのあたりです。

・値が空のフィールドを指定していた場合、その部品は前後の固定文字ごと飛ばすので、名前のない空フォルダや「//」のような空階層はできない(ただし先頭の固定文字はラベルとして残ります。「写真_{顧客名}」なら「写真_ABC」)
・同じ名前のファイルが重なったときは、後ろのものに (2) (3) を付ける。上書きで消えることはない
・拡張子は元のまま。.HEIC は .HEIC のまま出る
・ファイル名に使えない文字は自動で「_」に置き換え、Windowsの予約名にも対処する
・パスが長すぎるときは自動で切り詰める(UTF-8で200バイトまで)。フォルダより先にファイル名を短くし、拡張子は残す

最後のひとつは地味ですが重要で、Windowsのエクスプローラーは、名前が長すぎるエントリが1つでもあるとZIP全体を開けなくなります。「なぜか開けないZIP」を作らないための処理です。

もうひとつ注意点を。「ZIP内の文字コード」は UTF-8 のままをおすすめします。Shift-JIS を選ぶと、Windows 11 の標準機能でもファイル名が文字化けします(ファイルの中身は壊れません)。Shift-JIS しか扱えない古い解凍ソフトを使う場合だけ選んでください。

設定画面には「レコード単位」「フィールド単位」「フラット(フォルダなし)」のプリセットが3つあるので、まずは流し込んでから調整するのがいちばん早いです。用途ごとにテンプレートを複数保存でき、一覧ごとに使えるテンプレートを限定することもできます。左下のZIP構成プレビューは、出力側とまったく同じコードで組み立てているので、「設定画面では想定どおりなのに、出したら違った」が起きません。サンプルと実データ(先頭3件)を切り替えて確認できます。

出す前に量がわかり、途中でやめられる

大量のファイルを扱うときにこわいのは、「押した瞬間に何が起きるかわからない」ことです。

4ステップそれぞれに、途中で詰まらないための仕組みを入れています

このプラグインは、出力を始める前に見積りを出します。

・対象レコード件数
・対象ファイル点数
・合計サイズ
・分割数

これを見てから「出力を開始」を押せます。数百MBがいきなり走り出すことはありません。

処理中は進捗と残り時間の目安が出ます。いま処理しているファイルのパスまで表示するので、「止まっているのか進んでいるのか」がわかります。そして、取得中でもZIP生成中でも中止できます。中止したときはZIPを作らずに破棄するので、「途中まで入ったZIP」を誤って相手に渡してしまう事故が起きません。

大きいときは自動で分割します。しきい値(既定500MB・100〜2048MBで変更可)を超えると ◯◯_1of3.zip のように分かれますが、最上位のフォルダが分割線をまたがないようにまとめるので、解いたあとに結合し直す必要はありません。なお、1ファイル単体でしきい値を超えている場合は分割しようがないため、そのまま1つのZIPになります。

そして、失敗しても最後まで完遂します。取れなかったファイルは3回まで自動で再取得し、それでもだめだった分は _失敗一覧.txt にレコード番号・フィールド名・ファイル名・理由を記録してZIPに同梱し、ほかのファイルの出力は最後まで完了します。1件の失敗で全部が無駄になる、という状況を作らないようにしました。

速度の実測は、300ファイル・合計5.9MBで約9秒。小さいファイルが多い場合はおよそ36ファイル/秒です。大きいファイルは回線速度で決まり、150MBで約90秒ほど。待ち時間のほとんどは取得時間で、ZIPの生成自体はボトルネックになりません。

テーブル内の添付、出せる人、そして読み取り専用

最後に、実務で効く3点です。

テーブル内の添付にも対応

設定画面の「対象フィールド」に、テーブル内の添付ファイルフィールドも並びます。チェックを入れるだけです。フォルダ構成に {テーブル名} {行番号} を置けば、「どの行のファイルだったのか」まで残せます。前半で書いた「テーブル内の添付が抜け落ちる」問題は、ここで解決します。

ほしい種類だけ出す

画像/PDF/Office/圧縮/動画・音声/テキスト/その他の7区分でしぼれます。さらに拡張子の追加・除外も指定できます(判定は 除外 → 追加 → 区分 の順)。「PDFだけほしい」「dwgも含めたい」に対応できます。設定カードの下に「現在の設定:画像・PDF+dwg(除外:svg)」と出るので、思っていたのと違う設定のまま保存してしまうこともありません。

出力できる人を限定できる

ユーザー・組織・グループで指定できます。対象外の方には「添付DL」ボタンもチェックボックス列も表示しません。押せないボタンを見せない、という考え方です。なお、ゲストスペースでは組織・グループの判定ができないため、限定するときは「ユーザー指定」を使ってください。組織やグループを指定した場合は、安全側に倒して誰にもボタンを出さない動作になります。

そして前提として、このプラグインは読み取り専用で動きます。レコードの作成・更新・削除も、フォームの定義変更も一切行いません。書き込み系のリクエストは1本も使っていません。kintone のアクセス権もそのまま尊重するので、閲覧できないレコード・フィールドの添付は出力されません(その場合は確認ダイアログでお知らせします)。ファイルの取得もZIPの生成もブラウザの中で完結し、業務データを外部に送信しません。ZIP生成ライブラリも第三者のCDNではなく自社サーバーから、改ざん検知(SRI)付きで、出力を開始したときだけ読み込む形にしています。

添付ファイルという中身を扱うからこそ、動作範囲を明示しています

ちなみに、同じアプリに「添付ファイルアイコン表示 for kintone」を入れていると、一覧のアイコンにマウスを乗せた行だけ小さなダウンロードボタンが出て、その1行の添付を種類ごとに取り出せます。一覧で中身を確認して、そのまま取り出す、という流れがつながります。相手のプラグイン側の改修は不要で、入れていない場合は何も起きません。

なお、対象フィールドやテーブルの構成を変更したときは、プラグイン設定を開いて保存し直してください。表示を速くするためにフィールドの表示名を設定に取り込んでいるので、ここが「ボタンが出ない」「思ったファイルが出ない」の一番よくある原因です。

まとめ

kintone の添付ファイルは、ためるのは得意で、出すのが不得意。これは使い方の問題ではなく仕様です。

・1ファイル1GBまで、ファイル数の上限はディスク容量まで
・ディスク容量は契約ユーザー数×5GBで、cybozu.com 全体の共有
・標準に一括ダウンロード機能はない
・CSVの書き出しに添付ファイルは含まれない
・取り出したあとの整理は自力

「添付ファイル出力 for kintone」は、この最後の2つ——まとめて取り出すことと、取り出したあと整理し直すこと——をまとめて引き受けるために作ってみました。一覧で絞り込んで、範囲を選んで、テンプレートを選んで押す。解いたときにはもう整理が終わっている、という状態を目指しています。

契約書、現場写真、検査記録、請求書。「あのフォルダ、まとめて送っておいて」に毎回30分かけているなら、試してみる価値はあると思います。

詳細はこちらから

「添付ファイル出力 for kintone」の詳細は、プラグインページにまとめています。設定画面のスクリーンショットや、よくある質問も掲載しています。

KIZUNA Works では、ほかにも kintone の「あと一歩」を埋めるプラグインを公開しています。よかったら覗いてみてください。

※kintoneはサイボウズ株式会社の登録商標です。

いいなと思ったら応援しよう!