Laravelでの自動テスト備忘①
# 基本の考え方
命名規則とアノテーション– テストクラスのファイル名は Test.php で終わる。
– メソッド名は test で始めるか、そうでない場合は @test アノテーションを DocComment 内に記述する。
– テストメソッドの DocComment 内に @covers アノテーションを書くと、テスト対象のメソッドを明示的に指定することができる。“`
*/
class SomeClassTest
{
/**
* @test
* @covers ::someMethod
*/
public function SomeMethodが正しく実行できること()
“`全体を実行する
“`
# php artisan test
“`
ユニットテストまたはフィーチャーテストのみを実行する“`
# php artisan test –testsuite=Unit
“`
(フィーチャーテストの場合は Unit の代わりに Feature を記述する)特定のテストクラスのみを実行する
“`
#
【Laravel】whereHasとwithの違い
## 環境
Laravel v9.5.1 (PHP v8.1.3)## with
“`eager load“`でN+1問題が解消される。
“`php
$users = User::with(‘post’)->get();foreach ($users as $user) {
echo $user->posts;
}
“`“`
select * from users
select * from posts where id in (1, 2, 3, 4, 5, …)
“`https://readouble.com/laravel/9.x/ja/eloquent-relationships.html
## whereHas
リレーション先の条件でフィルタリングした結果を取得。“`php
use Illuminate\Database\Eloquent\Builder;$users = User::whereHas(‘posts’, function (Builder $query) {
$query->where(‘users.or
【PHP】nullableな型
## 環境
## nullableな型
型宣言の前に“`?“`をつけると、指定した型か“`null“`が許容される。
“`php
public static function createPostBy(
int $userId,
string $type,
string $content,
?DateTime $deletedAt
)
{
self::create([
…
]);
}
“`“`?“`をつけずに引数に“`null“`を入れていると下記のようにエラーが出る。
“`
Argument #2 ($deletedAt) must be of type int, null given, called in
“`## 参考
https://www.php.net/manual/ja/migration71.new-features.php
【PHP】4種類のnull判定
## 環境
Laravel v9.5.1 (PHP v8.1.3)## null判定
### is_null
“`php
if (is_null($hoge)) {
echo ‘nullだよ’;
}=> “nullだよ”
“`### empty
“`php
if (empty($hoge)) {
echo ‘nullだよ’;
}=> “nullだよ”
“`### ==
“`php
if ($hoge == null ) {
echo ‘nullだよ’;
}=> “nullだよ”
“`### ===
値と型が完全に一致しているか判定できる。
“`php
if ($hoge === null ) {
echo ‘nullだよ’;
}=> “nullだよ”
“`## 参考
https://wemo.tech/464
[Laravel6] よくあるエラー4つ
## 注意!
以下の内容は必ずしも「このエラーが出たら、これをすれば解決します!」ということを保証しているわけではありません。
あくまで1つの参考としてお読みください。## SQLエラー「〇〇カラムはnullを許しません!」
– nullってことはつまり、値が入っていないってこと(前提を確認することは大事)
– まず `dd($request)` でDB通信の内容を確認する。
– そしたら案の定、input の name属性の指定がタイポしていた、みたいなことがよくある## 404
Routingを見直す
1. `php artisan route:list` でroutingが正常に設定されているかを確認
1. Apache設定の見直し
1. 大体Documentroot
? そもそものURL指定は間違ってない? `localhost/フォルダ名/public/routing` だよ!## バリデーション実装時の403エラー
– Requestのauthorizeメソッドがfalseになってるからだと思うよ
– fals
PG見聞録 ~PHP編 正規表現その1~
個人的に少し苦手意識のある正規表現についておさらいしたので書いておきます。
正規表現
予め定められたパターンを指定して文字列を検索するための機能です。
そのパターンを正規表現パターン、パターンに当てはまることをマッチといいます。
\とか[]とか^とか*とかいろんな記号に意味があり、それらを組み合わせることで文字列を検索します。
ちなみにURLを表す正規表現パターンはhttp(s)?://([\w-]+\.)+[\w-]+(/[\w ./?%&=-]*)?
です。わけわからんすね。これを読み解いていくと
(s)? は「sが0~1回登場する」という意味でhttpもしくはhttpsということですね
([\w-]+\.)+[\w-]+は「英数字、アンダースコア、ハイフンを含み、途中に.が入る文字列」という意味。
\wは単語文字、数字、アンダースコアに一致するパターンです。
(/[\w ./?%&=-]*)?は「英数字、アンダースコア、ハイフンを含み、任意の記号(?,%,&,-など)を
Laravel Larastan のインストール
## Larastan
https://github.com/nunomaduro/larastan
Larastanは静的解析ツールPHPStanのLaravel用のラッパーライブラリです。
## 環境
– PHP: 8.1.5
– Laravel: 9.12.2
– Larastan: 2.1.6## インストール
“`shell-session
$ composer require nunomaduro/larastan –dev
“`設定ファイルを作成します。
“`shell-session
$ touch phpstan.neon
“`“`phpstan.neon
includes:
– ./vendor/nunomaduro/larastan/extension.neonparameters:
paths:
– app
level: 6
“`## Larastan 実行
“`shell-session
$ ./vendor/bin/phpstan analyse
“`## GitHub Action
PHPの設定について
## はじめに
PHPの設定について、記事にしてみました。
## 設定の確認
設定は、phpinfoメソッド([詳細](https://www.php.net/manual/ja/function.phpinfo.php))で確認できます。
phpinfoメソッドはWebサーバー上で実行された場合はHTMLを出力し、CLIで実行された場合はプレーンテキストを出力するため、今回はWebサーバーを起動して設定の確認を行います。### 1. Webサーバーの起動
“`php
php -S localhost:80
“`### 2. 実行ファイルの作成
まず、Webサーバーを起動したフォルダにindex.phpを作成します。
次にindex.phpにphpinfoメソッドを記載します。“`php
[Laravel6] ざっくりSeederを使う
### ターミナル
“`php
php artisan make:seeder 〇〇
“`– database\seeds\〇〇が作成される
### Seeds
“`php
public function run()
{
DB::table(‘users’)->insert([
‘name’ => Str::random(10),
‘email’ => Str::random(10) . ‘@gmail.com’,
‘password’ => Hash::make(‘password’),
]);
}
“`### DatebaseSeeder
“`php
public function run()
{
$this->call(UsersTableSeeder::class);
}
“`– DBSeederは必ず存在している+作成したSeederが最初はコメントアウトされている
– ここから個々のS
CakePHPでヘルパーをコントローラで使う
# 意外と見つけるのが大変だった。
システム全体をSPAへの置き換え時にありがちな、ヘルパーの処理をコントローラに移行したいという状況が発生したのでメモ
(追記) コメントがあり、レジストリを用いる方法の方が良さそうなので、記事の内容を変えました。
MyHelperを利用する場合。
“`php
use Cake\View\View;
use Cake\View\HelperRegistry;—
// ヘルパーを使うおまじない
$HelperRegistry = new HelperRegistry(new View());
$this->MyHelper = $HelperRegistry->load(‘My’);
$fuga = $this->MyHelper->hoge()
“`直接呼び出す方法。
“`php
use Cake\View\View;
use App\View\Helper\MyHelper;—
// ヘルパーを使うおまじない
$this->MyHelper = new MyHelper(new View());
$fug
TDLのアトラクション巡りを遺伝的アルゴリズムで最適化してみた
# はじめに
なにか個人開発できないかなとアイデアを探していたときに遺伝的アルゴリズム(GA)に出会いました。GAとは教師なし機械学習の1つで
>進化論的な考え方に基づいてデータを操作し、最適解探索や学習、推論を行う手法です。
http://www.iba.t.u-tokyo.ac.jp/rs/ga.htmlこのアルゴリズムは巡回セールスマン問題や膨大に組み合わせがあり全探索が不可能な場合において有効な手法です。
そこでふと思いついたのがディズニーのアトラクションを効率よく回る方法を導き出せないか?でした。このアルゴリズムは巡回セールスマン問題や膨大に組み合わせがあり全探索が不可能な場合において有効です。
そこでふと思いついたのがディズニーのアトラクションを効率よく回る方法を導き出せないか?です。複数の地点を効率よく回る点において巡回セールスマン問題と共通しているため、学習ついでに応用できないかと考えました。# サービス紹介
公開したwebアプリのURLは[こちら](http://www.gadisney.shop/)です。
実際に使ってみて感想等教えて頂けるとありがたい
PG見聞録 ~PHP編 配列関数1~
ということで文字列操作はいったん終わり、配列関数について掘り下げていきます。
とりあえず第1弾の関数をまとめてみました。“`php
stechstudio/laravel-zipstreamでファイル名に日本語を使えるようにする。
stechstudio/laravel-zipstream(v4.8)でファイル名に日本語を使えるようにする方法について記載。
stechstudio/laravel-zipstreamdeを使ってzipファイル保存するとファイル名に日本語が入っている場合、日本語名が消える。
例
1_日本語file.pdf
↓
1_file.pdf以下のファイルを確認すると、ここでStr::asciiで文字コードをASCIIに変換しているので、日本語が消えている模様。
vendor\\stechstudio\\laravel-zipstream\\src\\Models\\File.php“`
/**
* @return string
*/
public function getZipPath(): string
{
$path = ltrim(preg_replace(‘|/{2,}|’, ‘/’, $this->zipPath), ‘/’);return config(‘zipstream.fi
PG見聞録 ~PHP編 メール送信~
技術書をペラペラと見てたらメール送信のための関数があって面白いなあと思って読んでみました。
こんな時間に読んだことを後悔しつつも書いております(笑)
日本語でメールを送る場合もmbを付けるというのは変わらんようです。
もしmbなしの場合は文字エンコードの変換を自前で設定すればいいようですが、mb推奨とのこと。mb_send_mail関数
引数に渡す変数の構成としては誰しも使ったことのあるメールの中身ですね。
LINEしか使ったことないからわかんないなんて言わないでください。“`php
// メールの構成情報を設定
$to = ‘example@example.com’;
$subject = ‘test mail’;
$body = ‘Hello!this is test mail\n Howdy?’;
$headers = [
‘From’ => ‘test@test.com’,
‘Cc’ => ‘user01@example.com’,
‘X-Mailer’ =
ライブ会場の座席検索サービス
今回、ポートフォリオとして**ライブ会場の座席検索サービス**を作ったので、少し解説します。
# 目次
[1.作った経緯](#1-作った経緯)
[2.実際のページ](#2-実際のページ)
[3.使用技術](#3-使用技術)
[4.工夫した点](#4-工夫した点)
[5.苦労した点](#5-苦労した点)
[6.これからの課題](#6-これからの課題)# 1. 作った経緯
僕はよくアーティストのライブに行くのですが、チケットの席番号を見て毎回思うことがありまして、**「自分の席の位置がよくわからない」** ということです。
**特にスタンド席などは、会場全体を囲むように色々な方向に席があり、なおかつ 2階,3階とフロアも分かれているので、会場内で迷ってしまうこともあると思います。**
そんな悩みを解決するために今回作ったのが、**ライブ会場の座席検索サービス**です。
意外とありそうで無いサービスだったので、**だったら作ってしまおう!!** ということで作ってみました。# 2. 実際のページ
[ライブ座席検索](http://www.search-venue-seat
PG見聞録 ~PHP編 文字列操作関数2~
引き続き文字列の操作について深堀していきます。
動物の名前は飼ってる犬と知り合いの猫と実家の猫です。explode,mb_strpos,str_contains
“`php
Eloquent のイベントをインスタンスメソッドに
## クロージャを使用したイベント定義
Eloquent モデルにイベントを直接記述する手段として、Laravel ドキュメントには「クロージャの使用」として例示されている。
“`php
オリジナルアプリ作成を通して
オリジナルアプリ作成を通しての進捗や心境をお伝えします。
# オリジナルアプリ概要
プロ野球チーム(DeNA)の選手の成績表示アプリ(通算型)
## アプリの動作
①プロ野球サイト(ヤフー)からチーム情報を取得(スクレイピング)
②取得したデータをデータベースに保存後、トップページに選手一覧を表示させる。(seederを使用)
③選手一覧画面から投手・打者別の画面に遷移
## 情報更新
情報は固定ではないので(日々更新)、herokuでアプリが落ちないように設定。(今後実装)
## 成績
成績については、すべて計算式で指定。
## ユーザー操作
特に、ユーザー登録などのページは作る予定はなく、誰でも見ることが出来るようにする。# 心境
seederの記述が分からず、迷っています。あとは後に必要になるスクレイピングの記述も今のところ考えていないので、スクールの講師の人と一緒に考えていくつもりです。
PHPには0とfalseを返す標準関数がある
## はじめに
PHPでは、値の比較をする場合は下記の比較演算子を使うことが多いと思います。
この書き方では**正しい処理ができない標準関数**があります。
“`php:sample.php
$a == true;
test() != false;
!test()
“`## 注意点
PHPの関数には、**エラーが発生した場合**に`false`を返すケース
処理に該当しない場合に`0`を返すパターンがあります。
この場合の比較には、`===`演算子を活用しましょう。> [**preg_match**](https://www.php.net/manual/ja/function.preg-match.php)
> (PHP 4, PHP 5, PHP 7, PHP 8)
>
>preg_match() は、pattern が指定した subject に**マッチした場合に1**を返します。
**マッチしなかった場合は 0** を返します。 **失敗した場合にfalse**を返します
>
> **警告**
> この関数は論理値 false を返す可能性がありますが、fal
PG見聞録 ~PHP編 文字列関数1~
どうでもいいですけどphpって大文字か小文字どっちなんでしょう。
ということで文字列を操作する関数をいくつか書いていきます!文字列関数その1
文字列を操作する関数だけでも多々あります。
文字列の長さや数を数えたり、バイト数を数えたり
大文字小文字に変換したり、検索したり、置き換えたりもできます
文字に関してはデジタルデータになると少しややこしいところがありまして
半角英数字は1バイト、日本語は全角なので2バイトになります
さらにはUTF-8やJISコードなど文字コードでもバイト数の数え方が変わってきます。“`php