# ITエンジニアの開発ノート > PHP / Flutter / PostgreSQL を中心に、開発で得た知見や試したことをまとめる技術ブログ 各記事のリンク先は Markdown 本文を返します。 ## Blog Posts - [PHP + PhpSpreadsheet で可変明細の帳票を出力する(行挿入とスタイル複製)](https://itdevnote.com/blog/php-phpspreadsheet-row-insertion.md): テンプレートの固定行数を超える可変明細を、PhpSpreadsheet の insertNewRowBefore で行挿入し、duplicateStyle で罫線・数値書式を複製して、合計まで正しく計算される .xlsx 帳票を素の PHP で出力する。 - [Javaのデザインパターン「State」とsealed・switchを使い分ける](https://itdevnote.com/blog/java-state-pattern-sealed-switch.md): 古典的なStateと、sealed interface・switchへ横断処理を集める設計を注文状態のコードで比較する。状態追加時の分岐漏れをコンパイルで止める条件と、状態ごとの実装クラスを残す条件を整理する。 - [Javaのデザインパターン「Strategy」はラムダでどこまで置き換えられるか](https://itdevnote.com/blog/java-strategy-pattern-lambda-boundary.md): Strategyの実装クラスをラムダへ置き換えられる条件を、送料計算のコードで確認する。ラムダ・enum・実装クラスを、抽象メソッド、名前、一覧、状態の要否から選び分ける。 - [Javaのデザインパターン「Visitor」の二重ディスパッチはいつ外せるか](https://itdevnote.com/blog/java-visitor-pattern-record-patterns.md): Visitorのacceptとvisitをsealed interfaceとパターンマッチングswitchへ置き換える。同じ網羅性を保てる条件と、Visitorを残す条件を比較する。 - [LaravelでMailとNotificationを送る(Mailpit + Queue 最小構成)](https://itdevnote.com/blog/laravel-mail-notification-minimal.md): Laravel 13 の fresh app で Mailpit と database queue を使い、Mailable と Notification の送信、失敗確認、queue:retry まで手元で再現する。 - [PHPは遅いのか——実行速度とボトルネックを分けて考える](https://itdevnote.com/blog/php-execution-speed-slow.md): 「PHP は遅い」を、言語ランタイムの実行速度(Zend Engine の書き直し・OPcache・JIT)と、アプリの応答が重い原因(DB クエリや外部呼び出しの待ち)に分けて整理する。JIT が効く処理と効きにくい処理の違いも扱う。 - [Sentryでクラッシュとエラーを検知する(Flutter最小構成)](https://itdevnote.com/blog/flutter-sentry-crash-error-monitoring-minimal.md): Flutter へ sentry_flutter を最小導入し、runZonedGuarded、FlutterError.onError、手動送信の 3 経路でクラッシュと例外を検知できるようにする。 - [Flutterアプリを社内配布する(Android APK サイドロード + MDM 概要)](https://itdevnote.com/blog/flutter-android-apk-sideload-mdm-intro.md): Flutter の signed release APK を Android 端末へ社内配布する流れを整理し、adb install、手動サイドロード、MDM へ渡す項目まで説明できるようにする。 - [FlutterのIntegration Test入門(ログインから一覧表示まで確認する)](https://itdevnote.com/blog/flutter-integration-test-login-list-intro.md): Flutter で Integration Test の最小構成を作り、ログイン画面から一覧画面までの遷移を Android Emulator 上で確認できるようにする。 - [FlutterのWidgetテスト入門(画面ロジックを壊さない最小構成)](https://itdevnote.com/blog/flutter-widget-test-intro-minimal.md): Flutter で Widget テストの最小構成を作り、画面表示、ボタン押下後の変化、Riverpod の Provider 差し替えを確認できるようにする。 - [Flutterの環境切替と配布前チェック(flavor / release build / 権限確認)](https://itdevnote.com/blog/flutter-flavor-release-build-permission-checklist.md): Flutter で Android の flavor と `--dart-define` を組み合わせ、環境切替、権限確認、release build までを配布前チェックとして整理できるようにする。 - [Dockerで「localhostに繋がらない」を解決する(WSL2でコンテナの待受アドレスを見分ける)](https://itdevnote.com/blog/docker-localhost-connection-refused.md): docker compose ps が Up でも localhost に繋がらないとき、コンテナ内の待受アドレスと ports の右側を突き合わせて、同じ症状になる3ケースを切り分けて直す手順を実測で追う。 - [Dockerで「no space left on device」を解決する(WSL2でDockerのディスクとマウント先を見分ける)](https://itdevnote.com/blog/docker-no-space-left-on-device.md): docker pull や compose up が no space left on device で落ちるとき、Docker のデータ領域・マウント先・inode のどれが不足しているかを df で切り分け、prune の適用範囲を確かめてから空きを回収する手順を実測で追う。 - [Dockerで「port is already allocated」を解決する(WSL2/Windowsでの原因特定と対処)](https://itdevnote.com/blog/docker-port-is-already-allocated.md): Docker Desktop + WSL2 で port is already allocated が出たとき、原文のどこが原因でどこが巻き添えかを読み、掴んでいるコンテナを特定して直すまでを実際の出力で追う。 - [Dockerで「Permission denied」を解決する(WSL2のバインドマウントとUIDの食い違い)](https://itdevnote.com/blog/docker-volume-permission-denied.md): WSL2のバインドマウントでコンテナが作ったファイルがroot所有になり Permission denied で止まるとき、失敗しているのが親ディレクトリである読み方と、所有者を回収する手順を実測で追う。 - [Flutterアプリのネイティブ設定を整える(アプリ名 / アイコン / スプラッシュ / 署名)](https://itdevnote.com/blog/flutter-native-settings-app-name-icon-splash-signing.md): Flutter アプリで Android のアプリ名、ランチャーアイコン、起動画面、リリース署名を最小構成で整え、配布前の見た目と build 設定をそろえる。 - [permission_handler でAndroid権限を実践的に扱う(カメラ・ストレージ・Bluetooth)](https://itdevnote.com/blog/flutter-permission-handler-android-permissions.md): Flutterで permission_handler を使い、Android のカメラ、ストレージ系、Bluetooth 権限について、要求タイミング、拒否時分岐、設定画面誘導までを最小構成で整理する。 - [Flutterでデータをファイルに書き出す](https://itdevnote.com/blog/flutter-local-file-export-csv-images.md): Flutterで path_provider を使い、data.csv と添付画像を書き出す最小構成を通して、フォルダ名・画像名・失敗時の再出力まで整理できる。 - [Flutterで複数画像の添付UIを作る](https://itdevnote.com/blog/flutter-multiple-image-attachment-ui.md): Flutterでギャラリーから複数画像を選び、上限枚数の制御、サムネイル一覧、削除、差し替えまでを1画面で確認できるようにする。 - [Flutterで単一画面の入力フローを作る](https://itdevnote.com/blog/flutter-single-screen-input-flow.md): Flutterで読取結果の確認、追加入力、保存条件の判定を1画面で組み立て、業務向けの単一画面入力フローを最小構成で確認できる。 - [FlutterでGS1-128バーコードを解析する](https://itdevnote.com/blog/flutter-gs1-128-barcode-parsing.md): FlutterでGS1-128文字列を括弧あり / なし両対応で分解し、GTIN・有効期限・重量・補助識別子を型付きデータとして扱う最小構成を確認できる。 - [PostgreSQLで「特定の値だけ重複を許す」ユニーク制約(部分ユニークインデックス)](https://itdevnote.com/blog/postgresql-partial-unique-index.md): PostgreSQL で「未削除の行だけ一意」を成り立たせる部分ユニークインデックスを、素の UNIQUE で詰まる所と複合 UNIQUE の NULL 落とし穴から `psql` の実行結果で確認する。 - [Flutterでスキャン入力を受けて処理する](https://itdevnote.com/blog/flutter-scan-input-processing.md): Flutterでキーボード入力型のスキャン値を受け取り、常時フォーカス、Enter確定、不可視文字除去、形式エラー時の再入力導線までを1画面で確認できるようにする。 - [Flutterで業務用バーコード読み取りアプリを作る(最小構成)](https://itdevnote.com/blog/flutter-business-barcode-scanner-minimal.md): Flutterで業務用バーコード読み取りの最小アプリを作り、カメラ検出、履歴表示、重複スキャン抑止までを1画面で確認できるようにする。 - [Flutterアプリを日本語化する(l10n + arb 最小構成)](https://itdevnote.com/blog/flutter-localization-l10n-arb-minimal.md): Flutter標準の l10n と arb を使い、日本語 UI、引数付き文言、複数形、バリデーションメッセージの最小構成を確認できるようにする。 - [Flutterでログイン状態を保持する(JWT + secure storage 最小構成)](https://itdevnote.com/blog/flutter-jwt-secure-storage-login-state.md): Flutterで JWT を secure storage に保存し、ログイン API 呼び出し、起動時復元、ログアウト時の破棄までを最小構成で確認できるようにする。 - [Flutterで端末設定と利用者設定を保存する(SharedPreferencesとsecure storageの使い分け)](https://itdevnote.com/blog/flutter-sharedpreferences-secure-storage-settings.md): Flutterで SharedPreferences と flutter_secure_storage を使い分け、端末設定と利用者設定の保存、初期値復元、保存後反映を最小構成で確認できるようにする。 - [Flutterでgo_routerの認証ガードを実装する(redirect最小構成)](https://itdevnote.com/blog/flutter-go-router-auth-guard-redirect-minimal.md): Flutterで go_router の redirect を使い、未ログイン時のログイン画面への分岐、ログイン後の戻り先保持、詳細 route への direct access を最小構成で確認できるようにする。 - [PHP + PhpSpreadsheet の実務小ネタ(列幅の自動調整・数式・zip一括出力)](https://itdevnote.com/blog/php-phpspreadsheet-practical-tips.md): PhpSpreadsheet で .xlsx を出力したあとに詰まりやすい、列幅の自動調整・数式の値の取得・複数ファイルの zip 一括ダウンロードを素の PHP で解決する。 - [Dart 3のsealed classとパターンマッチングで分岐を安全に書く](https://itdevnote.com/blog/flutter-dart-sealed-class-pattern-matching.md): Dart 3の sealed class と switch 式のパターンマッチングを使い、API 結果の成功 / 0件 / 未認証 / 通信失敗を型で分けながら安全に分岐する入口を整理する。 - [Flutterでローディング・空状態・エラー表示を整える](https://itdevnote.com/blog/flutter-loading-empty-error-ui.md): Flutterで FutureProvider と AsyncValue を使い、ローディング・空状態・エラー表示を分けながら再試行と共通 UI 化の入口まで確認できるようにする。 - [PHPStanのlevel 9 / 10(max)に上げる(mixedをどこまで潰すか)](https://itdevnote.com/blog/phpstan-level-9-10-mixed.md): level 8 が通る PHP プロジェクトを PHPStan の level 9 と 10(max)へ上げる。9 は明示的な mixed だけを縛るため、型を書かないコードは使い方を問われないまま素通りする。その非対称性を実際の出力で示し、mixed を境界で型に落として max まで通す。 - [Flutterの状態管理入門(Riverpod最小構成)](https://itdevnote.com/blog/flutter-riverpod-state-management-intro.md): Flutterで flutter_riverpod を最小導入し、NotifierProvider と派生 Provider で UI とロジックを分けながら状態変更と画面反映を確認できるようにする。 - [AIに書かせたコードのレビュー指摘95件を全部分類した](https://itdevnote.com/blog/ai-code-review-findings-taxonomy.md): AIに書かせた4プロジェクトのコードへのレビュー指摘95件のうち、誤検知1件を除く94件を15の失敗パターン+その他に全分類した。最多は黙って間違うfail-open/サイレント劣化系。仮説の「検証済みの過大申告」は件数こそ少なく、出た場所が成果物の品質を自称する層に揃っていた。 - [AIレビュアーの指摘はどれだけ当たるのか:採否記録から測る](https://itdevnote.com/blog/ai-reviewer-accuracy-intake-records.md): Node.jsのエラー解説リポジトリで、AIが生成したコードと文章を別ベンダーのAIにレビューさせた9回分の採否記録から、指摘の採用率を集計する。採用率87%は生の正答率ではなく、範囲指定・異ベンダーの突き合わせ・裏取りを通した運用上の数字であることを工程まで分解し、棄却より頻度の高い5つの失敗の型と、そこから決めた運用ルールを示す。 - [2エージェント相互レビューの実運用:プロンプト・実行・intakeの回し方](https://itdevnote.com/blog/two-agent-peer-review-workflow.md): 異ベンダーのAIを2〜3体並べて同じ対象をレビューさせ、指摘を突き合わせてから採否を決める運用を、プロンプト・実行・intakeの3フェーズで示す。プロンプトに「見ないもの」を先に宣言する理由、ヘッドレス実行をやめて対話CLIを自動起動している理由、誤検知の判定を記録に残す理由まで、実際のファイル構成とコマンドで説明する。 - [Flutterでjson_serializable + build_runnerを使ってJSONモデルを型安全に扱う](https://itdevnote.com/blog/flutter-json-serializable-build-runner-intro.md): Flutterで json_serializable と build_runner を導入し、ネストした JSON モデルの fromJson / toJson 自動生成と再生成の運用を最小構成で確認できるようにする。 - [FlutterからREST APIを呼ぶ最小構成(JSON通信 + エラー処理)](https://itdevnote.com/blog/flutter-rest-api-json-error-handling.md): Flutter から json-server の REST API を呼び、http パッケージで GET / POST、JSON 変換、エラー処理を最小構成で確認できるようにする。 - [Flutterのルーティング入門(Navigator と go_router の使い分け)](https://itdevnote.com/blog/flutter-routing-navigator-go-router-intro.md): Flutter の Navigator と go_router の役割を最小例で整理し、画面遷移、値の受け渡し、戻り先の設計を判断できるようにする。 - [Flutterでカスタムウィジェットを作る入門(StatelessWidget の分割と再利用)](https://itdevnote.com/blog/flutter-custom-widget-statelesswidget-basics.md): Flutter の StatelessWidget 分割を最小例で整理し、親から子への値渡しと再利用の判断基準を持てるようにする。 - [FlutterのTabBarとBottomNavigationBarで複数画面を切り替える](https://itdevnote.com/blog/flutter-tabbar-bottomnavigationbar-basics.md): Flutter の BottomNavigationBar と TabBar を最小例で整理し、Navigator と役割で切り分けながら複数画面を設計できるようにする。 - [Flutterのダイアログ・スナックバー・ボトムシートを使う(確認・通知UIの基本)](https://itdevnote.com/blog/flutter-dialog-snackbar-bottomsheet-basics.md): Flutter の Dialog・SnackBar・BottomSheet を最小例で整理し、確認 UI と通知 UI を場面に応じて選べるようにする。 - [FlutterのListViewとGridViewで一覧画面を作る(基本パターン)](https://itdevnote.com/blog/flutter-listview-gridview-intro.md): Flutter の ListView・ListView.builder・GridView.count を最小例で整理し、一覧画面を縦リストかグリッドで組み始める判断基準を持てるようにする。 - [FlutterのContainerとSizedBoxを使いこなす(余白・サイズ・装飾の基本)](https://itdevnote.com/blog/flutter-container-sizedbox-basics.md): Flutter の SizedBox・Padding・Container を最小例で整理し、余白・サイズ・装飾をどこへ書くか判断できるようにする。 - [FlutterでMediaQueryとLayoutBuilderを使って画面サイズに対応する(スマホ・タブレット両対応)](https://itdevnote.com/blog/flutter-mediaquery-layoutbuilder-responsive-intro.md): Flutter の MediaQuery と LayoutBuilder を最小例で整理し、スマホでは 1 カラム、幅が広い端末では 2 カラムや 2 ペインへ切り替える判断基準を持てるようにする。 - [Flutterのテーマ設計入門(ThemeData + Theme Extension)](https://itdevnote.com/blog/flutter-theme-themedata-theme-extension-intro.md): Flutter の ThemeData と ThemeExtension を最小例で整理し、標準テーマと業務固有トークンの置き場を判断できるようにする。 - [Flutterのレイアウト入門(Column / Row / Stack の使い分け)](https://itdevnote.com/blog/flutter-layout-column-row-stack-intro.md): Flutter の Column / Row / Stack を最小例で整理し、RenderFlex overflow の原因と Expanded / Flexible の使い分けまで判断できるようにする。 - [FlutterでBuildContextとKeyを理解する](https://itdevnote.com/blog/flutter-buildcontext-key-basics.md): Flutter の BuildContext と Key を最小例で整理し、Widget ツリー上の位置と並び替え時の state 対応付けを判断できるようにする。 - [FlutterのWidgetライフサイクル入門(initState / dispose で詰まらないために)](https://itdevnote.com/blog/flutter-widget-lifecycle-initstate-dispose-intro.md): Flutter の StatefulWidget で initState / build / dispose の役割を最小例で整理し、初回読込の置き場と Controller の後始末で迷わないようにする。 - [DartのStream入門(非同期データの流れをつかむ)](https://itdevnote.com/blog/flutter-dart-stream-intro.md): Dart の Stream を Flutter の文脈で整理し、StreamController・listen・await for・StreamBuilder の最小例を通して非同期データの流れを読めるようにする。 - [Flutterで最初に詰まりやすいDartの書き方:final・const・null safety・async/await を最初に整理する](https://itdevnote.com/blog/flutter-dart-pitfalls.md): Flutter のサンプルコードで止まりやすい final / const・null safety・named parameters・async/await・build 内の collection if / for の読み方を、最初の1本向けに整理する。 - [Flutterで画像・SVG・アイコンを管理する(flutter_gen最小構成)](https://itdevnote.com/blog/flutter-image-svg-icon-management-flutter-gen-minimal.md): Flutterで flutter_gen を最小導入し、PNG 画像、SVG イラスト、SVG アイコンを型安全に参照する流れを 1 本で確認できるようにする。 - [Flutter + FVM で開発環境のバージョンを固定する](https://itdevnote.com/blog/flutter-fvm-version-pinning.md): Windows 11 の Flutter 環境に FVM を追加し、プロジェクトごとに Flutter SDK を固定して `fvm flutter run` まで確認できるようにする。 - [Windows 11で始めるFlutter開発環境:Android Emulatorで動かすまで](https://itdevnote.com/blog/flutter-windows-11-setup.md): Windows 11でFlutter SDKとAndroid StudioとVS Codeをそろえ、Android Emulatorで最初のFlutterアプリを動かす。 - [モダンPHP再入門](https://itdevnote.com/blog/php-modern-reintroduction.md): PHP 5 / 7 時代のつらさが、型宣言や enum、PHPStan でどう変わったかを再入門向けに整理する。 - [GitHub Actionsで docker compose を使うPHP CI(PostgreSQL付き)](https://itdevnote.com/blog/php-github-actions-docker-compose-ci.md): ローカルの Docker Compose 構成をそのまま GitHub Actions に載せ、PostgreSQL 付き PHPUnit を CI で再現できるようにする。 - [PHP + Docker で非同期ジョブを動かす最小構成(PostgreSQL キュー)](https://itdevnote.com/blog/php-docker-postgresql-job-worker.md): PHP と Docker で PostgreSQL キュー用の常駐ワーカーを作り、起動、停止、並列実行、取り残し確認の入口までを最小構成で整理する。 - [Docker初心者向け: Dockerfile の中身を上から読む――FROM / WORKDIR / COPY / RUN / CMD](https://itdevnote.com/blog/dockerfile-reading-intro.md): Dockerfile の FROM / WORKDIR / COPY / RUN / CMD を最小 PHP サンプルで読み解き、既存 Dockerfile の確認順と修正判断を安定させる。 - [Docker初心者向け: compose.yml の中身を1項目ずつ読む入門――services / ports / volumes / environment](https://itdevnote.com/blog/docker-compose-yml-reading-intro.md): compose.yml の services / ports / volumes / environment / command を最小 PHP サンプルで読み解き、既存の Docker 構成を上から確認できるようにする。 - [Docker初心者向け: compose.yml と Dockerfile の違いを最小構成で理解する](https://itdevnote.com/blog/docker-compose-yml-vs-dockerfile-intro.md): compose.yml と Dockerfile の責務分担を最小 PHP サンプルで整理し、ポート・環境変数・マウント・PHP拡張をどちらへ書くか判断できるようにする。 - [PHPStan レベルを上げる実践ガイド(レベル5→8 の壁を越える)](https://itdevnote.com/blog/phpstan-level-5-to-8-guide.md): level 5 が通る PHPStan 設定を、missing typehints・union type・nullable access を順に直しながら level 8 まで引き上げる。 - [PHPUnitでテストダブル入門(モック / スタブ最小構成)](https://itdevnote.com/blog/phpunit-test-doubles-intro.md): 外部APIとメール送信を PHPUnit のスタブ / モックで置き換え、何を本物のまま残すべきかを最小例で判断できるようにする。 - [PostgreSQLのstuck job回収設計(timeout / reclaim / 再実行の安全な流れ)](https://itdevnote.com/blog/postgresql-stuck-job-reclaim-design.md): PostgreSQL のジョブキューで processing のまま残った job を、timeout 判定・reclaim 条件・再実行の安全策まで含めて整理する。 - [PostgreSQLのマイグレーション設計(列追加・データ移行・切り替えの安全な流れ)](https://itdevnote.com/blog/postgresql-safe-migration-column-backfill-cutover.md): 既存テーブルに新しい列を追加し、backfill と整合性確認を経て安全に read/write を切り替える PostgreSQL migration の順番を整理する。 - [PHP + PostgreSQLでジョブキューを作る(FOR UPDATE SKIP LOCKED 最小構成)](https://itdevnote.com/blog/postgresql-job-queue-skip-locked.md): PHP(PDO)から PostgreSQL のテーブルをジョブキューとして使い、`FOR UPDATE SKIP LOCKED` で複数ワーカーから安全に 1 件ずつ取る流れと最小リトライを再現する。 - [PHP + PostgreSQLで在庫引当を安全に実装する(SELECT ... FOR UPDATE 最小構成)](https://itdevnote.com/blog/postgresql-select-for-update-inventory.md): PHP(PDO)から在庫引当の二重処理を再現し、`SELECT ... FOR UPDATE` で防ぐ流れと PostgreSQL の待ち方を最小構成で確認する。 - [EXPLAIN ANALYZEの結果から改善策を選ぶ(Sort / Join / Aggregate ごとの打ち手)](https://itdevnote.com/blog/postgresql-explain-analyze-improvement-options.md): EXPLAIN ANALYZE の Sort / Join / Aggregate を見て、まずどこを疑い、どの改善策から当たるかを SQL と実行計画の例で整理する。 - [遅いSQLをどう見るか(EXPLAIN ANALYZEでボトルネックを読む)](https://itdevnote.com/blog/postgresql-slow-query-explain-analyze-reading.md): PostgreSQL の遅い SQL を EXPLAIN ANALYZE で観察し、rows / actual time / loops を手掛かりに sort / join / aggregate のどこが詰まっているかを読む順番まで整理する。 - [PostgreSQLのインデックス入門(B-tree と EXPLAIN ANALYZE の最小例)](https://itdevnote.com/blog/postgresql-index-btree-explain-analyze-intro.md): PostgreSQL で B-tree インデックスを作る最小例を通して、Seq Scan と Index Scan の違いを EXPLAIN ANALYZE で確認し、効く条件と効かない条件の入口まで整理する。 - [PostgreSQLのトランザクション入門(BEGIN / COMMIT / ROLLBACK と同時更新)](https://itdevnote.com/blog/postgresql-transactions-intro.md): PostgreSQL の `BEGIN` / `COMMIT` / `ROLLBACK` を送金デモで確認し、同時更新で `BEGIN` だけでは足りない場面まで `psql` で再現する。 - [PostgreSQLの外部キーと削除ルールを整理する(CASCADE / RESTRICT / SET NULL)](https://itdevnote.com/blog/postgresql-foreign-key-delete-rules.md): PostgreSQL の外部キーで `CASCADE` / `RESTRICT` / `SET NULL` をどう使い分けるかを、3 つの削除例と Mermaid 図で整理する。 - [PostgreSQLの制約入門(PRIMARY KEY / UNIQUE / CHECK / FOREIGN KEY)](https://itdevnote.com/blog/postgresql-constraints-intro.md): PostgreSQL の `PRIMARY KEY` / `UNIQUE` / `CHECK` / `FOREIGN KEY` が何を守る制約かを、小さな受注スキーマの失敗例で整理する。 - [PostgreSQLでER図からテーブル設計する(Mermaid + CREATE TABLE最小構成)](https://itdevnote.com/blog/postgresql-er-diagram-create-table-minimal.md): Mermaid の ER 図から PostgreSQL の最小 `CREATE TABLE` を組み立て、4 表の関係を `psql` で確認する手順を整理する。 - [PHP + PhpSpreadsheet でExcel帳票を出力する(テンプレート方式)](https://itdevnote.com/blog/php-phpspreadsheet-excel-template.md): 既存のExcelテンプレートを読み込み、固定セルと準備済み明細行へ値を埋めて `.xlsx` をダウンロードする最小構成を理解できる。 - [PHPでMCPサーバー実践編(複数Tool + 入力スキーマ + ログ出力)](https://itdevnote.com/blog/php-mcp-server-practical.md): 公式PHP SDKで複数 Tool を持つ MCP サーバーを作り、入力スキーマ・失敗レスポンス・STDERR ログを実装する流れを理解できる。 - [PHPでMCPサーバー入門(公式PHP SDK + STDIO)](https://itdevnote.com/blog/php-mcp-server-intro.md): 公式PHP SDKを使って最小のMCPサーバーを作り、STDIOとInspectorで動作確認する。 - [PHPからローカルLLMを呼ぶ最小構成(Ollama + HTTP + JSONレスポンス処理)](https://itdevnote.com/blog/php-local-llm-ollama-minimal.md): Ollama のローカル API を PHP から呼び、Qwen3.5 の軽量 4B モデルに対する最小リクエスト、JSONレスポンスの取り出し、タイムアウトと失敗時処理を理解できる。 - [AI生成コードのレビュー観点チェックリスト](https://itdevnote.com/blog/php-ai-code-review-checklist.md): 品質ゲート通過後のAI生成コードに対して、人間レビューで確認したい観点を整理する。 - [AI生成コードを受け入れる最小品質ゲート(PHPStan + PHPUnit + CS Fixer)](https://itdevnote.com/blog/php-ai-code-quality-gate.md): AI生成コードを人間レビュー前にふるいにかける最小品質ゲートを、PHPStanとPHPUnitとPHP CS Fixerで構成する。 - [AI 生成コードとの付き合い方 — 受け入れる基準と捨てる基準](https://itdevnote.com/blog/php-ai-code-accept-or-reject.md): AI生成コードを受け入れる・書き直す・捨てるの3段階で判断する基準を整理する。 - [「動いた」で終わるコードと、「また触れる」コードの違い](https://itdevnote.com/blog/php-working-code-vs-maintainable-code.md): 「動いた」で終わるコードと「また触れる」コードの差を、命名・副作用・失敗時の見え方から整理する。 - [PHPをいまから始めるのは遅いのか?](https://itdevnote.com/blog/php-still-worth-learning.md): PHPをいま学ぶ意味がある目的と、先に別言語が向きやすい目的を整理する。 - [Slim 4 + PostgreSQLで認証付きREST APIを作る(JWT最小構成)](https://itdevnote.com/blog/slim4-postgresql-jwt-auth-api.md): Slim 4 と PostgreSQL を使い、JWT 認証付き REST API の最小構成を register / login / me の 3 本で再現できる。 - [Slim 4で最小JSON APIを作る(routing + DI + error handling)](https://itdevnote.com/blog/slim4-minimal-json-api.md): WSL2とDocker環境でSlim 4の最小JSON APIを作り、正常系と失敗時のJSON応答まで確認する。 - [LaravelでInertia + React を始める](https://itdevnote.com/blog/laravel-inertia-react-intro.md): Laravel 13 の fresh app に Inertia.js と React を導入し、middleware、root template、React 側の入口、Book 一覧ページまで独立構成で確認する。 - [LaravelでInertia + Vue.js を始める](https://itdevnote.com/blog/laravel-inertia-vue-intro.md): Laravel 13 の fresh app に Inertia.js と Vue 3 を導入し、middleware、root template、Book 一覧ページまで独立構成で確認する。 - [LaravelでBlade / Livewire / Inertia をどう使い分けるか](https://itdevnote.com/blog/laravel-blade-livewire-inertia-comparison.md): Laravel 13 の共通ベース app に同じ Book 一覧の Blade / Livewire / Inertia ページを足し、責務の違いと選び分けを整理する。 - [LaravelでSanctum認証APIを作る](https://itdevnote.com/blog/laravel-sanctum-auth-api.md): Laravel 13 の fresh app に Sanctum を導入し、login で token を発行して認証付き Book API を作る手順をまとめる。 - [LaravelでLivewire一覧画面を作る(検索・並び替え・ページネーション)](https://itdevnote.com/blog/laravel-livewire-search-sort-pagination.md): Laravel 13 の fresh app に Livewire 4 を追加し、検索・並び替え・ページネーション付き一覧画面を独立構成で作る。 - [LaravelでLivewireを始める](https://itdevnote.com/blog/laravel-livewire-intro.md): Laravel 13 の fresh app に Livewire を追加し、Blade へ component を差し込んで wire:model、wire:click、wire:submit を確認する。 - [Laravelで検索・並び替え・ページネーション付き一覧を作る](https://itdevnote.com/blog/laravel-search-sort-pagination.md): Laravel 13 の fresh app から Book 一覧を作り、title 検索、sort 切り替え、ページネーションを Blade と withQueryString() で確認する。 - [Laravelでリレーションを扱う(User / Book / Category の基本)](https://itdevnote.com/blog/laravel-eloquent-relations-user-book-category-basics.md): Laravel 13 の fresh app で User / Book / Category の hasMany と belongsTo を作り、外部キー migration、一覧表示、N+1 を避ける with() の基本まで確認する。 - [Laravelでファイルアップロードを扱う(Storage + validation)](https://itdevnote.com/blog/laravel-file-upload-storage-validation.md): Laravel 13 で画像と PDF のファイルアップロードを作り、Storage の public disk、validation、一覧表示までを最小構成でつなげる。 - [Laravelでスケジューラを動かす(Command + Scheduler 最小構成)](https://itdevnote.com/blog/laravel-scheduler-command-minimal.md): Laravel 13 の fresh app で Artisan Command と Scheduler を最小構成でつなぎ、routes/console.php、schedule:list、schedule:run、ログ確認まで手元で再現する。 - [LaravelでQueueを始める(database queue + worker 最小構成)](https://itdevnote.com/blog/laravel-queue-database-worker-minimal.md): Laravel 13 の新規プロジェクトで database queue を最小構成で試し、dispatch()、jobs テーブル、queue:work、queue_runs 履歴の流れを welcome 画面だけで確認する。 - [Laravelで認可を入れる(Policyで自分の本だけ編集できるようにする)](https://itdevnote.com/blog/laravel-policy-book-ownership.md): Laravel 13 の Book CRUD に Policy と user_id を追加し、自分の本だけ編集 / 削除できる認可の最小形を作る。 - [Laravelで認証を足す(Breeze 最小導入)](https://itdevnote.com/blog/laravel-breeze-auth-intro.md): Laravel 13 の既存 Book CRUD に Breeze を追加し、register / login / logout と auth middleware でログイン必須アプリへ進める。 - [Laravelで品質ゲートを敷く(PHPUnit / Larastan / Pint / GitHub Actions)](https://itdevnote.com/blog/laravel-quality-gate.md): Laravel 13 の最小 CRUD に Feature Test、Larastan、Pint、GitHub Actions を足し、ローカルと CI で回る最小品質ゲートを作る。 - [Laravelで最小CRUDを作る(一覧 / 作成 / 編集 / 削除)](https://itdevnote.com/blog/laravel-minimal-crud.md): Laravel 13 で本管理の最小CRUDを作り、一覧 / 作成 / 編集 / 削除と validation の戻り方を SQLite 付きで一通りつなげる。 - [Laravel入門(Route / Controller / View / Model 最小構成)](https://itdevnote.com/blog/laravel-intro-guide.md): Laravel 13 の最初のプロジェクトを Docker だけで作り、Route / Controller / View / Model を SQLite 付きで一通りつなげる。 - [Laravel 13のStarter Kitsで認証付きアプリを始める](https://itdevnote.com/blog/laravel-13-starter-kits-auth-intro.md): Laravel 13 の Starter Kits を公式 docs ベースで整理し、空ディレクトリから Livewire Starter Kit を使って認証付きアプリを始める手順をまとめる。 - [WSL2 + Docker + PHP + PostgreSQLで最小CRUDを作る](https://itdevnote.com/blog/php-postgresql-minimal-crud.md): WSL2とDocker上で生PHPとPostgreSQLを使った最小CRUDを作り、DB付きアプリの流れを確認する。 - [Windows 11でPHP 8.3/8.4/8.5を使い分ける環境構築(WSL2 + mise + Docker Compose)](https://itdevnote.com/blog/php-multi-version-setup.md): Windows 11のWSL2環境でPHP 8.3と8.4と8.5を安全に切り替えるためのローカル運用手順をまとめる。 - [PHPUnitでDBテストを始める(PostgreSQL + Docker)](https://itdevnote.com/blog/phpunit-postgresql-db-test.md): PostgreSQLを使ったPHPのDBテストを最小構成で作り、失敗から安定化までの流れを確認する。 - [GitHub ActionsでPHPUnit / PHP CS Fixer / PHPStanを回す最小CI](https://itdevnote.com/blog/php-github-actions-minimal-ci.md): ローカルで通しているPHPの品質チェックをGitHub Actionsに載せる最小CIを構築する。 - [VS Code + Xdebugでステップ実行入門(WSL2 + Docker)](https://itdevnote.com/blog/vscode-xdebug-step-debug.md): WSL2とDockerのPHP環境でXdebugを使ったステップ実行を最短で再現する。 - [PHPStan入門(最初のエラー1件を直す)](https://itdevnote.com/blog/phpstan-first-error-fix.md): WSL2とDocker環境でPHPStanを最小導入し、最初のエラー1件を直して解析0件まで進める。 - [VS CodeでPHPコード整形をそろえる(EditorConfig + PHP CS Fixer最小導入)](https://itdevnote.com/blog/vscode-php-formatter-setup.md): VS CodeでPHPのコード整形ルールをそろえるために、EditorConfigとPHP CS Fixerの最小構成を作る。 - [AI時代でもPHPを選ぶ理由。向いている領域と向かない領域を整理する](https://itdevnote.com/blog/php-ai-agent-era.md): AI時代にPHPを選ぶ判断軸と、向いている領域・向かない領域を実務目線で整理する。 - [Windows 11で始めるPHPローカル開発環境(WSL2 + Docker + PostgreSQL)](https://itdevnote.com/blog/php-beginner-setup.md): Windows 11のWSL2とDockerとPostgreSQLを使って、PHPのローカル開発環境を最小構成で作る。 - [VS Codeで始めるPHP開発環境(推奨拡張 + settings.json最小構成)](https://itdevnote.com/blog/vscode-php-dev-setup.md): WSL2とDockerを前提に、VS CodeでPHP開発を始めるための最小拡張とsettings.jsonをそろえる。 - [PHPUnit入門(最初のテスト1本)](https://itdevnote.com/blog/phpunit-first-test.md): WSL2とDocker環境でPHPUnitを最小導入し、最初のテスト1本を失敗から成功まで通す。 - [Slim Framework 4 を使った業務Webアプリ導入ガイド(PHP 8.2+)](https://itdevnote.com/blog/slim4-intro-guide.md): Laravel経験者向けに、Slim Framework 4で業務Webアプリのバックエンド構成を組み立てる入口を整理する。