勉強日記

チラ裏

PHP

PHPでRAII

RAII: Resource Acquisition Is Initialization PHPのデストラクタ PHPでRAIIを試す RAII: Resource Acquisition Is Initialization 「リソース取得は初期化時に」 C++のSTLコンテナやスマートポインタが則っている概念 一般にLoan Patternと呼ばれるものの…

WSL2 + Emacs + docker環境でPHPのリモートデバッグ

この組み合わせの資料が見当たらず、若干詰まったのでメモ書き サンプルリポジトリ リモートデバッグを動かすまで 俯瞰図 WSL2のIPアドレス取得 Xdebugの設定 リモートデバッグが動くことを確認 ストレスなくデバッグを進めるための設定 geben-path-mappings…

Laravelのテストを高速化した話 (Laravelアドベントカレンダー20191217)

速さこそ有能なのが、 文化の基本法則 (ストレイト・クーガー) この記事について DBのテスト高速化: RefreshDatabaseトレイトのハック 対象読者 TL;DR DBテストの開始には時間がかかりがち 理由 -- migrate:fresh で毎回テーブルをdrop/createしている migra…

phanコンテナイメージを作った

きっかけ 作ったイメージ Dockerfile 学び きっかけ https://packagist.org/packages/phan/phan こーゆーのでいいんだよ、こーゆーので… pic.twitter.com/PjBb3bq1PS— っどさん (@tadsan) 2019年11月29日 @tadsanさんがphan/phanのイメージを作っていた 初め…

PHPUnit自作アサーション/HTMLを解析するテスト3 動線の存在のテスト、negate, composition

動線の存在のアサート phpunit_constraints/HtmlAssertions.php at master · wand2016/phpunit_constraints · GitHub 否定形のアサート phpunit_constraints/HtmlAssertions.php at master · wand2016/phpunit_constraints · GitHub モチベーション 画面遷移…

PHPUnit自作アサーション/HTMLを解析するテスト2 アトリビュートのConstraint

Constraint phpunit_constraints/HtmlNodeAttribute.php at master · wand2016/phpunit_constraints · GitHub Assertion phpunit_constraints/HtmlAssertions.php at master · wand2016/phpunit_constraints · GitHub モチベーション HTML要素のアトリビュー…

【Laravel6】LazyCollection触った (素数の無限シーケンス)

書いたやつ sieve( $this->sequence() ->filter($this->gte…

【PHPUnit】dataProviderを複数指定すると直和集合になる

assertTrue(true); } public function dataProvider(): array { return [ [ 1 ],…

【Laravel6】PHPUnitのdataProviderの中でFacade等がそのまま使えるようになってた

テストコード Laravel PHPUnitのdataProviderでFacadeやfactory等のヘルパ関数を使う方法 - Qiita ↑より拝借、若干変更

【Laravel5.8】dataProviderでFacade等を使う/遅延評価でやってみる

背景 テストコード 実行結果 遅延評価じゃない方: ダメ 遅延評価: OK 背景 qiita.com Laravel フレームワークにて、PHPUnitのdataProvider内でFacadeやfactoryが使えないのはよく知られている通り parent::setUp()の中で$this->createApplication()される前…

月末にCarbon::createFromFormat('Ym', ...)してはいけない話

8/31に2月を作ろうとしたら3月になった例 どうしてこうなった 2019年8月31日に実行 Carbon::create(...$args)は大丈夫 Carbon::createFromFormat($format, $datetimeStr)が危険 回避方法 -- Ymd使え 8/31に2月を作ろうとしたら3月になった例 3月!? どうし…

【contribute】Ray.AOP

Added BEAR.Sunday contributors https://t.co/1xzI0ign2M @wand2016 https://t.co/RDW0BEFlPY Arigato! pic.twitter.com/2BoB8b2EOG— BEAR.Sunday (@BEARSunday) August 28, 2019 アイコンで草生える issue github.com PR github.com 反省点 静的解析を回さ…

Refactoring ch1 A First Example -- PHPで書き直してみた (2/3)

martinfowler.com Splitting the Phases of Calculation and Formatting Separated Into Two Files 英語 Splitting the Phases of Calculation and Formatting 1/3 でコード構造化した結果からスタート repos

Refactoring ch1 A First Example -- PHPで書き直してみた (1/3)

martinfowler.com The Starting Point 【補】テスト書く Decomposing the statement Function Refactoring 2nd EditionはJavaScriptで書かれている コードを読める人口がもっとも多いであろう、という理由から 「JavaScriptのリファクタリングの本」ではない…

【composer】アノテーションでfriendとかpackage-privateとかをエミュレートするライブラリを作った

【composer】アノテーションでfriendとかpackage-privateとかをエミュレートするライブラリを作った WandTa/Annotation-Visibility Objective: 非標準のアクセス制御を使いたい Solution: アノテーションでオレオレアクセス制御子を定義する Sample 1. Layer…

Laravel.shibuya 3 IRTまとめ

PHP

IRT 1 -- PHP traitについて いつ使う・使わない テストで使いました 認証が必要なテストで、認証コードとテストデータだけtrait化 プロダクトコードではオブジェクトの委譲のほうがうまくいった 特定のメソッドだけmockしたいときに、無名クラスを普通に注…

JWT認証アプリケーションで認可つきCSVダウンロードを実装した話

背景 困ったこと やったこと サーバ側でCSV生成 フロントエンド側でBlob生成 踏んだ文字化けのパターン 背景 Laravel + Vue.jsアプリケーション JWT認証のSPA つまり、すべてのリクエストのAuthorizationヘッダにJWTを載せている axios.defaults.headers.com…

Laravel Meetup Tokyo Vol.12 参加した

メモ LaravelTokyo Eloquentに別れを告げるタイミングについて考えた / 吉田あひる ORM x Active Record x Domain Model 【補】Domain Modelではなくないか Domain LayerのことをDomain Modelって言ってるのかな Eloquentの功罪 功 高機能 罪 クエリ最適化 s…

DebianベースのcomposerコンテナでphpDocumentorを動かした話

TL;DR 動機 構成 phpDocumentor実行、エラー出る alpineベースだとうまく動かないよう debianベースのcomposerイメージ作る phpDocumentorさえ使えればいい場合 TL;DR alpineベースだとうまく動かないのでdebianベース等使え 動機 composerとかがなかった太…

はじめてのPHPプロフェッショナル開発 ch11 チーム開発の現場

個人開発とチーム開発の違い ブルックスの法則 GitHubを使った課題の「見える化」 Issueの作成 Issueの基本的な書き方 新機能の書き方の例 不具合修正の書き方の例 フォーマット Issueの発展的な使い方 Assign機能 Label機能 Milestone機能 コメント機能 Git…

はじめてのPHPプロフェッショナル開発 ch14 継続的インテグレーション

なぜ継続的インテグレーションが必要なのか 継続的インテグレーションとは CIによって得られるもの Economics of Test Automation -- 自動化テストの経済性 CIツールとは CIツールの種類、選び方 CIを利用してみる Travis CIとは Travis CIの導入 Travis CI…

はじめてのPHPプロフェッショナル開発 ch13 開発に役立つツール

なぜツールを使うのか PHP_CodeSniffer: コーディング規約チェックツール 使い方 実践的なPHP CSの利用 PHPStan: コード解析ツール 使い方 実践的なPHPStanの利用 なぜツールを使うのか 三大美徳が1つ、怠慢 再現可能性 人間は、昨日の自分のコードが他人の…

はじめてのPHPプロフェッショナル開発 ch12 Pull Request駆動によるコードレビュー

コードレビューの必要性 Pull Requestを利用したコードレビュー Pull Requestとは? GitHub Flow Git Flow Pull Requestをつくってみよう Pull Requestの作り方 title description inline comment Pull Requestのコードレビューの流れ コードレビューをしよ…

Laravel/Collection 勉強会資料 関数型プログラミングについて語る

weeyble-php.connpass.com 3/25勉強会資料 そもそもCollectionって何 配列データ操作の比較 手続き型 for文使う例 「わちゃっ」としている例 ステップ分けた例 関数型 (PHP組み込み) 高階関数 array_map array_reduce array_filter 実装例 一時変数あり 一時…

Eloquent ORM非依存のfactory作った

LaravelのfactoryがEloquent ORM依存で、自前のDTOクラスに使えなくて困ったので自前ファクトリを作った コード app/Util/Fabrik.php

Laravel/認証周りのコード追う

JWT認証ミドルウェア定義部分 JWT認証ミドルウェア 認証ファサードクラス JWTAuth インタフェースAuthInterface, 実装クラスIlluminateAuthAdapter \JWTAuth::authenticate($token)で自前のUserクラスのオブジェクトが返ってくるようにしたい \Auth::user()…

Laravel/JWTを捏造してテストする

JWTAuthライブラリ JWT: JSON Web Tokenを捏造してテストする テスト アプリケーション JWT: JSON Web Token JWTAuthライブラリ tymondesigns/jwt-auth JWT: JSON Web Tokenを捏造してテストする APIの機能テストにおいて、 「所持しているJWTトークンが認証…

Emacsにphp-cs, php-stan導入した(けど片方動かない)

環境 init.el flycheckの設定部分 phpcs phpstan が……駄目っ……! 環境 Emacs 25.2 init.el ;; require前に書く必要があるらしい (setq php-mode-coding-style 'psr2) (when (require 'php-mode nil t) ;; 拡張子phpのファイルを開いたときにphp-modeに。 ;; …

php ch5-7

CakePHP環境つくるやつ つくるだけなので要所のみ Dockerfile sedのデリミタは/以外も使えるんですね composer早くするやつも入れた FROM php:7.2-apache ENV APACHE_DOCUMENT_ROOT /var/www/html/app/webroot RUN sed -ri -e 's!/var/www/html!${APACHE_DOC…

Emacs + Laradock + Xdebug PHPステップ実行設定

環境 Xdebug 有効化 設定 geben 導入 つかう 環境 emacs 25.2 laradock環境 Xdebug PHPをステップ実行したりブレーク貼ったりできる 有効化 laradockではフラグひとつでxdebugが入る laradock/.env ... WORKSPACE_INSTALL_XDEBUG=true ... PHP_FPM_INSTALL_X…