- 1. Shifterの強みとハマりどころ
- 2. 開発環境を改善するためにチームに提案して実践したこと
- 3. Docker Compose を使わずに App / DB / Mail コンテナの開発環境を構築する
- 4. 【Laravel11】スクレイピングを定期的に実行する
- 5. FactoryMethodパターンを理解した気になる
- 6. PHP / Nginxにおけるタイムアウト値の変更手順
- 7. WordPressでアコーディオンパネルを自作する(プラグインなし)
- 8. PHP/JavaScriptで相互に動作する暗号復号関数
- 9. 【Laravel11】Roach PHPでスクレイピングをする
- 10. ふーん、で、君はPHPのフレームワークで何が好きなの?
- 11. PHPのアクセス修飾子について
- 12. IPAのアイコン画像が壊れているように見える問題のメモ
- 13. [Laravel]文字と数字が混在する場合のsort
- 14. 【Docker Network】PHP コンテナから MySQL コンテナに通信する
- 15. オブジェクト指向の世界に入門
- 16. mb_detect_encodingとmb_convert_encodingの不思議
- 17. CodeIgniter3でMailpitを使ってlocalhost内でメール送信
- 18. 【PHP】Excelを操作するライブラリを作ってみた
- 19. XDebug を使用した PHP プロジェクトのデバッグ
- 20. PAY.JPの定期課金を使用してサブスクを実装
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
開発環境を改善するためにチームに提案して実践したこと
## 導入
### 何について話すのか
開発環境を改善して、効率化することでアプリケーション開発に注力するため行った(行っている)取り組みについてお話します。
### 想定読者
– レガシーな環境を改善している(していきたい)人
– 開発環境改善のアイデアが欲しい人
– CI/CDやDevOpsよりな仕事に関わる人### どんな人が書いているか(自己紹介)
– 3年目のエンジニアでバックエンドを中心に担当(最近インフラも担当するようになりました)
– メインで扱う技術はPHP・TypeScript・AWS
– アプリケーション開発とAWSインフラ構築を担当する
– 受託開発が中心の企業に従事## 記事で触れる取り組み(取り組んだ順)
1. Dockerの導入
2. テスト・静的解析の導入
3. CI/CDの導入・整備による効率化
4. Gitフローの変更・整備・周知
5. フロントエンド側へTypeScript・Vueの導入
6. AWSサービスの活用## Dockerの導入
### 背景
Docker導入前はwinscpというツールを利用してLinuxサー
Docker Compose を使わずに App / DB / Mail コンテナの開発環境を構築する
# はじめに
この記事では、App / DB / Mail コンテナの開発環境の構築手順について記載します。
今回は Docker Compose を使わずに構築します。# 開発環境
開発環境は以下の通りです。– Windows 11
– Docker Engine 26.1.1
– PHP 8.3
– MySQL 8.4.0
– Mailpit 1.18# 要件を整理する
まず今回構築するコンテナの要件を整理します。## 全体
– コンテナ停止時に自動削除
– コンテナはバックグラウンド実行
– 日本標準時で動作
– コンテナ間通信可能## App コンテナ `app`
– ブラウザでアクセス可能
– ソースコードはホストマシンで実装## DB コンテナ `db`
– デバッグ用にホストマシンから接続可能
– データはコンテナを削除しても残す
– 初期データを用意## Mail コンテナ `mail`
– ブラウザでアクセス可能
– メールデータはコンテナを削除しても残す# ディレクトリを準備する
今後 Dockerfile や各種設定ファイルなどを作
【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コポォ
PHPのアクセス修飾子について
PHPには、public、private、protectedの3つのアクセス修飾子があり、これらはクラスのプロパティやメソッドに対するアクセス制限を設けるために使用されます。それぞれ異なるアクセスレベルを定義し、クラスの設計と使用を適切に行うために重要な役割を果たします。
### 目次
1. public
2. private
3. protected
4. アクセス修飾子の違いと使用例
5. アクセス修飾子の適切な使用方法### 1. public
### 定義
クラスのプロパティやメソッドがクラスの外部からもアクセス可能になる。
### 使用ケース
クラスの機能を外部に公開し、外部からの利用を容易にするために使用。
### 例
“`php
class MyClass {
public $publicProperty = ‘I am public’;public function publicMethod() {
echo ‘This is a public method’;
}
}$instance = new
IPAのアイコン画像が壊れているように見える問題のメモ
# IPAのアイコン画像が壊れている!?
自作ツールで、IPAからアプリアイコンを保存したファイルをブラウザで表示すると画像が読み込めない!
PhotoShopで開こうとするとCgBIチャンクが壊れているという。
普段、画像をIrfanViewを使用しているので気が付くのに時間が掛かった。調べると、どうもIPAないのファイルにはPNGにCgBIチャンクを追加される場合があるようです。
CgBIチャンクをビルド時に入れたくない場合は、他のサイトでも沢山解説されているのでここでは割愛します。## CgBIは不要
今回実装中の機能は、サーバーにあるアプリのアイコンを表示する機能なのでCgBIチャンクのあるアプリアイコンは表示できませんとかは出来ないので頑張ります。
CgBIのあるPNGを標準のPNG戻すライブラリを探します。
PHPでは、全く見当たらないです。
いつくかありましたが、怪しいコードだったりそもそも正しく動かないものも多かったです。
辛うじて、pythonのライブラリが見つかりました。
https://pypi.org/project/PyiPNG/
ありがとうござ
[Laravel]文字と数字が混在する場合のsort
## はじめに
こんにちは!2024年新卒で無事エンジニアデビューしたものです。
私は私立の文系大学を卒業後、現在、株式会社ダイアログに入社し、エンジニアチームに配属されました。
自社では1ヶ月の全職種研修を終え、さらに1ヶ月のエンジニア研修を終えたのち案件にアサインされる形となっております。
そこで今回は私が初めてアサインしていただいた案件でつまづいた箇所を記載できればと思っております。
## 案件内容
衣類を扱う会社の帳票の改修## 文字と数字が混在している場合のサイズ名の昇順
衣類を扱う中で色々なサイズ表記があります。
S・M・Lのような文字表記の場合もあれば70・100・115のような数字表記の場合、また3Lのような数字と文字の混在している表記の場合もあります。この場合、昇順をつける上では文字列または数列のどちらかに表記を合わせる必要があります。
### 文字を数字に置き換える
例えば
サイズ表記の種類がsz_nm = [SS,S,M,L,XL,4L,90,100,120]あったとします。
・今回は[SS,S,M,L,XL,4L,90,100,120]とい
【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にも必要データを保持しま