- 1. PHPでOpenTelemetryを使ってトレースを収集する
- 2. PHPのマルチバイト関数で文字エンコーディング指定について
- 3. NFT関連の自動テストのアーキテクチャ
- 4. 【WordPress】ACFのDate Time Pickerを使って期間限定コンテンツを出す
- 5. 文字コードを理解する旅に行ってきました!(PHP/Shift_JIS/Windows-31J/UTF-8)
- 6. 指定した間隔で繰り返しジョブ実行、”Scheduler”
- 7. PHP ぼやき日記 2023-12-13
- 8. GitHub ActionsでPHPのCI環境作る(15分で)
- 9. サービスのセッションを切らさずにDockerコンテナを立ち上げ直す方法
- 10. PHP-MAMP(パッケージソフトウェア)
- 11. PHPでサポートされている文字エンコーディングについて
- 12. 【覚書き】PHPフレームワーク「Flow」におけるインターフェースをDIしたときの挙動について
- 13. タイムアウトが頻発して泣きを見た話
- 14. 画像やCSSを先読み、”WebLink”
- 15. Symfonyユーザー認証機能の実装について簡単に紹介!
- 16. 【PHP】文字列連結 「結合演算子 vs 変数展開」
- 17. そうだ、年末大掃除にAIを取り入れよう
- 18. PukiWikiローカルサーバ環境構築(php/XAMPP導入手順 )
- 19. PHPを使ってオリジナルアプリからChatGPT APIを利用してみた
- 20. PHP ぼやき日記 2023-12-12
PHPでOpenTelemetryを使ってトレースを収集する
こんにちは!
12月に入ると楽しいイベントが目白押しですね。クリスマスがやって来たと思ったらすぐ冬休みに入って、大晦日にお正月。遊びに行くも良し、家でゆっくり過ごすも良し、人それぞれ楽しみ方があると思います。しかし、そういった時期でもシステムが上手く動いてくれないとおちおち休んでいられません。普段からシステムの信頼性を高め、障害時にはすぐに復旧できる状態にしておくことが重要です。
ここでは、PHPでOpenTelemetryを使ってトレースを収集し、Google CloudのCloud Traceで可視化するまでの一連の流れをやってみます。
トレースとは何かについては、[以前書いたこちらの記事](https://qiita.com/atsu_kg/items/c3ee8141e4638957a947)の「分散トレースの重要性」「トレースの構成要素」のセクションを参照ください。
# 前提
PHP8.1
[open-telemetry/opentelemetry](https://packagist.org/packages/open-telemetry/opentelemetr
PHPのマルチバイト関数で文字エンコーディング指定について
# 概要
PHPのマルチバイト関数の引数として文字エンコーディング名を指定する際は、実際の文字エンコーディング名以外も指定することができます。
その際の挙動や指定方法についてまとめようと思います。> ※PHP8.2時点での仕様となります。
# 文字エンコーディング名の指定の種類
`mb_convert_encoding`のような文字エンコーディングを変換数関数ではfromとtoがあり、それぞれ指定できるものが異なります。
– fromとして指定できる文字エンコーディング名
– サポートされる文字エンコーディング名
– サポートされる文字エンコーディングのエイリアス名> ※ 未指定は不可
– toとして指定できる文字エンコーディング名
– サポートされる文字エンコーディング名
– サポートされる文字エンコーディングのエイリアス名
– 未指定(`null`も含む)
– `auto`> ※`auto`は複数エンコーディングを指定できる関数に限る
– その他
– `pass`## サポートされる文字エンコーディング名を指定
サポー
NFT関連の自動テストのアーキテクチャ
# STYLYとNFT
もう去年の話になりますが、2022年10月15日にSTYLYではNFT関連の機能が実装され、OpenSeaを介して、XR作品の取引が出来るようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/7989996a-6a3d-b185-68e2-adde3a87cea2.png)
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/ef588a7f-735a-67f4-dc08-b0906b8a89e5.png)](https://vimeo.com/758951801)
現在、NFTとして出品する機能は提供されていませんが、MetaMaskと連携を行い、Ethereumのwalletと連携する機能があります。これによりSTYLYのXR作品のNFTのコレクションを表示できます。
![image.png](https://qii
【WordPress】ACFのDate Time Pickerを使って期間限定コンテンツを出す
期間限定でバナー画像を出すようなお仕事があったので作業メモ
# やること
ACF(Advanced Custom Fields)のDate Time Pickerを使って、WordPressの管理画面から開始日時と終了日時を設定し、その期間だけコンテンツを表示するようなものを作ります。
![output2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288781/91f74470-f13e-7782-bece-ae4bdc4848ff.gif)# ACFで新規フィールドを作成して以下のように設定
![img1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288781/af966b9f-e645-d18a-d761-b8c6080c47c0.jpeg)フィールドラベルを`開始日時`
フィールド名を`start_date_time`
としました。フィールドタイプは`Date Time Picker`
カ
文字コードを理解する旅に行ってきました!(PHP/Shift_JIS/Windows-31J/UTF-8)
## はじめに
[MetapsAdventCalendar2023](https://qiita.com/advent-calendar/2023/metaps) 14日目の記事です🏃♂️
文字コード初心者が文字コードについて調べた記事になります。
(※主にShift_JIS,Windows-31J,UTF-8を少々)前半は、「文字コードとはなんぞや」から始まり、気になる用語を調べてまとめてみました。
後半は、Shift_JIS, Windows-31J, UTF-8の符号をPHPで出す方法と、
SJIS, Windows-31J, UTF-8の符号を出して、SJIS系なら2バイト文字をPHPで大雑把に分類してみるということをやってみました。本記事で利用したプログラムのGithubのリンクも記載しています。## 環境
・PHP: 8.1.25
・macOS: Sonoma 14.1.1
・iTerm2: Build 3.4.22## 文字コードを理解する上で役立った動画
下記動画は、なぜ「Unicodeが誕生したのか」及び、「Shift_JISでなぜ符号化する必要があ
指定した間隔で繰り返しジョブ実行、”Scheduler”
[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の14日目の記事です。
## 指定した間隔で繰り返しジョブ実行、”Scheduler”
[Scheduler](https://symfony.com/blog/new-in-symfony-6-3-scheduler-component)は、事前に指定したスケジュールでジョブを実行するコンポーネントです。
### インストール
“`shell
composer require symfony/scheduler
“`### 使い方
スケジュールに合わせてジョブを実行するには3つ必要になります。
– 送信する`Message`
– `Message`をハンドリングする`MessageHandler`
– スケジュールの設定をする`ScheduleProvider`Message, MessageHandlerの詳細については去年の[Messenger](https://
PHP ぼやき日記 2023-12-13
[前回](https://qiita.com/sj-i/items/db793e09de33dd5e804d)
不定期に誰に向けるでもなく PHP に関する雑な殴り書きをしている。日付が変わってから 13 日の奴だと言い張って投稿するくらいの雑さ加減。
# nielsdos のひとが FFI 周りをわりと見ている
– [この 1 年ちょいほどの間でめちゃくちゃコミット入れてる](https://github.com/php/php-src/graphs/contributors?from=2021-10-18&to=2023-12-13&type=c) [nielsdos のひと](https://github.com/nielsdos)が最近わりと FFI まわりも見ている
– https://github.com/php/php-src/pull/12916
– https://github.com/php/php-src/pull/12915
– https://github.com/php/php-src/pull/12906
– がんばってまともに
GitHub ActionsでPHPのCI環境作る(15分で)
# これは何?
GitHub Actionsを使ったPHPのCI環境のセット(静的解析テスト ⇒ ユニットテスト ⇒ E2Eテスト)を、できるだけ最小構成で作っていきます。
### 前提
– Docker
– 手元にDocker環境入っていない人は先に[インストール](https://www.docker.com/products/docker-desktop/)しておいてください
– node >= v20
– 自分は普段[Volta](https://volta.sh/)使ってますが何でもいいです### レシピ
1. DockerでPHPの環境作る(3分)
1. テスト対象の機能と画面作る(2分)
1. PHPStanで静的解析の設定(1分)
1. PHPUnitでユニットテストコード用意(2分)
1. PlaywrightでE2Eテストコード用意(3分)
1. GitHub Actionsでテスト実行(4分)
1. ブランチの保護(+α)それではやっていきましょう。
# 1. DockerでPHP環境作る(3分)
“`./docker-comp
サービスのセッションを切らさずにDockerコンテナを立ち上げ直す方法
EC2上にdockerでサービスを動かしていて、docker imageの中にソースコードを埋め込んでデプロイしていました。
その際に、デプロイ時にセッションが切れてしい毎回ログアウトされる問題があったので改善するようにしました。
言語はPHPを使っています。## 解決方法
解決方法としては、EC2のローカル上にセッションを保存してdockerのbuild時にマウントさせることで解決しました。
セッションを保存したいローカルのディレクトリを `/var/sessions` 、マウント先のdockerコンテナのディレクトリはデフォルトでセッションが保存される `var/lib/php/sessions` とします。予めローカルに`/var/sessions`ディレクトリを作ります。
“`
$mkdir /var/sessions
“`
次にdocker-compose.ymlファイルにマウントを書きます。
“`:docker-compose.yml
volumes:
– /var/sessions:/var/lib/php/sessions
“`
こうすることで
PHP-MAMP(パッケージソフトウェア)
MAMPでサーバー構築、種類別の特徴について。
・MAMP(Mac、Apache、MySQL、PHP):
対象プラットフォーム: 主にMac OSに対応しています。
コンポーネント:
Apache: ウェブサーバー
MySQL: データベースサーバー
PHP: サーバーサイドスクリプト言語・XAMPP(クロスプラットフォーム、Apache、MySQL、PHP、Perl):
対象プラットフォーム: クロスプラットフォームで、Windows、Mac、Linuxなど、複数のオペレーティングシステムで利用可能です。
コンポーネント:
Apache: ウェブサーバー
MySQL: データベースサーバー
PHP: サーバーサイドスクリプト言語
Perl: 汎用のスクリプト言語・LAMP(Linux、Apache、MySQL、PHP/Python/Perl):
対象プラットフォーム: 主にLinuxに対応していますが、他のプラットフォームでも構築可能です。
コンポーネント:
Apache: ウェブサーバー
MySQL: データベースサーバー
PHP/Python/Perl: サーバーサイド
PHPでサポートされている文字エンコーディングについて
# 概要
PHPでサポートされている文字エンコーディングについてまとめていこうと思います。
> ※PHP8.2時点での仕様となります。
# サポートされる文字エンコーディングについて
[サポートされる文字エンコーディング](https://www.php.net/manual/ja/mbstring.supported-encodings.php) で一覧を確認できますが、エイリアスも存在するためマニュアルでは一覧で確認することができないです。
下記の関数を組み合わせると一覧を確認することができます。
– [mb_list_encodings](https://www.php.net/manual/ja/function.mb-list-encodings.php)
– [mb_encoding_aliases](https://www.php.net/manual/ja/function.mb-encoding-aliases.php)## 非推奨となった文字エンコーディング
PHP8.2以降では「`QPrint`, `Base64`, `Uuencode`, `H
【覚書き】PHPフレームワーク「Flow」におけるインターフェースをDIしたときの挙動について
# 初めに
最近PHPのマイナーフレームワークFlowを触っているのですが、インターフェースをDIしたときの挙動について気になることがありました。
いろいろ調べてみたので分かったことをアウトプットします。# DIしたインターフェースのメソッドを呼び出すとどうなる?
Flowのソースを見てると、以下のようにDIしたインターフェースのメソッドを呼び出すような処理がありました。
“`php
class Hoge {
/**
* @Flow\Inject
* @var \Neos\Welcome\Service\Interface\FugaInterface
*/
protected $fugaInterface;public function hogeMethod()
{
$this->fugaInterface->fugaMethod()
}
}
“`最終的に“`fugaMethod()“`を呼び出していますが、“`$fugaInterface“`はインターフェースのため
タイムアウトが頻発して泣きを見た話
こんにちは。[CYBIRD Advent Calendar 2023](https://qiita.com/advent-calendar/2023/cybird) 13日目担当の[@cy-seiyan](https://qiita.com/cy-seiyan)と申します。
12日目は[@cy-naull](https://qiita.com/cy-naull)さんによる「[面倒な手作業をPythonに任せる](https://qiita.com/cy-naull/private/e693fcd53a835c247fa9)」でした。
自動化、本当に大切ですね。全て自動化してしまえば手作業で行ってた時間を別の事に使えますしメチャクチャ捗りますね。## 自己紹介
私は2018年にサイバードに入社をし、主にイケメンシリーズのサーバサイドエンジニアとして活動をしております。直近ではイケメンシリーズの1タイトルでサーバサイドだけでなく入社以前より業務経験を積みたかったUnityを使用したクライアントサイドも担当し某スポーツ選手の如く二刀流のエンジニアを目指しイケメンシリーズを支えております。
画像やCSSを先読み、”WebLink”
[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の13日目の記事です。
## 画像やCSSを先読み、”WebLink”
[WebLink](https://symfony.com/doc/current/web_link.html)は、HTTP/2 Server PushやResource
Hintsを使って、画像を事前にロードできるコンポーネントです。HTML部分に影響があるので[Twig](https://qiita.com/ippey_s/items/a81cf9980ed0f8c63a3e)が必要です。※ [Resource Hints](https://qiita.com/ohakutsu/items/9b8d4ca39d23774c2e5a)について
※ [HTTP/2 Server Push](https://blog.redbox.ne.jp/http2-server-push-cdn.html)について##
Symfonyユーザー認証機能の実装について簡単に紹介!
[Symfony Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony) の13日目の記事です🎄✨
今回の記事では「Syfmonyでユーザー認証機能の実装」について紹介します!
## この記事のゴール
ユーザー認証の機能実装ができるというところを目指します!
## 1. 環境
– PHP:`v8.2.12`
– Symfony:`v7.0.1`
– MySQL:`v8.0.33`## 2. 作成済みリポジトリ
https://github.com/mako5656/202312-symfony-user-certification
## 3. ユーザー認証機能の実装について
### 3-1. プロジェクトの作成/設定
– 新規プロジェクト作成
“`
symfony new [プロジェクト名]
“``symfony server:start`して`https://127.0.0.1:8000`を開いたときに下記画面であれば無事作成できてます!
![スクリーンショット
【PHP】文字列連結 「結合演算子 vs 変数展開」
この記事は [PHP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/php) 7日目の記事です。
## はじめに
PHPで文字列連結をすることって頻繁にありますよね。
あなたは意図した使い分けが出来ていますか?### 1. 結合演算子
“`php
$lang = ‘PHP’;
$job = ‘エンジニア’;echo $lang . $job;
// 出力結果
// PHPエンジニア
“`
いわゆる「ドットつなぎ」ですね。
### 2. 変数展開
“`php
$lang = ‘PHP’;
$job = ‘エンジニア’;echo “{$lang}{$job}”;
// 出力結果
// PHPエンジニア
“`
詳しくは[公式ページ](https://www.php.net/manual/ja/language.operators.string.php)へ。## それでは本題に入ります
今回は、文字列連結のパフォーマンスについて実験を行います。
噂に
そうだ、年末大掃除にAIを取り入れよう
こんにちは。medibaでバックエンドエンジニアをしている@yyyです。
本記事は [mediba Advent Calender 2023](https://qiita.com/advent-calendar/2023/mediba) の13日目の記事です。## 年末大掃除をAIに手伝ってもらいませんか?
皆さんこんにちは、もう年末ですね。お部屋の隅々まで掃除は進んでいますか?
もし「まだ…」という方、今回はあなたの大掃除に猫の手を。## 今どきの断捨離はメルカリ、だけど…
メルカリの出品フローを見てみましょう
1. 写真の撮影
2. 商品のタイトルを書く
3. 商品の説明文を書く
…これってAIが成長を続ける今なら簡略化できるのでは?
## OpenAI (ChatGPT) が写真の認識をできるように
OpenAIは画像に含まれる情報を解釈し理解できる画像認識に特化したモデルを一般公開しました
参考:https://platform.openai.com/docs/guides/visionこれをつかって断捨離したいものからタイトルや説明文を考えてもらお
PukiWikiローカルサーバ環境構築(php/XAMPP導入手順 )
# PukiWikiとは?
公式サイトより
> A. 通称「Wiki」(正しくは:WikiWikiWeb)と呼ばれているツールの一つです。自前サーバーやレンタルサーバー等でも運用可能なツールです。
xサーバーは簡単にインストール出来る様な仕組みもあります。今回は開発環境を整えたいので、ローカル環境にPukuWikiをインストールしてみました。
# 開発環境
Windows10 Home
XAMPP(v3.3.0)
PukiWiki(v1.5.4)
PHP version 8.1.20### XAMPPを導入
https://www.apachefriends.org/jp/index.html
上記サイトからWindows向けのインストーラーをダウンロードしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3028739/7d7338ab-2716-bc4b-94b9-896f3cebf51a.png)
![image.png](https://qi
PHPを使ってオリジナルアプリからChatGPT APIを利用してみた
# 内容
ChatGPT APIを使って、簡単なアプリからChatGPTと連携してみたいと思います
# 目次
– [APIキーの取得](https://qiita.com/shogo30/items/a9f8d7d4fbd3574c9009#api%E3%82%AD%E3%83%BC%E3%81%AE%E5%8F%96%E5%BE%97)
– [PHPを使ってChatGPTと連携する](https://qiita.com/shogo30/items/a9f8d7d4fbd3574c9009#php%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6chatgpt%E3%81%A8%E9%80%A3%E6%90%BA%E3%81%99%E3%82%8B)
– [エラーでうまくいかない時](https://qiita.com/shogo30/items/a9f8d7d4fbd3574c9009#%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7%E3%81%86%E3%81%BE%E3%81%8F%E3%81%84%E3%81%8B%E3%81%A
PHP ぼやき日記 2023-12-12
– Qiita ガイドライン的にはスレスレな気もしつつ、まあ絶対に日記を書いてはアカンということもないと思うので、試しに日記というか継続的殴り書きをやってみる
– 毎日やるぞみたいな意気込み感はあまりないし、飽きたり疲れたりしたらやめるし、書く余裕がないくらい忙しい時は書かない# PHP_CodeSniffer (phpcs) の 3.8.0 が出た
– https://github.com/PHPCSStandards/PHP_CodeSniffer/releases/tag/3.8.0
– phpcs の現状は [The Future of PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer/issues/3932) の通り
– 17 年メンテしてきた Greg のひとが引退して jrfnl のひとがメンテナをやってくことに
– リポジトリは squizlabs/PHP_CodeSniffer から PHPCSStandards/PHP_CodeSniffer に移行
– packagist のパッケージの