- 1. PHP の SplPriorityQueue を使って、推理作家一覧を作りたい
- 2. Laravelのpaginatorで件数カウントとデータの取得が同時に行われるのを防ぐ
- 3. PHPのDBクラス
- 4. Laravelを用いた開発でgit pullすると500 Server Errorになった話と対処法
- 5. Laravel 学習(アプリ構成)
- 6. Laravel の laravel と framework の違い
- 7. 試す価値のある7つのツール、使ったことがありますか?
- 8. デバッガについて
- 9. クソ雑魚のワイ、symfonyのコードリーディングしてみた①
- 10. 【PHP8.4】PHP8.4の新機能
- 11. PHP × Laravel 学習(用語)
- 12. vscodeでphpのセットアップ
- 13. huskyでdocker compose exec でエラーが出て動かなかった
- 14. Laravelを1日でマスターしたい人向けチュートリアル
- 15. PHPでのファイル操作の基本:書き込みと読み込み
- 16. FTPでのファイル受信時に注意すべきポイント
- 17. Laravel sailでのmigrate簡易まとめ
- 18. Drupalでdotenvを使う
- 19. 5分で理解するPSR-15
- 20. PHPで”Fatal error”が表示されない不具合(?)
PHP の SplPriorityQueue を使って、推理作家一覧を作りたい
## きっかけ
先日YouTubeで、PHPカンファレンス福岡での、きんじょうひできさんの「SPLから始める「データ構造」入門」という動画を見ました。
SplというPHPの標準ライブラリが紹介されていて、便利そうだったので、何か作ってみたいと思いました。
## SplPriorityQueue とは
[PHPマニュアルの説明はこちら](https://www.php.net/manual/ja/class.splpriorityqueue.php)です。
[優先度付きキューについては、いろいろな説明がある](https://ja.wikipedia.org/wiki/%E5%84%AA%E5%85%88%E5%BA%A6%E4%BB%98%E3%81%8D%E3%82%AD%E3%83%A5%E3%83%BC)ようです。
ざっくり言うと、配列を並べ替えながら入出力するのが、ものすごく早いようです。とりあえず覚えるべきメソッドは、insert()と、extract()の2つです。
Laravelのpaginatorで件数カウントとデータの取得が同時に行われるのを防ぐ
### 何がしたいか
ページが重いので軽くしたい。paginate使ってるのでデータ取得と件数カウントで同時に2発クエリが走っていて、データ取得が遅いクエリであればある程鬱陶しい。というかそもそもなんでpaginate使ってるの・・・?これページングはしないよ・・・?というのはあるんですけど、まぁそこ愚痴っても仕方ない。### 前提
Laravel 6 古いです。変えたいです。
DBはmysql 8.0(昔なのでパッチバージョンは忘れました)### どうするか
まぁ大体これが全てなんですがhttps://zenn.dev/third_tech/articles/3f24490d062d56
Eloquentの方のpaginateがこう
“`PHP
/**
* Paginate the given query.
*
* @param int|null $perPage
* @param array $columns
* @param string $pageName
* @param int|null $page
* @return \Ill
PHPのDBクラス
## PHPでDBクラスを作成
PHPを最近触れたばかりなので慣習とかは分かり兼ねるのですが、DB接続するためのクラスは情報が少なかったので作りました。
最低限のDBを操作するメソッドを用意してます。
また、PHPは基本MySQLを使うことが多いかと思いますが、インターフェースを用意してます。本記事はMySQLの使用例のみ掲載してます。(今後更新するかもしれません。)## インターフェースクラス作成
“`php:Idb.php
“`## DB実装クラス作成
require_onceで作成したインターフェースを読み込んでください。
ホスト名・ユーザ名・パスワードは自身の環境に応じて設定してください。“`php:MySql.php
Laravelを用いた開発でgit pullすると500 Server Errorになった話と対処法
Laravelを用いたチーム開発をしていたときに、IDE上にErrorやWarningは出ていないのにローカルでページを確認すると500 Server Errorが表示されて困惑していたときの話です。
また、その際に行った対処の方法を誰かの助けになればと思い、記録として残します。
(※初めての技術記事投稿のため、間違い等がある場合はご指摘いただけますと幸いです。)# 開発環境
OS : Ubuntu 24.04 (WSL2上で利用)
IDE : JetBrains PhpStorm 2024.2
Docker : Docker Desktop 4.33.1
バックエンド : Laravel 10.47.0
フロントエンド : React 18.2.0
バンドラ : Vite 5.0.0# 発生した問題
チームで開発していたプロジェクトのmainブランチをpullし、ホットリロードで更新された画面を確認すると500 Server Errorが表示された。
このとき、コンフリクトがあったわけでもなくIDE上でErrorやWarningもない状態だった。
Dockerやホットリロード
Laravel 学習(アプリ構成)
## はじめに
Laravelのアプリ構成について学んだことを記載していきます。Laravelで作成されたプロジェクトはファイルやフォルダが多いので、
chatGPTに使用頻度の高いものをピックアップしてもらいました。
※現状ほぼchatGPTの回答を使っています。
学習を進めていく中で更新していく予定です。## アプリ構成
### 1. **app/**
– **概要**: アプリケーションの主要なビジネスロジックが含まれるディレクトリです。
– **主要サブディレクトリ**:
– **Models/**: アプリケーションのデータベースのエンティティを表すEloquentモデルが配置されます。例: `User.php`。
– **Http/Controllers/**: ユーザーのリクエストを処理するコントローラが配置されます。例: `HomeController.php`。
– **Http/Middleware/**: リクエストがコントローラに渡される前に実行されるミドルウェアが配置されます。例: `Authenticat
Laravel の laravel と framework の違い
数年ぶりに Laravel に触れて、禿げそうなくらい詰まったポイントがあるので備忘がてらまとめておきます。
# 結論
– [laravel/laravel](https://github.com/laravel/laravel) リポジトリは Laravel プロジェクトのスケルトンコード
– [laravel/framework](https://github.com/laravel/framework) リポジトリはいわゆる依存ライブラリ# なんでそういう話が気になったのか
とあるプロジェクトを担当することになり Laravel のコードベースを眺めていたが、あまりに久しぶりだったので、何が Laravel のコードで何が開発フェイズで追加されたコードかわかりませんでした。
しかも Git 管理もされておらず 💩 履歴を追うこともできず。。。
ということで [Creating a Laravel Project](https://laravel.com/docs/11.x/installation#creating-a-laravel-project) した com
試す価値のある7つのツール、使ったことがありますか?
開発者として、ワークフローを合理化し、生産性を向上させるためにツールを活用するのは一般的なことです。ここでは、すべての開発者が知っておくべきだと思う7つのツールをまとめました。これらのツールは効率を高め、開発作業を楽にし、リラックスする時間を増やしてくれるでしょう。
経験豊富な開発者であれ、初心者であれ、この記事であなたのニーズに合ったツールが見つかることを願っています。
—
### [Warp](https://www.warp.dev/) – AIターミナル
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/79dzunehtgzm87fk0fxg.png)
WarpはRustで開発されたオープンソースのターミナルで、多くの機能を備えており、開発者の生産性を大幅に向上させることができます。その最も人気のある機能は、AI駆動のコマンド検索です。コマンドを入力するときに、Warpは自然言語の説明に基づいた提案を提供し、開発者が正しいコマンドを迅速に見つけるのを助けます
デバッガについて
## デバッガとは
デバッガとはバグの原因を見つける作業を手伝ってくれるツールのことを言う。
ターミナルからvar_dumpやechoなどで出力結果をいちいち確認しなくても、VScode上で出力結果を確認することができる。
また、任意の行で実行を止めてその時点での変数の中身を確認することもできる。## PHPのよく使われるデバッガは「Xdebug」
Xcodeの特徴は以下の通りである。
– コードにブレークポイントを設定して1行ずつアプリケーションを実行
– ブレークポイントごとに変数の中身を出力して確認
– エラーが発生するまでの経過を詳細に表示
– VSCodeと一緒に使える
クソ雑魚のワイ、symfonyのコードリーディングしてみた①
自分は25卒の学生です。
この時期に内定がまだなく、流石に焦っています。__「この時期に内定ないのヤバいって。危機感持て。」__
とあるメンズコーチの言葉が脳裏をよぎります。これまで就職活動に力を入れ、技術勉強は中断していました。
ですが就職活動の時間を振り返り、このように思いました。__時間の無駄だったな。__
ということで、何かしらの技術勉強も並行しようと思い、コードリーディングに挑みます。
クソ雑魚エンジニア、いや、エンジニアですらない僕ですが、アウトプットを目的として記事を書きます。優しい目で見守ってください。
## Symfonyとは
READMEには以下のように書いてあります。
- 英語
- Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Symfony is used by thousands of web applications and most of t
【PHP8.4】PHP8.4の新機能
[PHP8.4](https://qiita.com/rana_kualu/items/b195b1adc60b763843d9) / [PHP8.3](https://qiita.com/rana_kualu/items/91111443105a75a55e2f) / [PHP8.2](https://qiita.com/rana_kualu/items/fc4b02e2daaf102aa92f) / [PHP8.1](https://qiita.com/rana_kualu/items/a6601b49e0591eb42200) / [PHP8.0](https://qiita.com/rana_kualu/items/fe7998fbe773544d5d25)
2024/08/13、PHP8.4が[フィーチャーフリーズ](https://wiki.php.net/todo/php84)しました。
言語機能に関わるような機能の追加・変更が締め切られたということです。
今後はデバッグを繰り返しながら完成度を高めていき、2024/11/21にPHP8.4.0がリリースされる予定です
PHP × Laravel 学習(用語)
## はじめに
PHP、Laravelの用語について学んだことを記載していきます。
すでに知っている用語については参考記事を貼っています。## PHP
Web開発向けの言語
サーバサイドで動くスクリプト言語シンプルなためプログラミング初心者にもお勧めできる言語
### ビルトインサーバ
PHP5.4以降の動作確認用の機能
本番運用を想定したサーバではないためこの機能でのアプリ公開はNG## Laravel
PHPで使われるMVCフレームワークでモダンな開発が可能
[【解説】MVCモデルとは?メリット・デメリット](https://system-kaihatu.com/archives/3204#:~:text=MVC%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E3%81%AF%E3%80%81%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0,%E5%9B%B3%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%
vscodeでphpのセットアップ
## メインセットアップ
下記サイトをもとに拡張機能のインストールまで進めていきます。
※デバッグ実行やComposerなどは後述の手順でセットアップをします。
Gitはすでに入っているため飛ばします。https://qiita.com/tfukumori/items/97a8f1ac6532612b004f
## サブセットアップ
### デバッグ実行
デバッグ実行時になぜかブレークポイントで止まらなかったので、正常に動いた設定を下記に記載しています。
setting.json
・何もしない“` launch.json
{
“version”: “0.2.0”,
“configurations”: [
{
“name”: “Listen for XDebug”,
“type”: “php”,
“request”: “launch”,
“port”: 9000
},
{
“name”: “Launch currently open script”,
“type”
huskyでdocker compose exec でエラーが出て動かなかった
# はじめに
こんにちは、エンジニアのkeitaMaxです。
今回はhuskyを使用してdocker compose exec コマンドを実行した時にエラーが出て困ったことがあったので、備忘録として残します。
# 問題
“`.husky/pre-commit
docker compose exec app vendor/bin/phpstan analyze
docker compose exec app composer phpcs .
“`huskyを使用してコンテナの中に入ってコマンド実行したら以下のようエラーが出て実行できませんでした。
“`
% git commit -m “add husky”
the input device is not a TTY
husky – pre-commit script failed (code 1)
“`# 解決策
`docker-compose exec` に -T オプションを追加すると治るらしいです。
https://tex2e.github.io/blog/infrastructure/docker
Laravelを1日でマスターしたい人向けチュートリアル
## Chapter 1: Laravelの紹介
Laravelは、PHPで書かれたオープンソースのWebアプリケーションフレームワークです。MVC(Model-View-Controller)アーキテクチャに基づいており、開発者が効率的にWebアプリケーションを構築できるように設計されています。豊富な機能と優れたドキュメントが特徴です。## Chapter 2: 開発環境のセットアップ
Laravelを使用するには、PHP、Composer、およびLaravel自体をインストールする必要があります。以下のコマンドで新しいLaravelプロジェクトを作成できます:
“`bash
composer create-project –prefer-dist laravel/laravel myApp
“`## Chapter 3: Laravelのディレクトリ構造
Laravelのディレクトリ構造は、アプリケーションの異なる部分を整理するために設計されています。主なディレクトリには、`app`、`config`、`database`、`resources`、`routes`など
PHPでのファイル操作の基本:書き込みと読み込み
この記事では、テキストファイルへの書き込みと、ファイルの読み込み方法について詳しく解説します。
## 実施内容
以下の手順でアクセスログを記録し、表示することを目指します。– **ログの書き込み:**
PHPを使用して、ユーザーのアクセス日時、スクリプト名、ユーザーエージェント、リンク元URLなどの情報をaccess.logというテキストファイルに追記します。
書き込みにはファイルロックを使用し、データの整合性を保ちます。– **ログの読み込みと表示:**
fgetsやfile関数を用いて、ログファイルからデータを読み込み、HTMLテーブル形式でウェブページに表示します。## ファイル操作の基本
### 1. ファイルを開く
PHPでは、`fopen`関数を使ってファイルを開きます。成功するとファイルハンドルが返され、ファイルの操作が可能になります。ファイルを開く際には、以下のモードを指定します。| モード | 説明 |
|—– | —- |
|r | 読み込み専用。ファイルが存在しない場合はエラー。 |
|w | 書き込み専用。ファイルが存在しない場合は作
FTPでのファイル受信時に注意すべきポイント
# FTPでのファイル受信時に注意すべきポイントと実装方法(PHP & C#コードサンプル付き)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84965/92d102c4-93ee-42cf-6971-114e487fff7e.png)いまだにデータのやり取りをAPIとしてOAuthとか使わずに、FTP(File Transfer Protocol)を使って閉まってるケースはまだまだあると思います。FTPは、システム間でファイルを転送するための標準的なプロトコルです。しかし、受信側で適切な対策を取らないと、転送が完了していないファイルを取得してしまい、データの不整合やファイルの破損などの問題が発生する可能性があります。
## なぜFTPは大変なのか
FTPというプロトコルの性質上、ファイルを送る際(PUT)に、まずはファイルのエントリーを0KBで作成します。この瞬間に、受け取り側からもファイル名を取得できるため、ファイルを取得(GET)できてしまいます。(ファイルのロック機能
Laravel sailでのmigrate簡易まとめ
## はじめに
Laravel sailでmigrateを行うケースについて簡単にまとめました。
sail環境以外でも、以下のコマンドの`sail`を`php`に読み替えてもらうと同様に動くと思います。:::note
この記事は「[Laravelの教科書 (加藤じゅんこ)](https://www.socym.co.jp/book/1408 “Laravelの教科書バージョン10対応(加藤 じゅんこ) | 書籍 本 | ソシム”)」の内容を一部参考にさせていただきました。:::
## 新規テーブル作成時
### ①マイグレーションファイルを作成
マイグレーションファイルとモデルを同時に新規作成
`$ sail artisan make:model <モデル名> -m`:::note
マイグレーションファイルのみ新規作成する場合はこちら
`$ sail artisan make:migration マイグレーションファイル名`
:::### ②作成したマイグレーションファイルを編集
database\migrations内に作成されたマイグレーションファイルを開いて編集
Drupalでdotenvを使う
## はじめに
`dotenv`は環境変数を読み込むために用いられるライブラリです。例えばPHPだと[phpdotenv](https://github.com/vlucas/phpdotenv)が有名です。今回は`Drupal`で`dotenv`を使用する方法についてまとめます。
## なぜdotenvを使うのか
なぜdotenvを使うのかというと
– 環境変数のハードコーディングを避けるため
– セキュリティの観点でよろしくない
– 環境の切り替え(例えば開発環境から本番環境)の際に環境変数の設定を楽にするといった理由が挙げられます。
## 早速準備してみる
今回はDrupalで提供されている`dotenv`を使用します。### 環境
最新版の`1.2.x`を使用する場合、以下の環境を用意しておく必要があります。
– PHP8.0以上
– Drupal10### インストール
1. `drupal/dotenv`をcomposerを使ってinstallします。
“`bash
composer require ‘drupal/dotenv:^1.2’
`
5分で理解するPSR-15
# 初めに
前略、PSR-15について調べたのでまとめます。# PSRとは
PSRとは、PHPにおける標準的なインターフェース仕様を定めたガイドラインです。これは、PHP-FIG(PHP Framework Interoperability Group)という団体によって策定されています。https://www.php-fig.org/psr/
# PSR-15とは
PSR-15は、Web APIやWebアプリケーションのリクエストとレスポンス処理を共通化・標準化するためのガイドラインです。
https://www.php-fig.org/psr/psr-15/例えば、HTTP通信を行う場合、全てのAPIのレスポンスにHTTPの形式に合わせてヘッダーなどを付与する必要があるかと思いますが、フレームワーク(FW)を利用している際に、実装者がController内でHTTP形式に変換する処理を書く機会は少ないと思います。これは、FWが「レスポンスをHTTP形式に変換する」という共通の処理を部品として実装しているためです。
このような共通処理の設計に関するガイドラインを定めた
PHPで”Fatal error”が表示されない不具合(?)
いくら例外を投げても無反応だったので、原因を徹底調査しました。
すると、`catch`ブロックの中で未定義の関数が見つかり、
その場所で`Fatal error`が発生したものの、
`finally`ブロックの処理がそのエラーの表示より優先され、
最後に表示されるはずだったのに`finally`ブロックにある`die()`のせいでエラー表示が消されてしまっていました。:::note info
私の環境
●Windows 10
●PHP 8.3.10(8.2.12 でも同様の現象を確認):::
まずは、下記のスクリプトを実行してみてください。
“`PHP