NGW TECH BLOG
← 記事一覧へ
·#098

グループウェアにファイルサーバを内蔵したただし小規模団体専用と言い切る理由

Web画面+WebDAVで、NASのように開いて上書き保存できる簡易ファイルサーバNGWASを内蔵した。DB入替で表が消えた事故も含めて、「小規模団体専用」と言い切った設計判断を書く。

NGWAS(NGW Attached Storage) は、グループウェアに内蔵した簡易ファイルサーバだ。NASを置けない、置くほどでもない小規模団体の「共有フォルダ」を、NGWの中で完結させる。

先に結論を書く。小規模団体専用。 言い訳ではなく、設計判断として、そう言い切った。理由は最後に書く。

何を作ったか

  • Web画面(フォルダ・ファイル・ごみ箱・履歴)と、WebDAV(/ngwdav/)の二本立て。
  • 実体は外付け領域に置く。ファイル名はDBのID。bind mountでwebroot配下に見せ、Apacheからは直接拒否する(bind mountの話と同じ作り)。専用のUSB/SSDにするときは、fstabの差し替えだけで済む。
  • 権限は、所属・職員・職員区分と、拒否と継承。対象に「全職員」も選べる。削除はごみ箱を通す。
  • 版管理は、上書き保存の直前の内容を3世代。ハードリンクで容量を節約し、同じ人の10分以内の連続保存は間引く。
  • 認証はNGWのパスワード。失敗ロックあり、HTTPS必須。

失敗1:Web画面だけで十分だと思った

導入先はWindows 11が前提だ。最初はWeb画面だけで作った。

気づいたのは、使う場面を想像したときだ。Web専用だと、「ダウンロード → 修正 → アップロード」になる。上書きされない。古い版が出回る。

普通のNASのように、エクスプローラやFinderから開いて、そのまま上書き保存できて、初めて使われる。そう判断して、WebDAVを足した。

実機で確かめたのは、Windows 11(ネットワークドライブ、ExcelとLibreOffice)と、MacのFinder(サーバへ接続)。MS Officeでの上書き保存・保護ビュー・同時編集は、未確認のままだ。

失敗2:WebDAVはHTTPSでないと実用にならない

Windows標準のWebDAVクライアントは、HTTP+Basic認証を嫌う。だからHTTPS必須にした。

LGWANなので、公的な証明書は使えない。自前のCAを立て(ngw-https-setup.sh)、ルート証明書を各端末へ配る運用にした。課題として残るのは、保守コンソールからHTTPS対応を操作できるようにすること。まだ手作業が残っている。

事故:DB入替でNGWASが消えた

10月16日、団体のDBを入れ替えたら、NGWASの表とメニューが消えた。別の消防用DBには、最初から未登録だった。

原因は単純だった。DBへ直接入れただけで、更新SQLをリポジトリに置いていなかった。 動いていたので、置いた気になっていた。

対策は、団体別の更新SQLに冪等な形で移し、団体種別のプリセットにも加えること。教訓は1行になった。

新しいDB設定は、DBに直接入れる前に、リポジトリのSQLに置く。

人は覚えていない。だから手順にした。

なぜ「小規模団体専用」と言い切るのか

  • ファイルの実体は、1台のサーバのディスク。ファイルサーバ専用機にある冗長化・スナップショット・クォータ運用・ウイルス対策連携は無い。
  • 同時編集・排他は限定的。ロックは持つが、Officeの共同編集の代わりにはならない。
  • 容量は、専用SSDの1〜2TBを想定している。添付が年間約170GB増える団体の「全課の共有フォルダ」を、丸ごと置く用途ではない。
  • 認証はNGWのパスワードと一体。AD/LDAP連携はしない。

だから結論はこうなる。大規模団体には、既存のファイルサーバを勧める。 それを正直に書くほうが、できることも信用してもらえると思っている。作れる機能と、勧められる機能は違う。

AIとの協働作業での学び

「使われるか」は、AIに聞くまで私も考えていなかった。 Web画面ができた時点で、機能は揃っていた。使う場面を細かく想像する作業に入って初めて、WebDAVが要ると分かった。AIは機能を作るのは速いが、使う人の手の動きは、こちらが言葉にして渡す必要がある。

AIは「できます」と言い、私は「できないこと」を書く。 作る側は、できることを並べたくなる。小規模団体専用という線は、AIの案ではなく私の判断だった。できないことの一覧を、先に自分で持っておく。

消えた事故は、AIの失敗ではない。 DBに直接入れる近道を選んだのは、私とAIの合作だ。手順に直すところまでやって、初めて学んだことになる。