ひでメモ

プログラムについて勉強したことを書きます。たぶん。

2022-01-01から1年間の記事一覧

Docker 環境の Mailhog で詳細なログを出力する

今回 SMTP を使っての APサーバ <=> SMTPサーバ 間のメール送信処理がうまくいってないようだったのでその部分の詳細なログを取得したくて調べていました。 Mailhog で詳細なログを出力する 開発環境では Mailhog というツールを使っています。 SMTPサーバと…

Rails チュートリアルでモデル生成時に併せて erb ファイルが生成されない

Rails チュートリアルの下記あたりです。 第2章 Toyアプリケーション - Railsチュートリアル 以下のコマンドでモデルを生成しましょうというくだりがあるのですが、私の環境ではapp\views以下に erb ファイルが生成されませんでした。 rails generate scaffo…

【PHPUnit】php artisan test --parallel するときに設定ファイルを指定する

現在のプロジェクトでは CI でテストのジョブを分散させるために PHPUnit の設定ファイル(デフォルトだと phpunit.xml )が複数あります。 そのため、以下のようなことを同時にやりたい場合が発生します。 php artisan test --parallelでテストを並列実行する…

xor 演算子の優先順位は = (代入)より下位

PHP

自戒を兼ねて記事にします。内容はタイトルの通りなんですが知らずハマりました…… 結論 xor より代入のほうが優先順位が上なので $a に代入される値は xor が処理される前の値になります。 $a = true xor false; // true $a = false xor true; // false その…

PHPUnit の setMethods の代わりに使うメソッド

概要 PHPUnit でモックを作成する際に、、モック対象となるメソッドを指定する際にsetMethodsを使っていると、これは現在非推奨とのことで代わりのメソッドを調べました。PHPStorm が教えてくれました… ありがとうございます 代わりのメソッド setMethodsは…

【Laravel】assertDatabaseHas のテーブル名の取得をモデルから行ったほうが可読性が上がる気がする

テストで下記のようにデータベースの中身を確認するパターンよくあると思います。 $this->assertDatabaseHas( 'm_user', // テーブル名を文字列で指定 [ 'id' => $user->id, 'user_name' => $user->user_name, ]); ただ、テーブル名を文字列で指定するのって…

【Laravel】CI での自動テストを並列化したらジョブの時間が短縮した

概要 CI での PHPUnit で行う自動テストで並列化オプションを有効にしたらテストが早く終わるようになりました。 ローカルではもちろん使っていたんですが CI でも有効したらいいじゃんと気づいたので有効しました。 並列化オプション parallelオプションで…

【Laravel】php artisan schema:dump でマイグレーションファイルを圧縮したらテストが早くなるか試してみた

結論 マイグレーションの圧縮をしても速度はほぼ変わりませんでした。 というかプロジェクトの CI 環境では遅くなりました… もちろん、うちの環境では、という話なのでマイグレーションファイルの数や内容によっては早くなることも十分あると思います。 一例…

iTerm2 の Profile 保存機能を使ってワンクリックで開発環境を立ち上げる

Mac

前置き 開発マシンをずっとスリープのまま使っていたらめちゃくちゃ重くなっていた(再起動したらめちゃくちゃ早くなってびっくりした)ことをきっかけに週一でマシンを再起動するようにしました。 そしたら、再起動の度に仮想マシン立ち上げて、ssh でログイ…

telnet の代わりに curl でポート番号が開いているかどうか確認するコマンド

Mac とか Ubuntu とかは telnet コマンドが入ってないことが体感多いんですが curl ならたいてい入ってます。 Docker コンテナの設定を変えたりしたときにポート番号が開いてるかをすぐ確かめるのに便利です。 curl -v telnet://localhost:80 -v がないとポ…

【SQL・Laravel】大量の withCount を半生SQLに書き換えて高速化した話

状況がピンポイントすぎるのですがたまーに有り得そうだなと思い、自分の備忘録も兼ねて記事を書きました。 いろいろなテーブルに対して異なる条件で withCount を大量に行ったため、処理が重く画面が表示できない(リクエストがタイムアウトする)状態だった…

git pull すると error: cannot lock ref が出る

Git

以下のようなエラー文が出て git pull できないことがありました。 # git pull error: cannot lock ref 'refs/remotes/origin/feature/#100_fix_application': is at 1d5d3c7777d883a428ffaf37a6f3ea2e77efccd9 but expected 9b681a8a212a74e003c4b9c44f4a9e…

【Laravel】レート制限の判定方法とホワイトリストのやり方

記事はたくさんあるんですがコードを見てへ~となったのでメモです。 あとうちのプロジェクトで実装している簡易ホワイトリストの実装も。 概要 プロジェクトではログイン処理がN分内にM回試行されると一時的なロックをかけるようにしています。(もちろんセ…

GitLab の CI/CD でデプロイ先に応じて環境変数を変える

目的 フロントエンドで使用する環境変数を環境ごとに変えたいため、ビルド前に環境変数をセットするのが目的です。 Laravel Mix を使うと頭に MIX が付いている環境変数をフロントエンドと共有できますが、当然フロントエンドのビルド時点で設定されている必…

【Laravel】Sail のデフォルト Web/AP サーバで複数リクエストを並列処理する

概要 Laravel Sail では複数のリクエストを並列で処理できないかと思ったら実はできました! ついでに開発環境もちょっとだけ早くなったよ、という話です。 Laravel Sail 便利ですよね 現在のプロジェクトの開発環境は Laravel Sail を使用しています。 read…

【Laravel】Http ファサードを使って API を叩く際のエラー判定

Laravel で API を実行するために Http ファサードを使ったのですがエラー判定でちょっと躓いたのでメモです。 レスポンス前後でエラーを出し分ける レスポンスの成否判定に便利な failed メソッドがあります。 下記に書いてあるとおりステータスコード 400 …

PHP ≒ Apach が参照している回数が多いファイルをコマンドで確認する

PHP

概要 先日 NFS でマウントしているストレージへのアクセス過多がボトルネックとなりサービスへのアクセスがしづらくなるという状態が発生しました。 調査の中で、サーバのプロセスをトレースするコマンドを使ってプロセスがアクセスしたファイルを取得、内容…

【MySQL】5.6 => 5.7 のアップデートでチェックした設定

以前下記の記事で MySQL のアップデート手順について書きました。 natsuhide.hatenablog.com その際、アップデート後に注意すべきパラメータについてもいくつかチェックしたので覚書きです。 MySQL のバージョンは 5.7.36 です。 注意 強制で 5.7 へのアップ…

【JMeter】負荷テストで JMeter を使ってみた

がっつりではないですが負荷テストというか並列で複数アクセスがあったときも大丈夫かを確かめるために JMeter を使うことになったので覚書です。 具体的な使用方法はもっと詳しい解説をしてくれている方がたくさんいるので説明しませんが、初期設定(案の定…