MUIのスタイリング方法

MUI v5 スタイリングは Emotion or styled components を利用できる CSS-in-JSライブラリ JSS (JavaScript Style Sheets) MUI v4 では makeStyles と JSS を組み合わせてスタイリング MUI v5 で makeStyles が非推奨になった styled components CSS-in-JS(J…

Laravel: Facade vs Contract

自分の言葉で言語化してメモ Facade vs Contract Facade と Contract はどちらも Laravel のコア機能を使う為の方法である Facade what Laravelのコア機能をサービスコンテナを介さずに利用できる静的なインターフェース メリット サービスコンテナを意識す…

Azure Application Insights への特定のログ出力を Azure Monitor で監視し、Slack 通知する方法

先日、Azure Function の異常終了を検知し、Slack に通知する仕組みを構築しました。 今回は、Azure Application Insights に特定のログが出力されたら Slack に通知する仕組みを構築する手順を書きます。 使用するもの Slack 通知を受けるチャンネル Incomi…

EventGrid TriggerのAzure Functionをローカルで動かす方法

Azure Function のトリガーの種類により、ローカルでの実行方法が異なります。 HTTP トリガー http://localhost:<PORT>/api/<FUNCTION_NAME> にリクエストする事で実行できます。 (EventGrid Trigger を除く) HTTP トリガー以外 Azure Function の 管理者エンドポイント ( =http:/</function_name></port>…

CakePHP 4.x に ParaTest を導入

CakePHP 4.x に ParaTest を導入 テストの数が増えてきて全件テストを実行するのに時間がかかるようになった為、ParaTestを導入し、テストを並列実行するようにしてみました。 version CakePHP: 4.4.10 ParaTest: v6.9.1 PHPUnit: 9.6.7 ドキュメント https:…

CakePHP 4.x: Entityのカラム一覧は、DBのスキーマを参照して取得しており、取得結果は schema_cache としてキャッシュされている

CakePHP の実装 実際のスキーマを元に、Entity 取得時に実行される SQL の SELECT 句に指定するカラム一覧を生成している 上記は schema_cache としてキャッシュされる bin/cake schema_cache clear した上で、Entity を取得した際、カラムの一覧を取得する …

M2 Mac で Apollo Twin X を使えるようにする方法

2023/02/11 の時点では、mac を macOS 復旧 で起動し、“低セキュリティ ”オプション を設定する必要があります。 作業日 2023/02/11 経緯 mac book pro 2016 (13 インチ) が突然故障し、再起不能となり、M2 Max の mac book pro (14インチ) を購入 旧PCは起…

PHPStorm で File Structure のショートカット(cmd + F12)が効かない事象の調査メモ

事象 cmd + F8(Breakpoints) などは効く cmd + F12 だけ効かない キーストロークは IDE に到達しますか? => 到達しないので、他のプログラムまたはオペレーティングシステムがショートカットをインターセプト している 解消方法 アクティビティモニタでプロ…

Azure DevOps Pipelines: pr: none を明示しないと、PR作成時に、意図せず Pipeline が動いてしまう

デフォルトで生成される azure-pipelines.yml は以下 注意点 pr: none が明示されていなので、PR作成時に Pipeline が動く trigger: - main pool: vmImage: ubuntu-latest steps: - script: echo Hello, world! displayName: 'Run a one-line script' - scri…

CakePHP4.x: hasMany の Association を contain すると 別SQL になる仕組み

以前、hasMany の Association を contain すると 別SQL になるという内容の記事を書きました 今回は、どのような仕組みで別SQLになるのか、コアのコードを追ってみました version CakePHP: 4.2.8 仕組み \Cake\ORM\EagerLoader::loadExternal によって、別S…

Intel Mac から M1 Mac に移行後、Alfredでファイル検索ができない問題の解消方法

Version MacBook Pro (14インチ、2021) Apple M1 Pro macOS Monterey 12.1 Alfred 4.6.3 what Intel Mac から M1 Mac に 移行アシスタント + ターゲットディスクモード で移行した 移行後、Alfred でファイル検索が出来なくなった spotlight ではファイル検…

PDO と プリペアドステートメント(使用|未使用)時のデータ取得の流れ

ドキュメント PHP Data Objects note what PDO (PHP Data Objects) データベース抽象化レイヤ 解決したい問題 mysql_connect でDB(MySQL)に接続した場合、別のDBに変わった場合に、pg_connect への変更が発生する PDO データベースが変わっても同じ命令でデ…

CakePHP 4.x: DBのデータ型 から PHPの型(Entityのpropertyの型) へのCast

DBのデータ型 から PHPの型(Entityのpropertyの型) への変換 \Cake\Database\Type 以下の Class の toPHP メソッドで行われる 例 \Cake\Database\Type\StringType::toPHP` 一覧 \Cake\Database\TypeFactory::$_types PHPの型(Entityのpropertyの型) から DB…

GIN Index についての覚書

GIN Index 解決したい問題 / 解決方法 解決したい問題 複合型の項目(JSONB 等)の要素の値の検索の高速化 解決方法 実装 https://www.postgresql.jp/document/13/html/gin-implementation.html note 部分一致 検索にも対応 注意点 GINインデックスの更新は低…

Azure Functions: `Azure Functions Core Tools` で TypeScript/QueueTrigger の関数を `func start` 時に `Value cannot be null. (Parameter 'provider')` エラー

バージョン OS: macOS Catalina 10.15.7 Azure Functions Core Tools: 3.0.3785 node: 14.17.5 遭遇したエラー Value cannot be null. (Parameter 'provider') $ func start Azure Functions Core Tools Core Tools Version: 3.0.3785 Commit hash: db6fe71b…

CakePHP 4.x: .env ファイルを有効化する (留意点あり)

留意点をメモ ドキュメント https://book.cakephp.org/4/en/development/configuration.html#environment-variables 有効化方法 ① config/bootstrap.php の以下をアンコメントアウト // if (!env('APP_NAME') && file_exists(CONFIG . '.env')) { // $dotenv…

CakePHP 4.x: Crud\Action\EditAction のレスポンスに data を含める

Crud.afterSave で Config の api.success.data.row を設定 CakePHP 4.x: FriendsOfCake/crud の Config の api.success.data キー class UsersController extends AppController { public function beforeFilter(EventInterface $event): void { parent::be…

CakePHP 4.x: FriendsOfCake/crud の コアイベント と カスタムリスナー の追加方法

前提知識 CakePHP の イベントシステム CakePHP 4: イベントシステムの概要 - idubmorganのブログ Crud プラグインのコアイベント 概要 ORM/Modelイベント 等と同様に、Crudプラグイン用のイベント(=Crudコアイベント)が用意されている Crudコアイベントの種…

CakePHP 4: イベントシステムの概要

CakePHP 4.x: イベントシステム 概要 CakePHPのイベントシステム モデル・ビヘイビアー・コントローラー・ビュー・ヘルパーのコールバックの心臓部 why クラスの結合度を下げる コードの関心事を明確に分離させる how Observer パターン オブジェクトがイベ…

CakePHP 4.x: hasMany, belongsToMany でアソシエーションしたテーブルのレコードを contain で取得する際は、JOIN でなく、別のSQLで取得している

アソシエーションしたテーブルのレコードを contain して取得する際に実行される SQL は下記のように異なる hasOne の場合は JOIN で取得 hasMany は別SQLで取得 追記 CakePHP4.x: hasMany の Association を contain すると 別SQL になる仕組み ドキュメン…

CakePHP 4.x: FriendsOfCake/crud の Config の api.success.data キー

Config の api.success.data キー は \Crud\Listener\ApiListener::_ensureData で参照される https://github.com/FriendsOfCake/crud/blob/master/src/Listener/ApiListener.php#L231 以下の指定方法がある api.success.data.row api.success.data.subject …

CakePHP 4.x: クエリログを出す方法

// logs/queries.log にクエリログを出力 $connection->enableQueryLogging(true); コントローラ内であれば、こんな感じ $this->テーブル名->getConnection()->enableQueryLogging(); ※3.x では $this->テーブル名->getConnection()->logQueries(true); だっ…

PHP: メモリ使用量の確認方法

note CakePHP の場合は、app/webroot/index.php の先頭と最後に下記のコードを差し込んで確認した https://www.php.net/manual/ja/function.memory-get-usage.php https://www.php.net/manual/ja/function.memory-get-peak-usage.php //ini_set('memory_limi…

CakePHP 4.x: `TableClass->find()...->all()` では `ResultSet` が返り、`ResultSet` を foreach で回すと `PDOStatement::fetch` しDBから取得したデータがメモリ上に展開される

※2022/02/05: 追記 (->toArray() する際の注意点) ドキュメント クエリービルダー - テーブルから行を取得する TableClass->find()...->all() では ResultSet が返り、ResultSet を foreach で回すと PDOStatement::fetch しDBから取得したデータがメモリ上…

React : コンポーネントの作成手順

Reactの流儀(Thinking in React) と Presentational and Container Components パターン(デザインパターン) を適用すると良い React の 流儀 下記の流れでコンポーネントを作る デザインモックの UI を、コンポーネントに括るべき範囲に分解し、分解したコン…

CakePHP 4x: AuthenticationMiddleware の挙動と、ログイン時に毎回From認証するサンプル

AuthenticationMiddleware の挙動が把握できておらず、ハマったのでメモ AuthenticationMiddleware の挙動 チュートリアル に // src/Application.php public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue { $middlewareQueue /…

CakePHP 4x: JST の Chronos インスタンスで diffInMonths すると正しい結果が得られない (回避方法も記載)

(2021/01/18 追記) 次回リリースされるバージョンの Chronos では問題が解消されるようです #283 にて修正済み UTC 以外の場合は diffInMonthsIgnoreTimezone() を使えばok バージョン PHP: 7.4.11 CakePHP: 4.1.5 Chronos: 2.0.6 what すでに公式に issue …

MySQL: character_set_client についてのメモ

バージョン mysql: 8.0.20 what Docker mysql:8.0.20にログインすると、日本語が ??? に文字化けしていた charset.cnf (ファイル名前は何でもok) で default-character-set を uft8mb4 に設定をする事で解消した // /etc/mysql/conf.d/charset.cnf [mysqld] …

CakePHP4 : DebugKit を無効化

バージョン CakePHP : 4.1.5 DebugKit を無効化 app/src/Application.php の bootstrap() 内の $this->addPlugin('DebugKit'); をコメントアウト public function bootstrap(): void { // if (Configure::read('debug')) { $this->addPlugin('DebugKit'); //…

MySQL 8.0.20 (InnoDB): INDEX 有無によって、実在しない行に対する SELECT ... FOR UPDATE とそれに続く INSERT の挙動が異なる

今回の検証で仕組みの理解には至りませんでした。 個人用に挙動をメモ。 検証したい事 INDEX 有無で下記の挙動の違い 行ロック 行ロック後のINSERT バージョン MySQL 8.0.20 前提 InnoDB は行ロックの際に、テーブルロック(インテンションロック)も取得する …