
1-2. edit_overview.blade.php 削除
| 変更 | 詳細 |
|---|---|
| edit_overview.blade.php | 削除 |
| routes/web.php | projects.overview.edit / projects.overview.update ルートを削除 |
| ProjectController | editOverview() / updateOverview() メソッドを削除 |
残留リンク確認: resources/views/projects/ 内に overview ルートへの参照なし(削除前にgrep確認済み)

2.show.blade.php — 工事編集ボタンの移動
変更前: <x-slot name=”nav_extra”> でヘッダータブとして表示
変更後*: 工事名・ステータスバーの右端にボタン配置
[ 工事名 (施工中) ] ··················· [ 部署: ○○ ] [ 担当: ○○ ] [ ✏️ 工事編集 ]

プロジェクト管理プロセスのセキュリティ及びファイルの健全性を検証
1.コードファイルの統合
1-1. create.blade.php + edit.blade.php → edit.blade.php(統合・create 削除)
統合方法:
- $project->exists(Eloquent 未保存インスタンスかどうか)で動作を切り替え
- 新規モード(exists = false): フォーム action → projects.store、HTTP method → POST、入力値なし
- 編集モード(exists = true): フォーム action → projects.update、HTTP method → PATCH、old() + 既存値
- ヘッダー文言・キャンセル遷移先・会社名ソース・nav_extra タブをモードで分岐
- ProjectController@create() を view(‘projects.edit’, [‘project’ => new Project()]) に変更
- 影響範囲: index.blade.php の route(‘projects.create’) はそのまま動作(resource ルートは維持)
| 変更前 | 変更後 |
|---|---|
| create.blade.php(新規登録専用) | 削除 |
| edit.blade.php(編集専用) | create+edit 統合版に書き換え |
3.バグ修正 — ステータス表示の不整合
問題: index.blade.php は start_date/end_date から PHP で計算、show.blade.php は $project->status(DBカラム値)を直接参照 → 表示が食い違う修正: Project モデルにアクセサを追加し、全ページで統一
php
// app/Models/Project.php に追加
public function getStatusLabelAttribute(): string
{
$today = \Carbon\Carbon::today()->format(‘Y-m-d’);
if (!$this->start_date || !$this->end_date || $today < $this->start_date) {
return ‘準備中’;
}
if ($today > $this->end_date) {
return ‘工事完了’;
}
return ‘施工中’;
}
適用箇所*
| ファイル | 変更前 | 変更 |
|---|---|---|
| index.blade.php | @php ブロックで 15 行の計算 | $project->status_label 1行 |
| show.blade.php(ステータスバー) | $project->status(DBカラム) | $project->status_label |
| show.blade.php(情報テーブル) | $project->status(DBカラム) | $project->status_label |
| print.blade.php | @php ブロックで 8 行の計算 | $project->status_label 1行 |
7.Swiper を npm 管理に移行(CDN 廃止)
背景: show.blade.php で cdn.jsdelivr.net から Swiper 11 を直接読み込んでいた。CDN 障害時に写真スライダーが機能停止するリスクがあった。
変更内容:
| 変更箇所 | 内容 |
|---|---|
| npm install swiper | swiper@12.2.0 をプロジェクトの依存に追加 |
| resources/js/app.js | import Swiper from ‘swiper/bundle’ + import ‘swiper/css/bundle’ を追加、window.Swiper = Swiper でグローバル登録 |
| resources/views/projects/show.blade.php | <link rel=”stylesheet” … cdn…> と<cript src=”… cdn…”> の2行を削除 |
ビルド結果: npm run build 成功。app.js に Swiper がバンドル済み(211KB CSS / 671KB JS)
⚠️ 注意: app.js が 671KB(gzip: 211KB)と大きい。将来的に dynamic import によるコード分割を検討推奨。
9.edit.blade.php — 概要テキスト欄を全幅に拡大
背景: edit_overview.blade.php 削除に伴い、工事概要入力が edit.blade.php の左カラム内の狭い textarea のみになっていた。
変更内容: フォームレイアウトを以下の3段構成に変更
概要テキストエリアを 2 カラム分の全幅(w-full)で表示
行数を 3 → 5 に拡大
11.残課題
| 優先度 | 内容 |
|---|---|
| 低 | app.js が 671KB(gzip 211KB)と大きい。Swiper の dynamic import / manual chunk 分割を検討 |
| 低 | 写真のスライダー上の × 削除ボタンが小さく見えにくい場合は、スライダー外に写真一覧・削除 UI を設けることも一案 |
4.セキュリティ・脆弱性の対処(前回作業分の確認)
| 項目 | 状態 |
|---|---|
| XSS: session(‘error’/’success’) を alert() で表示 | ✅ 前回修正済み(アラート削除、toast コンポーネント利用) |
| インラインJSハンドラー(onclick= / onsubmit=) | ✅ 前回修正済み(addEventListener / 使用) |
| 写真 taken_at nullチェック不足 | ✅ 前回修正済み(Carbon::parse() + null ガード) |
5.修正後のファイル一覧
| ファイル | 状態 |
|---|---|
| projects/index.blade.php | 修正(ステータス計算を status_label アクセサに置換) |
| projects/edit.blade.php | 書き換え(create + edit 統合) |
| projects/show.blade.php | 修正(工事編集ボタン移動・status_label 適用) |
| projects/print.blade.php | 修正(status_label アクセサ適用) |
| projects/create.blade.php | 削除 |
| projects/edit_overview.blade.php | 削除 |
| app/Models/Project.php | 修正(getStatusLabelAttribute() 追加) |
| app/Http/Controllers/ProjectController.php | 修正(create 改修、editOverview/updateOverview 削除) |
| routes/web.php | 修正(overview ルート 2 件削除) |
8.projects テーブルの status カラム削除
背景: status DB カラムと getStatusLabelAttribute()アクセサが二重管理状態だった。アクセサが start_date/end_date から常に正確な値を返すため、DB カラムは不要。
変更内容:
| 変更箇所 | 内容 |
|---|---|
| database/migrations/2026_06_11_000001_drop_status_from_projects_table.php | 新規作成 —projects.status カラムを削除するマイグレーション(down() でロールバック可能) |
| php artisan migrate | マイグレーション実行済み(100ms、DONE) | app/Models/Project.php | $fillable から status’ を削除 |
10.変更ファイル一覧
| ファイル | 変更種別 |
|---|---|
| package.json / package-lock.json | swiper 追加 |
| resources/js/app.js | Swiper import 追加 |
| resources/views/projects/show.blade.php | CDN リンク2行削除 |
| database/migrations/2026_06_11_000001_…php | 新規作成(マイグレーション実行済み) |
| app/Models/Project.php | $fillable から status 削除 |
| resources/views/projects/edit.blade.php | 概要欄レイアウト変更 |
| resources/views/components/help/projects-edit-overview.blade.php | 削除 |

