- 0.0.1. PHP) Exceptionエラー設計原則とアプリケーションへの導入
- 0.0.2. 【サルが書く】特定文字列と特定文字列の間の特定文字列を取り除きたいときの操作
- 0.0.3. laravel6 バッチを作って実行してみる
- 0.0.4. Laradockをちょっと便利にするコマンドラッパーを作った
- 0.0.5. LaravelのCSRF対策の処理を実際のコードから見てみる
- 0.0.6. フレームワークディスパッチャを実装してBEARとLaravelを動かしてみる
- 0.0.7. Laravel Collectionクラスで日付の絞り込みをするときに気をつけること
- 0.0.8. オブジェクト指向プログラミング とは? 〜 初心者編 〜
- 0.0.9. Laravelのファイルストレージにカスタムドライバを追加する
- 0.0.10. できるだけSOLIDに沿ったパラメーター判別を実装してみた
- 0.0.11. WordPressのカスタム投稿で新規投稿をできないようにする
- 0.0.12. WordPressで管理画面の「編集」「クイック編集」「ゴミ箱」「プレビュー」の項目を非表示にする
- 0.0.13. ExcelのテンプレートをもとにPHPでPdf出力する
- 0.0.14. 【初心者】PHPで素数を出力する
- 0.0.15. Mockeryでメソッドチェーンのテスト
- 0.0.16. ブログのメインページ php(自分用)
- 1. メインページ
PHP) Exceptionエラー設計原則とアプリケーションへの導入
> Advent Calendarへの招待、ありがとうございます。
> 本記事が何方かの役に立つことができると幸いです。# 前書き
– すべての記事は、自分の勉強目的のため主観的な内容の整理を含まれています。あくまで参考レベルで活用してください。もし誤った情報などがあればご意見をいただけるととっても嬉しいです。
– 内容では省略するか曖昧な説明で、わかりづらいところもあると思います。そこは、連絡いただければ補足などを追加するので、ぜひ負担なくご連絡ください。
– 今回の記事は Java の Exception・Concept に起因した内容を一部含めています。Java と PHP のエラーの抽象化モデリングは少々違いがあるので、後述する内容は必ず PHP においての正解とは言えません。PHP の Exception に焦点をおくよりも、言語に関係なく Exception と Application においてのエラー設計観点の考察を主に記事にしたいという思いがあったので、この意図のところを踏まえてご覧いただけると幸いです。# 概要
本記事は、PHP7 をベースにしています。
【サルが書く】特定文字列と特定文字列の間の特定文字列を取り除きたいときの操作
わきゃ!!
GIGアドベントカレンダー16日目になります!
GIGメンバーの投稿はこちら? から見てみてね!
https://qiita.com/organizations/gig-inc文字列から特定の文字列を取り出す操作は探せばあるけど、特定文字列と特定文字列の間の特定文字列を取り除きたいが見当たらなかったのでこれが役に立てば嬉しいです!
以下の例の場合は`
`と`
`の間の`
`と`
`を取り除きたいという例です。
適宜入れ替えてご使用ください。“`php
$body = ‘hoge
fuga
piyo<\/blockquote>‘;
$htmlTags = [‘‘, ‘
‘];
$body = preg_replace_callback(
‘/(.*?)<\/blockquote>/’,
function ($matches) use ($htmlTags) {laravel6 バッチを作って実行してみる
# 目的
– laravel6のアプリでバッチを作成し、実行する方法をまとめる。
# 実施環境
– ハードウェア環境
| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |– ソフトウェア環境
| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.8 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/items/cd54077aad7e139cf518) |
| Laravel バージョン |
Laradockをちょっと便利にするコマンドラッパーを作った
この記事は[個人開発 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/private-development)の23日目です。
# TL;DR
Laradockをちょっと便利にするコマンドラッパーを作りました。
https://github.com/ngmy/laradockctl# 背景
WebサービスやOSSを開発するときはDockerを使うと開発マシンが汚れないので便利ですね。
私はもっぱらPHPで開発しており、また一からDockerで開発環境を構築する時間もないので、開発環境は[Laradock](https://laradock.io/)のお世話になることが多いです。
LaradockはPHPの開発に必要なもの全部入りのDocker環境で、PHP界隈ではおなじみのツールです。そんなLaradockですが、使っていて個人的に不便に感じる点があります。
# Laradockを使っていて個人的に不便に感じる点
## 1. どのコンテナを起動すればいいのか忘れる
「このWebサービスではnginxコ
LaravelのCSRF対策の処理を実際のコードから見てみる
#初めに
Laravelを使用している方でLaravelの扱い方に慣れていないころ、`419エラー`に出会った方は割といるのではないかと思います。
今回はその`419エラー`を生み出しているLaravelのCSRF対策の仕組みついて実際のコードから見ていきます!#環境
|ツール|バージョン|
|:–|:–|
|PHP|7.4.8|
|Laravel|8.14.0|#CSRF対策とは?
CSRF(クロスサイト・リクエスト・フォージェリ)とは、ざっくり言うと罠サイト等から他の人のブラウザのCookieに書かれているセッションのデータを取得し、そのデータを使用して特定のWebアプリケーションへアクセスすることで、元のセッションのデータの持ち主がリクエストをしたように偽装することです。詳しくは[IPAの記事](https://www.ipa.go.jp/security/vuln/vuln_contents/csrf.html)を見てみて下さい。##CSRF対策の一例
`体型的に学ぶ安全なWebアプリケーションの作り方 第二版 4.5節 「重要な処理」の際に混入する脆弱性`より
フレームワークディスパッチャを実装してBEARとLaravelを動かしてみる
本記事は [BEAR.Sunday Advent Calendar 2020](https://qiita.com/advent-calendar/2020/bear-sunday) 23日目の記事です。
# はじめに
筆者は普段フレームワークとしてはLaravelを触っていますが、BEAR.Sundayを使いたい気持ちが強いので、既存のサービスでどうやって利用するかについて考えてみます。
# 複数のアプリケーション(FW)を1つのサービスで利用する
ざっくり3パターン挙げます。
1. Front & Backend
2. Middleware routing
3. Application routing## 1. Front & Backend
BEARをバックエンドに設置してLaravelから呼び出す方式。
LaravelがEC2インスタンス上で運用されていても、BEARはコンテナで運用するなど、既存アプリケーションの実行環境の影響を受けず・与えずに運用可能であったりするのが特長でしょうか。また、LaravelからBEARを呼び出す場合、http経由ではなく、関
Laravel Collectionクラスで日付の絞り込みをするときに気をつけること
##はじめに
PHPでLaravelのCollectionクラスを利用しているときに、私が以前ハマった問題について共有します。##動作環境
PHP 7.2
laravel/framework 6.0##やりたいこと
日付のカラムを持つデータに対して、○日~△日の間という条件で絞り込みをしたい。##問題のあった書き方
“`php
$between_days = getBetweenDays(‘2020-12-21’, ‘2020-12-23’);
foreach ($between_days as $date) {
var_dump($date->format(‘Y-m-d’));
}public function getBetweenDays($start_date, $end_date) {
$date_list = collect([
[‘date’ => new Carbon(‘2020-12-20’)],
[‘date’ => new Carbon(‘2020-12-21’)],
[‘date’
オブジェクト指向プログラミング とは? 〜 初心者編 〜
「**オブジェクト指向プログラミング**」という言葉はよく聞きますが、いまいち理解できていなかったので調べて見ましたが、あくまでプログラミング初心者の備忘録になるので間違いなどありましたら、どんどんご指摘願います。
またオブジェクト指向について説明している技術書やWebサイトは数多く存在し、どの説明もバラバラ、答えはエンジニアによってもバラける。
明確な答えがないのだから、ざっくり雰囲気を理解しておけばいい100%理解しようとするとよくわからなくなるし、あとは自分の成長と共に、理解が進んでいき、自分の中で定義ができるようになる。
というスタンスなので、現時点では100%理解を求めていないです。
以上宜しくお願いいたします。* * *
### オブジェクト指向とは
まず始めに、オブジェクト指向とは、特定のプログラミング言語や手法の名前ではなく、プログラミングを行う際の考え方。「**概念**」ということである。
※概念→物事や対象を丸ごとひっくる見たときの大まかな理解のこと。思考において把握される、物事の「何たるか」という部分。wikipediaで調べると
`オブジェクト
Laravelのファイルストレージにカスタムドライバを追加する
Laravel には Flysystem PHP パッケージを統合したファイルシステムが提供されている。ローカルのファイルシステムと S3 を操作できるドライバがデフォルトで提供されているのみなので、カスタムドライバを作成して Laravel のファイルシステムを拡張してみる。
## extend メソッドの使用
ファイルシステムを拡張するためには Storage ファサードの extend メソッドを使用する必要があり extend メソッドにはドライバ名と“League\Flysystem\Filesystem“を返すクロージャを指定する必要がある。“League\Flysystem\Filesystemは League\Flysystem\AdapterInterface“ を引数にとるので、ファイルシステムを拡張するには “League\Flysystem\AdapterInterface“ を実装したクラスを作成する必要がある。
“`php
// League\Flysystem\Filesystem の実装の一部namespace League\Fl
できるだけSOLIDに沿ったパラメーター判別を実装してみた
こないだSOLIDなるものの存在を知りました。
で、業務で携わっている地図アプリに新しく機能が追加されることになったので、せっかくなので出来るだけSOLID原則を守る努力をしつつ実装してみたいと思います。# SOLIDとは
以下の5つの設計原則の頭文字を取ったもの。– Single responsibility principle(単一責任の原則)
クラスを変更する理由は1つでなければならない。
class Aがあり、たとえばxという機能追加とyという機能追加があった場合、そのどちらの場合もclass Aを変更する理由になりえるみたいなことがないようにというもの。– Open-closed principle(オープンクロースドの原則)
拡張に対して開いており修正に対して閉じていなければならない。
新しい機能を追加する場合などに、既存のコードを修正せず(修正に対して閉じている=closed)新しいコードを追加する(拡張に対して開いている=open)だけで目的が達成できる状態にしましょうというもの。– Liskov substitution principle(リスコフの
WordPressのカスタム投稿で新規投稿をできないようにする
ワードプレスのテーマtwentytwentyoneを基盤に、カスタム投稿で新規投稿をできないようにする実装を行ったので、備忘録的にこの記事を残す。
# 環境情報
PHP:version 7.3.12
WordPress:version 5.5.3
WPテーマ:twentytwentyone# 作業
functions.php に下記のコードを追加する
“`functions.php
// 新規追加ボタンの非表示化
function custom_edit_newpost_delete($hook) {
if($hook == ‘edit.php’ || $hook == ‘post.php’){
$postType = get_post_type();
if ( $postType == ‘company’ ) {
echo ‘‘;
}
}
}
a
WordPressで管理画面の「編集」「クイック編集」「ゴミ箱」「プレビュー」の項目を非表示にする
ワードプレスのテーマtwentytwentyoneを基盤に、管理画面のサイドバーのメニューの順番を並び替える実装を行ったので、備忘録的にこの記事を残す。
# 環境情報
PHP:version 7.3.12
WordPress:version 5.5.3
WPテーマ:twentytwentyone# 作業
“`functions.php
function custom_action_row( $actions ) {
unset($actions[‘edit’]); //編集
unset($actions[‘inline hide-if-no-js’]); //クイック編集
unset($actions[‘trash’]); //ゴミ箱
$postType = get_post_type();
if ( $postType == ‘works’ || $postType == ‘topic’ ) {
unset($actions[‘view’]); //プレビュー
}
return $actions;
}
ExcelのテンプレートをもとにPHPでPdf出力する
## 概要
Laravelを使用した環境にて、以下を行います。
* Excelのテンプレートを読み込む。
* 読み込んだテンプレートに任意の値を挿入。
* 任意の値を挿入したExcelを出力。
* そのExcelをPdfに変換。## Laravel Excel(PhpSpreadsheet)のインストール
※Laravel Excelを使おうとしたら、結局Laravel Excel内で使用してるPhpSpreadsheetで完結してしまったという私の背景があります。ここでは状況を合わせてLaravel Excelのインストールを行います。
Laravelのホームディレクトリで以下を実行
“`COMPOSER_MEMORY_LIMIT=-1 composer require maatwebsite/excel
“`## LibreOfficeのインストール
以下を実行
“`sudo yum -y install libreoffice libreoffice-langpack-ja
“`インストールできたかバージョン表示で確認
“`libreoffi
【初心者】PHPで素数を出力する
# 素数を出力する
今回は、私が今持っている知識だけで、素数を出力できるのか考えた。
範囲を決めないと無限に出てきてしまうので、ひとまず1より大きくて10より小さい素数を出力できるか考えた。
結果は以下の通り。“`php
// 2よりも大きくて10よりも小さい数字それぞれを、同じ範囲のそれぞれの数字で割り切れる数字を抽出
for ($i = 2; $i <= 10; $i++) { for ($j = 1; $j <= 10; $j++) { if ($i % $j === 0) { $nums[$i][] = $j; } } } // 抽出した数字の中で、1と自身の数字でのみ割り切れる数字を抽出(割り切れた数字の数が2のもの) for ($i = 2; $i <= 10; $i++) { $count = count($nums[$i]); if ($count === 2) { $n_n
Mockeryでメソッドチェーンのテスト
このようなメソッドチェーンしてるPHPコードのテストコードが書きたいとき、
“`PHP
$this->logger
->channel(‘channel_name’)
->info(‘success!’, [‘id’ => 1]);
“`一旦andReturnSelf()して自身を返せば良い。
“`PHP
$this->logger = m::mock(LoggerInterface::class);$this->logger
->shouldReceive(‘channel’)
->with(‘channel_name’)
->andReturnSelf()
->once();$this->logger
->shouldReceive(‘info’)
->with(‘success!’, [‘id’ => 1])
->once();
“`
ブログのメインページ php(自分用)
#ソースコード
“`
prepare($sql);
$stmt->execute();
}catch (PDOException $e) {
echo ‘Error: ‘ . $e->getMessage();
die();
}
?>
メイン
メインページ
ようこそさん
【初心者】PHPで累乗の計算がしたい
# 累乗とは…
おそらくこれに関しては書き残しておかなくても問題ないが、もしかしたら忘れてしまうことがあるかもしれない。
累乗とは何の何乗みたいな…説明が難しい。(2の3乗が8とか、5の2乗が25のような)これをPHPで計算したい時の表記の仕方
“`php
$n ** $m; // $nの$m乗
“`
掛けるの記号を二つ並べることによって、累乗の計算ができるようになった。
四則演算に加えて覚えておきたい。絶対どこかで使うはず。
[Heroku] index.html をダイレクトに開く静的コンテンツサイトを、すぐ公開したい
もうすでに何日も何日も経過していますが、これは [Heroku Advent Calendar 2020]()の 5日目、6日目はHeroku Master @zunda さんの[もう少しSIGTERMと仲良くする](https://qiita.com/zunda/items/5eb9d25e06aba1329847)です。毎度ありがとうございます。
最上級の小ネタで攻めます。本番は明日です。
## Heroku 史上最速に静的コンテンツをアップロードする
「Heroku 静的」とかで検索すると、`buildpack` を使ったり `index.php` から `index.html` 読み込ませるようなやり方をしているケースが多いです。多い。実は、php の `buildpack` を指定して、ダイレクトに `index.html` させる方法はもっと単純だったりします。
答え
“`bash
$ git init
$ heroku create
$ touch composer.json
$ echo ‘test’ > index.html
$ git add . &&
Laravel Unitテストでエラーが発生した
# 目的
– Unitテストを実行したらエラーが発生したので解決方法とこのエラーの原因をまとめておく
# エラーまでの経緯
1. アプリ名ディレクトリで下記コマンドを実行してテストクラスのファイルを作成した。
“`terminal
$ php artisan make:test UserServiceTest –unit
“`
1. テストコードを記載後、アプリ名ディレクトリで下記コマンドを実行してテストを実行した。“`terminal
$ vendor/bin/phpunit tests/Unit/UserServiceTest.php
“`# エラー
– Unitテストを実行したら下記のようなエラーが出た
“`terminal
Error: Call to a member function connection() on null
“`# 解決までの経緯
1. 問題のテストコードを下記に記載する。
“`アプリ名ディレクトリ/tests/Unit/Servic
コードを分かりやすく・相手に理解できるようにするテクニック【リーダブルコード】
コードレビュー中…..
**リーダー:**「なあわい君。このコードの意味ってどういう事なんや?」
**わい:**「ああ。これはなえーとなんやったけ?○×△☆♯♭●□▲★※的な事をやってんねん」
**リーダー:**「いや自分でもよく分からなくなってるやんw」
**リーダー:**「基本的にコードを書くっていうことは、見やすいことだけじゃなく、相手に分かりやすいかどうかを重視するんや。あくまで実行するのはコンピューター側だけど、読むのは人間なんやで?」
**リーダー:**「てことで、わい君にこの本を授けるわ。休日読んでや」
**リーダー:**「テレレレッテレ~♪『リーダブルコード より良いコードを書くためのシンプルで実践的なテクニック』」(大山のぶ代ボイス)」
**わい**:「なんやこいつ(あ、ありがとうやで〜)」## リーダブルコード
この記事では、わいが読んだ『リーダブルコード より良いコードを書くためのシンプルで実践的なテクニック』を読んだ後のアウトプットがてらの記事です。
随時更新していきます。
※記載は2020-12-22時点で3章まで## 【リーダブルコード