
法規制の特定を見直したので、同じような処理をしている環境側面の特定方法も修正する
今まで特定のための検索条件を工事概要から実施していたが、法規制の特定で作成した工事に関する条件DBを共有化、項目追加することに変更する・・・また、フロントエンドも法規制と同じようにする
| 質問 | 回答 |
|---|---|
| 条件保存方式 | project_conditions` テーブル新規作成。環境側面モーダルの条件も同テーブルに登録 |
| AI軽量化 | 今回は対象外。次のステップとして実施 |
| edit_overview の廃止範囲 | ☑ボックスで設定した内容を概要欄に転記する機能をすべて廃止。テキストボックスのみに変更 |
| @section(‘extra_tabs) | 環境側面編集画面のみで使用。他ページへの影響なし |
1.edit_overview.blade.php の変更
1-1.廃止する要素
現在のファイルは3エリアで構成:
| エリア | 内容 | 対応 |
|---|---|---|
| エリア1(上部) | textareaとフォーム | 残す |
| エリア2(中央) | 「選択した項目を概要に追加する」ボタン | 残す |
| エリア3(下部) | チェックボックス群(工事種別・立地条件・工事規模・工事の特性・仮設設備等) | 削除 |
2.DB設計:project_conditionsテーブル(新規)
2-1.テーブル定義
sql
CREATE TABLE project_conditions (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
project_id BIGINT UNSIGNED NOT NULL,
condition_value VARCHAR(100) NOT NULL, — 例: ‘市街地・商業地’, ‘解体工事あり’
source VARCHAR(20) NOT NULL, — ‘laws’(法規制)or ‘environment’(環境側面)
created_at TIMESTAMP NULL,
updated_at TIMESTAMP NULL,
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
UNIQUE KEY uq_project_condition (project_id, condition_value)
);
2-2.データの流れ
法規制条件モーダルでチェック
→ 「この条件で特定」実行時に project_conditions に保存(source=’laws’)
環境側面AIモーダルを開く
→ project_conditions を読み込み、該当項目をチェック済みで表示
環境側面モーダルで追加チェック
→ 保存時に project_conditions に追加保存(source=’environment’)
→ 法規制側にも反映される(共有)
5.フロントエンド変更:タブメニュー方式
5-1.現在の方式(@section(‘extra_tabs))
php
// edit_environment.blade.php の先頭付近
@section(‘extra_tabs’)
@foreach($tabDefs as $tabKey => $tabLabel)
{{ $tabLabel }}
@endforeach
@endsection
レイアウト側(app.blade.php)を削除し、本文内に操作バー+タブバーを配置
操作バー(AI特定ボタン・登録/更新・閉じる)
↓
タブバー(大気・水環境 / 廃棄物・エネルギー / 騒音・土壌・化学物質 / 生態系・社会・設計調達 / 新規設定)
↓
タブコンテンツ(テーブル)
5-2.変更後の方式(法規制スタイル)
@section(‘extra_tabs’)` を削除し、本文内に操作バー+タブバーを配置
操作バー(AI特定ボタン・登録/更新・閉じる)
↓
タブバー(大気・水環境 / 廃棄物・エネルギー / 騒音・土壌・化学物質 / 生態系・社会・設計調達 / 新規設定)
↓
タブコンテンツ(テーブル)
5-3.スタイル統一方針
| 項目 | 法規制 | 環境側面(変更後) |
|---|---|---|
| タブボタン | bg-purple-900` アクティブ | bg-green-900` アクティブ(維持) |
| フォントサイズ | text-xs | text-xs`(統一) |
| 操作バーボーダー | border-t-2 border-purple-400 | border-t-2 border-green-400`(維持 |
| タブバー配置 | flex flex-wrap gap-0.5 | 同一 |
7.変更ファイル一覧
| ファイル | 種別 | 変更内容 |
|---|---|---|
| database/migrations/XXXXXX_create_project_conditions_table.php | 新規 | project_conditionsテーブル作成 |
| app/Models/ProjectCondition.php | 新規 | Eloquentモデル |
| app/Http/Controllers/ProjectConditionController.php | 新規 | 条件の保存・取得API |
| routes/web.php | 変更 | 条件保存・環境印刷ルート追加 |
| resources/views/projects/edit_overview.blade.php | 変更 | チェックボックスUI全削除・テキストボックスのみに |
| resources/views/components/laws_condition_modal.blade.php | 変更 | 「特定」実行時にproject_conditionsへ保存 |
| resources/views/environment/edit_environment.blade.php | 大幅変更 | タブ方式変更・AIモーダルに共有条件追加・印刷ボタン更新 |
| resources/views/environment/index.blade.php | 変更 | 印刷ボタン→専用ページURLに変更 |
| resources/views/environment/print.blade.php | 新規 | 印刷専用ページ(A4横) |
| resources/views/environment/_env_tab_bar.blade.php | 新規 | タブバーパーシャル |
| app/Http/Controllers/EnvironmentController.php | 変更 | 印刷メソッド追加・AI送信情報に共有条件を追加 |
3.法規制条件モーダル(laws_condition_modal.blade.php)の変更
3-1.変更内容
「この条件で特定」ボタン押下時に、選択済み条件をproject_conditions テーブルに保存するAPIコールを追加
3-2.新規APIエンドポイント
POST /projects/{project}/conditions
body: { conditions: [‘市街地・商業地’, ‘解体工事あり’, …], source: ‘laws’ }
3-3.対象条件(保存対象)
全条件を保存する(絞らない)。環境側面モーダル側で必要なものだけ表示する
4.環境側面 AIモーダルの変更
4-1.現在のAIモーダル構成
発注者の環境への要求(textarea)
近隣関係の要求(textarea)
環境での取組(textarea)
取り組み姿勢(ラジオA/B/C)
工事規模・工法テーブル(7項目 × 大/中/小/なし)
4-2.変更後の構成
【共有条件(法規制から引用)】 ← 新規セクション
現場環境(市街地・商業地~海洋など 11項目)
建屋解体(80㎡以上)
特定建設作業(騒音・振動作業)
業務用エアコン/重機エアコン/フロン設備工事
発電機使用(10kw以上)
※法規制でチェック済みは自動チェック・色付き表示
※未チェックの場合はここでチェック可(project_conditionsに保存)
発注者の環境への要求(textarea)※維持
近隣関係の要求(textarea)※維持
環境での取組(textarea)※維持
取り組み姿勢(ラジオA/B/C)※維持
工事規模・工法テーブル(7項目)※維持
4-3.AIへの送信情報の変更
現在:$project->overview(工事概要テキスト)をメインコンテキストとして送信
変更後:
工事概要テキストは引き続き送信(補助情報として維持)
共有条件(project_conditions)を構造化データとして追加送信
AI側が条件リストを読めるため判定精度が向上
4-4.EnvironmentController の変更
php
// aiEstimate() メソッドに追加
$conditions = ProjectCondition::where(‘project_id’, $project->id)
->pluck(‘condition_value’)
->toArray();
// $conditions を $extra_info に追加してAIサービスに渡す
6.印刷方式の変更
6-1.現在の問題
- index.blade.phpでwindow.print()を直接呼び出し
- ブラウザの印刷ヘッダー(URL・日時)が出力される
- @media printでUIを非表示にしているが余白制御が不十分
6-2.変更後(法規制方式)
**新規ファイル:resources/views/environment/print.blade.php
@page { margin: 0; } → ブラウザヘッダー非表示
body { padding: 10mm; } → コンテンツ余白
A4横(landscape)で著しい環境側面テーブルを表示
window.print() 自動起動
window.afterprint → window.close() タブ自動クローズ
title = “著しい環境側面_{作業所名}” → PDF保存ファイル名
新規ルート:
GET /projects/{project}/environment/print
→ EnvironmentController@printEnvironment
8.実装順序
| 作業 | 依存関係 |
|---|---|
| DBマイグレーション(project_conditions) | なし |
| ModelとController作成 | ①に依存 |
| edit_overview.blade.php` のUI簡略化 | なし(独立して実施可) |
| 法規制条件モーダルに保存APIコール追加 | ①②に依存 |
| 環境側面AIモーダルに共有条件セクション追加 | ④に依存 |
| フロントエンドのタブ方式変更 | なし(独立して実施可) |
| 印刷専用ページ作成 | なし(独立して実施可) |
9.注意事項・リスク
9-1.@section(‘extra_tabs’)` 廃止時の影響
環境側面編集画面のみで使用されていることを確認済みapp.blade.phpの@yield(‘extra_tabs’)は残してもエラーにならないが、廃止後は削除することを推奨
9-2.工事概要テキストとAI判定の関係
工事概要テキストは引き続きAIに送信する。チェックボックス機能廃止後も「テキスト直接入力」で工事概要を記述できるため、AI判定の品質への影響は最小限
9-3.既存データの条件未保存問題
project_conditions
テーブル導入前に設定済みのプロジェクトは条件が空になる。法規制モーダルを再度開いて「この条件で特定」を実行すれば条件が保存される。初回利用時のガイドが必要
9-4.laws_condition_modal` は複数箇所から呼び出される
共有コンポーネントのため変更時は全呼び出し元を確認すること
bash
grep -rn “laws_condition_modal” resources/views/


