中級者向け

Laravel

【Laravel】Laravelのキャッシュ設定(config/route/viewキャッシュ)

こんにちは、かつコーチです。前回は、.env ファイルの環境ごとの管理方法と、シークレット情報の安全な扱い方を解説しました。その中で少し触れた config:cache について、今回はきちんと掘り下げていきます。Laravelには、本番環...
Laravel

【Laravel】環境ごとの.env管理とシークレット情報の扱い方

こんにちは、かつコーチです。前回は、Laravelアプリを本番環境にデプロイする一連の流れを解説しました。その手順の中で何度も登場した .env ファイルですが、実は「開発環境と本番環境でどう使い分けるか」「パスワードなどの機密情報をどう安...
Laravel

【Laravel】Laravelアプリを本番環境にデプロイする流れ

こんにちは、かつコーチです。前回は、GitHub Actionsでテストを自動化するCIの仕組みを解説しました。テストが安心して通せるようになったら、次はいよいよ「本番環境にアプリを届ける」というステップに進みます。ここから数回にわたって、...
Laravel

【Laravel】FactoryとRefreshDatabaseでテストデータを整える

こんにちは、かつコーチです。前回はUnit Testで、DBに依存しない単体ロジックのテスト方法を解説しました。今回は、DBを使うテストを書くうえで欠かせない「Factory」と「RefreshDatabase」を解説します。これでテスト編...
Laravel

【Laravel】Unit Testでモデル・サービスクラスをテストする

こんにちは、かつコーチです。前回はFeature Testで、コントローラを含めた機能全体の動作を検証する方法を解説しました。今回は、モデルやサービスクラスといった「単体のロジック」を検証するUnit Testを解説します。Unit Tes...
Laravel

【Laravel】Feature Testでコントローラの動作をテストする

こんにちは、かつコーチです。前回はPHPUnitの基本と、テストの書き方の土台を解説しました。今回は、Laravel独自の仕組みであるFeature Testを使って、コントローラやルーティングを含めた「機能全体」をテストする方法を解説しま...
Laravel

【Laravel】PHPUnitの基本:Laravelでテストを書く準備

こんにちは、かつコーチです。前回はロール・権限管理の実装パターンを解説し、認証・セキュリティ編を締めくくりました。今回からは新章、「テスト」編に入ります。初回となる今回は、Laravelのテストの土台になっているPHPUnitの基本を扱いま...
Laravel

【Laravel】ロール・権限管理の実装パターン

こんにちは、かつコーチです。前回はパスワードハッシュ化(bcrypt)の仕組みを解説しました。ログイン機能ができると、次にぶつかるのが「管理者だけがこの画面を見られるようにしたい」という要望です。今回はLaravelにおけるロール・権限管理...
Laravel

【Laravel】XSS対策:Bladeのエスケープ処理を理解する

こんにちは、かつコーチです。前回はCSRF対策について解説しました。今回は、もう一つの代表的なWeb脆弱性であるXSS(クロスサイトスクリプティング)と、Laravelの標準テンプレートエンジンBladeがどう対策しているかを見ていきます。...
Laravel

【Laravel】CSRF対策の仕組みとLaravelでの実装

こんにちは、かつコーチです。前回はPolicy・Gateを使った認可の仕組みを扱いました。今回は、Webアプリのセキュリティで必ず押さえておきたいCSRF(クロスサイトリクエストフォージェリ)対策について解説します。Laravelは標準でC...
Laravel

【Laravel】Policy・Gateで認可(権限チェック)を実装する

こんにちは、かつコーチです。前回はSanctumを使ったAPI認証を紹介しました。「誰なのか」を確認するのが認証だとすると、今回のテーマは「その人に何ができるのか」を確認する認可です。Laravelでは、この認可のロジックをPolicyとG...
Laravel

【Laravel】Laravel SanctumでAPI認証を実装する

こんにちは、かつコーチです。前回はBreeze・Jetstream・Fortify・Sanctumの違いを整理して、「どの認証機能を選べばいいか」の判断軸を紹介しました。今回はその中でも、SPA連携やモバイルアプリのバックエンドでよく使われ...
JavaScript

【TypeScript】型ガードでunion型を安全に絞り込む

こんにちは、かつコーチです。前回はPartial・Pick・Omitといったユーティリティ型で、既存の型を加工する方法を紹介しました。今回は、union型(string | number のように複数の型のどれかを表す型)を安全に扱うための...
JavaScript

【TypeScript】ユーティリティ型入門:Partial・Pick・Omitの使い方

こんにちは、かつコーチです。前回はジェネリクスの制約(extends)を扱い、型パラメータに条件をつける方法を紹介しました。今回は、その仕組みを使って作られているユーティリティ型(既存の型を加工して新しい型を作る組み込み機能)を紹介します。...
JavaScript

【TypeScript】ジェネリクス入門:型を引数のように扱う

こんにちは、かつコーチです。前回は、null と undefined を安全に扱う strictNullChecks について解説しました。今回からは少し応用的な内容に入っていきます。最初のテーマは、TypeScriptを学んでいると必ずぶ...
JavaScript

【TypeScript】nullとundefinedの安全な扱い方(strictNullChecks)

こんにちは、かつコーチです。前回は、オプショナルプロパティ(?)と readonly の使い方について解説しました。今回は、TypeScriptを実務で使ううえで避けて通れない「null と undefined の扱い方」を取り上げます。「...
JavaScript

【TypeScript】オプショナルプロパティ(?)とreadonlyの使い方

こんにちは、かつコーチです。前回は、enum(列挙型)の使い方について解説しました。今回は、オブジェクトの型定義をより実務向きにする2つの記法、「オプショナルプロパティ(?)」と「readonly」を扱います。どちらも小さな記号ひとつですが...
JavaScript

【TypeScript】typeとinterface、結局どちらを使うべき?

こんにちは、かつコーチです。前回は、リテラル型で値を限定する方法を解説しました。TypeScriptで型を定義しようとすると、必ずぶつかるのが「type と interface、どっちを使えばいいの?」という疑問です。どちらもオブジェクトの...
JavaScript

【TypeScript】リテラル型で値を限定する

こんにちは、かつコーチです。前回はunion型とintersection型を使って、複数の型を組み合わせる方法を解説しました。その中で何度か登場した「リテラル型」について、今回はあらためて詳しく掘り下げていきます。「特定の値しか受け付けない...
JavaScript

【TypeScript】union型(|)とintersection型(&)の使い方

こんにちは、かつコーチです。前回は any・unknown・never という特殊な型を解説しました。今回は、複数の型を組み合わせて新しい型を作る「union型」と「intersection型」を扱います。実務のコードでは「AかBのどちらか...