3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OSSでグループウェアを自作して公開した話

3
Posted at

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化する
  • モバイル対応する
  • 外部システムから叩く

といった拡張がしやすくなります。

コントローラ単位で分離

  • ScheduleController
  • WorkflowController
  • TaskController
  • WebDatabaseController
  • MessageController
  • NotificationController
  • DailyReportController

といった形で、機能ごとにコントローラが分かれています。

そのため、機能追加や改修の入り口がわかりやすく、
どこを触ればいいか追いやすい 構成です。


このOSSの本質

普通のグループウェアは、情報共有のためのツールです。

もちろんそれは重要です。
ただ、実務では情報共有だけでは足りません。

  • データを持ちたい
  • 承認を回したい
  • タスクを管理したい
  • ファイルを統制したい
  • 通知したい
  • 検索したい
  • 組織構造と結びつけたい

そうなると、必要なのは単機能ツールではなく、
仕事が乗る基盤 です。

このOSSは、そこを狙っています。


他グループウェアとの違い

既存の商用グループウェアが強いのは事実です。

  • 導入しやすい
  • サポートがある
  • 実績がある
  • 安心感がある

これは本当に大きな価値です。

一方で、このOSSが強いのは別の方向です。

項目 このOSS 商用グループウェア
ソースが見える ×
自由に改修できる
独自業務に寄せやすい
導入の手軽さ
サポート
内製との相性

つまり、

  • 完成品としての強さは商用
  • 育てる基盤としての強さはOSS

という違いがあります。


なぜOSSにしたのか

理由はシンプルです。

業務は会社ごとに違うから です。

同じ「申請」でも会社ごとに違います。
同じ「台帳」でも業界ごとに違います。
同じ「タスク管理」でもチームごとに違います。

だったら、閉じた製品より、
開いた形で共有したほうが価値が大きいと考えました。

OSSなら、

  • 改修できる
  • 拡張できる
  • 連携できる
  • 学べる
  • 参加できる

からです。


こんな人におすすめ

このOSSは、特に次のような人に刺さると思っています。

  • 社内システムを内製したい人
  • PHPで業務アプリを作るのが好きな人
  • グループウェアをベースに独自システムを育てたい人
  • OSSに参加したい人
  • 業務改善をシステムで進めたい人

今後やりたいこと

今後さらに強化したいのはこのあたりです。

  • UI / UX改善
  • Docker対応
  • API整理
  • 権限強化
  • モバイル最適化
  • 監査ログ
  • 通知強化
  • 連携機能の拡充

土台はできているので、ここからさらに育てていきたいと思っています。


触ってみてください

まずはデモを触ってみてください。

実際に見てもらうと、
「ただの予定表ではない」というのが伝わると思います。


最後に

グループウェアは、導入して終わりのツールではないと思っています。

本当に価値が出るのは、

  • 会社の運用に合わせて
  • データがたまり
  • 仕事が乗り
  • 改善が回り
  • 少しずつ育っていく

ときです。

だからこそ、
グループウェアは「導入するもの」ではなく、
育てるもの だと思っています。

もし興味を持っていただけたら、ぜひ触ってみてください。
感想、Issue、PRも歓迎です。

3
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?