コンテンツにスキップ

INPortal 機能仕様書

作成日: 2025-12-28
最終更新: 2026-01-07
バージョン: 2.3


目次

  1. システム概要
  2. 出退勤ボード (inportal-attendance)
  3. チェックイン (inportal-location-checkin)
  4. 会議室予約 (inportal-location-checkin)
  5. ポイントシステム (company-point-system)
  6. PWA・プッシュ通知 (inportal-pwa-addon)
  7. 多言語翻訳 (inportal-article-translation)
  8. KITA Times 社内報 (page-kitatimes.php)
  9. KnowledgeYard (外部連携)
  10. テーマ (kitanihon-portal)
  11. 技術仕様

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秒以下)、トピック移行ツール追加