PHP関連のことを調べてみた

PHP関連のことを調べてみた

レガシーコードをなるべく良くする働きかけ

本記事は、エキサイトホールディングス Advent Calendar 2023の10日目のものになります。
リンクは[こちら](https://qiita.com/advent-calendar/2023/excite-hd)

## レガシーコードとは

>**時代遅れになってしまった古いソースコード。特に、内容が複雑で、ある開発者独自の仕様で書かれたもの。**
[コトバンクのデジタル大辞泉から引用](https://kotobank.jp/word/%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89-2133392)

要するに書いてから時が経っており、内容が複雑でわかりにくいコードを全般的に指すのかな…

別の言葉では…

>**レガシーコードとは、単にテストのないコードである。**
[レガシーコード改善ガイドから引用](https://www.shoeisha.co.jp/book/detail/9784798116839)

なるほど、テストコードがなければレガシコードだと…

元記事を表示

Auth0 + Laravelで簡単Passkey実装

こんにちは!
社内でドキドキしながら「久しぶりにアドベントカレンダーするよ!」と言ったら、速攻で25日のカレンダーが埋まって一安心している株式会社Fusicの櫻川です。

この記事は[Fusic Advent Calendar 2023](https://qiita.com/advent-calendar/2023/fusic)の10日目の記事です。
この後もがっつりエンジニアからエンジニアではない人まで、様々な記事が上がってくるのでお楽しみ!

昨今の話題はChatGPTをはじめとする生成系AIでしょうか?
今回はChatGPTによって隠れてしまったけど、とても大事なPasskeyの実装について書いてみようと思います。

## Passkeyとは

すごくざっくり行ってしまうと生体認証などを活用してパスワードレス認証方式です。
ちょっと前に流行った、WebAuthnの改善版だと思ってください。

最近だと[GitHubがPasskeyに対応](https://github.blog/jp/2023-10-12-passkeys-are-generally-available/)したの

元記事を表示

Vonage × LaravelでSMS送信&パスワードなし認証を実装してみた

# はじめに

Vonage は CPaaS(Communications Platform as a Service)のプロバイダーで、SMS送信や音声通話などのコミュニケーション機能をAPI連携で実装できるサービスを提供されています。

本記事では Vonage から提供されている API を用いて SMS送信とパスワードなし認証を実装してみました。

# 開発環境

Vonage では様々なプログラミング言語の SDK が用意されています。

https://developer.vonage.com/ja/tools

今回は PHP のフレームワークである Laravel を用いて実装します。

* PHP v8.2
* Laravel v10.x

:::note info
Vonage API を用いた実装方法を確認することが目的であるため、本記事では画面を作成せずに Artisan コマンドを作成し、簡略化を図っております。
:::

Laravel で Vonage を使用するためのパッケージとして、Vonage のサイトで紹介されている `vonage/vonage-

元記事を表示

12/08にリリースされたFrankenPHP触ってみた

# FrankenPHPってなに?
Go言語で書かれたモダンなPHPアプリケーションサーバーだそうです。
サイトはこちら👇
https://frankenphp.dev/docs/

![スクリーンショット 2023-12-08 12.12.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14268/9daeaeaa-3cc5-6732-7bbb-ee8f94920972.png)

[ドキュメントサイト](https://frankenphp.dev/docs/)も作成されていました。

AdventCalendarの締め切りも近づいてたので、ちょっと触ってみるかということで触ってみました。

# インストール
インストールというよりは、Dockerで動かしてみることができるようです。

“`bash
$ docker run -v $PWD:/app/public \
-p 80:80 -p 443:443 \
dunglas/frankenphp
“`

Go言語で書かれ

元記事を表示

【Laravel】paginate() + distinct() で総件数が重複レコード分多くなる問題を回避(おまけ:PRの議論がアツい)

この記事は、[Qiita AdventCalendar2023 ラクスパートナーズ](https://qiita.com/advent-calendar/2023/rakus-partners)10日目の記事です。
この記事では、私が業務で遭遇したLaravel のpaginate() と distinct() を組み合わせたコードが、「**取得したレコードは重複削除してあるのに、総件数(ページ数)は重複削除されていない**という結果を表示した」問題を解決する方法を紹介します。

取得したレコード28, 1ページあたり10件なのに…
![1AFF45FA-A70C-4328-8457-66D821068687.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2846236/d0936c66-3076-3e25-fe19-3307d61e25b3.png)
(ちなみに重複削除しないと196レコードで計算が合う)

また、この記事を書くに当たって[Laravel へ今回の方法を実装した有志のプルリクエスト

元記事を表示

なぜあの日の私は「メソッドは常に静的に定義した方が良い」と思ってしまったのか

OOP(オブジェクト指向)言語の実践経験者各位におかれましてはとんでもないタイトルに映るかと思います。
実際自分自身でもゾッとします。主語が大きめなのもゾッとしますね。大丈夫かな。

でも、恥ずかしい話、以前は本気で思ってました。

**いついかなるとき[^1]** でも、 OOPに於いては**動的(dynamic)なメソッドより静的(static)なメソッドのほうが様々な面で優れている**って。

[^1]:タイトルの思考はここが大前提になっているためご注意ください。終盤に述べている通り、staticメソッドは適切に運用するタイミング・処理系は確実に存在します

…似た思考の方は、そのプロダクトの危険信号が思考に反映されているかもしれません。

# 誤った思考をたどるサンプルコード[^4]

[^4]:個人的な都合上、PHP 8.1.9で可能な記法で表記します。また、こちらも個人的な思想として、getterに相当するメソッドにget接頭辞は付けません。

“`php: staticメソッドを使いたくなってしまったクラスの例

元記事を表示

PHPでLINEログインを実装する方法

本記事は、[めんどい太郎の Advent Calendar 2023](https://qiita.com/advent-calendar/2023/mendoitarou_first_calendar) 10日目の記事です。

# はじめに

この記事は初心者が書いています。

皆さんはLINE使ってますか?

LINEは日本では主要な連絡ツールで多くの人が使っています。

そこで、WebでLINEログインを実装する方法を紹介します。

:::note alert
この記事で紹介するコードは不完全であり、テストのためにセキュリティ面を考慮してない実装があります。
:::

LINEのドキュメントは非常に見やすいので、この記事を見るよりもいいかもしれません。

https://developers.line.biz/ja/docs/line-login/integrate-line-login/

# チャネルの作成

まずは[LINE Developper Console](https://developers.line.biz/console/)にアクセスします。

アクセスすると

元記事を表示

画像やJSをロード、”AssetMapper”

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の10日目の記事です。

## 画像やJSをロード、”AssetMapper”

[AssetMapper](https://symfony.com/components/AssetMapper)はアセットのマッピングと、公開領域へのファイルの生成を行うコンポーネントです。
Symfony 6.3から導入された新しいコンポーネントですが、実はSymfonyでのフロントエンドの扱いが大きく変わるコンポーネントとなっており、Symfony公式ドキュメントでは[Webpack Encore](https://symfony.com/doc/current/frontend/encore/index.html)ではなく、AssetMapperを推奨しています。

### インストール

“`shell
composer require symfony/asset-mapper
“`

asset

元記事を表示

LaravelでのMVCを理解する

## はじめに
Laravel は何ですか??
Laravel は、MVC Web アプリケーションを開発するために PHP で書かれた無料のオープンソース Web アプリケーション フレームワークです。Laravel は、拡張可能な PHP ベースの Web サイトや Web アプリケーションを大規模に作成するのに役立つ使いやすい Web フレームワークです。
## MVC ARCHITECTURE
Laravel フレームワークは、Web アプリを作成するための MVC アーキテクチャ パターンを促進します。 このパターンは、スケーラブルで保守可能な Web アプリを構築する方法を指定する一連のルールを指定します。
Laravel MVC パターンは、開発者が非構造化コードに秩序と一貫性をもたらすのに役立ちます。 MVC アプローチにより、小規模および大規模な Web アプリケーションの開発も容易になります。
## MVCの理解
M = 「Model(モデル)」
V = 「View(ビュー)」
C = 「Controller(コントローラ)」  をそれぞれ意味しています。
![im

元記事を表示

testing

testing

元記事を表示

Log4php 使用方法(自分用、詳しくは公式サイトへ!!)

# はじめに

現在、自身が使用しているプロダクトにlog4phpを導入しようとしています

しかし、使い方がわからなかったので調べてみることに。

※極限まで突き詰めるつもりはありません!!

# 使い方

1. まずモノをダウンロード

[Apache log4php – Download – Apache log4php](https://logging.apache.org/log4php/download.html)

composer使っても行けるみたいです。

2. ファイルをプロダクトの任意ディレクトリ配下に解凍展開
3. プロパティの設定
4. 設定ファイルの読み込み
5. プロダクトのファイル内にlog4phpの処理を差し込んで使用

※番号1、2 は割愛します。

## 3 プロパティの設定

設定ファイルの記載方法について(自分はここに苦戦しました)

log4phpを動かすうえで、いくつか値を設定する必要があります。

今回はわかり易そうな iniファイル形式を採用

以下の要件でログを出力します。

– ファイルに追

元記事を表示

Drupal 10.2の開発者向けアップデート

[Drupal Advent Calendar 2023](https://qiita.com/advent-calendar/2023/drupal) の6日目です。

前日の投稿ではウミ菊池さんから[非エンジニア視点での Drupal 10.2 変更点ピックアップ](https://www.studio-umi.jp/blog/7/793)が紹介されていましたので、本記事ではDrupal 10.2に含まれる開発者向けのアップデート(の中から私が理解できたもの)をいくつか紹介しようと思います。執筆時点の最新バージョンである[Drupal 10.2.0-rc1](https://www.drupal.org/project/drupal/releases/10.2.0-rc1のリリースノート)を参照しています。

## 新機能

### プラグインタイプで、Annotationsの代わりにAttributesが利用できるように

Drupalでは、ブロックやViewsで利用されているプラグインシステムでDoctrine Annotationsが活用されています。PHP 8から言語ネイテ

元記事を表示

初めてのチーム開発で Best Award を受賞した話

# 目次
[1.はじめに](#1-はじめに)
[2.メンバー構成や役割について](#2-メンバー構成や役割について)
[3.チーム開発 week が始まるまでに行ったこと](#3-チーム開発weekが始まるまでに行ったこと)
[4.追加設定](#4-追加設定)
[5.ガントチャートによる進捗管理](#5-ガントチャートによる進捗管理)
[6.タスク管理機能の実装](#6-タスク管理機能の実装)
[7.デイリポ 機能の紹介](#7-デイリポ 機能の紹介)
[8.振り返り](#8-振り返り)

# 1. はじめに
私は2023年10月より、内定直結型エンジニア学習プログラム「アプレンティス」に2期生として参加しています。

[【働きながら学べる】エンジニア実習 アプレンティス](https://apprentice.jp/)

その中で初めて取り組んだチーム開発が先日発表会を迎え、なんと、プロのエンジニアの方々が選ぶ **Best Award を受賞**することができました!!

一連の開発過程と、完成したアプリケーションをご紹介しつつ、良かった点、反省点を振り返り、学びを整理しようと思い

元記事を表示

PHP nullable な型、union 型について

# 本記事を書こうと思った動機
本記事では、
* **nullable な型**(データ型の前に **`?`** を付与)
* **union 型**(**`|`** で複数のデータ型を結合)

について紹介する。

ある時、有名なライブラリのコードを解析していて、上記 2 つを使用した部分をよく見かけた。私のように「ライブラリを提供する側ではなく、使用する側」の立場が多い人にとっては、使う場面が少なく新鮮なコードに見えた。**この機会を逃したら、おそらく勉強しないだろうと思った**ので、その意味をはっきりさせておきたかった。

# nullable な型
引数や戻り値の型宣言で、nullable 指定ができる。PHP マニュアルによると、
> PHP 7.0.x から PHP 7.1.x への移行

時の新機能のようだ。**データ型の前にクエスチョンマーク (`?`) を付与することで、指定したデータ型に加え、null も渡せるようになる**。下記に、引数に (`?`) を付与しない場合、付与する場合、戻り値に (`?`) を付与する場合を示す。
### 引数に (`?`) を付与し

元記事を表示

symfonyでvalidationのメッセージを日本語化したメモ

https://symfony.com/doc/current/validation/translations.html

基本は ↑ こちらに沿って進めればOK

https://github.com/symfony/validator/tree/7.0/Resources/translations

symfony/translation で配置されるファイルは ↑ こちら

https://symfony.com/doc/current/translation.html#translation-resource-file-names-and-locations

↑ こちらにあるとおり、 validators.ja.xlf を translations/ ディレクトリにコピーします

ただ、各リンクのとおりに進めても、invalidのメッセージは英語のままでした

ファイル名の形式が `translation_domain.言語.xlf` となっているみたいで、
validator.yaml の translation_domain と合わせる必要があります

“`diff

元記事を表示

Laravel 9 から Google Drive API で共有ドライブを操作する

:::note
Laravel Advent Calendar 2023 9日目の記事です🎄
:::

## はじめに
みなさん、お久しぶりです!リバネス開発チームのトミー(@tomyf)です!

今回は Google Drive の共有ドライブをWebサービスから管理したいという要望があったので、動かす所まで検証しました。

システムの概要としては、複数のGoogleドキュメントをまとめて、冊子にする工程を補助するアプリケーションとなっています。
APIを使って共有ドライブを操作する目的は、フォルダやファイルの構成と名称を執筆者の裁量に任せず、システム側で制御して管理しやすくするためです。

サービスアカウントの認証情報をJSONファイルで管理している記事が多数見受けられますが、今回は Heroku でホスティングすることを想定しているため、JSONファイルではなく環境変数で管理するようにしています。

## 環境
– Docker v24.0.6
– Laravel v9.25.1
– PHP v8.0.2
– google/apiclient v2.15.1

## Google

元記事を表示

【PHP】nullを含む式についての評価まとめ

## はじめに

この記事ではPHPにおけるnullと他の型との比較をまとめます。
先日、nullを含む式が意図しない挙動をしインシデントが発生してしまったので、その際調べたことを主にまとめています。

※この記事では、PHP8を前提にしています。バージョンによって異なる型同士の比較の評価が異なるためご注意ください。

## ① nullとString型

この場合は、null を “” に変換して数値または文字として比較します。よって以下のような結果になります。

“`php
var_dump(null < '0'); // bool(true) var_dump(null < '1a2'); // bool(true) var_dump(null < 'こんにちは'); // bool(true) var_dump(null < ''); // bool(flase) var_dump(null == '0'); // bool(flase) var_dump(null == '1a2'); // bool(flase) var_dump(null == 'こんにちは'); //

元記事を表示

issetだらけのコードはやめてください。

## はじめに

メタップス(Metaps)アドベントカレンダーの第9日目の記事です。

非常に多くのphpコードで、`isset`を乱用していると思います。どのケースで`isset`を使用すべきか、`isset`をなぜむやみに使用してはならないのか、その理由を理解しましょう。

`isset`が不適切に使用されたコードを見るたびに好ましくない感じがありました。この理由を明確にして`isset`を乱発するコードを最小化するためにこの記事を作成しました。

## 展開

### 良いコードは何か?

良いコードとは、解釈の幅を狭めることです。解釈できる場合の数を減らすことで、コードを迅速かつ明確に理解できます。

例えば、phpで`const CONSTANT_VALUE = ‘不変値’`とコードを使用すると、この値は固定されており、変更できないことが分かります。変数とは異なり、定数は最初に宣言された時点の値と異なる可能性がないため、定数の変更過程を追跡する必要はありません。定数を使用することは、値の変更可能性の判断を減らすことで、解釈の多様性を減らすことです。

迅速かつ明確に理解でき

元記事を表示

学校に自作のポータルサイト的なものを導入したかった話

こんにちは。
今日は学校に自作のポータルサイト的なものを導入したかった話をしようと思います。
# プロフィール
– 小6
– HTMLとかPythonが得意分野
– なんかしようとして個人事業主になった
– [ブロガー](https://ogatomo.net/)
# 事の発端
以前からJavascriptなどで便利系のツールを作るのが好きだったのでそれを一括で利用できるポータルを作ろうとしたのが始まり。
# Ver.1
PHPとCSSにBulmaを利用したなかなかいいデザイン。ログインはわかりやすく数字4桁を採用。(めんどいからMySQLは使わずすべてテキストファイルで管理)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518724/1f069118-22f9-a1ca-e607-dc88f78c0ead.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518724/0

元記事を表示

式を評価、”ExpressionLanguage”

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の9日目の記事です。

## 式を評価、”ExpressionLanguage”

[ExpressionLanguage](https://symfony.com/doc/current/components/expression_language.html)は、文字列の式を評価してくれるコンポーネントです。Symfony以外でも使えます。

### インストール

“`shell
composer require symfony/expression-language
“`

### 使い方

“文字列の式を評価”というのはなかなか伝わりにくいかなと思うんですが、実際のコードを見れば一目瞭然かなと思います。

“`php
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;

$expressionLanguage

元記事を表示

OTHERカテゴリの最新記事