J58を修理工場に

天気が良いので、久しぶりに元宇品の森を歩く

今週は天気が悪くなるとのことだが、良い天気の月曜日、朝は久しぶりに元宇品の森を歩く・・・最近は、森のアップダウンの散歩は辛くなってきている、午前中は今週の仕事の段取りをして、昼からはキクを助手席に乗せてJ58を修理工場に移送
最近は旧車を修理してくれる修理工場が無い、昔の車の修理はわからないそうだ・・・いつもの修理工場に無理を言ってお願いする、パーツがあればとのことなので、パーツリストからパーツを頼むが、あっているか少し不安、パーツも中々高価で、失敗すると痛手が大きい、修理の期限は付けないが7月中には終わらせてもらいたい

J58に甲斐犬のキクを乗せて、ドライブ
フロントアクスルブーツ交換に修理工場へ
▶この続きを見る・・・・

墓参り 工事管理の見直し

墓掃除と墓参り
1-2. edit_overview.blade.php 削除
変更詳細
edit_overview.blade.php削除
routes/web.phpprojects.overview.edit / projects.overview.update ルートを削除
ProjectControllereditOverview() / 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 統合版に書き換え
▶この続きを見る・・・・

元宇品散歩 建設アシスト安パト見直し

少し小雨の元宇品をキクと散歩
2-2.承認済みパトロールの編集ロック不完全

SafetyPatrolController.php saveDraft()メソッドshow.blade.phpのUIは$isLockedフラグで編集を無効化しているが、saveDraftエンドポイントにはis_finalizedチェックがなく、直接POSTで承認済みデータを上書き可能
修正
php
public function saveDraft(Request $request, Project $project, $id)
{
$this->authorizeProject($project);
$safetyPatrol = SafetyPatrol::findOrFail($id);

// 承認済みは変更不可 if ($safetyPatrol->is_finalized) { return response()->json([‘success’ => false, ‘message’ => ‘確認済みの記録は変更できません。’], 403); } //

2-3.CLAUDE.md との相違点
項目問題対象箇所
session(‘success’)表示CLAUDE.mdでは `toast.blade.phpは error のみ表示とあるが、`show.blade.phpに独自のsuccess表示が存在show.blade.php` L23-27
` 未使用一覧のボタン群が直接 <button class=”bg-indigo-600…”>等で実装されているindex.blade.php` L43-53
ファイル先頭の説明コメント欠如コントローラ・モデルの先頭に「このファイルの説明文」がないSafetyPatrolController.php` 等全般
インラインスクリプトindex.blade.phpの flash メッセージ消去処理がインライン<script>内に記述index.blade.php` L26-35

1.【安全パトロール】コードの健全性検証

1.セキュリティ・脆弱性

エラーメッセージ漏洩

safetyPatrolController.php:210
php
// 現状:例外メッセージをそのまま返している
return response()->json([‘success’ => false, ‘message’ => ‘システムエラー: ‘ . $e->getMessage()]);
PHPの例外メッセージ(DBパス・APIキー名・内部構造等)がそのままフロントエンドに露出する
修正
php
// 固定文言に変更
return response()->json([‘success’ => false, ‘message’ => ‘システムエラーが発生しました。時間をおいて再試行してください。’]);
// ログには詳細を記録
\Log::error(‘AI checklist generation error: ‘ . $e->getMessage());

1-2.ファイルアップロードのバリデーション欠如

SafetyPatrolController.phpstore()
php
// 現状:バリデーションなしで直接 store()
$filePath = $request->file(‘attached_file’)->store(‘patrol_files’, ‘public’);
ファイルタイプ・サイズ制限がないため、実行ファイルや大容量ファイルのアップロードが可能な状態
修正
php
$request->validate([
‘attached_file’ => ‘nullable|file|mimes:pdf,jpg,jpeg,png,gif,webp|max:10240’,
‘patrol_datetime’ => ‘required|date’,
‘inspector_name’ => ‘required|string|max:100’,
]);

1-3.CSP方針違反 インラインイベントハンドラ

CLAUDE.md に「`onclick=””等のインラインハンドラを使わず、必ず `addEventListenerで登録する」と明記されているが、以下の箇所に違反が存在する

ファイル内容
show.blade.phpL105, L109, L113, L117onchange=”updateRowColor(…); autoSave()”
create.blade.phpL82onclick=”runAiProcess(…)”
index.blade.phpL43, L47, L51, L103, L115onclick=”window.location.href=…”

修正方針:** 各ボタンに `data-url属性を付与し、外部JSで `addEventListenerに移行

2.データ喪失リスク

SafetyPatrolController.php  destroy()` メソッド
php
// 現状:attached_file_path のみ削除
if ($patrol->attached_file_path) {
Storage::disk(‘public’)->delete($patrol->attached_file_path);
}
$patrol->delete();
// → safety_patrol_photos テーブルのレコードと画像ファイルは残存
パトロール削除時に、紐づく写真ファイル(storage/public/patrol_photos/)とDBレコードが削除されない。時間とともにストレージを圧迫する
php
// 写真ファイルとレコードを先に削除
$patrol->safetyPatrolPhotos()->each(function ($photo) {
Storage::disk(‘public’)->delete($photo->file_path);
$photo->delete();
});
$patrol->delete();

▶この続きを見る・・・・

雨のみなと公園 コードのレビュー

キクとみなと公園の散歩 雨はかなり降っている

台風の接近で朝からかなりの雨です・・・甲斐犬のキクの散歩は予定通り、上下に登山用のレインコートを着込んで散歩、でも40年前のゴアテックスは効果が薄く、かなり浸み込んできました・・・やはり、新しいのを使わないと大雨は無理かな

雨のみなと公園をまわる
公園には誰もいない

環境側面であるコードのレビューを実施した
\environment\edit_environment.blade.php
\environment\index.blade.php

1.最優先:CSPとインラインハンドラの矛盾

これが一番の地雷です。直近で@alpinejs/cspに移行してscript-srcから unsafe-eval を外したのに、1-1.この2画面はインラインイベントハンドラだらけonclick=”openAiModal()” / “closeAiModal()” / “runAiEstimate()”
onclick=”addCustomRow()” / “removeCustomRow(this)”
onclick=”window.print()”
script-srcからunsafe-inlineも外す方針なら、これらは全滅
Alpineだけ対応しても、素のonclickが残っていればCSPの一貫性は崩れる・・セキュリティ監査を目標にするなら、unsafe-inline除去は通過点になるはずなので、ここはaddEventListener方式へ統一すべき・・幸い既に477〜492行で同パターンを使っているのでdata-action=”open-ai-modal”のような属性+委譲リスナーに寄せれば機械的に直せる

▶この続きを見る・・・・

元宇品の散歩

元宇品の海岸でキクと
元宇品の森を歩く

建設アシストのコードのセキュリティ対策として、CSP(Content Security Policy)でunsafe-evalを禁止した結果、Alpine.js の式評価がブロックされ動作不能になった問題を解決します

1.パッケージ切り替え・ビルド設定

package.json / resources/js/app.js

変更内容詳細
alpinejs → @alpinejs/cspに差し替えnpm install @alpinejs/cspを実行、app.jsのインポートを変更
グローバル Alpine コンポーネントを app.jsに集約alpine:initイベント内で Alpine.data()を登録

app.jsに登録したグローバルコンポーネント:

コンポーネント名用途
scheduleInitModal(chartType, switchUrl)工程表 初期選択モーダル
flashMessageプロフィール保存後フラッシュメッセージ(2秒フェードアウト)
dropdownMenuナビゲーション ドロップダウン
laravelModal(initialShow, modalName, focusable)Breeze 標準モーダル(フォーカストラップ付き)

▶この続きを見る・・・・

甲斐犬のキク

元宇品はプリンスホテル側を歩く
朝はキクが起こしに来る
散歩までベットで待機
五日市の病院の帰り、水鳥公園に

建設アシストは今まで対象を、建設現場管理を重点にしていたが、今回はそれらを纏める会社の管理を構築すべく、まずは入り口となる会社概要ページを作成・・半分は会社のHPをリンクさせている
左には処理メニューが配置されているが、多くはこれから開発してゆくことになる

建設アシストの会社概要の作成

キクと朝の散歩

4月はここ数年で初めて出張が無かった
3月中から5月の末までは出張の仕事ななく、久しぶりに何もすることが無い時間となったが、意外と何もする気が起きない・・やるべきことは多いのだけど、なんとなくぼんやりと過ごしている
今の重要のタスクは、甲斐犬のキクの朝の散歩となっている・・1時間以上の散歩はかなりのタスクだが、健康維持には重要な事項だろう

甲斐犬のキク
土手をキクと歩く
護岸からの風景は気持ちが良い

今日は日曜日、良い天気だ、甲斐犬のキクと京橋川の土手を広島大橋まで南下して、往復・・・1時間とちょっと、足が痛い

工程表設定メニュー
工程表印刷のメニュー

天狗城山に登る

2022/10/22 キクと一緒に天狗城山を登ったのが最後で4年間ほど、ご無沙汰・・・天狗城山は一気に約300mを登るの岩山・・・2022年の時も体力は無く登りに90分もかかっていた・・・それから前立腺癌のホルモン治療で体調がおかしくなり、筋肉も落ちて、膝の関節炎となり、歩くのもままならず、出張での駅の階段などは苦行で・・山などはとんでもない状態だった
そんな状態から最近は少し回復をして散歩もかなりの距離が歩けるようになっていた・・・何となく昼から、急に思い立ち甲斐犬のキクを連れて登る・・・膝も万全ではないので無理はできないが、休み休み上って、今回は山頂までは70分程、2021年の頃は40~50分ほどで登っていた・・・さすがに関節炎になってからは登れないと思っていたが、少し膝も回復して意欲も戻ってきたようだ・・・下りは転倒しないように注意して(ほとんど岩山は尻を落として下る)、ようやく車まで戻る
少しすると足の脛が痛い・・・登山をすると痛かったあの感覚は久しぶりだ

天狗城山の最初は、手前の尾根まで長い階段が続く
カエル岩から天応の町並み いつ見ても良い景色
甲斐犬のキクと一緒に登る
▶この続きを見る・・・・

朝はキクと宇品を往復

久しぶりに宇品波止場公園を往復する、最後に歩いたのはいつ頃だったか・・・毎晩、日課で歩いていたけど・・少し膝が回復したので歩けるようになったが、時間は倍程度かかっている

宇品への道を歩く

宇品往復は、約6kmで8000歩ほどになる・・・キクの散歩なのでゆっくりではあるが2時間弱かかる
GWの初日、昭和の日だが、天気は曇りで下り坂・・夕方から雨となる

旧国鉄宇品線跡地 パークゴルフ場になっている
建替えをした競輪場には、スタバがオープン
旧宇品線 下丹那駅付近
丹那駅付近

雨の日曜日

朝はまだ雨は小雨 元宇品の森を散歩 今日は山歩きは辛かった

朝から少しづつ降り出した雨は、昼頃から本降りの雨となって夜半まで降り続く・・・朝は、キクと元宇品の森を散歩で歩く、日曜日なのでマラソンする人や、犬の散歩など多くの人が来ていて、灯台の駐車場は満車の状態・・・散歩の帰りには、ガソリンが警告灯が付いたので、四国の旅行で給油したときから給油していない・・忘れないうちにスタンドで給油、まだガソリンは¥157と安かった
昼前に買い物に行き、明日の厨房の大工仕事のため、木材を購入する
昼からは、ネットワーク工程表のアプリケーションを作成する・・・やはりネットワーク工程表は中々難しいが、Claudeが手助けしてくれるが、難しい依頼はトークンの消費が激しく、クレジットの要求がすぐ来るので、使い方は考えながらする必要がある
夕方には、ほぼ納得できるような工程表が作れるアプリケーションが出来上がった・・・実際に入り色な工程を作成して調整してゆく必要があるが、問題は印刷のスケールをどのように調整するかが当面の課題、ネットワークがうまく表現できない

建設アシストで工程表の作成アプリケーションを作成中

朝の散歩 宇品波止場にクルーズ船

天気の良い朝は、キクと一緒に京橋川を御幸橋と平野橋の間を周遊

京橋川の土手にはハナミズキが咲いている

昼からは建設アシストのアプリケーションの施工計画をつくる・・・結局、ミニVisioのようなDTPに形式になった

甲斐犬のキクと散歩
夕方には宇品波止場に散歩
かなり大きなクルーズ船です
増築した桟橋が使われています
▶この続きを見る・・・・

昼からディスプレイの配置換え

散歩でキクは猫ちゃんとご挨拶

午前中は散歩から帰ると、建設アシストのリスクアセスメント作成手順のデザイン変更とAIによるRA項目の特定を調整する・・・かなり使えるようになってきた

天気の良い、京橋川の土手
昼から机のディスプレイの配置換え

キクと朝の散歩

元宇品の森を歩く

天気の良い日曜日、キクの散歩の帰りにガソリンを入れる・・九州キャラバンから入れていないのでカラですが、一時は¥200に迫る金額なので、様子を見ていた・・今日の価格は¥157だった

ガソリンが安くなったので満タンに

今日の一日、外は雨が降り始めているが、家でClaudeと一日中遊んだ

果林の木から花の芽が

彼岸の中日は墓参り

良い天気なので、前の日に花を購入して墓参りにRIEと行く、中日なので墓参りの人が多くて混雑していた・・そのあと、買い物に、かなり多くのものを購入

今日はお寺も混雑
甲斐犬のキクと元宇品の散歩
元宇品には椿が咲いていた
Build-Assist申込画面
メールが送付される

天気の良い日曜日

五日市の埋め立てに散歩
甲斐犬のキクは中に入って汚れていた
果林の新しい新芽が出ている

今日はソノタンが外出で帰宅
一緒に昼はゆめタウンで食事

昨日に続き、研修用の資料を作成・・・どうやら、夕方には完成する・・あとは動きや細部をチェックして、送付の準備

2階の庭には水仙が咲く誇っている

気持ちの良い土曜日だが、デスクワーク

天気の良い京橋川の土手を歩く
甲斐犬のキクと散歩
3/24には研修の資料は月曜日には送付しなくては

三日間、VFKさんと九州で遊んだので、いよいよ資料の提出までの時間がない・・・散歩が終わるとPPTの作成を夕方まで頑張る
どうやら、全体の構成が完成した・・基本的には3年前の資料を修正するつもりだったが、3年も経つと情勢が変化して内容が陳腐化するので、ほとんど作り直し

夕方からBild-Assist(建設アシスト)の新しいページとして、施工計画書の作成に取り掛かったが、これは中々手ごわい、どこで妥協するかがポイントか

Build-Assistでは施工計画の開発着手

午前中は研修資料、昼から安全パトロール写真台帳

元宇品の森をキクと歩く

研修用の資料提出が来週初めと迫ってきたので、今日は午前中はPPTの編集、午後からはBuild-Assistの安全パトリール写真台帳をLaravelで作成

広島港の入口の灯台
砂浜で甲斐犬のキク 三日ぶりの散歩
安全パトロールの写真台帳をつくる・・・写真撮影用
▶この続きを見る・・・・

曇りから雨 安全パトロール表の作成

京橋川の土手をキクと歩く 朝は曇りだが、昼からは小雨になる

散歩から帰ると、今日も一日Webアプリケーションにのめり込み・・・昨日はRA表の骨格が出来上がったので、今日は条件を入れてAIに安全パトロール表を作成させて、チェックしてコメント入れて帆山管理するシステムに着手、夕方には骨格は出来上がった
途中からGeminiの様子がおかしくなる、ちょっと違うスイッチが入ったような・・軌道修正が大変

RA表のExcel変換と別RA表の保存機能を
条件を入れてAIに安全パトロール表を作成させる
▶この続きを見る・・・・

作業リスクアセスメント表の構築

今朝は、元宇品の森を散歩して海岸に出る
海岸から今日は階段で車の場所に

元宇品の散歩 最後に海岸からあがる100段以上の階段がある

今週は、建設アシストのWebアプリケーションづくりをしている・・・今日は一気に、安全作業リスクアセスメント表を作成するアプリケーションを作成
当初、思っていた内容よりかなり進んだ仕様となった・・これが実際の現場で使う日が来と・・・ワクワク感がとまらない・・Geminiとの作業は最近は相性がよくなり、作業スピードが格段に上がる

作業リスクアセスメントの管理表
AIで作らせた作業リスクアセスメント表
AIで作った作業リスクアセスメント表を修正する
▶この続きを見る・・・・

キクの散歩とアプリケーションづくり

朝はいつものように朝食を食べてから、キクを連れて散歩
帰ると、今日も一日中、Gemini3と会話しながら建設アシストのアプリケーションをつくる
Laravelは奥が深くて覚えきれない・・・今日は印刷とExsel出力をつくる・・・奇麗なExcelが出力できる
夜に、VFKさんと九州旅行の宿を2日予約する

京橋川の土手を歩く 気持ちの良い朝
甲斐犬のキクも散歩を楽しむ
法規制リストの印刷とExcel出力を作成
Excel用のプログラム(phpspreadsheet)をインストール

神戸で安全研修をする

暖かい広島みなと公園を散歩 少し早めに切上げて準備を
リエの夕食をキクが狙っている

昼前に広島を出発して、新神戸から地下鉄で大倉山に、歩いてアステップ神戸に、今日はここで安全研修を実施する(研修資料にかけた工数は対価にはまったく合わないが)・・・予定通り、研修は終わって、予定より早い新幹線に乗ることができた

会場は神戸の大倉山にあるアステップ神戸 13:30~16:30

今回の研修のために12月後半から色々と考察をしてよい勉強となり、この結果を今回のWebアプリケーション(建設アシストシステム)を作るきっかけとなった・・・昔、BASICで徹夜してプログラミングしていた頃を思い出しながら、面白さにすっかりのめり込んでいる
帰ってから、法規制チェックリストのAI判定部分をつくる・・・やはり、このパートは簡単には行かない・・・AIの判定スピードの調整、APIとの整合、結果の受取、その都度エラーが続き、何回かテストプログラムを走らせて検証しながら作成する、さすがに研修後のなので頭が痛くなったが、何とか判定部分のプログラムを完成させて・・・今夜は終わり

▶この続きを見る・・・・

甲斐犬のキクと散歩

家のキッチンで甲斐犬のキク
今朝も良い天気 京橋川を南下
広島市郷土資料館 横の公園はもとカルビーの工場があった
ヒデが一時、通っていたナンガ保育所、すっかり奇麗に建て替わっている

今日も散歩の後は、Geminiの支援を受けて、Webアプリケーションを作成する
ローカルの環境で試作したWebアプリケーションがテストできる環境は、かなりのスピードアップ
しかし、難しい処理が続くとGeminiは適格性を欠いてくるので、あまり鵜呑みにはできない・・よくコードを理解してから作成しないと、とんでもない手戻りが発生する

免責画面の作成
工事リストい画面の作成