PHP関連のことを調べてみた2019年12月14日

PHP関連のことを調べてみた2019年12月14日

なぜデザインパターンを理解できないのか

本記事はうるる Advent Calendar 2019 14日目の記事です。

## はじめに
エンジニアなら一度は必ず耳にする「デザインパターン」
ただし、「デザインパターン」の勉強って何をすればいいのかや、勉強したけどあまり理解できないという人は少なくないのではないでしょうか?
そこで自分が1ヶ月必死に勉強をした際に思った、必ず抑えとくべきことを紹介したいと思います。
※上級者向きではないので悪しからず…

## デザインパターンとは
ソフトウェアをより修正・保守しやすくするもの
つまり、目的は柔軟性(再利用性)を保つこと

## 抑えとくべき事
1. デザインパターンはただの考え方に過ぎない
2. 継承とコンポジションの理解

## デザインパターンは考え方の違い
デザインパターンと聞いて難しそうだなと感じてしまう人がいると思いますが、
デザインパターンは単にオブジェクト指向開発での設計思想です。
なので、デザインパターンの1つ1つには必ず、「前提・目的・解決策・メリット・デメリット」が存在していると思っています。
ここでは***Template Methodパターン*

元記事を表示

PHP案件プロジェクトのソースコードを見て感じたこと

#はじめに
PHP Advent Calender 14日目の記事です。
こちらの経験談で書いたコーディングの部分で実際の現場のコードを見て感じたことについてまとめた記事になります。

[やらかしまくった一人プロジェクトの経験談](https://qiita.com/cube_3110/items/fa5053bc5a577728b006)

若干思い出しながらになりますが最後までお付き合いいただけると幸いです。

###①複数クラスの同じ処理の共通化をし忘れる
これは、この現場だけじゃなくていろんな現場でやらかします。

修正前

“`classA.php
class A
{
処理A(処理B,Cと共通する部分あり)
}
“`
“`classB.php
class B
{
処理B(処理A,Cと共通する部分あり)
}
“`
“`classC.php
class C
{
処理C(処理A,Bと共通する部分あり)
}
“`

修正後

“`classABC.php
class ABC {
処理D
}
“`

“`classA.php
class A extends ABC

元記事を表示

で変数を囲んで展開させる表示について教えてください。

仮に、

“`



“`

とすれば、

hello!
——————–
と表示されると思います。

今、

“`
$PL101=”hello!”;

$PL102=”$PL101″; // <- ここの書き方を何かしら工夫するものとしてください。 ``` となっているとして、直に$PL101は参照できないものとしてください。 そのような前提で、 ```



“`

というように$PL101を参照せずに、

hello!
——————–
と表示させたいのですが、無理でしょうか?

もう少し具体的に言うと、

予め帳票のレイアウトのデータとして

“`
$PL102=”$PL101″;

 様

“`
と書いてあります。
このレイアウトのデータをテンプレートにして、印刷したいときに

元記事を表示

Laravel の認可(Policy)にモデル以外のパラメータを与える

## この記事について

[Laravel #2 Advent Calendar 2019 – Qiita](https://qiita.com/advent-calendar/2019/laravel-2) 14日目の記事です。

表題の通りではあるんですが、意外と使われてないなぁと思ったので記事にすることにしました。

## はじめに

### 環境

– Laravel 6.6.0

5.x でも同じです。

### Policy について

特定のモデルに対し、ユーザーが操作権限があるかどうかを判定する仕組みで、公式ドキュメントには以下のような使用例が載っています。

“`php
class PostPolicy {
public function update(User $user, Post $post) {
return $user->id === $post->user_id;
}
}
“`

呼び出し側は、

“`php
class PostController extends Controller {
public fu

元記事を表示

フレームワークを理解するために自作PHPフレームワーク作ってみた

この記事は[2019新卒 エンジニア Advent Calendar 2019](https://qiita.com/advent-calendar/2019/2019-graduates)の1日目の記事です。
(参加しようと思ったのが13日でしたが、空いている枠が1日しかありませんでしたので1日目の記事として投稿しました。すみません。)

# 動機
仕事でフレームワークを使ってWebアプリを開発しています。
自作でフレームワークを作ることで、

* プログラマとしてのスキルアップ
* フレームワークが何をしているのか理解できるようになり、バグの原因発見が容易になる
* 機能追加の際にフレームワークの動きも加味していいコードが書けるようになる

以上のメリットがあると考えたためです。

# どのように作ったか
[パーフェクトPHP](https://www.amazon.co.jp/dp/B00P0UDWQY/)の第7~8章を参考にしました。

# 得られた知見(大きなもの一部抜粋)
スクラッチでフレームワークを作ることで以下のような知見を得られました。

### PHPがどのようにレ

元記事を表示

【Laravel】保守性をアップさせるかもしれない 3 つのテクニック

# はじめに

初めまして、MasaKu です。

今年も残すところわずかですね。

今年もたくさんのコードを書いてきたことだと思います。

中には埃をかぶりまくった個人開発のコードもあるかと思いますが、年末のこの時期にちょっとだけリファクタリングとして手を入れていみませんか?

今回は、Laravel で作成されたアプリケーションを、ちょこっとした工夫だけで可読性をアップできるかもしれないテクニックをご紹介します。

# その1:ルートグループ

Laravel では `web.php` にルーティングする処理を記載します。

超ざっくりしたブログページのサンプルを作成しました。

“`php
// ホーム画面
Route::get(‘/home’, ‘HomeController@home’);

// ブログページ
Route::get(‘/blog’, ‘BlogController@blog’);
Route::get(‘/create’, ‘BlogController@create’);
Route::get(‘/update’, ‘BlogController@upd

元記事を表示

Azure Key Vault を利用した .env 内の機密情報の管理

# .env と機密情報
Laravel を利用したプロジェクトは通常 `.env` を使って環境変数を管理しています。`.env` には各種認証情報などを含めることもあると思いますが、それらは Git などのバージョン管理システムに平文で保存するべきではありません。
かと言って、どこにも管理されておらず稼動している環境に置いてあるだけの状態というのも心許無さがあります。

そこで [Azure Key Vault](https://docs.microsoft.com/azure/key-vault/basic-concepts) (和名:キー コンテナー)の[シークレット](https://docs.microsoft.com/azure/key-vault/about-keys-secrets-and-certificates#key-vault-secrets)と、Go で書いた簡素な [vaultenv](https://github.com/sensyn-robotics/vaultenv) というツールで、 `.env` に直接機密情報を記述することなく管理できるようにし

元記事を表示

pukiwiki を markdown に変換する pukiwiki2markdown というツールを公開しました

とはいえ、1年前くらいに書いたツールなんですが、

「そういえば Qiita にどうやって実装したのか、とか書いてないなー」

と思ったので供養がてら記事しました。(∩´∀`)∩

# デモサイト
スクリーンショット 2019-12-13 18.12.35.png

https://pukiwiki2markdown.saino.me/

画面向かって左側の input に pukiwiki の文章を入れると右側に変換結果が表示されます。

変換結果をクリップボードにコピーすることもできます。

# ソースコード (Github)

https://github.com/kaishuu

元記事を表示

Laravelでリサイズした画像をdropboxにアップロードする

#はじめに
iPhoneで撮った写真をDropboxにアップロードする機能を導入する際に、無料で使える容量が2Gしかなかったのでサイズを小さくしてアップロードしようとしたけど詰まったので備忘録としてやり方を載せておきます。
#環境・事前準備
– Laravel 6.0
– Dropboxアカウント

#Dropbox接続手順
composerでDropboxを操作するためのライブラリをインストール。

“`
composer require benjamincrozat/laravel-dropbox-driver
“`
“`config/app.php
‘providers’ => [
BC\Laravel\DropboxDriver\ServiceProvider::class,
],
“`
“`filesystems.php
‘disk’ => [
‘dropbox’ => [
‘driver’ => ‘dropbox’,
‘token’ => env(‘DROPBOX_TOKEN’),
],
“`
dr

元記事を表示

牛に言葉を喋らせる

cowsay というプロジェクトをご存知だろうか。
その名の通り、**牛に言葉を喋らせる**という高尚なプロジェクトである。
私も兼ねてから、このプロジェクトに参加したいと思っていました。

そして今日、牛に言葉を話させることに成功した。

“`sh
$ php say.php

< Ohmg I'm a cow! >
\ ^__^
\ (oo)\_______
(__)\ )\/\
||—-w |
|| ||
“`

さらに、タックスにも言葉を喋らせられる。

“`sh
$ php say.php -ctux -m僕はタックス!

< 僕はタックス! >
\
\
.–.
|o_o |
|:_/ |
// \ \
(| | )
/’\_ _/`\
\___)=(___/
“`

さらには、ドラゴンも召喚できる。

`

元記事を表示

Windows Server + IIS + PHP + OracleDB 設定したこと

# はじめに
タイトルの環境を用意するために行ったこと、
参考にしたサイトを、メモしておきます。

Oracle Instant Clientが出てくるところまでは、スムーズに進みました。

## Windows Server 初期設定編

### 日本語化
https://qiita.com/komacchi_u/items/66b908aa32ffdb9ef389

### タイムゾーンの設定
https://support.microsoft.com/ja-jp/help/4026213/windows-how-to-set-your-time-and-time-zone

### メニューバーが文字化けする問題の対策
https://answers.microsoft.com/ja-jp/windows/forum/windows_8-performance/%e3%83%a1%e3%83%8b%e3%83%a5%e3%83%bc%e3%83%90/19d210b1-611e-45a3-849b-ac798d924d29?messageId=0e7d4a39-df6a-4477

元記事を表示

PHPの生みの親、ラスマス氏のインタビューの紹介

空いてたので・・・。

私の好きなインタビューです。

PHPの生みの親,ラスマス・ラードフ氏インタビュー
https://gihyo.jp/news/report/2015/12/1401

PHPをやって、なぜ、implodeとexplodeの引数の順番が違うのか、
array_mapとarray_filterの引数の順番が違うのか、

元記事を表示

OpenStreatMapの環境を自前で整える

どうものらぬこです。

ちょっとやりたいことがあったので、個人所有のRapberryPi4に、OpenStreatMapの地図データ + PostgreSQL(with postGIS) + mapnik な環境と、データをいい感じに処理するためのフロントプログラミング環境として PHP + php-mapnik を導入しました。

OpenStreatMapサーバーを自前で用意するための記事は探せば結構出てくるのですが、情報が古かったり、環境の違いなどによりうまく動かなかったりと、オープンソースをいろいろ組み合わせて環境準備する系のあるあるな罠盛りだくさんで、意図通りに動作させるまでにはかなりの苦労を強いられました。

環境構築に利用した環境は以下の通りです。
Raspberry pi 4(4Gb) + Raspbian Buster with desktop(2019-09-26)
(最初にRaspberry pi 3B+でチャレンジしたのですがpostgreSQLにデータをインポートする処理がメモリー不足が原因で完了せず、失敗に終わりました)
ストレージ microSD 128

元記事を表示

SlimのDI-ContainerでRay.Diを使ってみる

この記事は[PHP Advent Calendar 2019](https://qiita.com/advent-calendar/2019/php)の13日目の記事です。

昨日は[polidog](https://qiita.com/polidog)さんの[helicon/object-mapperを作った](https://polidog.jp/2019/12/12/php/)でした。
型情報と連想配列のマッピングまでできるというのはアツいですね。僕もライブラリ公開していきたい。

さて本日はWeb Application FrameworkのSlimとDI ContainerのRay.Diを連携させる方法をご紹介します。

## 背景

僕はレガシーなフレームワークを使っている環境に関わっているのですが、
いい加減このフレームワークへの依存を切り離し、コードを減らしていきたいと常々思っています。

ある日、色々検討する過程で、「別のWAFでリクエストをハンドル・プロキシして古いコード動かせばよくね?」ということを思いつきました。
色々ある世のフレームワークの中で、PSRに準拠し

元記事を表示

LaraDockを使って10分でLaravel+Nginx+MySql+Redisのローカル環境を構築してみる。

# はじめに

こちらは [TECOTEC Advent Calendar 2019](https://qiita.com/advent-calendar/2019/tecotec) の13日目の記事です。
折り返しとなります。

Qiitaの記事や他所のブログでも散々書かれていることかと思いますが、復習がてらLaraDockを使ってLaravelのローカル環境を構築してみようと思います。
目指せ10分でローカル環境構築!

※当方macで作業しているため、macでの手順になります。Windowsの方は適時Windows版に読み換えてお試しください。

# やること

– Dockerのインストール
– LaraDockのインストール
– Laravelプロジェクトの作成
– LaraDockの設定変更
– Laravelの設定変更

以上となります。

ではさっそくやってみましょう。

# 実演

### Dockerのインストール

以下のサイトよりDocker for Macをダウンロードします。

元記事を表示

AmazonLinuxでPHPを5.3→5.6にバージョンアップする

### 概要
* PHP5.3を最新版ではなく5.6(もしくは何らかのバージョン)指定でアップデートしたい時の方法です
* PHP5.3はApache2.2系、PHP5.6はApache2.4系と依存関係があるので、一緒にアップデートする必要があります
* Apache再インストールの際にダウンタイムが発生するので、必要であればメンテナンス時間を設けましょう

### 流れ
1. サーバーの状態を確認
1. 現在のPHP,Apacheをアンインストール
1. アップデート対象バージョンのPHP,Apacheをインストール
1. (必要な場合)Apacheのhttpd.confを修正
1. Apacheを起動

### 手順
#### OSの確認
対象サーバーにSSHでログインして以下コマンドを実行

“`
# cat /etc/system-release
“`

#### PHPバージョンの確認

“`
# php -v
PHP 5.3.29 (cli) (built: May 12 2015 22:42:19)
Copyright (c) 1997-2014 The PH

元記事を表示

LaravelとSpringBootでDIコンテナを利用してみる

# はじめに
これは[ユアマイスターAdventCalendar2019の13日目](https://qiita.com/advent-calendar/2019/yourmystar)の記事です。
(社会人になってから学んだことをアウトプットする記事になります。)

## 今回の経緯
社会人になってからDI(依存性の注入)という概念を知りました。
WEBサービスの開発を行う際に、フレームワークを利用する場面は多々ありましたが、主に利用していた`Cake PHP`ではDIという概念は出ていなかったと記憶しています。
(記憶違いだったらすみません。)

DIは、インスタンスをnewで作成して利用するのではなく、DIコンテナやサービスコンテナ呼ばれるもの(SpringBootではDIコンテナ、Laravelではサービスコンテナと呼ばれます)を利用して、あらかじめ登録されたインスタンスを利用します。

今回は、業務で利用しているSpringBootでのDIコンテナの利用、最近独学で学んでいるLaravelでのサービスコンテナを利用してみるというテーマで記事を書いてみたいと思います。

##

元記事を表示

phpMyAdminが、AWS EC2複数台構成で接続できなかった件

同じ構成のEC2インスタンスを2つ用意して、ALBで振り分ける構成の案件がありました。
それぞれにphpMyAdminが入っており、接続先は同一のRDSです。

このphpMyAdminにログインしようとすると、エラーが表示されログインできない現象が起きました。
結論を先に書くと、対象のターゲットグループ設定の、維持設定を有効化にせいというアドバイスをもらい、解消しました。

調べてみたら、振り分けられてセッションが上手く処理できないから、ユーザー(ブラウザ)毎に割り振りを固定するってことみたいですね。

>スティッキーセッションはAWS専門用語では無く、ロードバランサー持つ一般的な機能の名称です。

セッション、インフラの知識を深めなくては:thinking:

参考:https://dev.classmethod.jp/cloud/aws/stateless_ec2/

元記事を表示

【Laravel】初心者から実務をこなしていくまでの6ヶ月にやったこと

CODEBASE2期生、新卒1年目の [@avocadoneko](https://twitter.com/avocadoneko) です。
仕事では主に Laravel / Vue.js を使って、開発をしています。

## この記事について

#### どんな人に読んでほしいか
– プログラミングを学び始めたばかりの人
– これから PHP, Laravel を学びたいと思っている人
– Laravel で開発している会社に入社する予定の人

#### 書いてあること
– 初心者が PHP と Laravel をどうやって勉強してきたか
– 仕事で学んだ Laravel のこと

#### 書いてないこと
– PHP、Laravel 以外のこと(Git とか Web のこととか他の言語とか)

#### 注意
– いくつか紹介している記事や動画では、Laravel のバージョンが古いことがあります。

## やったこと

### まずはPHPを触ってみる
#### ■ [Progate](https://prog-8.com)

[l</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>PHP</div>
<div class='tag-cloud-link'>Laravel</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/avocadoneko/items/7a457be22d47a3e122d7'>元記事を表示</a></div>
<h3 id=Laravel(5.8)のFormファザードサンプル

## 概要
見た目がスッキリするのでLaravelの拡張としてよく使うFormFacade、ただ書き方を忘れる事があるのでメモとして残しておく。
[公式はこちら](https://laravelcollective.com/docs/5.8/html)

## 環境
– laravel:5.8.*
– laravelcollective/html: ^5.8

## 前提
– old()はLaravelのヘルパーであり、直前のフォームに入力した値を取得する働きをする。
+ 第2引数は初期値
– BootStrap4を使っているのでformで使うclassを指定している

– セレクトボックス・ラジオボタン・チェックボックスで使う配列は下記のような形とする

“`php
$array = [
1 => ‘hoge’,
2 => ‘fuga’,
3 => ‘piyo’,
];
“`

## フォームの開始と終了
“`php
// 開始
{{ Form::open([‘route’ => [‘user.update’, ‘user’ => $user->

元記事を表示

OTHERカテゴリの最新記事