INPortal 機能仕様書
作成日: 2025-12-28
最終更新: 2026-01-07
バージョン: 2.3
目次
- システム概要
- 出退勤ボード (inportal-attendance)
- チェックイン (inportal-location-checkin)
- 会議室予約 (inportal-location-checkin)
- ポイントシステム (company-point-system)
- PWA・プッシュ通知 (inportal-pwa-addon)
- 多言語翻訳 (inportal-article-translation)
- KITA Times 社内報 (page-kitatimes.php)
- KnowledgeYard (外部連携)
- テーマ (kitanihon-portal)
- 技術仕様
1. システム概要
1.1 概要
北日本造船株式会社の社内ポータルサイト。PWA対応でモバイルアプリとして利用可能。
1.2 主要機能一覧
| 機能 |
説明 |
| 出退勤ボード |
社員の勤務状況をリアルタイム表示 |
| 会議室予約 |
会議室のQRチェックイン・予約管理 |
| KITA Times |
社内報記事の閲覧(多言語対応) |
| ポイントシステム |
活動ポイントの申請・景品交換 |
| お知らせ |
重要なお知らせの配信・表示 |
| プッシュ通知 |
FCM経由でのプッシュ通知 |
1.3 システム構成
WordPress (本体)
├── kitanihon-portal (テーマ)
├── inportal-attendance (出退勤ボード)
├── inportal-location-checkin (会議室予約)
├── inportal-pwa-addon (PWA・プッシュ通知)
├── inportal-article-translation (多言語翻訳)
├── company-point-system (ポイントシステム)
└── super-progressive-web-apps (PWA基盤)
2. 出退勤ボード (inportal-attendance)
2.1 概要
社員の勤務状況をリアルタイムで表示・管理するプラグイン。
2.2 機能一覧
| 機能 |
説明 |
| 出勤・休憩・退勤切替 |
ワンタップでステータス変更 |
| 休憩時間設定 |
休憩開始時に戻り時間を設定 |
| 休憩超過アラート |
設定時間を超過したら通知 |
| 社員マスタCSVインポート |
CSVから社員情報を一括登録 |
| 深夜自動リセット |
AM3:00に全員のステータスをリセット |
| QR認証ログイン |
QRコードをスキャンして出勤登録 |
| 静的JSON配信 |
パフォーマンス向上のためJSON配信 |
| 部署フィルター |
部署別に社員を絞り込み表示 |
2.3 ステータス種別
| ステータス |
値 |
表示色 |
| 未出勤/退勤済 |
absent |
グレー(赤) |
| 出勤中 |
present |
白 |
| 休憩中 |
break |
オレンジ |
2.4 データベーステーブル
| テーブル名 |
用途 |
wp_pwa_employee_master |
社員マスタ(CSV取り込み) |
wp_usermeta |
ステータス情報(ipa_status, ipa_department 等) |
wp_ipa_qr_tokens |
QR認証トークン |
wp_pwa_attendance_logs |
ステータス変更ログ |
2.5 REST API エンドポイント
| メソッド |
エンドポイント |
説明 |
| GET |
/wp-json/inportal-attendance/v1/board |
ボードデータ取得 |
| POST |
/wp-json/inportal-attendance/v1/status |
ステータス更新 |
| GET |
/wp-json/inportal-attendance/v1/departments |
部署一覧取得 |
2.6 静的JSON配信
- ファイルパス:
wp-content/uploads/inportal-attendance/attendance_data_v1_*.json
- 更新タイミング: ステータス変更時、CSVインポート時、日次リセット時
- セキュリティ:
.htaccessでインデックス禁止、noindex設定
2.7 サーバー負荷対策
| 対策 |
実装内容 |
| 静的JSON配信 |
PHP処理をバイパスし、1600名以上の同時アクセスにも対応 |
| ポーリング間隔 |
5秒間隔(クライアント側でリアルタイム性と負荷のバランスを考慮) |
| 可視性検出 |
ブラウザタブ非表示時はポーリングを停止 |
| データ最小化 |
JSONキーを1文字に短縮(n, e, c, d, g, r, s, b)しデータサイズを削減 |
| 排他制御 |
ファイル書き込み時にLOCK_EXで競合を防止 |
設計根拠: 1600名以上の社員が同時にボードを閲覧した場合、PHP+DBアクセスでは Xserver の同時接続制限を超過するリスクがあるため、静的ファイル配信を採用。
2.8 管理画面機能
- 社員マスタ管理(CRUD)
- CSVインポート
- 部署表示名・順序設定
- ステータス手動リセット
3. チェックイン (inportal-location-checkin)
3.1 概要
場所へのQRコードチェックイン機能。現在は会議室のみ対応だが、今後作業場所等への拡張を予定。
[!NOTE]
会議室予約機能と同一プラグインで実装されており、データベースを共有しています。
3.2 機能一覧
| 機能 |
説明 |
| QRチェックイン |
QRコードスキャンで場所にチェックイン |
| 利用時間設定 |
チェックイン時に利用予定時間を設定 |
| 時間延長 |
利用中に時間延長が可能 |
| チェックアウト |
退室時にチェックアウト |
| 在室者表示 |
現在の利用者をリアルタイム表示 |
| リマインダー通知 |
終了時間前にプッシュ通知 |
3.3 現在の対応場所タイプ
| type |
説明 |
対応状況 |
| room |
会議室 |
✅ 対応済み |
| area |
作業エリア |
🔜 今後対応予定 |
| gate |
工場ゲート |
🔜 今後対応予定 |
3.4 将来拡張方針
- UI: チェックイン画面内に場所タイプ切替ボタンを設置
- DB: 既存の
wp_locations.typeカラムで場所タイプを区別
- API: 現在のAPIはタイプに依存しない設計のため、そのまま利用可能
3.5 管理画面機能
| 機能 |
説明 |
| 場所一覧 |
登録場所とタイプ、在室者数の確認 |
| QRコード発行 |
各場所のチェックイン用QRコード生成・印刷 |
| チェックイン履歴 |
チェックイン・チェックアウトログの確認 |
| キオスクリンク |
各会議室のキオスクモードURL・QRコード発行 |
| ユーザーQR管理 |
キオスク用ユーザーQRトークンの発行・管理 |
3.6 キオスクモード
| 項目 |
内容 |
| URL形式 |
?mode=kiosk&location_id=X |
| 管理画面 |
場所管理 → キオスクリンク |
| 用途 |
タブレット等で会議室入口に全画面表示 |
| 機能 |
QRスキャン入退室、在室者表示、次の予約表示 |
3.7 REST API エンドポイント
| メソッド |
エンドポイント |
説明 |
| GET |
/wp-json/location/v1/list |
ロケーション一覧 |
| POST |
/wp-json/location/v1/checkin |
チェックイン |
| POST |
/wp-json/location/v1/checkout |
チェックアウト |
| GET |
/wp-json/location/v1/occupants/{id} |
在室者一覧 |
| GET |
/wp-json/location/v1/by-token/{token} |
QRトークンで場所取得 |
3.8 リマインダー通知
- Cronジョブ: 毎分実行
- 通知タイミング: 終了5分前
- 配信方法: FCMプッシュ通知
3.9 サーバー負荷対策
| 対策 |
実装内容 |
| 静的JSON配信 |
予約・チェックイン情報を静的ファイルで配信 |
| ファイルパス |
wp-content/uploads/inportal-location-checkin/location_reservations_v1_*.json |
| ポーリング間隔 |
5秒間隔(チェックイン画面、キオスクモード) |
| データ範囲 |
未来30日分のみ取得しJSONサイズを制限 |
| キー短縮 |
JSONキーを短縮(id, lid, uid, t, d, s, e, ln, f, en, ut)しデータサイズを削減 |
4. 会議室予約 (inportal-location-checkin)
4.1 概要
会議室の事前予約・カレンダー管理機能。チェックイン機能と連携。
[!NOTE]
チェックイン機能と同一プラグインで実装されており、データベースを共有しています。
4.2 機能一覧
| 機能 |
説明 |
| 予約作成 |
会議室の事前予約(日時・タイトル・部署) |
| 予約一覧 |
カレンダー形式で予約を確認 |
| 予約編集 |
時間・会議室の変更 |
| 予約キャンセル |
予約の取り消し |
| 重複チェック |
同一時間帯の予約を防止 |
4.3 会議室一覧(デフォルト)
| 会議室名 |
階 |
| 大会議室 |
2F |
| 応接室1〜4 |
2F |
| 応接室5〜7 |
3F |
| MTR1〜3 |
4F |
| 大会議室 |
4F |
※ 管理画面から追加・編集可能
4.4 データベーステーブル(チェックインと共有)
| テーブル名 |
用途 |
wp_locations |
ロケーションマスタ |
wp_location_checkins |
チェックイン履歴 |
wp_location_reservations |
予約情報 |
4.5 予約API(AJAXハンドラ)
| アクション |
説明 |
wp_ajax_location_reserve |
予約作成 |
wp_ajax_location_get_reservations |
予約一覧取得 |
wp_ajax_location_update_reservation |
予約更新 |
wp_ajax_location_cancel_reservation |
予約キャンセル |
5. ポイントシステム (company-point-system)
5.1 概要
社員の活動に対してポイントを付与し、景品と交換できるシステム。管理画面での活動・景品マスタ管理、ポイント有効期限管理、支給管理機能を提供。
5.2 機能一覧
| 機能 |
説明 |
| 活動申請 |
ポイント獲得活動の申請(社員番号・氏名入力フォーム) |
| 景品申請 |
保有ポイントを使用して景品を申請 |
| ポイント確認 |
社員番号で現在のポイント残高・履歴確認 |
| ポイント有効期限 |
年度ベースで翌々年度末まで有効 |
| 管理者承認 |
申請の承認・却下 |
| 支給管理 |
景品の支給済み/未支給ステータス管理 |
| マスタ管理 |
活動内容・景品の追加・編集・削除・並び替え |
| ユーザー情報不一致解決 |
社員番号重複時のダイアログ処理 |
5.3 デフォルト活動内容とポイント
| キー |
活動内容 |
ポイント |
| interview |
社内報インタビュー協力 |
5pt |
| article |
社内報記事情報提供 |
5pt |
| instagram |
会社インスタ投稿への協力 |
5pt |
| photo |
社内報顔写真協力 |
10pt |
| event |
社内イベントの企画・運営補助 |
15pt |
※ 管理画面から活動内容・ポイント数をカスタマイズ可能
5.4 デフォルト景品とポイント
| キー |
景品名 |
必要ポイント |
| drink |
自販機ジュース |
2pt |
| bento500 |
500円相当のお弁当 |
5pt |
| ticket |
スポーツ観戦チケット |
10pt |
| sweets |
有名ブランド菓子 |
15pt |
| bento1500 |
1500円相当のお弁当 |
15pt |
| wear |
会社ロゴ入りパーカーorティーシャツ |
20pt |
| office |
オフィス用品アップグレード券 |
25pt |
| bike |
通勤用自転車 |
30pt |
| gym |
フィットネスジム1ヶ月利用権 |
35pt |
| themepark |
テーマパークペアチケット |
50pt |
※ 管理画面から景品・ポイント数をカスタマイズ可能
5.5 データベーステーブル
| テーブル名 |
用途 |
wp_cps_user_points |
ユーザーポイント残高(社員番号、氏名、会社名、ポイント) |
wp_cps_requests |
申請履歴(活動/景品、ステータス、承認日時、支給日時) |
wp_cps_point_expiry |
ポイント有効期限管理 |
5.6 申請フロー
[ユーザー] 活動/景品フォーム入力
↓
[システム] 社員番号の重複チェック
↓(不一致があれば)
[ユーザー] 情報解決ダイアログで選択
↓
[システム] 申請をDBに保存(status: pending)
↓
[管理者] 管理画面で承認/却下
↓(承認時)
[システム] ポイント加算/減算
↓(景品の場合)
[管理者] 支給済みに変更
5.7 管理画面タブ構成
| タブ |
内容 |
| 保留中 |
未処理の申請一覧(承認/却下ボタン) |
| 申請履歴 |
全申請履歴(一括削除可) |
| 承認済み景品 |
景品支給管理(支給済み/未支給切替) |
| ユーザー登録 |
手動でのユーザー作成 |
| ポイント有効期限 |
期限管理 |
| 活動内容管理 |
活動マスタ(追加/編集/削除/並び替え) |
| 景品内容管理 |
景品マスタ(追加/編集/削除/並び替え) |
| 設定 |
申請IDリセット等 |
5.8 ショートコード
| ショートコード |
説明 |
[cps_tabbed_forms] |
タブ形式の統合フォーム(活動申請/景品交換/ポイント確認) |
[cps_activity_form] |
活動申請フォーム単体 |
[cps_reward_form] |
景品申請フォーム単体 |
[cps_point_checker] |
ポイント確認フォーム単体 |
[cps_user_dashboard] |
ユーザーダッシュボード |
5.9 ポイント有効期限ルール
- 付与日: 管理者が承認した日
- 年度開始: 4月1日
- 有効期限: 付与年度の翌々年度末(3月31日)
例: 2025年5月承認 → 2024年度扱い → 2027年3月31日まで有効
6. PWA・プッシュ通知 (inportal-pwa-addon)
6.1 概要
Super PWAプラグインを拡張し、FCMプッシュ通知機能を提供。
6.2 機能一覧
| 機能 |
説明 |
| PWAインストール |
ホーム画面へのアプリアイコン追加 |
| オフライン対応 |
Service Workerによるキャッシュ |
| プッシュ通知 |
Firebase Cloud Messagingによる通知 |
| 通知購読管理 |
ユーザーごとの購読状態管理 |
| 即時更新機能 |
SW更新時の自動リフレッシュ |
| 重要なお知らせモーダル |
お知らせポップアップ表示 |
6.3 Service Worker機能
| 機能 |
説明 |
| キャッシュ戦略 |
Network First with Cache Fallback |
| skipWaiting |
新SW即時有効化 |
| clients.claim |
即時制御開始 |
| 自動更新検知 |
クライアント側で更新検知・リロード |
6.4 データベーステーブル
| テーブル名 |
用途 |
wp_pwa_subscribers |
購読者情報 |
wp_pwa_notification_logs |
通知送信ログ |
wp_pwa_notification_queue |
送信キュー |
wp_pwa_notification_templates |
通知テンプレート |
wp_pwa_employee_master |
社員マスタ(Attendanceと共有) |
wp_pwa_attendance_status |
ステータス現状(冗長化用) |
wp_pwa_attendance_logs |
ステータス変更ログ |
wp_pwa_omikuji |
おみくじ機能(未使用) |
6.5 プッシュ通知設定
| 項目 |
値 |
| プロバイダー |
Firebase Cloud Messaging |
| プロジェクト |
inportal-3fb6e |
| サーバーキー |
Firebase Console管理 |
| VAPID公開鍵 |
設定済み |
6.6 REST API エンドポイント
| メソッド |
エンドポイント |
説明 |
| POST |
/wp-json/inportal-pwa/v1/subscriptions |
通知購読登録 |
| GET |
/wp-json/inportal-pwa/v1/subscriptions/status |
購読状態確認 |
| POST |
/wp-json/inportal-pwa/v1/employees/lookup |
社員情報検索 |
6.7 重要なお知らせ機能
- 管理画面: 設定 → 重要なお知らせ
- 表示条件: 有効期限内かつ未読の場合にモーダル表示
- 翻訳対応: 言語切替時にモーダル内容も翻訳
6.8 サーバー負荷対策(プッシュ通知)
送信方式
| 方式 |
用途 |
配信時間(1600名) |
サーバー負荷 |
| Topic送信(推奨) |
全員配信(scope=all) |
1秒以下 |
1リクエストのみ |
| 個別送信 |
特定者への配信 |
約3-5分 |
トークン数分のリクエスト |
Topic送信(高速配信)
- トピック名:
inportal_all
- 仕組み: FCMサーバー側で全購読者に分配(Googleインフラが処理)
- 条件: scope=all かつ個別フィルターなしの場合に自動選択
- フォールバック: Topic送信失敗時は個別送信に自動切替
個別送信(従来方式)
| 対策 |
実装内容 |
| キュー処理 |
通知はキューに登録し、Cronで毎分処理 |
| バッチサイズ |
1回の処理で5件のキューアイテムを処理 |
| 順次送信 |
トークンごとに順次FCMリクエストを送信 |
| 無効トークン削除 |
FCMエラーを受けた無効トークンを自動削除 |
トピック移行ツール
- 場所: 管理画面 → PWA Push設定 → FCMトピック移行ツール
- 機能: 既存購読者を
inportal_allトピックに一括登録
- チャンク処理: 1000件ずつ自動分割(FCMレート制限対策)
7. 多言語翻訳 (inportal-article-translation)
7.1 概要
KITA Times記事を4言語に翻訳して表示。Azure Translator APIを使用。
7.2 対応言語
| 言語 |
コード |
APIコード |
| 日本語 |
ja |
- |
| 英語 |
en |
en |
| インドネシア語 |
id |
id |
| 中国語(簡体) |
zh-Hans |
zh-Hans |
| タガログ語 |
tl |
fil |
7.3 翻訳対象
| 対象 |
翻訳方法 |
| 記事タイトル |
Azure API(バッチ翻訳) |
| 記事本文 |
Azure API(個別翻訳) |
| UI要素 |
PHPの静的辞書 _t() 関数 |
7.4 キャッシュ機能
| 項目 |
説明 |
| 保存先 |
wp_article_translations テーブル |
| 有効期限 |
無期限(記事更新まで保持) |
| 更新タイミング |
記事保存時に該当翻訳を削除 |
| 手動クリア |
管理画面 → 翻訳設定 → 全キャッシュ削除 |
7.5 技術仕様
| 項目 |
値 |
| API |
Microsoft Azure Translator |
| リージョン |
japaneast |
| 無料枠 |
200万文字/月 |
| HTMLタグ |
維持(textType=html) |
7.6 翻訳対象セレクタ
| セレクタ |
用途 |
.kp-article-content |
通常記事本文 |
.kp-article-title |
通常記事タイトル |
.app-news-detail__content |
お知らせ本文 |
.app-news-detail__title |
お知らせタイトル |
8. KITA Times 社内報 (page-kitatimes.php)
8.1 概要
社内報「KITA Times」の記事閲覧機能。カルーセルと記事セクションで構成されたマガジン風レイアウト。
8.2 機能一覧
| 機能 |
説明 |
| ヒーローカルーセル |
注目記事を5件までスライド表示 |
| 最新の記事 |
直近の投稿4件を表示 |
| 北日本造船を知る |
会社紹介カテゴリの記事4件 |
| インタビュー |
インタビュー記事の表示 |
| 多言語対応 |
記事翻訳プラグインと連携 |
| PDF表示 |
PDF添付記事は直接PDFを表示 |
8.3 URL
| 項目 |
URL |
| ホーム |
/kitatimes/ |
| 北日本造船を知る |
/category/know/ |
| 活動・出来事 |
/category/topic/ |
| インタビュー |
/category/interview/ |
| 過去の社内報 |
/category/bak/ |
8.4 ドロワーメニュー
社内報専用のドロワーメニューを表示(検索機能付き)。
9. KnowledgeYard (外部連携)
9.1 概要
社内ナレッジ検索システム。RAG(Retrieval-Augmented Generation)技術を使用した文書検索・質問応答機能を提供。
9.2 技術スタック
| 項目 |
技術 |
| フロントエンド |
React |
| バックエンド |
Python (Azure Functions) |
| 検索 |
Azure AI Search |
| ストレージ |
Azure Table Storage |
| ホスティング |
Azure Static Web Apps |
9.3 URL
| 環境 |
URL |
| 本番 |
https://lemon-smoke-0135ef100.3.azurestaticapps.net/ |
9.4 SSO連携
- INPortalからシングルサインオンでアクセス可能
- HMAC-SHA256署名によるトークン認証
- 詳細は
reference/sso-integration-spec.md を参照
9.5 アクセス制御
| 項目 |
内容 |
| 対象者 |
社内アクセスのみ |
| 表示 |
ドロワーメニューとホーム画面のグリッドに外部リンクとして表示 |
| 権限 |
INPortalログインユーザーのみ利用可能 |
10. テーマ (kitanihon-portal)
8.1 概要
INPortal専用のカスタムWordPressテーマ。
8.2 ページテンプレート
| ファイル |
用途 |
front-page.php |
トップページ(PC) |
front-page-app.php |
トップページ(モバイル) |
single.php |
記事詳細ページ |
index.php |
カテゴリアーカイブ |
page-new.php |
最新記事一覧 |
page-kitatimes.php |
KITA Timesホーム |
page-pform.php |
ポイントフォーム |
8.3 主要CSS
| ファイル |
用途 |
base.css |
基本スタイル |
app-home.css |
アプリ風UI用 |
8.4 主要JavaScript
| ファイル |
用途 |
app-home.js |
ドロワーメニュー・UI制御 |
pwa-refresh.js |
PWA更新リフレッシュ |
8.5 ドロワーメニュー構成
├── ホーム
├── お知らせ一覧
├── 出勤ボード
├── チェックイン
├── 会議室予約
├── 社内報
├── ナレッジヤード(外部リンク)
├── ポイント管理
├── 公式Instagram(外部リンク)
└── ログアウト/ログイン
8.6 セクションヘッダーデザイン
- アイコン:緑の円形(
::before疑似要素)
- 配置:インラインブロック + テキスト中央揃え
- 折り返し:
word-break: break-word 対応
11. 技術仕様
9.1 サーバー環境
| 項目 |
値 |
| ホスティング |
Xserver |
| PHP |
8.x |
| WordPress |
最新版 |
| SSL |
有効(HTTPS必須) |
9.2 外部サービス連携
| サービス |
用途 |
認証 |
| Firebase Cloud Messaging |
プッシュ通知 |
サーバーキー |
| Azure Translator |
多言語翻訳 |
APIキー |
9.3 Cronジョブ
| 処理 |
間隔 |
プラグイン |
| 出勤ステータスリセット |
毎日AM3:00 |
inportal-attendance |
| チェックインリマインダー |
毎分 |
inportal-location-checkin |
9.4 セキュリティ
| 項目 |
実装 |
| 管理画面ログイン保護 |
Admin Login Guard |
| REST API保護 |
CloudSecure WP Security除外設定 |
| 静的JSON |
.htaccessでインデックス禁止 |
| HTTPS強制 |
全ページSSL |
9.5 パフォーマンス最適化
| 項目 |
実装 |
| 出勤ボード |
静的JSON配信(5秒ポーリング→JSON取得) |
| 翻訳 |
DBキャッシュ(API呼び出し最小化) |
| Service Worker |
キャッシュによるオフライン対応 |
| fixMalformedLinks |
本番環境で無効化 |
12. 保留中の機能
10.1 PCアクセス制限
| 項目 |
内容 |
| 設計方針 |
PCからのアクセスはスマホでPWA+通知設定完了後のみ許可 |
| 実装状況 |
未実装(保留) |
| 現状 |
PCからも通常のログインでアクセス可能 |
設計詳細(将来実装時):
- PCでアクセス → 「まずモバイルで設定」ページへリダイレクト
- スマホでPWA設定完了 → ipa_pwa_verifiedフラグ付与
- PCから再アクセス → フラグがあればアクセス許可
10.2 PCログイン(QRスキャナー)
| 項目 |
内容 |
| 概要 |
スマホでQRコードをスキャンしてPCにログイン情報を転送 |
| 実装状況 |
コード実装済み、UIから非表示(保留) |
| URL |
/?ipa_qr_scanner=1 |
| 関連ファイル |
class-access-controller.php, front-page-app.php |
非表示箇所:
- front-page-app.php の「PCログイン」ボタン(コメントアウト済み)
変更履歴
| 日付 |
バージョン |
変更内容 |
| 2025-12-25 |
1.0 |
初版作成 |
| 2025-12-28 |
2.0 |
全機能の包括的な仕様書に更新 |
| 2025-12-29 |
2.1 |
PCログイン機能を保留、保留中機能セクション追加 |
| 2026-01-07 |
2.2 |
KITA Times・KnowledgeYardセクション追加、キオスクリンク管理追加、多言語対象者項目削除 |
| 2026-01-07 |
2.3 |
FCM Topic送信実装(1600名への配信1秒以下)、トピック移行ツール追加 |