猫でもわかるWebプログラミングと副業

本業Webエンジニア。副業でもWebエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

PHPでボトムアップDDD: 値オブジェクト / ValueObject

値オブジェクトを使わず、プリミティブな型を使うとどうなるか 各IDの型が分かりづらい delete メソッドの引数の型チェックが弱い そこで値オブジェクト さいごに 値オブジェクトを使わず、プリミティブな型を使うとどうなるか ブログシステムを考えましょう…

これまで僕が仕事で使ったWebフレームワークと言語の特徴

これまで僕が業務で触ったことあるフレームワーク(と言語)は Laravel (PHP) Slim Framework (PHP) Django (Python) Gin (Go言語) で、どれも1年以上は保守しています。 長年業務で使ってきたこれらのフレームワークについて、実際使ってみてどうだったのか…

2021年 PHP でスクレイピングするなら php-html-parser

PHP でスクレイピングするなら php-html-parser 以前、以下の記事を書きましたが、 phpQuery は3年以上更新が止まっており、最新の PHP に対応してないなど問題がありました。 www.utakata.work 別のライブラリを探していたら、 php-html-parser がかなり良…

PHP の composer でパッケージを uninstall する時の正しいコマンドは何か

composer require と composer remove 結論: composer.lock を作り直すしかない composer.lock を作り直したくない 依存をきれいに消すコマンドは無い composer update コマンドをうまく使う composer update する場合の注意点 結論 composer require と com…

【2021/04/27】Composer の脆弱性が出たのでアップデートする

news.mynavi.jp 脆弱性の詳細ですが、理解しようとするとかなり時間が掛かりそうなので省略します。 composer のバージョンアップは難しくなく、アプリケーションへの影響も小さいので、サクッとアップデートしましょう。 $ composer self-update Updating t…

2020年のQiitaアドベントカレンダーで書いた内容まとめ

今年のアドベントカレンダーでは10本の記事を書いたので、その10本をまとめます。 個人開発でサービスをリリースまで持っていくポイント レガシーなプロダクトに Laravel を導入する第一歩 PSR-2 に変わって新しく制定された PSR-12 のチェックを PHP_CodeSn…

【PHP】PSR-12 のチェックを PHP_CodeSniffer で行う

はじめに PSR-12 とは PSR-2 と PSR-12 の違い PHP_CodeSniffer とは IntelliJ / PHPStorm でスタイルチェックする Jenkins でコーディングスタイルチェック まとめ はじめに この記事は PHP アドベントカレンダー 4日目の記事です。 qiita.com 昨日は @taro…

レガシーなプロダクトに Laravel を導入する第一歩(Laravel DI と Facade)

はじめに レガシーなプロダクトに Laravel を導入する Laravel について なぜ部分的にでも Laravel に移行していきたいのか Laravel の DI 機能 Laravel の Facade どうやってレガシーコードから Laravel DI と Facade を使うのか Kernel の中身をちょっと見…

PHP(Laravel)の開発を始めるときに知っておきたいこと 2020

仕事で PHP のプロダクトのリビルトを行っていて、 PHP 開発を始めるために必要なことを整理したので、ブログでも公開しておきます。 PHP のプロダクトを開発しているチームに、新しい人が Join したときなどに使えます。 知っているところは読み飛ばして、…

新しいPHPコーディング規約 PSR-12

PHP のコーディング規約 PSR-12 の対応状況 PHP のコーディング規約 PHP は PHP-Fig という団体で様々な規約が決められているが、2019年8月、PSR-2に変わり、PSR-12 という新たなコーディング規約が採用された。 PSR-12 が出るまでは、PSR-1, PSR-2, PSR-4 …

無料の Open LiteSpeed で .htaccess を使う

Laravel/LumenをLiteSpeedで動かす 無料の Open LiteSpeed で .htaccess を読めるのか どうしたのか rewrite enable 1 rulesの中身 設定が適用されているか確認する まとめ Laravel/LumenをLiteSpeedで動かす Laravel (や Lumen )を LiteSpeed 上で動かし…

【PHP】Lumen で Migration

Lumen artisanコマンドを叩く Migration ファイルを編集 Migration コマンドを叩く Eloquent を有効に Lumen Laravel を軽くしたと言われる Lumen で Migration をしてみます artisanコマンドを叩く Laravel と同じっぽいので Laravel の Eloquent のドキュ…

PHPEarth の Docker イメージに PDO をインストールする

PHPEarth とは PHPEarth のイメージにはPDOが入っていない Dockerfile で確認 ドキュメントを確認 Dockerfile で追加してみる 動かない理由を調査する php -m で見てみる php.ini を見る イメージを削除してやりなおしてみる 結論 PHPEarth とは PHPの色々な…

Docker phpearth/php:7.3-litespeed の admin のパスワードを設定する

/etc/litespeed/admin/htpasswd がユーザー名とパスワードの設定になっている。 www.luft.co.jp などのツールをつかってできたhtpasswdファイルをそこに配置すれば、そのユーザー名とパスワードでログインできるようになる。

Laravelより早いLumenとLiteSpeedを組み合わせてDocker上で動かす

はじめに Lumen Lumen Lumenのアプリを作成する Docker LiteSpeed LiteSpeed とは Docker の LiteSpeed イメージ Docker LiteSpeed ファイル構造 Lumen のための設定 まとめ はじめに この記事では、Docker上でLiteSpeedを使ってLumenを動かすことを目標にし…

PHPでサクッとWebスクレイピングするならphpQuery

composer で phpQuery をインストールする htmlをパースする まとめ composer で phpQuery をインストールする Composer が入っている前提とします。 composer require electrolinux/phpquery htmlをパースする Guzzleでリクエストをして、返ってきたHTMLを…

PHP の Guzzle を使う時にもうググらない! GuzzleHttp の RequestOptions 定数を使う

Guzzleについて Guzzle という PHP の HTTP クライアントがある。 github.com このライブラリ、めちゃめちゃ使われているし、基本的には使い勝手も良い。僕も PHP で Web API を叩く時などには基本的にはこれを使う。 違和感 しかしある時に違和感に気づく。…

PHPUnit 5 から PHPUnit 6 するときにハマった点とこれから

はじめに PHPUnit 6 にするきっかけ 地道な修正作業 クラスの namespace mt_rand と mt_srand グローバル変数の扱い non-numeric test phpunit6 ochiru アサーションをしていないテスト PHPUnit 6 にしてよかったこと そして時代は はじめに この記事は PHP …

AWSのEC2でとりあえずPHP Laravelを動かす

はじめに 環境 PHP, nginx, php-fpm のインストール PHP と php-fpm を Amazon Linux にインストールする nginx を Amaxon Linux にインストールする 各種設定 nginx の設定 server_name root fastcgi_pass php-fpm の設定 ユーザーと権限 nginx から php-fp…

PHP Laravel 標準の AuthenticatesUsers によるログインの処理を見てみる

環境 はじめに AuthenticatesUsers::login の中でやっていること validateLogin hasTooManyLoginAttempts まわり ThrottlesLogins::hasTooManyLoginAttempts attemptLogin それ以降の処理 環境 PHP 7.3 Laravel 5.8 はじめに Laravel では標準で認証の機能が…

PHP, Laravelで開発する時に役に立ったページ

はじめに 個人的に役に立ったページです 執筆時のLaravelの最新版は 5.8 です 基本は公式ドキュメントが大事 随時更新していきます Homestead Laravel Homestead 5.8 Laravel HomesteadでPHP(Laravel)アプリケーションが動作しなくなった時の対処法 Model, M…

PHPでstringをintにキャストする場合のバリデーションについて

PHP

環境 はじめに is_numeric ctype_digit 結論: filter_var 環境 利用しているバージョンは PHP 7.2 ですが、結構幅広いバージョンに通じる話だと思う。 はじめに PHPのキャストがガバガバなのはみなさんご存知だろう。 $ php -r "var_dump((int)'ホゲーーー')…

【PHP】LaravelでServiceProviderでInterfaceに実装を注入したりstringを注入する方法【DI】

Interfaceを利用する意義 Laravelでどうやって注入するの? サービスプロバイダとは register メソッドでDIの設定を書く Interfaceへの実装注入以外の用途でも使える まとめ Interfaceを利用する意義 LaravelはDIを勝手にいい感じにしてくれます。例えばこう…

Vagrantを使ってPHP Laravel開発(PHP 7.3, Laravel 5.8 macOS)

はじめに PHPのWebフレームワークといえばLaravelである。今PHPでWebアプリケーションを開発するならLaravelを使っておけば間違い無い。 LaravelにはHomesteadという開発環境が用意されていて、これを使えばすぐにWebアプリを作成できる。 環境 今回はMacで…

【PHP】Mockeryでクラスとインタフェースを継承したクラスをモックしたり、複数のインタフェースを実装したクラスをモックする

はじめに PHPのGuzzleHttp *1 を利用し、以下のようなコードを書いた。 guzzleClient は コンストラクタDIなどを利用して // $this->guzzleClinet = new \GuzzleHttp\Client(); を差し込むようにする $response = $this->guzzleClient->post($url); } catch …

PHP 7.4で追加される ??= 演算子はそんなに使えないんじゃないだろうか

概要 ??= 演算子とは この演算子が使えない理由 関係する演算子の歴史 三項演算子 a ? b : c 二項演算子 ?: 演算子 ?? まとめ 参考 概要 PHP 7.4 から ??= 演算子が追加されることが確定しました。 github.com ??= 演算子とは $var ??= <value> は、 $var が null </value>…

PHPでのWebサービス新規開発メモ

これはなに? PHPで新規開発する際にどういう構成だったりフレームワークにしていくかなというメモです。 PHPの特徴 ゆるふわで書けるので開発スピードが早い。 学習コストが低く直感的なので誰でもすぐに書ける。 利用者が多くライブラリが充実している。 P…

PHP7.4からクラスのプロパティに型がかけるようになる

PHP

はじめに 機能の概要 v1 との違い 対応している型 callableについて strict_types 継承 将来の話: readonly 値の初期化 参照渡し さいごに 参考 はじめに PHP 7.4の新機能としてクラスのプロパティに型がかけるようになる機能が提案されていました。これはTy…

PHPのSlim Framework 3.11 がリリースされ、 StatusCodeクラスが追加されていた

はじめに 2018年9月にSlimの3.11がリリースされました。私がslimフレームワークを採用して開発を始めた時のバージョンは3.9.2でした。3.9.2のリリースが2017年の11月、3.10.0が2018年の4月。3.9.2から2回のリリースがありました。 3.10.0の変更 3.10.0の変更…

Mockeryでモックしようとしたときに Mockery_XXX::__call($method, $args) should be compatible with ... と言われる 2

前回のあらすじ 以下の記事の続きです。 www.utakata.work FluentPDO *1 というライブラリのSelectQueryメソッドをMockeryでMockしようとすると、Declaration of Mockery_3_SelectQuery::__call($method, $args) should be compatible with CommonQuery::__c…