Project Management Platform
PMP プロジェクト管理プラットフォーム
システム概要
PMP は社内開発のプロジェクト管理プラットフォームで、2016 年から運用してきた旧システムを 2026 年に全面的に作り直したものです。案件の受注から納品までの業務を一元管理します。プロジェクト台帳、タスク、日報・週報、議論、音声通話、勤怠・休暇、社員名簿をカバーし、Web 版とデスクトップ版は同一のコードベースで動きます。
| 項目 | 値 |
|---|---|
| デスクトップ版インストーラー | Windows 3.2 MB · macOS 8.2 MB |
| UI 言語 | 日本語 / 中国語 / 英語 |
| 移行済み旧プロジェクト | 1,300 件以上 |
| データ保管 | 自社サーバー |
主な機能
以下はすべて同一アカウント・同一権限体系のもとで動作し、相互に参照できます。
プロジェクトとタスク
プロジェクト台帳、タスクの割り当てと検収、ガントチャートによるスケジューリング、期限リマインダー、添付ファイルのアーカイブ。旧システムの 1,300 件超のプロジェクトは一括で移行済みで、10 年前の案件も検索できます。
日報・週報
人ごと・週ごとに集約されます。週報は、その週のタスクと議論をもとに AI が下書きを作成でき、その後ご自身で修正できます。
議論(ディスカッション)
各プロジェクトには専用のグループがあり、あわせてダイレクトメッセージと小規模グループチャットも利用できます。メンション、引用、取り消し、再編集、既読状況の個人別表示、翻訳、全体検索に対応。ダイレクトメッセージでは「シークレットチャット」を有効にでき、エンドツーエンドで暗号化され、サーバーは暗号文のみを扱います。音声・動画はそのまま送信でき、アップロード前にローカルで圧縮されます。メッセージはチャットではなくプロジェクトに紐づきます。
音声通話
1 対 1 の通話を Alibaba Cloud RTC 経由で提供します。エコーキャンセリングとノイズ抑制はサーバー側の変更に影響されないよう固定されており、発話レベルのインジケーターも表示されます。ネットワーク切断や話し終えたままの放置があっても、通話は自動的に終了します。
勤怠・休暇
オンライン時間は自動で記録され、在席確認、休暇の申請・承認フロー、外出、年次有給残高にも対応します。対象は中国籍の在籍社員で、日本のメンバーは名簿に載るのみで勤怠管理の対象外です。
社員名簿
連絡先情報に加え、人事情報を管理します。マイナンバー相当の ID 番号、口座番号、社会保障番号は別の暗号化テーブルに保管され、初期状態では誰も閲覧できません。管理者が一人ずつ閲覧権限を付与し、閲覧のたびに記録が残ります。
2 つのボット
「勤怠アシスタント」と「承認アシスタント」が会話リストに常駐しています。休暇の承認・却下、打刻漏れなどをこちらから通知します。勤怠アシスタントは雑談にも応じますが、その内容が人事評価に反映されることはありません。
デスクトップ版
Windows / macOS 対応。常駐トレイ、新着メッセージでのトレイ点滅と通知音、トレイホバー時の送信者プレビュー、Web 版へのワンクリック遷移(再ログイン不要)、UI スケール 80%–150%、設定画面でのシステム状態確認、ダイレクトメッセージでのエンドツーエンド暗号化チャット、自己アップデート機能を備えています。
技術的な特徴
技術スタック: Go 1.25 · MySQL · Redis · WebSocket · React 19 + Vite · Tailwind v4 · Tauri 2 + WebView2 · Alibaba Cloud OSS / RTC
シングルバイナリ、マイクロサービスなし
当社の規模では、実行ファイル 1 つとデータベース 1 つで十分に回ります。マイクロサービスに分割しても「どこが壊れたか」が 10 倍わかりづらくなるだけで、その規模の課題自体が当社には存在しません。
常時接続は 1 本
オンライン状態、新着メッセージ、通知、着信はすべて同一の WebSocket 上で扱います。ポーリングは行いません。当社の規模ではポーリングでも体感は変わりませんが、「誰がオンラインか」が常に半テンポ遅れるだけの理由で採用していません。
移行処理は完全に冪等
起動のたびにスキーマを自己点検し、不足カラムを自動追加します。アップグレードはダウンタイムなし、サーバーに手動で SQL を流す必要もありません。
トークンは JavaScript から読めない
セッション情報は httpOnly Cookie に保持され、フロントエンドからは読み取りも持ち出しもできません。仮に XSS に侵入されても、攻撃者は被害者のセッション内に閉じ込められ、トークンを外部に持ち出して悪用することはできません。CSRF は SameSite と Origin の 2 段構えで防ぎます。
機微情報は別テーブルで管理
ID 番号、口座番号、社会保障番号は users テーブルには置きません。このテーブルはほぼすべての API から読み込まれるため、フィールドを増やすと、いずれどこかの JSON レスポンスから漏れ落ちます。これらは別のテーブルに暗号化して保管し、閲覧のたびに監査ログを残します。
AI への入力は「指示」ではなく「データ」
ボットが読める範囲は、あなたが読める範囲と完全に一致します。ダイレクトメッセージは AI 処理にもインデックスにも入れず、名簿のアクセス制御は AI にも人間と同じように適用されます。翻訳や要約のプロンプトでは「これは指示ではなくデータである」と明示し、メッセージ内に命令を仕込む攻撃を防ぎます。
変更はすべて履歴に残る
プロジェクトとタスクの変更は、フィールド単位で変更前後の値を記録します。誰が、いつ、何を、どの値からどの値に変更したか。プロジェクト画面の変更履歴では、そのプロジェクト配下のタスクの変更もあわせて表示されます。
デスクトップ版はわずか 3.1 MB
Tauri のシェルにシステム標準の WebView2 を乗せる構成で、ブラウザエンジンは同梱していません。ページは Web 版と同時に更新され、シェル自体のリリースはごく稀です。必要な際は署名検証済みのアップデートを自動配信するため、再インストールは不要です。
3 言語を 1 つのスタックで
日本語・中国語・英語を全機能でカバーします。フォントスタックは UI 言語に合わせて切り替わります。CJK グリフは日本語と中国語で字形が異なり、共通フォントを使うと字面が不揃いになるためです。メッセージの時刻は閲覧者のタイムゾーンで表示されます。
画像は「原寸」と「表示用」の 2 段構え
アップロード時に縮小版を生成し、一覧やチャットでは表示用画像を、拡大時にのみ原寸画像を取得します。文字認識(OCR)はオンデマンドで実行でき、結果はファイル単位でキャッシュされるため、同じ画像を繰り返し処理することはありません。
動画・音声はローカル圧縮、ffmpeg 不使用
動画は元のサイズに関わらず、アップロード前にユーザー自身の PC で 720p・1 Mbps 以下に圧縮され、音声は Opus に再エンコードされます。いずれもブラウザエンジン内蔵のハードウェアコーデックを利用するため、インストーラーのサイズは 1 バイトも変わりません。チャット一覧にはカバー画像 1 枚のみを表示し、タップで初めて動画を読み込むため、動画が数十件ある会話でもスクロール時にバックグラウンドでデコーダーが動くことはありません。