OSSでグループウェアを自作して公開した話
「グループウェア、結局どれも微妙じゃないですか?」
スケジュール・ワークフロー・掲示板はあるけど、業務にピッタリはまらない。
カスタマイズもできず、気づけばExcelと別システムが増えていく。
だったら自分で作ろうと思って、全部入りのグループウェアをOSSとして公開しました。
この記事では、このグループウェアで何ができるのか、どんな構成で作っているのか、技術的にどこが面白いのかを整理して紹介します。
これ何?
一言でいうと、OSSのグループウェアです。
ただ、単なるスケジュール共有ツールではありません。
- スケジュール管理
- ワークフロー
- Webデータベース
- タスク管理
- メッセージ
- ファイル管理
- 日報
- 掲示板
- 通知
- 施設予約
- アドレス帳
- 全文検索
- CSVインポート
- 外部連携
まで含んだ、かなり広い業務向けシステムです。
つまり、これは「ただのグループウェア」ではなく、
業務基盤として育てられるOSS です。
なぜ作ったのか
既存のグループウェアは便利です。
でも、実際に業務で使うと、次のような問題が出てきます。
- 微妙に自社業務に合わない
- 画面や項目を自由に変えにくい
- ワークフローをもっと細かく設計したい
- 台帳や案件管理は別システムになる
- 中身が見えないので改善しにくい
- 結局Excel運用が残る
要するに、完成品としては優秀でも、
「自社に合わせて育てる」ことが難しい 場面があるわけです。
だったら、自分で作ったほうが早い。
しかも、それを自分だけで閉じるのではなく、OSSとして公開したほうが価値が大きいと思いました。
一番の特徴は Webデータベース機能
このグループウェアの特徴をひとつ挙げるなら、私はWebデータベース機能だと思っています。
普通のグループウェアは、予定共有や掲示板、申請までは強いです。
でも、そこから先の実務になると、別の管理表や別のDBが必要になります。
たとえば、こんなものです。
- 顧客管理
- 案件管理
- 問い合わせ管理
- 契約台帳
- 設備台帳
- 社内申請の記録
- 独自業務の管理表
このあたりを全部別に持つと、情報が散らかります。
一方、このOSSにはWebデータベース機能があるので、
グループウェアの中に、自社専用の業務DBを持てる ようになります。
ここがかなり大きいです。
「予定を共有するだけ」のツールではなく、
業務そのものを載せていける土台 になります。
できること
ここからは、機能ごとにざっくり見ていきます。
1. 組織管理・ユーザー管理
業務システムの土台になる機能です。
- 組織の作成・編集
- 階層構造の管理
- ユーザーの作成・編集
- 所属組織の管理
- 主所属の変更
- パスワード変更
- CSVインポート
グループウェアは結局、人と組織の情報が整っていないと回りません。
そこを最初から中核に置いています。
2. スケジュール管理
予定管理は、個人だけでなく組織単位でも使えるようにしています。
- 個人の日表示
- 個人の週表示
- 個人の月表示
- 組織の日表示
- 組織の週表示
- 組織の月表示
- 参加者管理
- 参加状態の更新
ここで重要なのは、単なる個人カレンダーではなく、
組織の動きまで見える ことです。
- 誰が外出しているか
- 誰が会議中か
- 部門全体の予定がどうなっているか
を把握しやすい構成にしています。
3. メッセージ機能
社内の連絡を、メールだけに依存しない形で管理できます。
- 受信トレイ
- 送信済み
- スター付き
- 新規作成
- 返信
- 全員に返信
- 転送
- 既読 / 未読管理
- 未読件数の取得
これによって、社内のやり取りをグループウェア内で閉じやすくなります。
4. ワークフロー
この機能はかなり作り込んでいます。
- テンプレート一覧
- テンプレート作成
- テンプレート編集
- フォーム設計
- 承認経路設計
- 申請一覧
- 承認待ち一覧
- 新規申請
- 申請編集
- 申請詳細
- 代理承認設定
- コメント
- PDF出力
- CSV出力
- 統計情報
単に「申請できる」だけではありません。
申請の仕組みそのものを設計できる のがポイントです。
会社によって、申請書も承認ルートも違います。
そこを柔軟に組めるようにしています。
5. Webデータベース
この機能が、グループウェアを業務基盤に変えます。
- データベース作成
- データベース編集
- フィールド管理
- レコード一覧
- レコード作成
- レコード編集
- レコード詳細
- CSVエクスポート
- CSVインポート
- リレーション設定
- 関連レコード取得
- 逆参照
- ルックアップ
この機能があることで、単なる情報共有を超えて、
独自の業務アプリの土台 として使えるようになります。
6. タスク管理
タスク管理は、個人・チーム・組織で使えるようにしています。
- 個人ボード
- チームボード
- 組織ボード
- チーム作成
- ボード作成
- リスト作成
- カード作成
- コメント
- ラベル
- チェックリスト
- メンバー追加
- 並び順変更
イメージとしては、Kanban型の仕事管理です。
- 自分のタスク整理
- チームの進捗管理
- 部門単位の案件管理
などに使えます。
7. 日報
日報機能も入れています。
- 日報一覧
- 日報作成
- 日報編集
- 日報詳細
- テンプレート
- コメント
- いいね
- 統計
単なる記録で終わらず、
日々の活動の蓄積とマネジメントに使える構成です。
8. 通知
見落としを防ぐための通知機能もあります。
- 通知一覧
- 未読通知の取得
- 個別既読
- 全件既読
- 通知設定
予定、申請、メッセージ、更新情報などを拾いやすくする役割です。
9. ファイル管理
ファイル管理も、ただのアップロード機能ではありません。
- フォルダ作成
- フォルダ編集
- ファイルアップロード
- ダウンロード
- 権限更新
- チェックアウト
- チェックイン
- 承認依頼
- 承認 / 却下
- 削除
共有フォルダ的に使うだけでなく、
文書統制や運用ルールを意識した使い方 に寄せています。
10. 掲示板
掲示板機能もあります。
- 投稿一覧
- 新規投稿
- 編集
- 削除
- カテゴリ管理
- コメント
- コメント削除
社内通知や部門別の周知に使えます。
11. 施設予約
会議室や設備予約向けです。
- 予約一覧
- 新規予約
- 施設管理
- 施設追加
- 施設削除
重複利用の防止や、共有設備の見える化に使えます。
12. アドレス帳
アドレス帳も独立機能として入れています。
- 一覧
- 新規作成
- 詳細
- 編集
- 削除
社内外の連絡先をまとめて管理できます。
13. 全文検索
情報が増えたときに効いてくる機能です。
- 横断検索
- API経由の検索
グループウェアは運用が続くほど情報量が増えるので、
検索性はかなり重要です。
14. 外部連携
閉じたツールにならないように、外部連携も用意しています。
- ICS公開
- カレンダー購読
- 公開用トークン
- CSVエクスポート
- ICSインポート
- 設定保存
既存カレンダーとの連携や、データ持ち出しの足場になります。
技術的な構成
構成はかなりシンプルです。
ディレクトリ構成
groupware/
├── Controllers/
├── Models/
├── Core/
├── config/
├── db/
├── public/
├── views/
├── scripts/
わかりやすい独自MVC構成です。
フレームワークなし(自前MVC)
$router = Core\Router::getInstance();
$auth = Core\Auth::getInstance();
- Router自作
- Auth自作
- シンプルな構成
- 追いやすい責務分離
業務アプリは長く育てることが前提になるので、
読みやすさと拡張しやすさ を重視しています。
APIがしっかり切られている
$router->apiGet('/schedule/day', function ($params) {
$controller = new Controllers\ScheduleController();
return $controller->apiGetDay($params);
}, true);
$router->apiPost('/workflow/requests', function ($params, $data) {
$controller = new Controllers\WorkflowController();
return $controller->apiCreateRequest($params, $data);
}, true);
画面ルートとAPIルートがかなり整理されています。
たとえば、
/schedule/.../workflow/.../task/.../webdatabase/.../notifications/...
のように、機能単位でルーティングがまとまっています。
これは地味ですが大きいです。
将来的に、
- フロントを分離する
- SPA化する
- モバイル対応する
- 外部システムから叩く
といった拡張がしやすくなります。
コントローラ単位で分離
ScheduleControllerWorkflowControllerTaskControllerWebDatabaseControllerMessageControllerNotificationControllerDailyReportController
といった形で、機能ごとにコントローラが分かれています。
そのため、機能追加や改修の入り口がわかりやすく、
どこを触ればいいか追いやすい 構成です。
このOSSの本質
普通のグループウェアは、情報共有のためのツールです。
もちろんそれは重要です。
ただ、実務では情報共有だけでは足りません。
- データを持ちたい
- 承認を回したい
- タスクを管理したい
- ファイルを統制したい
- 通知したい
- 検索したい
- 組織構造と結びつけたい
そうなると、必要なのは単機能ツールではなく、
仕事が乗る基盤 です。
このOSSは、そこを狙っています。
他グループウェアとの違い
既存の商用グループウェアが強いのは事実です。
- 導入しやすい
- サポートがある
- 実績がある
- 安心感がある
これは本当に大きな価値です。
一方で、このOSSが強いのは別の方向です。
| 項目 | このOSS | 商用グループウェア |
|---|---|---|
| ソースが見える | ◎ | × |
| 自由に改修できる | ◎ | △ |
| 独自業務に寄せやすい | ◎ | △ |
| 導入の手軽さ | △ | ◎ |
| サポート | △ | ◎ |
| 内製との相性 | ◎ | △ |
つまり、
- 完成品としての強さは商用
- 育てる基盤としての強さはOSS
という違いがあります。
なぜOSSにしたのか
理由はシンプルです。
業務は会社ごとに違うから です。
同じ「申請」でも会社ごとに違います。
同じ「台帳」でも業界ごとに違います。
同じ「タスク管理」でもチームごとに違います。
だったら、閉じた製品より、
開いた形で共有したほうが価値が大きいと考えました。
OSSなら、
- 改修できる
- 拡張できる
- 連携できる
- 学べる
- 参加できる
からです。
こんな人におすすめ
このOSSは、特に次のような人に刺さると思っています。
- 社内システムを内製したい人
- PHPで業務アプリを作るのが好きな人
- グループウェアをベースに独自システムを育てたい人
- OSSに参加したい人
- 業務改善をシステムで進めたい人
今後やりたいこと
今後さらに強化したいのはこのあたりです。
- UI / UX改善
- Docker対応
- API整理
- 権限強化
- モバイル最適化
- 監査ログ
- 通知強化
- 連携機能の拡充
土台はできているので、ここからさらに育てていきたいと思っています。
触ってみてください
まずはデモを触ってみてください。
実際に見てもらうと、
「ただの予定表ではない」というのが伝わると思います。
最後に
グループウェアは、導入して終わりのツールではないと思っています。
本当に価値が出るのは、
- 会社の運用に合わせて
- データがたまり
- 仕事が乗り
- 改善が回り
- 少しずつ育っていく
ときです。
だからこそ、
グループウェアは「導入するもの」ではなく、
育てるもの だと思っています。
もし興味を持っていただけたら、ぜひ触ってみてください。
感想、Issue、PRも歓迎です。