- 1. 【Docker Network】PHP コンテナから MySQL コンテナに通信する
- 2. オブジェクト指向の世界に入門
- 3. mb_detect_encodingとmb_convert_encodingの不思議
- 4. CodeIgniter3でMailpitを使ってlocalhost内でメール送信
- 5. 【PHP】Excelを操作するライブラリを作ってみた
- 6. XDebug を使用した PHP プロジェクトのデバッグ
- 7. PAY.JPの定期課金を使用してサブスクを実装
- 8. 【PHP】トレイトとは
- 9. phpMyAdminを手動で導入する方法
- 10. 【CakePHP5】自動テスト/CIとかのまとめ
- 11. 早期リターンして認知負荷を下げよう
- 12. Eloquentのgetメソッドとchunkメソッドのパフォーマンスを比較してみる
- 13. 【CakePHP5】GitHubのPush時にPHPUnitでテストする
- 14. Dockerを使ってLaravel(php-fpm + mariadb + nginx) の環境を構築したい!
- 15. Docker で PHP8.3 + Apache + Laravel + MySQL 8 + phpMyAdmin 環境を構築
- 16. AlmaLinuxにComposerの導入してみる
- 17. Threads API for PHP を公開しました。
- 18. パス部分に%2F(/)スラッシュは使えないのでクエリパラメータでパラメータを指定した
- 19. EloquentのwithCountメソッドでリレーション先のレコード数を取得する方法
- 20. PHPにおける isset と !empty の違い
【Docker Network】PHP コンテナから MySQL コンテナに通信する
# はじめに
この記事では、Docker のネットワーク機能を利用して、PHP コンテナから MySQL コンテナへ通信できるようにする手順について記載します。
ネットワークへの理解促進の一環で行っています。https://docs.docker.com/network/
# 開発環境
開発環境は以下の通りです。– Windows 11
– Docker Engine 26.1.1
– MySQL 8.4.0
– PHP 8.3# ネットワークの作成 `docker network create`
`docker network create` でネットワークを作成します。
https://docs.docker.com/reference/cli/docker/network/create/
“`powershell
docker network create my-network
“`![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/a37cd0
オブジェクト指向の世界に入門
# はじめに
エンジニアになりたての頃、なにも考えずにコーディングをしていたところ、ベテランエンジニアの友達から「現場で役立つシステム設計の原則」という本を勧められ読んでみました。
将来のことを考えたシステム設計のことなど考えたこともなかった私には目からウロコの内容ばかり書いてありました。なので今回は、学んだことの備忘録と、少しだけオブジェクト指向について触れる記事になります。
**※記事内の言語はPHPで書いています**
—
#### 今回参照した書籍
「現場で役立つシステム設計の原則」(増田亨さん著)
初学者の方にもおすすめです。
—
# この記事の目的
オブジェクト指向は、正直ネットで調べても意味がわからず、初心者の私にはさっぱりでした。
難しい概念ばかり出てくるし、これだけやればOKみたいな単純なものでもないし、概念や思想だという記事まで出てきてより混乱してしまいました。この難解さが、私のような初心者が「オブジェクト指向」を怖がる原因になってしまいます。
が、しかし今回は、「現場で役立つシステム設計の原則」を読んでみて、オブジェクト指向に少しでも
mb_detect_encodingとmb_convert_encodingの不思議
# はじめに
これはPHP8.1を利用していて遭遇した“`mb_detect_encoding“`と“`mb_convert_encoding“`に関する不思議なお話です。それでは行ってみましょう。
# 用意するプログラム
“`php:test.php
CodeIgniter3でMailpitを使ってlocalhost内でメール送信
# はじめに
少々レガシーかもしれませんがDocker/CodeIgniter3を使ってローカル環境で開発をしている際、「メール配信処理もMailpitを利用してローカル環境内で完結させたい」というケースに対するTIPSです。ドキュメントや参考事例が見当たらなかったので備忘録です。https://mailpit.axllent.org/
# Laravel
LaravelではMailpitが標準でサポートされており、まずDockerでイメージを指定してコンテナをデプロイします。“`yaml: docker-compose.yml
mailpit:
image: axllent/mailpit:v1.8
container_name: mailpit
ports:
– “8025:8025”
– “1025:1025”
environment:
MP_DATA_FILE: /tmp/mailpit.db
volumes
【PHP】Excelを操作するライブラリを作ってみた
:::note info
この記事は、PHPのライトなExcelライブラリの紹介です。
:::# はじめに
PHPer皆さん、Excelは好きですか?Excel好きなユーザーから、オンライン画面でExcelからデータをインポートしたいなどの要件がくることがありますよね。そんな時はPhpSpreadsheet。PhpSpreadsheetは、スプレッドシートの読み書きや書式設定など、なんでもできるとても素晴らしいライブラリです。https://github.com/phpoffice/phpspreadsheet
ある日、PHPで特定セルの値を変更して、その結果をExcelのチャートに反映するという要件をいただきました。具体的には、図中の `A3` と `A5` の値を変更して、`Qiita閲覧者数` のチャートで見たいという案件です。
![スクリーンショット 2024-06-28 22.21.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962814/b8583351-8d96-8a
XDebug を使用した PHP プロジェクトのデバッグ
[XDebug](https://xdebug.org/) は PHP 開発において不可欠なデバッグツールであり、ブレークポイントデバッグ、パフォーマンス解析、コードカバレッジなどの強力な機能を提供します。XDebug を使用すると、開発者はコードにブレークポイントを設定し、変数の値を検査し、関数呼び出しスタックをトレースし、パフォーマンスのボトルネックを分析することができ、PHP 開発の効率とコード品質を大幅に向上させることができます。
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ypve7o80tern64wn7pc4.png)
### XDebug の紹介
XDebug は、デバッグと解析機能を提供するために設計された PHP 拡張モジュールです。開発者はコードにブレークポイントを設定し、コードをステップ実行し、変数の値やプログラムの状態を検査することができ、コードをより理解しやすく、デバッグしやすくします。
### Xdebug の有効化とデバッグ環境の構築
PAY.JPの定期課金を使用してサブスクを実装
定期課金の実装を行いました。
備忘録として残したいと思います。
定期課金は単発課金と異なり、かなり処理が複雑でしたが
ドキュメントを熟読して、とってもよい経験となりました。# 定期課金おおまかな流れ
### 1. 顧客がクレジットで定期課金を購入💳
[PAY.JPのcheck outに記載のカード情報入力フォームを用意します。](https://pay.jp/docs/checkout)
このフォームのdata属性に公開用APIKEYをセットする必要があります。“`js
“`## 2. PAY.JPに顧客情報・プランを作成し、アプリケーション側のDBにも必要データを保持しま
【PHP】トレイトとは
## トレイトとは
「トレイト」とは、PHPにおけるコード再利用のための仕組みの一つで、複数のクラスで共有したいメソッドやプロパティを定義するもの。## 実装例
例:
“`php
// トレイトの定義
trait Cacheable {
public function cacheMethod($key, $value) {
// キャッシュ機能を実装するコード
}
}
“`クラスにトレイトを適用することで、トレイトで定義されたメソッドやプロパティを追加できる。
これにより、共通の機能を複数のクラスで簡単に共有でき、コードの重複を避けられる。“`php
// トレイトの使用
class SomeClass {
use Cacheable;public function someMethod() {
// このクラスはCacheableトレイトのメソッドを利用できる
$this->cacheMethod(‘key’, ‘value’);
}
}
“`Cacheableというトレイトを定義し、
phpMyAdminを手動で導入する方法
![php004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3668800/c8a36a9b-272b-b847-fad8-c1f29c5edffb.png)
phpMyAdminを利用した事はござざいますでしょうか。
phpMyAdminを利用する事でsqlを使用せずに視覚的にデータベースを操作できる便利ツールとります。
そこで、今回はphpMyAdminを手動で導入する方法についてご紹介致します。
下記公式サイトとなります。
https://www.phpmyadmin.net/
下記公式リポジトリとなります。
https://github.com/phpmyadmin/phpmyadmin
## phpMyAdminをダウンロードする
始めにphpMyAdminをダウンロードを実施致します。
下記コマンドを使用しドキュメントルートディレクトリに移動します。
“`
cd /var/www/html/
“`※上記コマンドの移動パスは用途に合わせて修正下さい。
次に「
【CakePHP5】自動テスト/CIとかのまとめ
# はじめに
こんにちは、エンジニアのkeitaMaxです。
CakePHPの自動テストとかをいろいろやったのでまとめです。
今までCakePHPの記事を書いてきたので、それをまとめました。
これから紹介するものが全て入っているリポジトリは以下です。
https://github.com/NiheiKeita/cake-example-app
# Docker環境を作成
Dockerを使用してCakePHPの環境を作成しました。
https://qiita.com/keitaMax/items/6152aa9fff66bee4e887
# PHPstanを使った自動テスト
PHPstanを使って静的解析をしました。
https://qiita.com/keitaMax/items/77df412e05a537571549
また、以下記事ではPHPstanをGitHubにPushしたときにテストできるようにGitHubActionsを使用しました。
https://qiita.com/keitaMax/items/6e354b9a0b7c54344fa1
下の
早期リターンして認知負荷を下げよう
## はじめに
if ~ elseif ~ elseなどで複数条件を処理しているコードを、エンジニアなら誰しも一度は見たことがあると思います。その条件が何層もネストしているコードにもお目にかかったこともあるでしょう。
今回はそういうコードを、早期リターンを使って読みやすくしてみたいと思います。
## 早期リターン実施前
“`php
/**
* ユーザーの参加資格をチェックする関数
*/
function isUserEligible($user) {
// 18歳以上の場合
if ($user[‘age’] >= 18) {
// アクティブの場合
if ($user[‘active’]) {
// サブスク契約中の場合
if ($user[‘hasPaidSubscription’]) {
return true;
} else {
return false;
}
Eloquentのgetメソッドとchunkメソッドのパフォーマンスを比較してみる
## はじめに
下記の記事で大量データを扱う際は`chunk`メソッドを使った方が良いといった内容を書きましたが、実際にどれくらい良くなるかを今回は検証してみましたhttps://qiita.com/t1k2a/items/25f145135a16bc5e3f44
## パフォーマンステストの準備
– データベースの準備
– テスト用のデータベースを用意し、十分なレコード数を挿入します
– 今回は4000件のデータを使用します
– 環境の準備
– 同じ環境でテストを行います
– 今回はDocker+Laravel+MySQLの環境で行います
– 詳しくは下記の記事をご参照くださいhttps://qiita.com/ucan-lab/items/5fc1281cd8076c8ac9f4
測定項目
– メモリ使用量
– 各メソッド使用時のメモリ消費量を測定します
– 処理時間
– 各メソッドが処理を完了するまでの時間を測定します## テストデータの使用
テストデータは下記を使用しましたhttps://dev.my
【CakePHP5】GitHubのPush時にPHPUnitでテストする
# はじめに
こんにちは、エンジニアのkeitaMaxです。
今回は前回作成したPHPUnitをGitHubActionsでGitHub上でテストできるようにしようと思います。
前回
https://qiita.com/keitaMax/items/7327c83cea938fe124f9
# GitHubActionsのymlファイルを作成
GitHubActionsを作成します。
以前Laravelで作成したものを参考にしようと思います。
https://qiita.com/keitaMax/items/bbfecbdb73322b53bb4c
“`yml:phpunit.yml
name: phpuniton: [pull_request]
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./src
steps:
– uses: actions/checkout@v2
– name:
Dockerを使ってLaravel(php-fpm + mariadb + nginx) の環境を構築したい!
# はじめに
大学のプロジェクトで環境をDockerに移動しなければいけない機会があったので,Laravelの環境を作成しました!
コンテナ内のartisanコマンド等で作成されたファイルは権限を変更しないとVScodeで直接編集でしたが、今回はVScodeで直接編集ができるように工夫しました!# やりたいこと
php-fpm + mariadb + nginx のLaravelの環境を作成したい!# お急ぎの方
以下のリポジトリをForkして作成したリポジトリをcloneしてください!
※ .envファイルを記述する必要あり.https://github.com/46maru/Laravel_container
# 動作環境
– windows10
– wsl2
– VScode
– docker for windows (4.30.0)# ファイル構成
“`
project名
┣━ docker/
┃ ┣━ app/
┃ ┣━ Dockerfile
┃ ┣━ php.ini
┃ ┣━db/
Docker で PHP8.3 + Apache + Laravel + MySQL 8 + phpMyAdmin 環境を構築
[また今度](https://qiita.com/naente/items/d259ea84c172deeff7d8)が来るまでに 5年かかったゾ。
# 対象読者
– 私
– これまで XAMPP インストールして hosts 書いて httpd.conf に VirtualHost 書いてローカル開発環境を構築していたが、そろそろ Docker に移行したい私
– 上記の工程を開発メンバー各自にも行なってもらっていて、今時 Docker じゃなくてゴメンと思っていた私
– 他の Docker 環境構築記事のレベルが高すぎて理解できなかった私# 動作確認環境
あらかじめ Docker Desktop と Composer のインストールを完了しておいてください。## Windows
– Windows 10 Enterprise 22H2
– Docker Desktop 4.31.1
– Docker 26.1.4
– Docker Compose v2.27.1-desktop.1
– Composer 2.7.2## Mac
– macOS Ventura
AlmaLinuxにComposerの導入してみる
PHPのパッケージ管理システムとして「Composer」を利用している方は多いのではないでしょうか?
今回はAlmaLinuxにComposerの導入する方法をご紹介致します。
## PHPComposerとは
![php001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3668800/e278896c-b093-4436-534d-7ddf9d788d3c.png)
ComposerはPHPのパッケージ管理システムとなります。
依存関係の管理やパッケージのバージョン管理等を行う事が出来ます。
下記公式サイトとなります。
https://getcomposer.org/
下記githubリポジトリとなります。
https://github.com/composer/composer
## 環境
今回インストールを行う環境は以下となります。
“`
cat /etc/almalinux-release
AlmaLinux release 9.3 (Shamrock Pampa
Threads API for PHP を公開しました。
# 「Thread API by PHP」とは
## 概要
* PHP で「Threads API」を扱うためのクラスとそのサンプルコードです
* GitHub リポジトリ: [mikiakira/threads_api: Threads API](https://github.com/mikiakira/threads_api)
* これは、上記リポジトリの README.md を複製 + 解説記事です—
## API 発表から実装に至る経緯
* メタ公式発表: [Threads APIがついに公開](https://developers.facebook.com/blog/post/2024/06/18/the-threads-api-is-finally-here/)
* ※ 現地時間で、2024年6月18日の発表ですおそらく、PHP で実装された記事としては、[threads-Apiで投稿するための雛形 #PHP – Qiita](https://qiita.com/taoka-toshiaki/items/e606e2cfa31c6e2ed771
パス部分に%2F(/)スラッシュは使えないのでクエリパラメータでパラメータを指定した
下記のようなURLでパラメータをパスで受け取ろうとして、404になった。
“`md
https://example.com/path/hoge%2Ffuga/
“`“`route.php
Route::get(‘/path/{param}’, ‘HogeController@index’);
“`パスでパラメータを受け取ろうとしていた。が/(スラッシュ)は予約文字ということでパスには使えないことが判明。
下記がエビデンス。
https://www.ietf.org/rfc/rfc2396.txt#:~:text=2.2.%20Reserved%20Characters代わりに、
“`route.php
Route::get(‘/’, ‘HogeController@index’);
“`“`HogeController.php
$request->query(‘url’);
“`で受け取るようにした。
下記のようなURLで正常に遷移してくれるようになりました。“`md
https://example.com/path/?url=hoge/
EloquentのwithCountメソッドでリレーション先のレコード数を取得する方法
## はじめに
「リレーション先のレコードは使わないけど、取得したレコードの数は見たい」という状況が稀にあります
自分はリレーション先のカラムをidにしView側でCountしていましたが、これをModelだけで実現できる`withCount`メソッドに感動したので解説していきます## withCountメソッドの基本
`withCount`メソッドは、リレーションシップのレコード数をカウントし、結果に追加するために使用されます
例えば、Userモデルが複数の投稿(posts)を持っている場合、各ユーザーの投稿数をカウントして取得できます
これは非常に便利です## 基本的なwithCountの使用
ユーザーモデルとポストモデルが1対多の関係にある場合、以下のように`withCount`メソッドを使用しますモデルの定義
“`User.php
public function posts()
{
return $this->hasMany(Post::class);
}
“`クエリの使用例
“`php
$users = User::withCount(‘posts’
PHPにおける isset と !empty の違い
`isset` と `!empty` はどちらも変数の値をチェックする関数ですが、それぞれ異なる動作をします。
**`isset`**
* 変数が宣言されていて、かつ `NULL` ではない場合に `true` を返します。
* 変数の値が空文字 (“”) や数値の 0 であっても `true` を返します。
* 未定義の変数に対して使用すると **Fatal error** を発生します。**`!empty`**
* 以下のいずれかに該当する場合に `true` を返します。
* 変数が `NULL` である。
* 変数が空文字 (“”) である。
* 変数が数値の 0 である。
* 変数が `false` である。
* 変数が **未定義** である。
* 変数に値が設定されている場合は、たとえそれが空文字や数値の 0 であっても `false` を返します。**例**
“`php
$var1 = “”;
$var2 = 0;
$var3 = null;
$var4 = false;var_dump(isset($var