- 1. デザインパターン 〜シングルトンパターン〜
- 2. [ 備忘録 ] Docker でPHP環境を作る(PHP8,Nginx,MySQL)
- 3. LaravelでSlack通知をする世界で一番簡単な方法
- 4. PHPの数値判定を色々な関数で試した結果 (一覧表あり)
- 5. PSR-12まとめ:PHPコーディングスタイルの標準化
- 6. 【備忘録】PHPUnitのよく使うAssertions一覧
- 7. MacBookの潜在能力を解き放て:驚くべき6つのmacOSアプリ
- 8. remi で入る PHP アップグレード
- 9. 【Drupal/個人開発】元号対応モジュールをコミュニティに公開しました
- 10. LaravelとEnum
- 11. Laravel10でS3の画像を扱う
- 12. 【Drupal】生年月日フィールドの元号表示対応(Field Formatterを実装してみよ)
- 13. 抽象データ型について考える
- 14. Laravelのdatabase-notificationsのデフォルトのテーブルを変更する
- 15. Source Code Viewer PHP
- 16. codeigniter4 画面によってLocaleを変更する
- 17. 新・Bランクレベルアップメニュー(PHP)レベルアップ問題集 【マップの扱い 1】マップの書き換え・1 マス
- 18. PHP dateをMysqlやPostgreSQLのdateタイプデータから曜日を取得する。
- 19. SQLクエリ管理をシンプルにするKoriym.QueryLocator
- 20. PhpSpreadsheetのgetCalculatedValue()で謎のFatal error(Formula Error)に遭遇
デザインパターン 〜シングルトンパターン〜
## シングルトンパターン
クラスのインスタンスが1つだけということを保証し、
そのインスタンスへグローバルなアクセスポイントを提供する。
汎用的に使われるヘルパー関数、ユーティリティ関数などに使われる。例)
オフィスに1台だけコーヒーメーカーがあるとする。これにより以下のメリットがある。
– 一貫性
– コーヒーメーカーが一つしかないため、どこからだれが作っても同じコーヒーが作れる
– リソース節約(保守性)
– コーヒーメーカーを1台だけにすることで、会社のコストやスペースの節約になる
– グローバルアクセス
– オフィスのどこからでも、そこに行けばコーヒーメーカを使えるため便利### コードを書いてみる
“`PHP
class CoffeeMaker {
// 唯一のインスタンスを保持する静的プロパティ
private static $instance;// プライベートコンストラクタで外部からのインスタンス化を防ぐ。
private function __construct() {
/
[ 備忘録 ] Docker でPHP環境を作る(PHP8,Nginx,MySQL)
## 目次
– [1 構築後のイメージ](#1-前提条件)
– [2 前提条件](#2-前提条件)
– [3 ディレクトリ構造](#3-ディレクトリ構造)
– [4 環境構築(実際の作業)](#4-環境構築)
– [5 コンテナの止め方・再起動](#5-コンテナの止め方)
– [6 各ファイルの説明](#6-各ファイルの説明)
– [7 エラー時の対処法(未完成)](#7-エラー時の対処法)
## 1. 構築後のイメージ
– localhost:8000/ でindex.php が表示される
– composer インストール済み
– データベース(MySQL)に接続できる## 2. 前提条件
– **docker エンジンが実行済みであること**
docker DesktopでDockerエンジンを起動するのがいちばん簡単な方法ですが、企業での利用では有償になるなどDocker Desktop を使用しないでDockerエンジンを使用する方法が知りたい場合は以下の方で解説しています。
・~~[Docker Desktop を使わずにDocker を使う!]()~~
– **l
LaravelでSlack通知をする世界で一番簡単な方法
LaravelでSlack通知するためにFacedeを設定したり色々ややこしいことをしている記事があるが、Laravelには標準でSlack通知できる機能が備わっています。便利。
# 手順
1 . Slackの Webhook URLを発行
https://api.slack.com/apps2 . `.env` に以下を追加
“`vim:.env
LOG_SLACK_WEBHOOK_URL=”1.で発行したURL”
LOG_SLACK_USERNAME=”Hello Slack”
LOG_LEVEL=”debug”
LOG_STACK=single,slack
“`3 . `php artisan config:clear` で .env の設定更新
4 . `src/config/slack.php` を作成し、以下のように追加
“`php:src/config/slack.php
env(‘LOG_SLACK_WEBHOOK_URL’, ”),
‘sender_name’ => en
PHPの数値判定を色々な関数で試した結果 (一覧表あり)
#### PHPで入力値や計算値が数値かどうかを判定するときにどの関数を使ったらいいの?
##### 時間がないひと向けの結論:
__A1__: 文字列の’0’が数値とされてよい場合⇒ “`is_numeric()“`でOK。
“`php
if (is_numeric($a)) {…}
//$aが数値(っぽい値、例えば$a=’0′)のときは処理する
“`
__A2__: 文字列の’0’を数値にしてほしくない場合⇒ “`is_int()“`と“`is_float()“`の論理和を使う。
“`php
if (is_int($a) || is_float($a)) {…}
//$aが厳密に数値であるときのみ処理する。$a=’0’のときは処理しない
“`#### 各種is_…関数の挙動の比較
PHPで入力値や計算値が数値かどうかを判断するときにどの関数を使ったらいいの? と思って調べたのだが、明確な答えが見つからなかったので自分でやってみた。結果、想像していた通りになったりならなかったりして面白かったので紹介したい。エントリーメンバーはこちら。1. `
PSR-12まとめ:PHPコーディングスタイルの標準化
:::note
AI要約
– PSR-12はPHPのコーディングスタイルを標準化し、コードの可読性と保守性を向上させるためのガイドラインです
– PHPファイルはUnixスタイルの改行(LF)を使用し、空白行ではなく有効なコードやコメントで終了する必要があります
– キーワードは小文字で記述し、引数や戻り値には一貫して型宣言を使用します
– クラスやメソッドの左中括弧 { は次の行に置き、クラスプロパティにはアクセス修飾子(デフォルトはprivate)を明示します。
– 演算子、条件演算子、クロージャーなどの書き方には特定のスタイルルールがあり、コード例を参照して適切に記述します
:::
## 目的
開発メンバーが書いたコードを読む際の脳内負荷を減らすこと
一定のコーディング規則があれば、コードの読みやすさが向上します
そんなコーディング規則の1つでもあるPSR-12を超ざっくりと説明していきます## 諸注意
生成AIで要約をしていますので原文の見出しとは異なったまとめになっております。
なお、主観的な
【備忘録】PHPUnitのよく使うAssertions一覧
# はじめに
こんにちは、エンジニアのkeitaMaxです。
PHPUnitのAssertionsについて自分なりにまとめてみました。# Boolean
### `assertTrue()`
中身がtrueであることを確認するものです。
“`php
//ok
assertTrue(true)
//ng
assertTrue(false)
“`### `assertFalse()`
中身がfalseであることを確認するものです。
“`php
//ok
assertTrue(true)
//ng
assertTrue(false)
“`
# 2つの値が正しいことの確認### `assertSame()`
`===`と同じように第一引数と第二引数が同じであることを確認します。
“`php
//ok
assertSame(“10″,”10”)
//ng
assertSame(“10”,10)
//ng
assertSame(“10″,”30”)
“`### `assertEquals()`
`==`と同じように第一引数と第二引数が同じであることを確認します。
`
MacBookの潜在能力を解き放て:驚くべき6つのmacOSアプリ
さて、本題に入りましょう。あなたのMacBookはスタイリッシュなマシンですが、適切なアプリがなければ、ガレージに駐車されたフェラーリのようなものです。テクノロジー中毒者であり、認定されたApple信者として、私は常にMacをパワフルにするアプリを探し求めています。では、私が見つけた、MacBookのゲームを本当にレベルアップさせたアンダーザレーダーなアプリを紹介します。
### [ServBay — 開発環境の万能管理者](https://www.servbay.com/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782463/0ea4b994-9e38-431c-c42e-b68209d5eb88.png)ウェブ開発者として、私の主な焦点はコーディングにありますが、[デプロイメント環境](https://www.servbay.com/)の処理には多くの時間がかかります。特に初心者にとっては、一度で成功することは稀です。ここでServBayが登場し、ユーザーフレンドリ
remi で入る PHP アップグレード
# 自己紹介
乙井です。はじめまして。(仙水忍風)
Gakken LEAPという EdTech の会社でよろずやエンジニアをやっております。
本稿では remi リポジトリで入れる PHP アップグレードを紹介します。# 目次
– [自己紹介](#自己紹介)
– [目次](#目次)
– [前書き](#前書き)
– [前提条件](#前提条件)
– [コマンド羅列(忙しい人向け)](#コマンド羅列忙しい人向け)
– [コマンド補足](#コマンド補足)
– [説明付き手順](#説明付き手順)
– [トラブルシューティング](#トラブルシューティング)
– [違うリポジトリで入ってしまった場合](#違うリポジトリで入ってしまった場合)
– [既存モジュールが残っている場合](#既存モジュールが残っている場合)
– [`php -v` で古い PHP バージョンが表示されてしまう場合](#php–v-で古い-php-バージョンが表示されてしまう場合)
– [モジュールの導入が失敗する場合](#モジュールの導入が失敗する場合)
【Drupal/個人開発】元号対応モジュールをコミュニティに公開しました
:::note warn
前回、前々回の記事をご覧の方は話が早いと思います。
(続編です。元号シリーズ最終回です。)
:::
https://qiita.com/umekikazuya/items/31eabf4f3749eb7a3d16https://qiita.com/umekikazuya/items/82f7383c652c6f0c0dd5
ぜひそちらをご覧ください。
ざっとでもいいので見ていただけると幸いです。## はじめに
この度、コミュニティにModuleを公開してみました🎉🎉https://www.drupal.org/project/japanese_era_formatter
前回のチュートリアル記事よりも機能をパワーアップしましたので、今回は使い方紹介記事を書いてみました。
## どんな機能なの?
日付データの元号対応を行います。
「シンプルな元号表示」「元号が始まって何年経ったか」など、日本独自のフォーマットをサポートするモジュールです。イメージですが、以下全部対応してます。
– 「2000年11月15日」
– 「2000年(平成.12)
LaravelとEnum
# はじめに
PHPでEnumが使えるようになって久しいですが、LaravelはEnumをどこまでサポートしているのか気になったので調べてみました。
※調べたLaravelのバージョンは11です
※この記事ではEnumについては解説していません# Routing
ルート定義のルートセグメントの値にEnumの値が含まれていた場合のみルートを呼び出すことができます。“`php
use App\Enums\Fruits;
use Illuminate\Support\Facades\Route;Route::get(‘/fruits/{fruits}’, function (Fruits $fruits) {
return $fruits->value;
});
“`
ルートセグメント「{fruits}」が、Enumの値に含まれていないものだった場合は404のHTTPレスポンスを返します。# Validation
ValidationのルールのEnumは対象フィールドの値にEnumの値が含まれるかを検証します。“`php
use App\Enums\Fru
Laravel10でS3の画像を扱う
Laravel10でS3に画像をアップロードしたり、S3の画像を表示する処理を書いたのでメモとしてまとめておくことにしました。
## S3バケットの用意
バケットを作成します。バケット名を入力し、パブリックアクセスのチェックを外します。これ以外はデフォルトのままバケットを作成します。
![スクリーンショット 2024-06-10 23.43.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295926/3c50ae68-22f6-4619-dd67-77580d038fb4.png)## IAMの作成
S3を操作するためのIAMユーザーを作成します。ポリシーは必要なものをアタッチすれば大丈夫です。
![スクリーンショット 2024-06-10 23.48.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295926/e11349c8-ae68-bc99-8fc6-ed0927bb518e.png)
【Drupal】生年月日フィールドの元号表示対応(Field Formatterを実装してみよ)
## はじめに
Drupalの日付や時刻を扱う際、簡単なものであれば `環境設定` > `地域と言語`内の「日付と時間のフォーマット」から、日付や時刻のFormatを作成することができますよね。↑↑
がピンとこない人はこちら![スクリーンショット 2024-06-08 23.16.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/bad5d901-99a3-c23e-3fda-a25f2e23717b.png)
ただ、和暦表示や年度変換など、Drupal標準だと対応できないものもあります。
こんな場面で対応できるのが、「FieldFormatter」です。
今回は「Field Formatter」の実装について触れてみたいと思います。
## 0. 前提(対象)
– Drupalのモジュール開発をしたことがある
– PluginAPIへの理解## 1. Field Formatter とは
抽象データ型について考える
## 抽象データ型
抽象データ型を自分なりに調べてみたのでまとめてみる。誤っていたらコメントで指摘して欲しいです。色々調べてみたのですが、以下が一番しっくりきました。今から私の行う説明はほとんど以下に記載されている内容を自分なりに解釈したものです。まだ読まれていない方は先に読んでみてください。
https://qiita.com/ukyo-su/items/1d928bc3edb73c20e577
### 抽象データ型を歴史からひも解く
まず初めに皆さんよく使われると思うのですが、手続き(関数)を使って処理を抽象化した手続き型プログラミングが出てきました。
次にデータの隠蔽をという考えが出てきました。データの隠蔽を行うにあたって、隠蔽するデータを利用するロジックも併せて隠蔽する必要があるので、結果としてモジュールが生まれ、機能の提供側とクライアント側に分けることが出来ました。
この提供側をクラスを利用して型として表現することで複製可能(インスタンス)だったり、同じ型同士で比較可能・交換可能・計算可能などの要素を持たせて、言語やIDEや静的解析ツールの恩恵を受けるよう
Laravelのdatabase-notificationsのデフォルトのテーブルを変更する
# バージョン
* Laravel 11
* PHP 8.3# デフォルトの挙動
まずデフォルトのnotificationsテーブルへのデータ保存 + メール送信が動くようにします。
https://laravel.com/docs/11.x/notifications#database-notifications
`php artisan make:notifications-table`コマンドで通知データを保存するためのmigrationファイルが作成できます。
“`php
Source Code Viewer PHP
# Source Code Viewer PHP
# 概要
・PHP + GeSHi で書かれた、ソースコードビューワー CGI を作りました。
・Linuxサーバー上の各種プロジェクトのソースコードを言語ごとにシンタックスハイライトの色分けで表示することが出来ます。
・一応検索も可能です。
—————————————————–
# 設置方法:・まず、Apache2 + PHP8 が稼働している Linuxサーバー環境があるものとします。
・例示として、このPHPプログラムを
/var/www/html/pub/viewer/
に展開してください。・次に、閲覧させたい各種プロジェクトのルートディレクトリを設定します。
例示として、
/var/www/html/pub/Src/
ディレクトリを作成して、その下に
<プロジェクト名>/<プロジェクトのファイル(ディレクトリ含む)>
を配置します。
<プロジェクト名> のディレクトリは、シンボリックリンクでも大丈
codeigniter4 画面によってLocaleを変更する
日本語と英語のお問い合わせが必要だったので調査しました。
Localeを変更したいControllerのinitControllerに以下を追記$language = \Config\Services::language();
$language->setLocale(“en”); //英語これで
app\Language\en\Validation.phpを見に行ってくれます。
新・Bランクレベルアップメニュー(PHP)レベルアップ問題集 【マップの扱い 1】マップの書き換え・1 マス
#### 問題
https://paiza.jp/works/mondai/b_rank_new_level_up_problems
#### 解答
にょっす:raised_hand::cow:
入力を受け取り、変えたい座標の文字列を条件式で変換するだけです“`php
PHP dateをMysqlやPostgreSQLのdateタイプデータから曜日を取得する。
サイトにスケジュール等を日付別に表示する際、日付の横に(日)の様に曜日名を表示する際の記述例です。
“`
$youbi = array(“日”, “月”, “火”, “水”, “木”, “金”, “土”);
echo “(“.$youbi[date(‘w’, strtotime($row[‘‘]))].”)”;
“`
参考になればと思います。
SQLクエリ管理をシンプルにするKoriym.QueryLocator
# SQLクエリ管理をシンプルに
PHP開発者として、コード内でSQLクエリを管理するのはプロジェクトが成長するにつれて煩雑で厄介になることがあります。PHPコード内に直接SQLクエリを埋め込むと、可読性と保守性が低下することがあります。そこで役立つのが[Koriym.QueryLocator](https://github.com/koriym/Koriym.QueryLocator)です。このライブラリは、SQLクエリを別ファイルに保存し、必要に応じて読み込むことで、クエリ管理を効率化します。
この記事では、Koriym\QueryLocatorを使用してSQLクエリをより効率的に管理する方法について説明します。
## なぜQueryLocatorを使用するのか?
SQLクエリを別ファイルで管理することにはいくつかの利点があります:
– **可読性の向上**:PHPコードはロジックに集中でき、SQLが混在しないため、コードがクリーンで読みやすくなります。
– **メンテナンスの容易さ**:SQLクエリを更新する際にPHPコードを変更する必要がなく、SQLファイルだけを修正
PhpSpreadsheetのgetCalculatedValue()で謎のFatal error(Formula Error)に遭遇
最近ExcelをPHPに読み込んであれやこれややることが多いのだが、その中でハマった話。
主要部分だけピックアップするとこんな感じのスクリプト。
“`test.php
require(‘/lib/vendor/autoload.php’);
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
$file = ‘/var/www/file/test.xlsx’;$reader = new XlsxReader();
$spreadsheet = $reader -> load($file);
$worksheet = $spreadsheet -> getSheetByName(‘test’);
echo $worksheet -> getCell(‘D60’) -> getCalculatedValue();
“`
こいつを走らせてみたところ
“`
Fatal error: Uncaught PhpOffice\PhpSpreads