- 1. 【PHP】西暦から和暦・和暦から西暦を算出する
- 2. あまり知られていないLaravelのコレクションメソッド #1: macro
- 3. PHPを使ってみよう:動的ウェブ開発の第一歩
- 4. OSSに初めてコントリビュートした話
- 5. MAMPで500エラーが出た時のエラーログを確認する方法
- 6. デザインパターン 〜ストラテジパターン〜
- 7. デザインパターン 〜ファクトリパターン〜
- 8. デザインパターン 〜シングルトンパターン〜
- 9. [ 備忘録 ] Docker でPHP環境を作る(PHP8,Nginx,MySQL)
- 10. LaravelでSlack通知をする世界で一番簡単な方法
- 11. PHPの数値判定を色々な関数で試した結果 (一覧表あり)
- 12. PSR-12まとめ:PHPコーディングスタイルの標準化
- 13. 【備忘録】PHPUnitのよく使うAssertions一覧
- 14. MacBookの潜在能力を解き放て:驚くべき6つのmacOSアプリ
- 15. remi で入る PHP アップグレード
- 16. 【Drupal/個人開発】元号対応モジュールをコミュニティに公開しました
- 17. LaravelとEnum
- 18. Laravel10でS3の画像を扱う
- 19. 【Drupal】生年月日フィールドの元号表示対応(Field Formatterを実装してみよ)
- 20. 抽象データ型について考える
【PHP】西暦から和暦・和暦から西暦を算出する
[西暦から干支・干支から西暦を算出する](https://qiita.com/Kokusui/items/79da562e4e979aea1825 “西暦から干支・干支から西暦を算出する”)に続き暦ネタ。
#### 西暦から和暦を算出
“`seireki2wareki.php
function seireki2wareki(string $datestr = NULL) {
//datestrで与えられた年月日(の属する暦年)の和暦年を返す ただし1968年~2100年の範囲
if (!$datestr) {$datestr = date(“Y-m-d”);} //datestrが空欄の場合は今日の和暦
else {
$datestr = mb_convert_kana($datestr, ‘n’); //全角数字は半角に直す
if (is_numeric($datestr = str_replace(‘年’, ”, $datestr))) {
//datestr(「年」がついていたら取る)が数値文字列の場合(=年のみで月日が入ってない場合)
if (
あまり知られていないLaravelのコレクションメソッド #1: macro
# 背景
Laravelのコレクション、使いこなしていますか?
以下の記事を先程読んで面白いと思いました。
「あなたは使ったことがないLaravelのコレクションメソッド10選」
https://backpackforlaravel.com/articles/tips-and-tricks/top-10-collection-methods-you-have-never-used
ただし、英語で書かれていますし、各メソッドの説明が不十分に感じました。
ということで、以上の記事を翻訳する上で、それぞれのメソッドの活用方法を説明していきたいです!
今回はCollectionのmacroメソッドを解説します!# macro: 全てのコレクションにカスタムメソッドを追加する
### 概要
スタティックメソッドになり、以下のように呼び出すことができます。
“`php
Collection::macro(‘カスタムメソッド’, function ($arg1, $arg2) {
// カスタムメソッド処理
});
“`定義したカスタムメソッドはどのコレクションで
PHPを使ってみよう:動的ウェブ開発の第一歩
# PHPの基礎
こんにちは、皆さん!今日は、PHPの基礎について一緒に学んでみましょう!PHPは、ウェブ開発でよく使われるサーバーサイドのプログラミング言語です。内定先の企業でもこの言語を使っていくので今回はPHPの基礎についてまとめてみようと思います。
## PHPって何?
まず最初に、PHPって何か知っていますか?PHPは「Hypertext Preprocessor」の略で、動的なウェブページを作成するための言語です。例えば、ログインフォームや掲示板、ショッピングカートなど、ユーザーが操作するインタラクティブなウェブページを作るのに使われます。
## PHPの基本構文
PHPのコードは、通常はHTMLの中に埋め込まれます。PHPのコードブロックは、`` というタグで囲まれます。さっそく簡単な例を見てみましょう。
“`php
PHPの基本
OSSに初めてコントリビュートした話
## なぜコントリビュートしたのか?
普段色々なOSSにお世話になっているので、コントリビュートで貢献したい!と考え始めたことがきっかけです。## 今回コントリビュートしたOSS
openEMRという電子カルテの管理などの医療業務系のOSSです。
公式サイト:https://www.open-emr.org/## コントリビュートの流れ
ざっくりこんな感じです。
OSSごとに個別のルール・手順などがあるので、行ってみる場合はリポジトリのREADMEやInsightsなどのコントリビュート関連のドキュメントをまず確認してください。・やりたいIssueを取る
・リポジトリをFork
・ブランチを切る
・対応してPR作成
・レビュー
・マージ(レビューでフィードバックがあれば対応)## コントリビュートの概要
今回コントリビュートで修正したのは[こちらのIssue]()で、新しいユーザーを追加する際に、emailログイン項目で入力した値が反映されない、というものでした。
これくらいの内容ならできるかも、と思ったので他のIssueの様子を見つつ、やってみてもいいか聞きました。
MAMPで500エラーが出た時のエラーログを確認する方法
MAMPを使って、PHPで作られたサイトをローカルで確認していた際に、500エラーが表示されました。
どこを書き間違えたんだろう….と思っていたところ、エラーログが見えればわかる!と思い、ファイルを探しました。
私の環境はMac OS Venturaです。## MAMPのフォルダを確認する
アプリケーション内にあるMAMPフォルダから、logsフォルダを確認すると、php_error.logの名前があります。
“`
アプリケーション > MAMP > logs > php_error.log
“`中身を確認すると、ダダーっといつの間にかこんなにエラーが出てたんですね。びっくり。
## おわり
普段MAMPを使っておらず、この案件のためだけに入れたので最初はわからず右往左往してしまいました。
デザインパターン 〜ストラテジパターン〜
## ストラテジーパターン
アルゴリズムをカプセル化し、クライアントに影響を与えずにアルゴリズムを切り替える。例)
レストランの支払い。クレジットカード、現金、PayPalなどの複数の支払い方法を提供し、
顧客が選んだ方法に応じて支払いを処理する。
メリットは以下。– 柔軟性:顧客が選んだ支払い方法に応じて、支払い処理を切り替えることができる
– 拡張性:新しい支払い方法を追加する際に。既存のコードに影響を与えずに追加できる“`PHP
// 決済実行インターフェース
interface PaymentStrategy {
public function pay(int $amount);
}// 決済方法クラス
class CreditCardPayment implements PaymentStrategy {
public function pay(int $amount) {
echo “{$amount}円をクレジット決済します。”;
}
}class PayPayPayment implements Paymen
デザインパターン 〜ファクトリパターン〜
## ファクトリパターン
オブジェクトの生成をカプセル化して、
サブクラスがインスタンスを生成するためのインターフェースを提供する。例)
自動車工場で異なるモデルの車を作って、顧客の注文に応じて最適な車を組み立てる。
以下のメリットがある。
– 柔軟性:顧客の要求に応じて、異なるモデルの車を生成できる
– コードの整理:オブジェクト生成ロジックを一箇所にまとめることで、コードのメンテナンスが容易になる“`PHP
// 共通動作である運転をインターフェースとして、各車種のタイプでクラスを定義。(= ポリモーフィズム)
interface Car {
public function drive();
}class Sedan implements Car {
public function drive() {
echo ‘セダンを運転します’;
}
}class SUV implements Car {
public function drive() {
echo ‘SUVを運転します’;
}
}
デザインパターン 〜シングルトンパターン〜
## シングルトンパターン
クラスのインスタンスが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
“`![aaa](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374872/c408d098-a2cd-d21e-ad22-8650fb8edc2a.png)
3 . `php artisan config:clear` で .env の設定更新
4 . `src/config/slack.php` を作成し、以下のように追加
“`p
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や静的解析ツールの恩恵を受けるよう