PHPの曖昧判定を使う時に注意しておくべきこと

PHPの曖昧判定 PHPは厳密ではない比較をする関数がいくつかあります。 厳密比較をしないことによって意図しない判定をしてしまうことがあります。 今回はemptyを使った時の注意点を、実装とユニットテストの観点から見てみます。 ちなみに自分は絶対厳密比較…

DBの値をフロントエンドやバックエンドで定数として扱う際のリスクと改善策

概要 今まで、DBの値をFrontendで定数として持って使うケースや、テーブル更新のコストが高いと判断してBackendで値を保持・運用するケースをたまに見てきました。 もちろん軽量なプロジェクトやプロトタイプの製作では有効な場合もありますが、保守性や変更…

複合インデックスの効果と注意点

概要 インデックスには複合インデックスというものがあります。 これは単一のカラムではなく、複数のカラムを組み合わせてインデックスを貼るもので、組み合わせで検索されるカラムに貼ると効率的です。 複合インデックスを使うにあたって、いくつか注意点が…

anyとunknownの違いとどちらを使うべきかについて

概要 TypeScriptにはanyとunknownという型があります。 これらは型チェックを無効にするものですが、動作には大きく違いがあります。 anyとunknownの動作の違い 例えば以下の実装があったとします。 ( v5.3.3の環境で実行しています) const un: unknown = …

ReactでコンポーネントからMarkDown ファイルを呼び出す

概要 marked - npmを使用してNext.jsのプロジェクトから.mdファイルを試しに呼び出してみたことの備忘録です。 markedのバージョンは "marked": "^10.0.0",です。 公式ではdemoページを見ることができます(左がmdファイルで右が出力されるHTML)。 手順 ま…

useStateは必要最低限が良い

概要 必要不可欠でない state 変数をすべて削除するという記事を読んで覚えておきたいと思ったのでブログに書こうと思います。 そもそもuseStateは、UIを操作するための状態管理の仕組みです。 例えば、フォームが送信中であることや、入力エラーがあること…

useEffectはなるべく使わない方が良いのかということについて

概要 Reactの公式ページにはエフェクトは必要ないかもしれないというページがあります。 必要のない場面でuseEffectを使うことを避けるという記事で、この記事について自分の経験や理解したことについて書こうと思います。 必要のない箇所でuseEffectを使う …

useMemoの役割、いつ使うべきかと注意点について

概要 useMemoの役割や使わない方が良い場合についてまとめようと思います useMemoの役割 useMemoは計算結果のキャッシュを保持して高速化する目的で使用されます。 const tasks = useMemo( () => filterTasks(term), [term] ); 上記の例では初回レンダー時に…

ドメイン駆動設計の目的とレイヤーについて自分なりに整理する

はじめに ドメイン駆動設計 モデリング/実装ガイドを読んで、ドメイン駆動設計(以下DDD)について改めて思ったことを書いていきたいと思います。 自分のDDDの経験としては、実務経験はありますが、DDDで実装されたリポジトリの機能追加くらいで、メインで普…

PHPのキャッシュ(OPcacheとpreload)についてメモ

PHP

はじめに この記事は自分がPHPのキャッシュ戦略についての理解を整理するために書いています。 細かい解釈ミスなどありましたら教えていただけると幸いです。 まずは基本的なことですがおさらいから。 PHPはインタプリタ言語です。インタプリタは事前コンパ…

ChatGPTにSQLの集計と集計結果に対するcase文について説明してもらいました

はじめに 自分は普段SQLなどの小ネタをブログに書いたりしているのですが、説明のためにテーブルを用意したりするのはちょっと面倒です。 なのでやりたいことだけ書いて、全部解説してデータも例示してもらうことにしました。 こちらの仕事としては、集計し…

GROUP_CONCATでグループ化された行のカラムの値を連結して出力する

概要 グループ化された行のカラムの内容も表示したい時などに使うGROUP_CONCAT()について記載します 実行環境:MySQL5.6 SQL CREATE TABLE classroom ( classroom_id INT PRIMARY KEY, classroom_name VARCHAR(50) NOT NULL, capacity INT NOT NULL ); CREAT…

ChatGPTにSQLのCreate文を書いてもらいました

概要 SQLの記事を書こうと思ったのですが、Createを1から書くのが面倒だったのでChatGPTに書いてもらいました お願いした内容 SQLでCreateを書いてください。教室テーブルとそれに紐づく生徒テーブルの二つです 出力結果 以下は、SQLで教室テーブルと生徒テ…

SWRが検証中かisValidatingで判断可能

概要 SWRはデータ取得のための React Hooks ライブラリで、データを継続的かつ自動的に受け取ることができる 例えばAPIに渡すパラメータが変わったとき、手動でAPIを叩き直さなくてもSWRを使っていれば変わったときに自動でAPIを叩いてくれる 再検証中かどう…

PhpStormのIndexingが毎回走って遅いので対処法メモ

概要 PhpStormにはインデックス作成の機能があります 公式によると以下のように色々な役割を担ってくれます PhpStorm のインデックス作成は、IDE のコア機能であるコード補完、インスペクション、使用箇所の検索、ナビゲーション、構文のハイライト、リファ…

git cherry-pickの概要とhash値が変わるので別のコミットになることに留意することのメモ

Git

git cherry-pickの概要 あるブランチのコミットを別のブランチに適用する操作 作業ブランチを変えたくなった場合などに、古いブランチの変更を新しいブランチに取り込むなどのケースに使うかと思います コマンド git cherry-pick commitSha commitShaはコミ…

MySQLのSelect句で日付の差分を取得する方法と分単位の差分について

使用例 例えば最初にレコードが作られた日付と、何らかの処理が完了した日付の差分を取得するときなどに使うかと思います select created, finished, TIMESTAMPDIFF(MINUTE, created, finished) AS '分差分' from table order by id desc MySQLのDIFF関数は…

PHP 7.2.x で推奨されなくなる機能 - クウォートしない文字列

PHP

クウォートしない文字列 クオートしない文字列は、その名前のグローバル定数が定義されていない場合は単なる文字列という扱いになります。 このとき、いままでは E_NOTICE が発生していました。 PHP 7.2.x 以降は、E_WARNING が発生するようになります。 次…

PHP UnitテストのassertEqualsとassertSameの違いと、assertEqualsは==と全く一緒ではない件について

assertEqualsとassertSameの違いについて PHPのUnitテストを書くようになって、基本はassertSameを使うもののassertEqualsとassertSameの違いをちゃんと調べたことがまだないなと思って調べてました。 イメージとしてはassertEqualsは==のような挙動で厳密に…

v-validateで値変更後にバリデーションする

$nextTickを利用するやり方 @input="v => { change(v) $nextTick(() => $validator.validate('xxx')) }" $nextTickはDOMの更新後に実行されるため、inputでDOM要素が変更されたあとに任意のvalidate処理を実行することが出来る

Dockerコンテナ内に入るコマンド二つとdocker exec -itの-itの意味

コンテナに入る exec 一つ目はdocker exec -it コンテナ名 or コンテナID bashで、基本これを使うイメージがあります exitで抜けたときに、コンテナ自体は終了せずに動き続けます attach docker attach コンテナ名 or コンテナID bash こちらはexitで抜けた…

Google Tag Managerのタグとトリガーについてメモ

概要 簡単な概念だけ記載します 、というかあまり深くまで知らない。。。 タグ: データを Google アナリティクスなどのシステムに送信するコードです。 ↑公式から引用 タグは実行されるJavaScriptコードという理解です Google公式のタグもあれば、完全にカス…

主キーには自動でインデックスが付与される

Primary keyを作成時、インデックスは自動で付与される 主キーを作成時、大抵のDBは自動でインデックスが主キーに付与される そのため、主キーにインデックスがあることを意識してインデックスを付与することや、複合主キー主キーを作成時には、複合インデッ…

FirestoreとNoSQLについて

Firestoreについて FirestoreはNoSQLモデルのデータベースです。 公式サイトは以下です。 https://firebase.google.com/docs/firestore?hl=ja FirestoreってRDBと何が違うの?というとデータを保持する構造が全く異なります。 RDBに詳しい人ほど取っ付きにく…

awaitとthenの挙動と使い分け、awaitを使わないほうが良い場合とPromise.all()について

awaitの使用例 まずdeveloper.mozillaの説明を引用しますと await 演算子は、async function によって Promise が返されるのを待機するために使用します。 下の例ではawait processA()でprocessAの解決を待ったあとに以下の処理が走ります。 processA()の実…

DB設計~第一正規化から第三正規化

はじめに 商品の注文履歴テーブルを作成する、という題材でDB設計(第一正規化から第三正規化まで)を考えていきます。 カラムは簡潔にするためにシンプルにしています。 第一正規化 これは単に一つのカラムに一つの値が入っている状態で、以下のような形で…

Error: Value for argument "data" is not a valid Firestore document. Cannot use "undefined" as a Firestore value (found in field "fieldName")の原因と対処法

エラーの原因 undefinedをFirestoreがサポートしていないためエラーが出ます。 なお、nullはサポートしているためエラーは出ません 参考 firebase.google.com 対策 undefinedではなくnullなどサポートされている型を入れる firebase.firestore.Settingsでign…

HTTP レスポンスステータスコードについてメモ

レスポンスの5つのクラス 100台 情報レスポンス 200台 成功レスポンス 200 OKや201 Createdなど 300台 リダイレクト系 301 Moved Permanentlyなど 400台 クライアント側エラー 400 Bad Requestや404 Not Foundなど 404 Not Foundでリュックを背負った金髪の…

アジャイル・スクラム開発を経験して考えたこと・感じたこと

はじめに この記事はスクラム開発の解説ではなく、私がスクラム開発チームやっていたときの備忘録です。 こんなんだったなぁとか大変だったなぁみたいなことを書きたいと思います。 内容も私の経験を元に書いているので、それはスクラムじゃないみたいなこと…

tsconfig.json/compilerOptionsのtypes指定についてメモ

概要 デフォルトでは@typesパッケージのすべて(node_modules/@types)がコンパイル時にincludeされる。 typesを利用すると、指定したパッケージのみincludeされる。 { "compilerOptions": { "types": ["node", "lodash", "express"] } } ↑三つの指定したパ…