コードロード

エラー討伐

【データベース】ロック(排他制御)

複数ユーザーが同時にDB更新しても矛盾が起きないようにする仕組み ロックの種類 共有ロック(READロック) 他ユーザーのSELECTだけ認める ユーザーのログイン処理とか 占有ロック(WRITEロック) 他ユーザーの一切の処理を認めない ECサイト等で在庫数で矛…

パーティションでDBの検索速度を速める

パーティションとは DB検索を速くするために、テーブルを内部的に分割する技術のこと。 インデックスでも速くならない場合の検討材料 性能の向上 テーブルの分割により、アプリケーションからのSQLアクセスにおいて、検索性能の向上が見込まれます。性能向上…

データベースの種類

復習 階層型 ツリー構造:1本の幹から複数の枝に分かれながら作っていく 親データ:子データ = 1 対 複数 1つのデータまでのルートが必ず1つなため、ある特定のデータを検索する場合に高速 ネットワーク型 ツリー構造 親データ:子データ = 複数 対 複数 な…

【SQL】LIKE検索は%を3つ以上含めてパターン検索できる

SQL

リクストされたパスを保存しているログから対象の商品IDを含むレコードを取得したいとする。 例:ログテーブル id path 1 /item_ids=5,10,24&created_at=2023-04-01 2 /item_ids=22,23,98&created_at=2023-04-12 3 /item_ids=25,36&created_at=2023-04-30 4 …

【PHP】cronで1億件のデータを移行

1億件のIoT計測データのデータ移行を行った話。 cronでやることになった背景 cronでデータ移行することになった背景はこんな感じ。 カラム名は仮です。 年ごとの計測テーブルBに保存されている、ある期間の数種類の製品の計測データを、四半期ごとの計測テー…

【Laravel】リポジトリパターンでデータ周りの要求変更に負けない設計パターンを取り入れる

こちらの本で勉強中なので、学習記録として。 PHPフレームワーク Laravel Webアプリケーション開発 バージョン8.x対応作者:竹澤 有貴,栗生 和明,新原 雅司,大村 創太郎ソシムAmazon リポジトリパターンとは リポジトリパターンとは、ビジネスロジックからデ…

【Laravel】レイヤードアーキテクチャで仕様変更に強くする

この本でLaravel勉強中なので、自分用にアウトプットしておく。 PHPフレームワーク Laravel Webアプリケーション開発 バージョン8.x対応作者:竹澤 有貴,栗生 和明,新原 雅司,大村 創太郎ソシムAmazon レイヤードアーキテクチャ ビジネスロジックを表現するサ…

【PHP】ある特定のAPIへリクエストすると勝手にリダイレクトされる

php

結論 リダイレクト時のステータスコードは 301 ではなく 302 を使う! ※もしくは明示的に指定しなければデフォルトで302になる 前提 一般ユーザーAでログインしているときに /user へリクエストすると、制限された情報を返すAPIがある。 一方、Adminユーザー…

【React】基礎のポイント振り返り

Reactの勉強記録。 こちらのトラハックさんのReact入門基礎編の振り返り www.youtube.com コンポーネント 見た目と機能を持つUI部品 大きく2つに分かれる クラスコンポーネント(あまり使われなくなってきている) 関数コンポーネント コンポーネントのいい…

【React】create-react-appするまでの環境構築手順

Reactの学習記録 こちらを使って勉強中。まずは環境構築手順の記録 youtu.be はじめに macで作業 create-react-app を使ってお手軽に環境構築していく このコマンドを使うためには、 node と npm が必要。まずそれらをインストールする。 チュートリアルにも…

【PHP】BCMath関数を使わないで正確に小数点同士を計算する

php

結論 X倍して整数にしてから、結果をXで割る。 事象 PHPで小数点以下を含む値の引き算だと、二進数表現の精度が落ちる影響で、期待した値にならないことがある。

【PHP】セッション名にドットを含めて指定するとセッションが取得できなくなる

php

課題 セッション名を指定して session_start() すると、セッションが取得できなかったのでメモ。 結論 セッション名を指定するときに、「.」ドットは使わない! 例 セッション名を「.」ドットで繋いで session_start() すると、セッションを取得できない。 …

【PHP】CSV出力したいのにheader()関数が効かない

php

環境 MAMP PHP 7.4.16 やりたかったこと PHPでCSVを出力する機能を作っていて、レスポンスヘッダーを下記のように設定したかった。 Content-Disposition: attachment; filename=ファイル名.csv Content-Type: text/csv 課題 下記のメソッドを使ってレスポン…

【Laravel】バリデーション失敗時に勝手にリダイレクトしないようにする(jsonを返させる)

課題 バリデーション失敗時に勝手に意図しないhtmlレスポンスを返す。 解決の過程 ReactとLaravelで開発中に、データ更新時と登録時にたまに302レスポンスが返ってくる。 コントローラまで処理が到達していない フォームリクエストで止まっているっぽい バリ…

【Laravel】特定のcookieの値の暗号化を解除(Laravel外からもcookieを使用したい)

課題 CookieファサードとPHPのfilter_inputで取得できるcookieの値が異なる。 Laravel外からcookieを使用したいが、暗号化されているため使用できない。

【Laravel×Apache】413 (payload too large) が出たらphp.iniを変更する

環境 PHP 8.0.16 CentOS Apache 2.4 課題 本番環境にて画像をアップロードしようとしたら、 413 Content Too Large のエラーが返ってくる。 解決方法 php.ini で、 upload_max_filesize と post_max_size を確認する。 まず、そもそもどこの php.ini を読み…

【Laravel】本番環境で画像アップロードできないときに確認する箇所

課題 本番環境にて、下記のコードでアップロードできなかった。 ブラウザのネットワークタブで確認すると、500エラーとだけ表示される。

【Laravel】認証していない場合のリダイレクト先を変更する

app/Http/Middleware/Authenticate.php のリダイレクト先を名前付きルートに変更する。 Sanctumで認証しているが、これでいけた expectsJson()) { return route('login'); // <-ここを名前付きルートに変更 } } 公式にも書いてある Note: 独自の/login エン…

githubの秘密鍵を指定してgit pullする

git

こんな感じで .ssh/config に2つ登録したとする // .ssh/config Host github.com.first HostName github.com IdentityFile ~/.ssh/id_rsa_first User git Host github.com.second HostName github.com IdentityFile ~/.ssh/id_rsa_second User git 秘密鍵を…

【Laravel×Postman】画像を取得できない(送信できない)時は

LaravelでREST API作成中にハマった。Postmanで動作確認中。 結論 リクエストヘッダーの Content-Type のチェックが外れていないか確認! 値は multipart/form-data; boundary=<calculated when request is sent> となっているはず。 ハマった こんな感じで、POSTリクエストで、Bodyを form-da</calculated>…

【Laravel】定数をクラスファイルで管理する

定数をクラスファイルで管理する app/Consts/CommonConst.php を作成した。 [ // 省略 'CommonConst' => \App\Consts\CommonConst::class, ] ] app/Http/Controllers/Api/…

【Laravel Sanctum】ログインは通ってセッション生成されたのにSanctumミドルウェアのルートにアクセスするとunauthenticatedになる

メモ程度 課題 表題の通り 対策 キー名RefererとOrigin、値はURLでリクエストヘッダーに設定してあげる。 参考 refererヘッダーまたはoriginヘッダーのチェック SPAからこのヘッダーが送られないと認証エラーになる Postmanで動作確認するときに注意する qii…

【Laravel】419 CSRF token mismachエラーの対処記録

Laravel Sanctumを使ってログイン機能を実装中にエラーに遭遇。 思考の整理と次に時間を溶かさないようにするためのメモ 結論 .env での SESSION_DOMAIN='localhost' ここが間違えていた。 .env にてセッションを設定するドメインを設定しているので、ドメイ…

【Laravel】多対多でリレーション先のデータを取得する

多対多のER図 リレーション先を取得する モデルで追加したメソッド名を with('メソッド名') の引数に追加する ※リレーション先のテーブル名やクラス名をwith()の引数にするわけではない! // App/Models/Food.php /** * foodを持っているフードアイコン */ p…

【PHP】多次元配列を並び替えて、指定番目から指定件数のみ切り取った配列を取得

php

やりたいこと PHPで、多次元配列があって、指定したキーの値で、昇順・降順の並び替えができるようにしたかった。 並び替えの後、指定した番目から指定した件数分の要素だけを取得したかった。 つまり、ページネーションのイメージ。 SQLでやればこんな感じ…

【Windows-WSL2】composer install と composer updateでエラー

php

普段使っているPCとは別のPCで git clone したあとに、PHPUnitを composer install しようとしたときのエラー 環境 Windows11 WSL2 php 7.4.3 エラー文 it is missing from your system. Install or enable PHP's dom extension. it is missing from your sy…

【PHP】SERVER_NAMEじゃなくてphp_unameで開発環境と本番環境を振り分ける

php

困ったこと filter_input(INPUT_SERVER, 'SERVER_NAME') これでサーバーの名前をとって、 localhost かどうかで振り分けていたが、PHPUnitを使った時に、 null で返ってきたので代替法。 解決策 php_uname('n') これでPC名がでる。 PHP が稼動しているオペレ…

【PHP】MAMPでcURLを使えるようにするために

php

結論 cacert.pem(CA証明書をダウンロードする) php.iniを書き換える そもそもcURLが使える状況かどうか php -m で確認 phpinfo() で確認 PHPでcurlを使えない場合の対処法 - Qiita grepで確認 % php -i | grep cURL cURL support => enabled cURL Informat…

【IoT】IoTシステムのバックエンド(クラウド設計・運用のポイント)

IoT

IoTエンジニア養成教本の学習記録です。 改訂新版 IoTエンジニア養成読本 Software Design plus作者:片山 暁雄,松下 享平,大槻 健,大瀧 隆太,鈴木 貴典,竹之下 航洋,松井 基勝技術評論社Amazon 機能とサービスの選択 センサネットワークのバックエンドでデー…

【IoT】IoTに最適な通信規格とは(LPWA)

IoT

IoTエンジニア養成読本の学習記録です。 改訂新版 IoTエンジニア養成読本 Software Design plus作者:片山 暁雄,松下 享平,大槻 健,大瀧 隆太,鈴木 貴典,竹之下 航洋,松井 基勝技術評論社Amazon LPWAとは Low Power Wide Area の略で、消費電力を抑えて遠距離…