Next.js での IE11 対応

Next.js はデフォルトで IE11 をサポートしている https://nextjs.org/docs/basic-features/supported-browsers-features#polyfills core-js の Polyfill が import される .babelrc で preset-env の設定をカスタマイズする必要はない 足りない Polyfill が…

Laravel 6.x : Routing のテスト (Request を Router に渡して dispatch 結果をテストする)

過去のエントリー からテスト方法を変更し、 任意の Request を Router に渡し、期待値どおりに dispatch されるかどうかをテストするコードを書きました。 サンプル final class routesTest extends TestCase { // 〜 略 〜 public function DispatchDataPr…

PHP 7.4 : DOMDocument クラスを利用して、HTMLの要素を取得する

ドキュメント https://www.php.net/manual/ja/class.domdocument.php 環境 PHP 7.4.9 Alpine Linux 3.12 作業メモ // in Dockerfile FROM php:7.4-fpm-alpine RUN set -eux \ && apk update && apk upgrade \ && apk add php7-xml \ // in Test // Assert HT…

メモ: Laravelの設計中に言語化した用語

Single Action Controller __invoke() メソッドだけを持つコントローラ ADR (Action Domain Controller) MVC をサーバーサイド向けに洗練させたパターン Single Action Controller は A の実装パターン メリット 各クラスのアクションを1つのみにする事で、…

Next.js チュートリアルを実践

https://nextjs.org/learn/ 実施日 2020/8/25 あたり (チュートリアルは頻繁に更新されている模様) チュートリアルで作成したもの https://github.com/tamurayk/nextjs-blog https://nextjs-blog-bice-seven.vercel.app/ 前提知識 Next.js Universal (Isomor…

Android 関連の用語

すぐ忘れるのでメモ Android Studio Android アプリ開発用の IDE Google公式の開発ツール Gradle Java 環境におけるビルドシステム (のデファクトスタンダード) Android Studio に同梱されてる Maven これも Java 環境におけるビルドシステム 現在では Gradl…

nodenv 利用時に nodenv: yarn: command not found エラー発生時の対応方法

よくハマるのでメモ 解消方法 nodenv-yarn-install をインストールして、nodenv uninstall {.node-version に記載のバージョン} & nodenv install {.node-version に記載のバージョン} し直すと解消する nodenv-yarn-install node install 時に、yarn も一緒…

Laravel : Eloquent について整理

ORM PHPはオブジェクト指向で、DB(RDB)はSQL文なので、互換性がない。=> 自動的に互換性があるように変換してくれるのがORM。 DBのレコードを、オブジェクトとして直感的に扱えるようにするもの DB側の都合をアプリケーションで意識しないで済むようにするも…

Laravel : EloquentModel(Illuminate\Database\Eloquent\Model) に存在しないメソッド(=find() 等)が呼ばれた場合は、__call() によって \Illuminate\Database\Eloquent\Builder の同名のメソッドが呼ばれている

Laravel 6.x Eloquent:利用の開始 - モデルの取得 Eloquentモデルは、対応するデータベーステーブルへすらすらとクエリできるようにしてくれるクエリビルダだと考えてください ↑ はどういう事か note find() など Modelクラス(Illuminate\Database\Eloquent…

Laravel 6.x : Validation で 特定の条件の場合のみ必須(required_if)、それ以外の場合はNULLを許容(nullable)する

ドキュメント required_if required_if:他のフィールド,値,... 他のフィールドが値のどれかと一致している場合、このフィールドが存在し、かつ空でないことをバリデートします。 string string フィルードは文字列タイプであることをバリデートします。 フィ…

laravel-permission を利用したロールベースアクセス制御

概要のみメモ laravel-permission https://docs.spatie.be/laravel-permission/v3/introduction/ laravel-permission で利用するテーブル roles permissions model_has_roles model_has_permissions role_has_permissions https://qiita.com/sh-ogawa/items/…

Laravel 6.x : Validator::make() で Validator を生成し、エラーメッセージのプレースホルダを customAttributes で置き換える

(ある事情で) FormRequest をメソッド・インジェクションで使用せず、Controller 内で Validator::make() してバリデータを生成し、ちょっと変わった使い方をした その際、バリデーションエラーメッセージ の プレースホルダ に attributes() が反映されず、…

Laravel 6.x : 実行されたSQLをデバッグログに出力

\DB::enableQueryLog(); $query->where(xxx); \Log::debug(\DB::getQueryLog());

Laravel 6.x : 外部パッケージを Facade で利用する方法

利用したいパッケージ http://image.intervention.io/ ドキュメント ファサードの仕組み (スタンドアロンの) 外部パッケージをファサードで利用する方法 // プロジェクトが依存するパッケージを追加 (`composer require intervention/image`) //composer.jso…

【jQuery の ready(), load() が実行されずにハマった話】<script> に defer を指定した際、インラインのscriptはHTMLパース中に実行される

下記のうち、1, 2, 3 が実行されない原因がわからずハマりました。 <html> <head> <script src="jQuery本体をロードするjsファイル" defer></script> </head> <body> 〜 略 〜 <script> // jQuery の ready() jQuery(document).ready(function(){ //Uncaught ReferenceError: jQuery is not defined console.info('== 1 ==') }); </script> <script> // jQuery の load()…</body></html>

Laravel 6.x: Routeのテスト (各URL毎に期待したアクションが実行されるかどうか)

2020/09/11 追記: 別の方法 に変更しました。 sample final class XxxxRouterTest extends TestCase { public function RouteActionNameDataProvider() { return [ [ 'get', '/user/1', //テスト対象のURL UserViewController::class, //URLをリクエストした…

PHPStorm: コード・インスペクション実行

note Code > Inspect Code を実行。 プロジェクト全体のエラーを検出したりできる。

Laravel 6.x : UnitTest で テスト用のDBを利用

note test用のDBを作成する CREATE DATABASE `xxx_testing`; test用DBの接続設定 phpunit.xml + .env.testing RefreshDatabase トレイトでマイグレーションを実行 RefreshDatabase トレイトの機能 テスト実行時に自動的にマイグレーションを実行 テスト中に…

PHPUnit: private property の値をテストする

$this->getHiddenProperty() を利用する class Hoge { private $hidden; final class HogeTest extends TestCase { /** * @test */ public function プライペートプロパティのテスト() { $hoge = new Hoge(); $this->assertEquals( 'expected value', $this-…

Laravel 6: ログイン試行回数, ロック時間 の規定回数とエラーメッセージを変更

バージョン Laravel: 6.16.0 ログイン試行回数, ロック時間 の既定値を変更 app/Http/Controllers/Auth/LoginController.php のメンバ変数に $maxAttempts $decayMinutes を追加 class LoginController extends Controller { use AuthenticatesUsers; // 追…

note: リポジトリパターン, CQRS と Laravel のインジェクションの流れ

概念を整理 リポジトリパターン 解決したい問題 データストアの参照先が変わっても、プログラムの変更範囲を限定的にしたい how ビジネスロジックからデータアクセス処理を切り出し CQRS (コマンドクエリ責務分離) 解決したい問題 レコード数の増大やデータ…

PHPUnit: 最初にエラーが発生した時点で実行を停止

$ vendor/bin/phpunit --stop-on-error #最初にエラーが発生した時点で実行を停止 こっちのが便利かも $ vendor/bin/phpunit --stop-on-failure #最初にエラーあるいは失敗が発生した時点で実行を停止 ドキュメント コマンドラインのテストランナー

CakePHP3: 同じSQLを複数実行しないように

ドキュメント Cake\ORM\Table::get($id, $options = []) メモ 下記の場合、同じクエリが2回実行されている $category_id = $this->Articles->get(1)->categoriy_id; $author_id = $this->Articles->get(1)->user_id; 下記のようにすれば、クエリ1回の実行で…

FriendsOfCake/crud: findMethod() の引数

メモ: FriendsOfCake/crud: findMethod() の引数 public function index() { $this->Crud->action()->findMethod([ // カスタム Finder メソッド を指定 // See: Crud - findMethod 'myCustomFinder' => [ // Cake\ORM\Table::find($type, $options = []) の…

CakePHP3: マイグレーションでカラムの型を string から uuid に変更

試行錯誤したのでメモ。もっとシンプルな方法があると思う。。 ドキュメント カラムの属性を変更 作業ログ public function change() { $this->table('hoges') ->changeColumn( 'foo_column', 'uuid', [ 'null' => false, ] ) ->save(); } ↑ ではうまく行か…

CakePHP3: クエリビルダーで SUM(CASE WHEN)

こんな感じの SELECT 文を作りたい場合は、 SELECT user_id AS "user_id", (SUM( CASE WHEN hoge < 3 THEN count END )) AS "A", (SUM( CASE WHEN hoge >= 10 THEN count END )) AS "B" FROM articles GROUP BY user_id こんな感じ $query = $articles->find…

Spleeter で音楽データからボーカル、ドラム、ベース をそれぞれ抽出してみた

spleeter 機械学習を用いて、音楽データからボーカルや各楽器パートだけを抽出してくれるツール 結果 元音源: Baby Girl - Co-fly トラック ボーカル ベース ドラム その他 Spleeter で抽出するまでの流れ (事前準備) Miniconda をインストール Miniconda に…

CakePHP3 (3.2以降): クエリビルダーで DATE 型のフィールドを取得すると、Cake\I18n\FrozenDate オブジェクトが返される

クエリビルダで DATE 型のフィールドを取得すると、Cake\I18n\FrozenDate オブジェクトが返される 同じく、DATETIME 型を取得すると、Cake\I18n\FrozenTime オブジェクトが返される サンプル var_dump( $query->find()-> .... ->get('field_date') ); //fiel…

CakePHP3: 行ロック(SELECT 〜 FOR UPDATE)

BEGIN; SELECT 〜 FOR UPDATE; /* COMMITするまで選択した行をロック*/ UPDATE 〜; COMMIT; これを CakePHP3 で行うと ConnectionManager::get('default')->transactional(function () use ($id) { $query = $this->TableClass; $query->find()->where(['id'…

CakePHP3: $validator->scalar() は integers, floats, strings, booleans, を許可する

This method will accept integers, floats, strings and booleans, but not accept arrays, objects, resources and nulls. See: https://api.cakephp.org/3.5/class-Cake.Validation.Validation.html#_isScalar