クリエイター:メタボ兔

ウェブやアプリの開発者で利用する色な技術やサーバーや開発環境の設定について共有する場

PHPのバージョン別のDockerfile:バージョン202104

対応概要

ローカル開発環境用で作成したdocker-composeの改善のためにエラーの対応やintlモジュールを追加するためにphp-fpm用のDockefileを修正したので、まとめてみました。

dockerfile

php:7.1-fpm

使用しているphp-fpmのベースにあるOSがバージョンアップされた影響で7.1をサポートしてないxdebugのバージョンがインストールされるのが原因でした。

FROM php:7.1-fpm

RUN apt-get update
RUN apt-get install -y wget libjpeg-dev libfreetype6-dev unzip
RUN apt-get install -y gcc make libjpeg-dev zlib1g-dev mariadb-client libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev libzip-dev libwebp-dev \
  && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \
  && docker-php-ext-configure intl \
  && docker-php-ext-install -j$(nproc) gd zip mysqli pdo_mysql bcmath exif intl

RUN pecl install xdebug-2.9.0 \
  && docker-php-ext-enable xdebug exif

#Composer install
COPY --from=composer /usr/bin/composer /usr/bin/composer

COPY php.ini /usr/local/etc/php/

ENV COMPOSER_ALLOW_SUPERUSER 1

ENV COMPOSER_HOME /composer

ENV PATH $PATH:/composer/vendor/bin

php:7.2-fpm

FROM php:7.2-fpm

RUN apt-get update
RUN apt-get install -y gcc make libjpeg-dev zlib1g-dev mariadb-client libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev libzip-dev unzip libwebp-dev \
  && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \
  && docker-php-ext-configure intl \
  && docker-php-ext-install -j$(nproc) gd zip mysqli pdo_mysql bcmath exif intl

RUN pecl install xdebug \
  && docker-php-ext-enable xdebug exif

#Composer install
COPY --from=composer /usr/bin/composer /usr/bin/composer

COPY php.ini /usr/local/etc/php/

ENV COMPOSER_ALLOW_SUPERUSER 1

ENV COMPOSER_HOME /composer

ENV PATH $PATH:/composer/vendor/bin

php:7.3-fpm

FROM php:7.3-fpm

RUN apt-get update
RUN apt-get install -y gcc make libjpeg-dev zlib1g-dev mariadb-client libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev libzip-dev unzip libwebp-dev \
  && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \
  && docker-php-ext-configure intl \
  && docker-php-ext-install -j$(nproc) gd zip mysqli pdo_mysql bcmath exif intl

RUN pecl install xdebug \
  && docker-php-ext-enable xdebug exif

#Composer install
COPY --from=composer /usr/bin/composer /usr/bin/composer

COPY php.ini /usr/local/etc/php/

ENV COMPOSER_ALLOW_SUPERUSER 1

ENV COMPOSER_HOME /composer

ENV PATH $PATH:/composer/vendor/bin

php:7.4-fpm

FROM php:7.4-fpm

RUN apt-get update \
  && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev zlib1g-dev libicu-dev g++ zip libzip-dev unzip libonig-dev libwebp-dev \
  && docker-php-ext-configure gd --with-freetype --with-webp --with-jpeg \
  && docker-php-ext-configure intl \
  && docker-php-ext-install gd pdo_mysql mysqli mbstring iconv opcache exif intl

RUN pecl install xdebug grpc \
  && docker-php-ext-enable xdebug exif

#Composer install
COPY --from=composer /usr/bin/composer /usr/bin/composer

COPY php.ini /usr/local/etc/php/

ENV COMPOSER_ALLOW_SUPERUSER 1

ENV COMPOSER_HOME /composer

ENV PATH $PATH:/composer/vendor/bin

Laravelのメールアドレスのチェックについて。

概要

昔いphpの言語(ウェブシステム)を始めた時から入力チェックでEmailのチェックが一番悩まされました。

実際入力されたメールアドレスへユーザーの完了メールを送るのが多かったので、正常ではないメールアドレスでRejectメールが管理者アカウントに溜まる気持ち悪い経験をしていました。

こんな事考えていた

じゃ、そうしたらメール形式が合うかどうかと別途チェックが必要ではないか?

参考:メールアドレスを王大人先生に確認してもらう方法(精度に若干の難あり?) | 日記の間 | あかつきのお宿

norm-nois.com

まとめるとメールのドメイン部分を実際DNSに存在していて、MXレコードが登録されているかのチェックすることです。

上記の記事はscoketで25ポートで実際使っているかもチェックしています。

Laravel

ではLaravelのValidatorに追加しよう〜〜と思ったら、既にある!!

Laravel5.8.33のアップデートで追加されたらしいです。5.8の変更項目はみたが...

blog.capilano-fw.com

前提

この機能を使うためにはいくつかPHPintl拡張機能が必要です。

Dockerでのintlをインストール方法は以下の記事をご参考してください。

qiita.com

メールチェック

追加された機能は以下の物です。

email:rfc

RFCと呼ばれるインターネットの標準仕様に合っているかをチェックするバリデーションです。(パッケージの説明では、RFC 5321, 5322, 6530, 6531, 6532が対象となっています)

簡単に言うとメールアドレスの形式があっているかのチェックようです。

 te@st@example.com -> X
 test@example.com -> O

関連クラス:Egulias\EmailValidator\Validation\RFCValidation

email:strict

先ほどの、email:rfcをより厳格にしてもので「エラーだけでなく、警告があってもダメ」なバリデーションになっています。

$email = str_repeat('x', 254).'@example.com'; // xが254個で長すぎる

関連クラス:Egulias\EmailValidator\Validation\NoRFCWarningsValidation

email:dns

DNSにそのメールアドレスのドメインが存在するかをチェックするバリデーションです。例えば、example.comというドメインは存在していますがtest.example.comというものは存在していません。

こちらが実際DNS情報をみて判定するものです。

関連クラス:Egulias\EmailValidator\Validation\DNSCheckValidation

email:spoof

なりすましのメールアドレスは拒否するバリデーションです。 例えば、test@exаmple.comというメールアドレスは見た目は妥当なように見えますが、実はこれは英語のexampleではなく、аに「キリル文字」が使われた偽装ドメインになっています。

関連クラス:Egulias\EmailValidator\Validation\SpoofCheckValidation

email:filter

PHP関数のfilter_var()を使ったメールアドレスのチェックです。

関連クラス:Egulias\EmailValidator\Validation\SpoofCheckValidation

バリデーションは併用できる

Laravelで以下の使い方だとデフォルトではRFCValidation(email:rfc)が適用されます。

'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],

おすすめの使い方としては以下のように使った方がいいかと思います。

'email' => ['required', 'string', 'email:strict,dns,spoof', 'max:255', 'unique:users'],

結論

Laravelすごい〜〜〜〜!!

使用しなくなったGoPro3をウェブカメラ化

在宅ワークが長くなったことで、部屋の端っこに作業スペースを作りました。利用しているMacProのカメラでMTGに参加しましたが、以前ダイビング・スノーボード等で使用する目的で買ったGoPro3を利用する方法がないかと調べました。

必要な物

GoPro3

使わなくなった物ですが、状態は良い物です。

www.motozen.jp

GoPro フレームマウント

GoPro3の基本で入っているフレームは水中で使用する物ですが、ケーブル(充電とMicro HDMI)を繋げないので新しく買いました。

Mini Usbケーブル

MiniUsbで充電するための物です。

Micro HDMIケーブル

動画をHDMIへ出力するための物です。

HDMI キャプチャーボード

これがメイン部品でMicro HDMIケーブルだけだとテレビ等のHDMI機器へ出力は可能ですが、それをウェブカメラとして認識させるのはできないようです。

GoPro4以上からだとアプリをインストールしてそのままウェブカメラとして利用できるようですが、自分が持っているのはGoPro3。残念!!!

gopro.com

それで買ったものがこれです。

固定用の自撮りボー

こちらは家にあった物でデスクの上にそのまま立てるものです。好みで買うか既に持っている小さいカメラの三脚でも良いかと思います。

注意点

GoPro3のケーブル接続の端子

Micro HDMIケーブルとMini Usbケーブルを同時に接続するので差し込みする先頭が大きすぎるとGorPro3の横幅的に出来ない場合がありますので、出来るだけ小さいのが良いかと思います。

上記の商品リンクはギリギリ刺せる大きさでした。

Mini Usbケーブルは充電のみ

上記のケーブルは値段で安い物ですが、通信も出来るものでしたのでHDMIケーブルが繋がっていてもUSBの通信モードが活性化されるので、別途のUSB充電器に繋げました。もしケーブルが充電のみだけ出来る物でしたら、別にMacに刺してもよかったかもです。

完成したイメージ

GoPro3本体の画像 f:id:FattyRabbit:20210323120739j:plain

Google Meetの画像 f:id:FattyRabbit:20210323120841p:plain

Meetでは720Pで設定しないと動画の比率が合わないです。 f:id:FattyRabbit:20210323120918p:plain

Blimpupの使用

お題「MacでDockerの速度改善」

f:id:FattyRabbit:20210310105619p:plain

クラウドにDockerのコンテイナーを実行するサービスです。自分が確認したところ、「ネット構成ができない」とかエラーの解決方法(ドキュメント)がまだ少ないなどの問題がありました。

でも、Localで「docker-sync」をしても同期する負荷も無視できなかったので都度試して見たいと考えています。

blimpup.io

Cloud Container Development

Blimp is a drop-in replacement for Docker Compose that enables development in the cloud. Laptop struggling to keep up? It’s time to blimp up and get your Docker containers in the cloud.

Docker Compose in the Cloud

Make your day to day development process less heavy by running containers in the cloud. Blimp is a drop-in replacement for Docker Compose that speeds up traditional local development by going remote.

バッテリーが膨らんできたNexus9をバッテリーレス化

バッテリーが膨らんできたNexus9をずっとバッテリーを外したままで持っていました。ネットで他の機種をバッテリーレス化について記事とかあったので時間がある時やって見ようかと思いました。

gigazine.net

実際ネットの記事を元に色々試して起動まではできましたが、すぐ電源が落ちるところから可決が出来ずずっと放置していました。

先週、壊れても(すでに壊れている)いいかなと思いまして大胆な行動を起こしたところ成功しました。USBの電圧等関係があるかとは思いますが、MacPCと家で使用しているUSB電源では正常に動くことが確認出来ました。

Yeeeeee!!!

f:id:FattyRabbit:20210210122254j:plainf:id:FattyRabbit:20210210122316j:plain