- 1. PHP, Python の正規表現で、何故 `\\\` でバックスラッシュがエスケープ出来ているのか
- 2. PHPで.propertiesファイルを使う
- 3. ServBayの組み込みComposerを使ったPHPプロジェクト管理
- 4. PHPの歴史
- 5. 【PHPフレームワークFLow】GETリクエストだけどDB更新したい時の対処
- 6. Laravel11.x HttpファサードとFakeを使って外部サービスのモックテストをする
- 7. 【Laravel11】Roach PHPの The current node list is empty. エラーについて
- 8. Docker Compose を使って App / DB / Mail コンテナの開発環境を構築する
- 9. 新たに気づいたissetとemptyの違い(PHP)
- 10. PHPでX APIを利用してフォロー数、フォロワー数を取得
- 11. Shifterの強みとハマりどころ
- 12. 開発環境を改善するためにチームに提案して実践したこと
- 13. Docker Compose を使わずに App / DB / Mail コンテナの開発環境を構築する
- 14. 【Laravel11】スクレイピングを定期的に実行する
- 15. FactoryMethodパターンを理解した気になる
- 16. PHP / Nginxにおけるタイムアウト値の変更手順
- 17. WordPressでアコーディオンパネルを自作する(プラグインなし)
- 18. PHP/JavaScriptで相互に動作する暗号復号関数
- 19. 【Laravel11】Roach PHPでスクレイピングをする
- 20. ふーん、で、君はPHPのフレームワークで何が好きなの?
PHP, Python の正規表現で、何故 `\\\` でバックスラッシュがエスケープ出来ているのか
バックスラッシュ自身に対する正規表現で、バックスラッシュ 3個で OK な説明を実際の仕様ではなく、日曜プログラマが理解可能なレベルで記載したい。[^1]
[^1]: 過去にあった同様の記事は見当らない、埋もれてる or 失われているので、、、
当然 `’//’` (PHP)、`r””` (Python) は使わない前提での文章となる。
## 前知識
– PHP, Python では、正規表現エンジンレベルでのエスケープ(PHP では PCRE)の他に、言語側の文字列としての展開を抑制するエスケープの2段階が必要
– 16進表記の文字列(`\x5c`) は(正規表現エンジンレベルでは)、エスケープの必要が無い(当たり前)一部 `pcregrep` [^2] を用いて説明しているが、これは言語仕様によるノイズを排除するためのもの。
[^2]: PCRE の純正 grep。インストールの仕方などは省略
“`
# STRING => 検索文字列
# REGEXP => 正規表現
% echo STRING | pcregrep ‘REGEXP’
“`
PHPで.propertiesファイルを使う
## プロパティファイル好きです!
こんばんは!私はとある大手企業で教育関係のお仕事をしています。
最近はJavaの新卒研修に参加して講義をしました。
はじめて3カ月も講義をして何より**自分が1番学んでました!**
## JavaといえばgradleかMaven!
JavaではXMLなMavenと.propertiesファイルのようなものを使うGradleの2択だった気がします。
JavaはYAML使わずにXMLのほかにpropertiesを使うことが多かった気がします。
しかし、PHPではほとんど使いません。
## そもそもPHPを使っている人がいない
みなさんPythonを使っているし私もFlaskやDjangoを使ってきました。
しかし問題があって、**PythonはWebと相性がそこまでよくない**というところがあります。
つまり、われわれがVPSを借りてウェブのサービスを始めようとなったときに
ほぼ100パーセント使うのが**Apache**となっており、PythonもいけるんですがPHPと比べると格段に面倒くさいです。
## Javaの習得は絶
ServBayの組み込みComposerを使ったPHPプロジェクト管理
強力な統合型[ウェブ開発ツール](https://www.servbay.com)であるServBayにはComposerが付属しており、その使用方法は非常に簡単です。ComposerはPHPの依存関係管理ツールで、現代のPHP開発で広く使用されています。これにより、開発者はプロジェクトの依存関係を簡単に管理し、依存関係の関係を自動的に処理することができます。ServBayを使用すると、開発者はサードパーティライブラリを簡単に導入し、プロジェクトの依存関係を管理し、クラスファイルを自動ロードできます。
### Composerの紹介
ComposerはPHPプロジェクトの依存関係を管理するツールです。開発者はプロジェクトが依存する外部ライブラリを宣言し、これらのライブラリを自動的にインストールおよび更新できます。ComposerはPHPライブラリだけでなく、フレームワークやプラグインなどの他の種類のパッケージも管理できます。
### 主な機能
1. **依存関係管理**: Composerはプロジェクトの依存関係を自動的に処理し、すべてのライブラリバージョンの互換性を確保します
PHPの歴史
PHP(Hypertext Preprocessor)は、ウェブ開発で広く使われているプログラミング言語です。初学者にも理解しやすいように、PHPの基本や関連する概念について詳しく解説します。
### 開発者の情報と歴史的背景
PHPは、1994年にRasmus Lerdorf(ラスマス・レルドーフ)によって開発されました。当初は、彼の個人ウェブサイトのアクセスを記録するための簡単なスクリプトとして始まりました。しかし、使いやすさと機能の充実により、多くの開発者が興味を持ち、改良を重ねた結果、現在のPHPが誕生しました。PHPは、動的なウェブページを簡単に作成できるようにするために開発されました。### サーバーサイドとは?
サーバーサイドとは、ウェブサーバー上で実行される処理のことを指します。PHPはサーバーサイドのプログラミング言語で、ユーザーがウェブページにアクセスした際にサーバー上で実行され、結果がユーザーのブラウザに送信されます。これにより、ユーザーごとに異なる動的なコンテンツを提供することができます。### オープンソースとは?
オープンソースとは、ソフトウェアの
【PHPフレームワークFLow】GETリクエストだけどDB更新したい時の対処
# 初めに
PHPフレームワークFLowでは、GETリクエストの処理の中ではDB更新ができないという仕様になっています。そんな中、どうしてもGETの中でDB更新がしたいという場合もあるかと思います。今回はそんな場合の対処法について解説します。# GETの場合DB更新ができない
実際に試してみました。
以下で作成したAPIにGETリクエストを送ってみたいと思います。“`php: Getだけど登録を試みたAPI
Laravel11.x HttpファサードとFakeを使って外部サービスのモックテストをする
## 結論
Httpのファサードをテストしたい時は下記のようにする### 被テスト側
“`php:HogeController.php
json($response->json());
}
}
“`
→そのまま実行すると、404エラーになる
Routeは割愛### テスト側
※PestPHPで記載しています
“`php:HogeTest.php
【Laravel11】Roach PHPの The current node list is empty. エラーについて
# はじめに
こんにちは、エンジニアのkeitaMaxです。
今回はRoach PHPを使用していた時に`The current node list is empty.`というエラーが出た時の話をします。
# エラー内容について
スクレイピングを実行した時に以下のエラーが出ました。
“`
The current node list is empty.
“`実際のコードは以下のような感じです。
“`
$subtitle = $response
->filter(‘main> div:nth-child(2) p:first-of-type’)
->text();
“`サンプルと同じですが、指定しているURLを修正したので、`’main> div:nth-child(2) p:first-of-type’`ここでしている要素では` ->text()`がとれずにエラーになってしまっているようです。
# 解決策
解決策は簡単で、エラーが出ている箇所が以下のようにInvalidArgumentExceptionをthrowしているため、エラーをキャ
Docker Compose を使って App / DB / Mail コンテナの開発環境を構築する
# はじめに
この記事では、Docker Compose を使った App / DB / Mail コンテナの開発環境の構築手順について記載します。https://docs.docker.com/compose/
以下の記事では、 Docker Compose を使わずに構築する手順を記載しています。
また、構築する開発環境の要件や各種リソース情報もこちらの記事に記載があります。https://qiita.com/Yasushi-Mo/items/6a4d1af9c7cdb3c68ce1
# 開発環境
開発環境は以下の通りです。– Windows 11
– Docker Engine 26.1.1
– Docker Compose 2
– PHP 8.3
– MySQL 8.4.0
– Mailpit 1.18# compose.yaml を作成する
## ファイルを作成する
まずはプロジェクト直下に `compose.yaml` を作成します。“`powershell
├─compose.yaml
├─docker
│ ├─app
│ ├─db
│
新たに気づいたissetとemptyの違い(PHP)
タイトルのとおりですが、emptyとissetの違いで今さらながらに気づいた部分があったので、メモとして残しておきます。
## やりたかったこと
– $hogeが空の配列
– falseにしたい
– $hoge[‘foo’]がtrue
– trueにしたい
– $hoge[‘foo’]がfalse
– falseにしたい上記の条件を満たしたかった
## 結論“`php
$hoge = array(‘foo’ => false);
if (!empty($hoge[‘foo’])) {
echo ‘true’;
} else {
echo ‘false’;
}
// falseが表示される$hoge = array(‘foo’ => false);
if (isset($hoge[‘foo’])) {
echo ‘true’;
} else {
echo ‘false’;
}
// trueが表示される
“`
`isset`だと`$hoge[‘foo’]`がfalseのときでも`true`が返ってしまいます…
`!empty`だ
PHPでX APIを利用してフォロー数、フォロワー数を取得
XのAPIが有料化されてから初めて触りました。
今となっては、なかなか使う機会もないけどメモ。# ライブラリ
https://github.com/abraham/twitteroauth“`
composer require abraham/twitteroauth
“`## XのAPI関連キーが4つ必要
①APIキー
②API Key Secret
③Access Token
④Access Token Secret## プログラム
“`
$connection = new TwitterOAuth(①, ②, ③, ④);
$connection->setApiVersion(‘2’);$response = $connection->get(‘users/by/username/yu_takashina’, [
‘user.fields’ => ‘profile_image_url,public_metrics’,
]);// フォロー数
$response->data->public_metrics->following_count;//
Shifterの強みとハマりどころ
## Shifterとは
Shifterとは株式会社デジタルキューブが提供するWordPressを静的に活用できるSaaSサービスです。
「Shifter Static」と「Shifter Headless」がありますが、私は「Shifter Static」の方を利用しました。
「Shifter Static」を平たく言うとWordPressはShifterの管理サービス上に閉じ込めてしまって、実際の一般エンドユーザはこのサービスから静的ファイルとして生成されS3に設置されたファイルをCloudFront経由で閲覧させるといったものです。
「Shifter Headless」の詳細は詳しくわかりませんが、microCMSなどを使ったときの構成と似たイマドキっぽいJamstackなサイトが作れそうですね。
:::note
デジ庁が色々とやってみた結果、脱Jamstackしたこと等とても共感が持てますし、[WordPressを扱うエンジニアに対する質問事項](https://qiita.com/koji-yamauchi/it
開発環境を改善するためにチームに提案して実践したこと
## 導入
### 何について話すのか
開発環境を改善して、効率化することでアプリケーション開発に注力するため行った(行っている)取り組みについてお話します。
本記事はQmonus Value Streamの投稿キャンペーン記事です。
### 想定読者
– レガシーな環境を改善している(していきたい)人
– 開発環境改善のアイデアが欲しい人
– CI/CDやDevOpsよりな仕事に関わる人### どんな人が書いているか(自己紹介)
– 3年目のエンジニアでバックエンドを中心に担当(最近インフラも担当するようになりました)
– メインで扱う技術はPHP・TypeScript・AWS
– アプリケーション開発とAWSインフラ構築を担当する
– 受託開発が中心の企業に従事## 記事で触れる取り組み(取り組んだ順)
1. Dockerの導入
2. テスト・静的解析の導入
3. CI/CDの導入・整備による効率化
4. Gitフローの変更・整備・周知
5. フロントエンド側へTypeScript・Vueの導入
6. AWSサービスの活用## Dockerの導入
###
Docker Compose を使わずに App / DB / Mail コンテナの開発環境を構築する
# はじめに
この記事では、App / DB / Mail コンテナの開発環境の構築手順について記載します。
今回は Docker Compose を使わずに構築します。※Docker Compose を使った構築手順については、こちらの記事に記載しています。
https://qiita.com/Yasushi-Mo/items/d2e920112adc6e31e4e2
# 開発環境
開発環境は以下の通りです。– Windows 11
– Docker Engine 26.1.1
– PHP 8.3
– MySQL 8.4.0
– Mailpit 1.18# 要件を整理する
まず今回構築するコンテナの要件を整理します。## 全体
– コンテナ停止時に自動削除
– コンテナはバックグラウンド実行
– 日本標準時で動作
– コンテナ間通信可能## App コンテナ `app`
– ブラウザでアクセス可能
– ソースコードはホストマシンで実装## DB コンテナ `db`
– デバッグ用にホストマシンから接続可能
– データはコンテナを削除しても残す
– 初期デー
【Laravel11】スクレイピングを定期的に実行する
# はじめに
こんにちは、エンジニアのkeitaMaxです。
前回の記事でスクレイピングすることができました。
前回の記事
https://qiita.com/keitaMax/items/0b433c7037dad0eda733
今回はスクレイピングを定期的に実行できるようにしたいと思います。
# スケジューリング作成
`src/app/routes`フォルダの`console.php`ファイルに以下の記述をします。
“`
Schedule::command(‘roach:run Laraveldocsspider’)->everyFiveSeconds();
“`# 確認
以下コマンドで確認します。
“`
php artisan schedule:list
“`“`
root@1460808f039b:/app# php artisan schedule:list0 * * * * php artisan inspire ………………………………………………
FactoryMethodパターンを理解した気になる
※前提
PHP(Laravel)で実装しています。デザインパターンを勉強するときに、[こちらの記事](https://refactoring.guru/ja/design-patterns/factory-method)をよく参考にするのですが、今回はFactory Methodパターンについて学ぶ機会があったのでまとめます。
デザインパターンの書籍や記事は体感Javaで書かれていることが多いイメージですが、私は業務でJavaをほとんど書いたことがないので、今回は言語はPHPで動かしてみます。
## Factory Methodパターンってなにもの?
Factory Methodパターンは23種類あるデザインパターンのうち、生成系に分類されるデザインパターンの一種です。一言で言うと、**スーパークラスでオブジェクトを作成するためのインターフェースが決まっている。 しかし、 サブクラスでは作成されるオブジェクトの型を変更することができる。**
とか、**具体的なオブジェクトの生成をサブクラスに任せることで、親クラスとサブクラスの間の疎結合を実現する。**
といった説明が
PHP / Nginxにおけるタイムアウト値の変更手順
# PHPのタイムアウト値変更
### 方針
**max_execution_time**の値を変更する以下は phpinfo() をプログラムで呼び出した php.ini の出力結果
![スクリーンショット 2024-05-31 12.57.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3123079/422fbfed-ca2b-d010-7543-bd360c6f7a08.png)### 変更方法
プログラムによる設定変更
– https://www.php.net/manual/ja/function.ini-set.php
– https://www.php.net/manual/ja/function.set-time-limit.php### 注意点
https://www.php.net/manual/ja/function.set-time-limit.php
> 関数 set_time_limit() と設定ディレクティブ [max_execution_time](h
WordPressでアコーディオンパネルを自作する(プラグインなし)
WebサイトのUIで何かと便利な**アコーディオンパネル**。
アコーディオンパネルは今のところWordPressの標準ブロックに備わっていません。
一応最近新しくWordPressに「詳細ブロック」なるものが追加されましたが、クリックでスライドして出現するようなアニメーションが適用できません。やっぱりクリックでにゅるっと出てきてこそのアコーディオンパネルでしょう。
WordPressでそういうアコーディオンパネルを実装するには、アコーディオンパネルがあるテーマを選んだり、プラグインを導入したりするのが一般的かと思います。
でもアコーディオンパネルのためだけに、テーマやプラグインを新しく入れるのは嫌だなぁ。
そんな人のために、プラグインやjQueryに依存せず、WordPressにアコーディオンパネルを実装する手順を紹介します。## ①グループブロックを作成
アコーディオンパネルを**ブロックパターン**として登録します。ブロックパターンとして登録することで、何度も同じレイアウトを組む必要がなくなり、効率的に作業を進めることができます。参考:[ブロックパターン
PHP/JavaScriptで相互に動作する暗号復号関数
## 概要
任意のパスワードと暗号化したいテキストのみでPHPとJavaScriptで相互に暗号←→復号できる関数を示します。## PHP
“`encrypt.php
function encrypt(string $plaintext, string $passphrase) :string
{
$cipher = “aes-256-cbc”;
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher));
$key = hash(‘sha256’, $passphrase, true);
$encrypted = openssl_encrypt($plaintext, $cipher, $key, OPENSSL_RAW_DATA, $iv);
$encrypted = base64_encode($iv . $encrypted);
return $encrypted;
}
“`“
【Laravel11】Roach PHPでスクレイピングをする
# はじめに
こんにちは、エンジニアのkeitaMaxです。
今回はLaravel11とRoach PHPでスクレイピングしてみようと思います。
# Roach PHPとは
>Roach is a complete web scraping toolkit for PHP.
(引用:https://roach-php.dev/docs/introduction)Roach PHPはスクレイピングをするためのPHPのライブラリです。
# インストール
以下のコマンドでインストールします。
“`
composer require roach-php/laravel
“`# ファイル作成
スクレイピング用のファイルを以下のコマンドで作成します。
“`
php artisan roach:spider LaravelDocsSpider
“`すると、`src/app/Spiders/`に`LaravelDocsSpider`ファイルが作成されます。
![スクリーンショット 2024-07-03 11.21.26.png](https://qiita-im
ふーん、で、君はPHPのフレームワークで何が好きなの?
オウフwwwいわゆるストレートな質問キタコレですねwww
おっとっとwww拙者『キタコレ』などとついネット用語がwww
まあ拙者の場合PHPフレームワーク好きとは言っても、いわゆる一般的な開発用途としてでなく
メタプログラミング的観点から見ているちょっと変わり者ですのでwwwFunctional PHPの影響がですねwwww
ドプフォwwwついマニアックな知識が出てしまいましたwwwいや失敬失敬www
まあファサードパターンの実装としてのLaravelは純粋によく設計されてるなと賞賛できますがwww
私みたいに一歩引いた見方をするとですねwwwポストSymfonyのパラダイムと
モダンPHPの実用主義を引き継いだフレームワークとしてのですねwww
Laravelのパイプライン処理はですねwwww
フォカヌポウwww拙者これではまるでデザインパターンオタクみたいwww
拙者はギークではござらんのでwwwコポォ