Step 4 / 9 — マスタリスト作成

8種類のSPOリストを必要な列定義で作成(実装ベース全項目)

🎯 このステップのゴール

Step3で作成したテナント専用SPOサイトに、運用に必要な8種類のSharePointリストを作成します。リストの列定義は永賢組サイト(constructioninfo)と完全一致させる必要があります。

💡 効率化のヒント①:永賢組サイトからCSVスキーマエクスポート

永賢組サイト(constructioninfo)の各リストで「リスト設定 → Excelにエクスポート」または SharePoint の ExportToCSV 機能を使うと、CSV の先頭に ListSchema={...} という行が含まれます。ここに 全フィールドの完全な SchemaXml が JSON で埋め込まれているので、これをそのまま PnP.PowerShell の Add-PnPFieldFromXml に渡すと IMEMode / Indexed / EnforceUniqueValues / Min・Max / Lookup参照先 など細かい属性まで完全再現できます。

この方法で九州永賢組の `現場` リスト作成時に「36協定提出済 (_x0033_6AgreementSubmission)」の数字先頭エンコードや「労災保険番号 Min=Max=14」等の細部まで正確に復元できました。

⚠️ デフォルトビューへの列追加を忘れずに

Add-PnPFieldFromXml でリストに列を追加しても、「すべてのアイテム」ビューには自動では表示されません。列はリスト内部には存在していますがUIで見えない状態になります。

リスト作成後、必ず以下のコマンドでビューに列を追加してください(Add-PnPViewField cmdlet は PnP.PowerShell 3.x では存在しないので注意):

$view = Get-PnPView -List "現場" | Where-Object { $_.DefaultView -eq $true }
Set-PnPView -List "現場" -Identity $view.Id -Fields @(
    "LinkTitle","ChiefName","ConstructionStartDate","ConstructionEndDate",
    "InsuranceNumber","_x0033_6AgreementSubmission",
    "OfficeEstablishmentSubmission","ScaffoldingSubmission",
    "FalseworkSubmission","Abbreviation"
)

Set-PnPView -Fields は既存ビューの列リストを全置換します。Title 相当は LinkTitle を指定。

💡 効率化のヒント②:自動プロビジョニングスクリプト

8リストを1コマンドで一括作成するPowerShellスクリプトを用意しています。永賢組サイト(constructioninfo)からMicrosoft Graph APIで取得した実装ベースの正確な列定義を埋め込み済み。Lookup列・選択肢・必須フラグもすべて自動設定されます。

⬇️ サイトテンプレートDL(provision-gembaai-lists.ps1)

▶ 実行方法(クリックして展開)
  1. PowerShell 7+ をインストール
  2. PnP.PowerShell モジュールをインストール:
    Install-Module -Name PnP.PowerShell -Scope CurrentUser -Force
  3. 新規テナント用のSPOサイトを Step3 で先に作成しておく
  4. スクリプトを実行(対話ログイン):
    pwsh -File ./provision-gembaai-lists.ps1 -SiteUrl "https://nagaken.sharepoint.com/sites/constructioninfoXxxx"
  5. 初回はEntra IDの認証画面が開く。サイトの所有者(フルコントロール)権限を持つアカウントでログイン
  6. 8リストの作成完了まで約30秒〜1分

※ スクリプトは冪等(idempotent)です。既存リストはスキップされるため、再実行しても安全。

手動で作成する場合は、本ページの全項目表を参照してください(同じ実装ベースの正確な定義です)。

🖼 完成イメージ

九州永賢組(顔認証用)テナントで実際にこのワークフローを実行した結果、左ナビに8リストが並びます:

kyushu-nagaken-face サイトTOP
「九州永賢組(顔認証用)」サイト TOP — 左ナビに作成した8リスト全てが並んでいる

📋 作成するリスト一覧

#表示名物理リスト名主な用途
1現場OnsiteMaster現場マスタ
2協力業者PartnerMaster協力業者マスタ
3現場協力業者紐付けOnsitePartnerRelation施工体制ツリー(自己参照)
4社員EmployeeMasterテナント社員
5社員資格EmployeeQualificationMaster社員資格マスタ
6社員実績EmployeeAchievement社員の現場履歴
7危険作業RiskyWorkMasterKY活動の危険作業マスタ
8危険回避策RiskAvoidanceMaster危険作業に紐づく回避策
⚠️ 内部名は絶対に変更しない
アプリ側(face.gemba-ai.cloud)は物理列名(内部名)でデータを読み書きします。日本語表示名は変更可ですが、内部名は永賢組と完全一致させてください。

1️⃣ 現場(OnsiteMaster)

現場の基本情報を管理するマスタ。

現場リスト 完成画面
九州永賢組 (kyushu-nagaken-face) サイトでの実際の表示
表示名内部名必須備考
現場名称Title1行テキスト(255)EnforceUniqueValues=TRUE / Indexed=TRUE
所長名ChiefName1行テキスト(255)
工期(自)ConstructionStartDate日付(dateOnly)
工期(至)ConstructionEndDate日付(dateOnly)
労災保険番号InsuranceNumber数値(14桁固定)min=max=14
36協定提出済_x0033_6AgreementSubmissionはい/いいえ※内部名は SharePoint の数値先頭エンコード(36→_x0033_6)
事業所の設置届提出済OfficeEstablishmentSubmissionはい/いいえ
足場支保工提出済ScaffoldingSubmissionはい/いいえ
型枠支保工提出済FalseworkSubmissionはい/いいえ
略称ローマ字Abbreviation1行テキスト(255)例: SASASHIMA

※ 監査列(ID/Created/Modified/Author/Editor)はSharePointが自動で持つので明示作成不要

2️⃣ 協力業者(PartnerMaster)

協力業者の会社情報・許可情報・保険加入情報を管理するマスタ。

協力業者リスト 完成画面
九州永賢組サイトでの実際の表示(19列のカスタム列が並ぶ)
表示名内部名必須選択肢
協力業者名称Title1行テキスト(255)
郵便番号PostCode1行テキスト(255)
住所Address1行テキスト(255)
代表電話番号MainPhoneNumber1行テキスト(255)
代表者名RepresentativeName1行テキスト(255)
担当者名PersonInChargeName1行テキスト(255)
担当者部署DepartmentInCharge1行テキスト(255)
担当者役職PersonInChargePosition1行テキスト(255)
担当者携帯番号PersonInChargeMobileNumber1行テキスト(255)
担当者メールアドレスPersonInChargeEmailAddress1行テキスト(255)
建設業許可番号ConstructionLicenseNumber1行テキスト(255)
建設業許可業種ConstructionLicenseType選択肢(複数可・チェックボックス)29業種:土木一式工事 / 建築一式工事 / 大工工事 / 左官工事 / とび・土工・コンクリート工事 / 石工事 / 屋根工事 / 電気工事 / 管工事 / タイル・れんが・ブロック工事 / 鋼構造物工事 / 鉄筋工事 / 舗装工事 / しゅんせつ工事 / 板金工事 / ガラス工事 / 塗装工事 / 防水工事 / 内装仕上工事 / 機械器具設置工事 / 熱絶縁工事 / 電気通信工事 / 造園工事 / さく井工事 / 建具工事 / 水道施設工事 / 消防施設工事 / 清掃施設工事 / 解体工事
契約形態ContractType選択肢(ラジオ)直契約 / 再下請
初期紹介会社IntroductionCompany1行テキスト(255)
健康保険HealthInsurance選択肢(ラジオ)健康保険組合 / 協会けんぽ / 建設国保 / 国民健康保険
年金保険PensionInsurance選択肢(ラジオ)厚生年金 / 国民年金
雇用保険EmploymentInsurance選択肢(ラジオ)加入 / 日雇保険
建設業退職金共済制度KentaikyoSystem選択肢(ラジオ)有 / 無
中小企業退職金共済制度SMBtaikyoSystem選択肢(ラジオ)有 / 無

3️⃣ 現場協力業者紐付け(OnsitePartnerRelation)

現場×協力業者の紐付け+施工体制ツリー(自己参照で1次〜N次を表現)。

現場協力業者紐付けリスト 完成画面
Lookup列3つ(現場/協力業者/上位協力業者の自己参照)
表示名内部名必須備考
タイトルTitle1行テキスト(255)任意ラベル
現場OnsiteIDLookup → 現場(OnsiteMaster)columnName: Title
協力業者PartnerIDLookup → 協力業者(PartnerMaster)columnName: Title
上位協力業者ParentOnsitePartnerIDLookup → 自分自身(OnsitePartnerRelation)自己参照で施工体制ツリー
階層Hierarchy数値1=1次請、2=2次請、…
協力業者担当作業PartnerWork選択肢37工種(後述)

PartnerWork の37工種

直接仮設工事 / 土工事 / 山留・乗入構台工事 / 杭地業工事 / コンクリート工事 / 型枠工事 / 鉄筋工事 / 鉄骨工事 / 組積工事 / 防水工事 / 石工事 / タイル工事 / 木工事 / 屋根工事 / 外壁工事 / 金属工事 / 左官工事 / 木製建具工事 / 金属製建具工事 / ガラス工事 / 塗装工事 / 内装工事 / 住設工事 / 家具工事 / 断熱・耐火被覆工事 / パーテーション工事 / サイン工事 / 外構工事 / 造園工事 / EV工事 / 電気設備工事 / 給排水設備工事 / 空調換気設備工事 / ガス設備工事 / 解体工事 / 雑工事 / その他設備工事

💡 Lookup列の作成順序
このリストは OnsiteMaster と PartnerMaster の作成後 に作成してください。Lookup列は参照先リストが先に存在する必要があります。

4️⃣ 社員(EmployeeMaster)

テナント社員の基本情報・権限・資格情報。資格は3スロット固定実装。

社員リスト 完成画面
20件投入済み・Lookup×3(社員資格3スロット)+ MultiChoice(権限ロール)
表示名内部名必須選択肢/備考
氏名Title1行テキスト(255)
メールアドレスMailAddress1行テキスト(255)
生年月日BirthDate日付(dateOnly)
権限ロールRole選択肢現場管理者 / 本社管理者 / システム管理者
携帯電話番号MobileNumber1行テキスト(255)
社員資格ID1QualificationID1Lookup → 社員資格
資格者番号1QualifiedPersonNumber11行テキスト(255)
資格期限1QualificationDeadline1日付(dateOnly)
社員資格ID2QualificationID2Lookup → 社員資格
資格者番号2QualifiedPersonNumber21行テキスト(255)
資格期限2QualificationDeadline2日付(dateOnly)
社員資格ID3QualificationID3Lookup → 社員資格
資格者番号3QualifiedPersonNumber31行テキスト(255)
資格期限3QualificationDeadline3日付(dateOnly)
監理技術者番号ConstructionManagerNumber数値(11桁固定)min=max=11
更新期限ConstructionManagerDeadline日付(dateOnly)監理技術者の更新期限
CPD実績CPDAchievements複数行テキスト(plain・6行)継続的職能開発の記録
⚠️ 資格は3スロット固定
4個以上の資格を持つ社員は、主要な3つだけを入力します。設計上の制約です。CPD実績欄に補足記載することも可能。

5️⃣ 社員資格(EmployeeQualificationMaster)

社員資格名のマスタ(シンプルなマスタテーブル)。

社員資格マスタ 完成画面
9件投入済み(一級建築施工管理技士〜一級土木施工管理技士)
表示名内部名必須備考
資格名称Title1行テキスト(255)例: 一級建築施工管理技士

永賢組での登録例:一級建築施工管理技士、一級建築施工管理技士補、二級建築施工管理技士、二級建築施工管理技士補、一級建築士、二級建築士、木造建築士、監理技術者、一級土木施工管理技士

6️⃣ 社員実績(EmployeeAchievement)

社員と現場の紐付け+担当工事を管理する実績テーブル。

社員実績リスト 完成画面
19件投入済み・Lookup×2(社員/現場)
表示名内部名必須備考
タイトルTitle1行テキスト(255)任意ラベル
社員EmployeeIDLookup → 社員(EmployeeMaster)
現場OnsiteIDLookup → 現場(OnsiteMaster)
所属期間(自)AssignmentStartDate日付(dateOnly)
所属期間(至)AssignmentEndDate日付(dateOnly)
担当工事ConstructionWorkInCharge選択肢OnsitePartnerRelation の PartnerWork と同じ37工種

7️⃣ 危険作業(RiskyWorkMaster)

KY活動で選択する危険作業のマスタ(シンプルテーブル)。

危険作業マスタ 完成画面
23件投入済み(材料荷降ろし時のつり荷落下〜重機操作)
表示名内部名必須備考
危険作業Title1行テキスト(255)例: 材料荷降ろしの時につり荷が落下して人に当る

永賢組での登録例:材料荷降ろし時のつり荷落下、高所作業・手作業による資材取扱、水辺作業、危険化学物質取扱、閉鎖空間立入、高所運搬作業、電気工事、溶接・切断、重機操作 など

8️⃣ 危険回避策(RiskAvoidanceMaster)

危険作業に対する回避策(1対多)。

危険回避策マスタ 完成画面
24件投入済み・Lookup→危険作業(ID解決済み)
表示名内部名必須備考
危険回避策Title1行テキスト(255)例: 苫で合図しつつ荷囲下の人払いをする
危険作業RiskyWorkIDLookup → 危険作業(RiskyWorkMaster)columnName: Title
💡 1つの危険作業に複数の回避策
RiskAvoidanceMaster の各レコードは1つの危険作業を参照します。1つの危険作業に対して複数の回避策が登録される構造(1対多)。

🔗 Lookup列 完全リファレンス

8リストには合計 9つのLookup列 があり、4つの親リストから6つの被参照リストへ参照しています。Lookup列を作る順序を間違えると参照先未作成エラーになるので、このリファレンスを参考に依存関係を確認してください。

Lookup列一覧(4リスト・9列)

親リスト列内部名表示名参照先リスト必須備考
現場協力業者紐付け
(OnsitePartnerRelation)
OnsiteID現場現場 (OnsiteMaster)
PartnerID協力業者協力業者 (PartnerMaster)
ParentOnsitePartnerID上位協力業者自分自身 (OnsitePartnerRelation)★ 自己参照(施工体制ツリー)
社員
(EmployeeMaster)
QualificationID1社員資格ID1社員資格 (EmployeeQualificationMaster)3スロットの1つ目
QualificationID2社員資格ID2社員資格 (EmployeeQualificationMaster)3スロットの2つ目
QualificationID3社員資格ID3社員資格 (EmployeeQualificationMaster)3スロットの3つ目
社員実績
(EmployeeAchievement)
EmployeeID社員社員 (EmployeeMaster)
OnsiteID現場現場 (OnsiteMaster)
危険回避策
(RiskAvoidanceMaster)
RiskyWorkID危険作業危険作業 (RiskyWorkMaster)

被参照リスト別サマリ

被参照リスト参照元参照数
現場 (OnsiteMaster)現場協力業者紐付け / 社員実績2
協力業者 (PartnerMaster)現場協力業者紐付け1
現場協力業者紐付け (OnsitePartnerRelation)自分自身(自己参照)1
社員 (EmployeeMaster)社員実績1
社員資格 (EmployeeQualificationMaster)社員(3スロット)3
危険作業 (RiskyWorkMaster)危険回避策1
💡 Lookup列の追加方法(PnP.PowerShell)
Lookup列は SchemaXml で List="{listGuid}" 属性を指定して追加します:
$xml = "<Field Type='Lookup' DisplayName='現場' Name='OnsiteID' StaticName='OnsiteID' Required='TRUE' List='{$onsiteListId}' ShowField='Title' />"
Add-PnPFieldFromXml -List "現場協力業者紐付け" -FieldXml $xml
自己参照の場合は、リスト作成後に自分自身のIDを取得して同じ要領で追加します。
⚠️ Lookup列のデータ投入時はID解決が必要
CSVのデータには表示名(例: "齊藤 武")が入っていますが、SP内部では参照先リストのアイテムID(数値)が必要です。投入前に参照先リストから {Title: ID} マップを作っておき、表示名→IDで解決してから Add-PnPListItem に渡します。詳細は Step5 参照。

📐 リスト作成順序(依存関係)

Lookup列を持つリストは参照先リストが先に存在する必要があるため、以下の順序で作成してください。

[1] 現場 (OnsiteMaster) ← 何も参照しない [2] 協力業者 (PartnerMaster) ← 何も参照しない [3] 社員資格 (EmployeeQualificationMaster) ← 何も参照しない [4] 危険作業 (RiskyWorkMaster) ← 何も参照しない ↓ [5] 現場協力業者紐付け (OnsitePartnerRelation) ├─ Lookup → OnsiteMaster ├─ Lookup → PartnerMaster └─ Lookup → 自分自身(自己参照) ↓ [6] 社員 (EmployeeMaster) └─ Lookup × 3 → EmployeeQualificationMaster ↓ [7] 社員実績 (EmployeeAchievement) ├─ Lookup → EmployeeMaster └─ Lookup → OnsiteMaster ↓ [8] 危険回避策 (RiskAvoidanceMaster) └─ Lookup → RiskyWorkMaster

🔗 リストURLの確認

https://nagaken.sharepoint.com/sites/{サイトアドレス}/Lists/OnsiteMaster/AllItems.aspx
https://nagaken.sharepoint.com/sites/{サイトアドレス}/Lists/PartnerMaster/AllItems.aspx
https://nagaken.sharepoint.com/sites/{サイトアドレス}/Lists/OnsitePartnerRelation/AllItems.aspx
https://nagaken.sharepoint.com/sites/{サイトアドレス}/Lists/EmployeeMaster/AllItems.aspx
https://nagaken.sharepoint.com/sites/{サイトアドレス}/Lists/EmployeeQualificationMaster/AllItems.aspx
https://nagaken.sharepoint.com/sites/{サイトアドレス}/Lists/EmployeeAchievement/AllItems.aspx
https://nagaken.sharepoint.com/sites/{サイトアドレス}/Lists/RiskyWorkMaster/AllItems.aspx
https://nagaken.sharepoint.com/sites/{サイトアドレス}/Lists/RiskAvoidanceMaster/AllItems.aspx

✅ 完了チェックリスト