Laravel – データベースに接続できない

エラー発生

Laravel導入直後にデータベースを接続しようとしたところ、エラーが発生した。

MySQLのバージョンは8.0.23、PHPのバージョンは7.3.28で、MySQLのデフォルトの認証はcacing_sha2_passwordだが、PHPは7.3でもこれに対応しておらずmysql_native_passwordらしい。

MySQLの認証方法変更

認証方法の確認。

rootの認証方法をmysql_native_passwordに変更しようとするが、エラー。

パスワードがポリシーに適合していない。これは新たにMySQLをインストールした時にある状況。パスワード検証内容を確認してみる。

設定するパスワードに合わせてポリシーなどを変更。

改めてrootユーザーの認証方法を変更・確認。

これでPHP7.3以下で接続可能になる。

 

MySQL – パスワード検証

概要

MySQLでユーザーのパスワードを設定する際に、その長さや使われるべき文字数などについて求める内容を設定できる。設定内容は以下のとおり。

  • ポリシー:長さ、文字種類、辞書のいずれを使うか
  • 最小長さ
  • 大文字・小文字の最小数
  • 数字の最小数
  • 記号の最小数
  • 辞書ファイルへのパス

パスワード検証の確認

現在のパスワード検証の内容は以下で確認できる。

SHOW VARIABLES LIKE 'validate_password%';

それぞれの指定内容は以下のとおり。

check_user_name
ユーザー名と一致する場合に拒否するかどうか。
dictionary_file
パスワードチェックに用いる辞書へのパス。デフォルトでは空で辞書チェックは行われない。
length
パスワードの最小文字数。
mixed_case_count
パスワードポリシーがMEDIUM以上の場合に求める大文字・小文字の最小数。
number_count
パスワードポリシーがMEDIUM以上の場合に求める数字の最小数
policy
LOW(0):長さのみ
MEDIUM(1):長さ、数値・大文字・小文字・特殊文字
STRONG(2):長さ、数値・大文字・小文字・特殊文字、辞書ファイル
special_char_count
ポリシーがMEDIUM以上の場合に求める記号の最小数。

パスワード検証内容の変更

それぞれの検証内容は、対応する変数の値をセットすることで変更する。

パスワードポリシー

SET GLOBAL validate_password.policy=LOW/MEDIUM/STRONG;

最小長さ

SET GLOBAL validate_password.length=最小長さ;

など。

 

Laravel – コマンド

基本コマンド

バージョン確認

プロジェクトディレクトリー以下で実行。

php artisan --version

php artisan -V

プロジェクト作成

プロジェクトを作成するディレクトリー下で実行。

composer create-project laravel/laravel project_name <--prefer-dist v.*>

ビルトインサーバー

起動

プロジェクトディレクトリー以下で実行。

php artisan serve --host=HOST/IP --port=PORT

終了

CTRL-C

 

Laravel – ディレクトリー・ファイル構成

概要

Laravelのプロジェクトを作成した際、最初に配置されるディレクトリーとファイル。

ディレクトリー

add controllerやmodelのファイルなどが配置される。
bootstrap アプリケーション起動時にアプリケーションインスタンスを生成するコードが配置されている。
config 各種設定ファイルが配置される。
database データベースのマイグレーションファイル、シードファイルなどが配置される。
public アプリケーションのドキュメントルート。index.phpや.htaccessファイルが配置されている。
resources views、js、sassなどビューに関するディレクトリーが配置されている。
routes ルーティング関係ファイルが配置される。
storage アプリケーション、フレームワークにより保管されるデータ、ログなどが保管される。
tests 自動テストに関するコードが配置される。
vendor Laravel本体やパッケージ群が配置される。

ファイル

.editorconfig
.env 環境設定ファイル。
.env.example
.gitattributes Gitの設定ファイル。
.gitignore Git設定ファイルのうちバージョン管理から外すファイルを定義。
.styleci.yml
README.md
artisan Laravelコマンド実行のためのPHPスクリプト
composer.json Composerの設定ファイルで、パッケージの依存関係が定義される。
composer.lock パッケージのバージョンが自動的に書き込まれる。
package.json npmの設定ファイル
phpunit.xml PHPUnitの設定ファイル。
server.php ビルトインサーバーの設定(Apacheのmod_rewrite対応)
webpack.mix.js Webpack設定ファイル

Linux – sed – 雛形

ls -alの結果の活用

出力行の絞り込み

ディレクトリーの結果だけ取り出すには

ls -al | sed -n '/^d/p'

ファイルの結果だけ取り出すには

ls -al | sed -n '/^-/p'

ディレクトリー名・ファイル名を取り出す

ディレクトリー名とファイル名だけ取り出すには

ls -al | sed 1,3d | sed 's/^.*[0-9][0-9]:[0-9][0-9] //'

ファイル名だけ取り出すには

ls -al | sed -n '/^-/p' | sed 's/^.*[0-9][0-9]:[0-9][0-9] //'

ディレクトリー名だけ取り出すには

ls -al | sed 1,3d | sed -n '/^d/p' | sed 's/^.*[0-9][0-9]:[0-9][0-9] //'

 

Linux – sed

使い方

sed [オプション] スクリプト [ファイル]

  • オプションは必要に応じて指定する
  • ファイルは入力ファイルがある場合に指定する

出力結果の加工

たとえばlsの結果を加工したいような場合、パイプでsedに渡す。

コマンド | sed ...

その結果をファイルに書きだしたい場合はリダイレクト。

コマンド | sed ... > ファイルパス

ファイルの加工

ファイルを入力としてsedで加工したい場合、置換などの表現の後にファイルを指定するか、ファイル出力をパイプでsedに渡す。

sed ... ファイル

cat ファイル | sed ...

ファイル書き換えは-iオプション

同じファイルを置換結果などで書き込む場合、リダイレクトを使うとファイルの内容が空になってしまう。

sed ... ファイル > ファイル

同じファイルの内容を書き換えるには-iオプションを指定する。

sed -i sed ... ファイル

異なるファイルに書き込む場合にはリダイレクトを使ってよい。

sed ... ファイル > 別のファイル

スクリプトの区切り文字は任意

たとえば置換スクリプトs/.../.../gなどの区切り文字は、必ずしも/である必要はない。

s1...1...1gなどスクリプトの内容に表れない任意の文字を使える。

'"で囲む意味

次のような場合はスクリプトをシングルクォート(')かダブルクォート(")で囲む。

  • 置換表現などにスペースを含む場合
  • $などシェルに解釈される文字を含む場合

シングルクォートで囲むと、シェルによる解釈は行われず単なる文字列として扱われ、sedのスクリプトとして解釈される。以下の表現では、sedが$を最終行のアドレスとして扱い、ファイルの最後の1行のみが表示される。

sed -n '$p' ファイル

ダブルクォートで囲むと、シェルの変数($...)などの意味を持つものは処理される(変数が展開されるなど)。たとえば以下の表現はシェル変数$pと解釈され、それが定義されていなければ何も表示されない。

sed -n "$p" ファイル

シェルに解釈される文字を無効化するのには、シングルクォートで囲むほか、その文字をバックスラッシュでエスケープする方法もある。

sed -n \$p ファイル

スクリプト

例として以下のようなlsコマンドの結果をパイプでsedに渡す。

行抽出

以下の指定は、アドレスかパターンで指定された行を表示する。

sed [アドレスorパターン]p

ただしpコマンドは処理された行以外の行も表示されるため、-nオプションで処理された行のみ表示させる。

行番号指定

行抽出は-nオプションを付け、-n 行番号pとする。

sed -n 行番号p

2行目だけを取り出す例。

開始番号と終了番号を指定することもできる。

sed -n 開始番号,終了番号p

4~6行目を取り出す例。

最終行のみを指定する場合は$pとする。この場合はシェルが認識しないよう、$をエスケープするかスクリプト部分をシングルクォートで囲む。

sed -n '$p' または sed -n \$p

最終行を取り出す例。

ただし「最後からn行」といった指定はsedではできないため、tailコマンドを使う。

tail -n 行数

以下の例はlsコマンドの最後3行を表示させている。

-n 行数を指定せずtailだけにすると、デフォルトの10行となる。

パターン指定

/パターン/pでマッチしたパターンの行が対象となる。これに-nオプションを付けて、パターンにマッチした行のみ抽出する。

sed -n /パターン/p

以下はrwxという文字列を含む行のみ抽出している。

置換行のみ抽出

後述の文字置換・文字列置換された行のみを抽出する。

sed -n [y/s]/.../.../gp

以下の例では、rwxRWXに置換した行のみが表示される。

行削除

以下はアドレスやパターンにマッチする行を削除する。

sed [アドレスorパターン]d

行番号指定

sed 行番号dで指定した行を、sed 開始番号,終了番号dで指定した範囲の行を削除する。

以下の例ではls -alの結果から1~3行目を取り除いている。

パターン指定

/パターン/dでマッチするパターンを含む行を削除する。

sed /パターン/d

以下の例では、通常ファイルの出力結果を除いている。

文字置換

1文字置換

sed y/a/A/で、各行の文字aを全てAに置換する。

以下の例では、lsの結果中rの文字をRに置換している。

複数文字置換

sed y/abc/ABC/で、各行のaAに、bBに、cCに置換する。置換前の文字数と置換後の文字数は同じでなければならない。

以下の例では、lsの結果中rwxの文字をそれぞれRWXに置換している。

文字列置換

各行1つだけ置換

sed s/string/STRING/で、各行の最初に現れたstringSTRINGに置換する。

以下の例では各行最初のrootROOTに置換している。

全て置換

sed s/string/STRING/gと末尾にgを付けることで、各行の全てのstringSTRINGに置換する。

パターン削除

文字列置換の後半を//で空にすると、パターンにマッチした部分が削除される。

sed s/パターン//[g]

以下の例では、ls -alの結果から時刻の部分だけを取り除いている。

sedの正規表現の注意点

\wは使えるが\dは使えない

\wは通るが

\dは通らない

{, }\{, \}でエスケープ

エスケープしないと通らないが

エスケープすると通る

 

Linux – Laravelインストール

Composerのインストール

Composerのサイトを参考にしてComposerをインストールする。

Laravelのインストール

Composerを使ってインストールする。

以下の例はグローバルインストールの例だが、最初は以下のようなメッセージが大量に表示された。

zipとunzipが必要

zipとunzipのパッケージをインストールしていなかったので、改めてインストール。

一応はうまくインストールしてくれていた模様。

 

Laravel – プロジェクトの開始

プロジェクトの生成

composer create-project laravel/laravel laravel_test --prefer-dist 6.*

--prefer-distオプションはライブラリーの安定バージョンを指定。

コマンドを実行したディレクトリー下にプロジェクトディレクトリーが作成され、必要なディレクトリーとファイルが配置される。

タイムゾーンとロケール

config/app.phpの以下を変更する。

  • timezoneUTCからAsia/Tokyo
  • localeenからja

データベースの設定

.envファイル設定

.envファイルを修正し、DBMSやDB名などのパラメーターを設定する。

データベース作成

まずmysqlにログイン。

CREATE DATABASE.envで設定したデータベースを作成。

データベースが作成されているか確認。

mysqlから出て、アプリケーションディレクトリー下でマイグレーションを実行。”Migration table created successfully.”を確認。

mysqlでマイグレーションの結果生成されたテーブルを確認できる。

開発用サーバーの起動

普通の場合

以下のように指定して、ブラウザーでlocalhost:8000でアクセス。

Vagrantの場合

Vagrant仮想環境の場合はホストとポート番号を確認して指定する必要がある。

 

Vagrant – Laravelの開発用サーバー

VagrantでLaravelのサーバーを稼働させる場合、Vagrantで設定したホストとポートを指定する必要がある。

たとえばポートフォワーディングでポート3000を指定している場合。

ゲスト側のIPアドレスを確認。

これらのIPアドレスとポート番号を使ってサーバーを起動。

そしてホスト側のブラウザーからlocalhost:3000でアクセス。

 

Linux – Composerのインストール

概要

Vagrant上のCentOS7仮想環境にComposerをグローバルインストールした記録。

PHPを使ってダウンロード、インストールするのでLinuxの種類には依存しない。

手順の確認

実行スクリプト

ComposerのサイトDownloadの内容を確認。シンプルに進めるなら以下のスクリプトをターミナルで実行するよう書かれている。

それぞれphpのスクリプトを-rオプションで直接実行している。

  • 1行目はインストールファイルのダウンロード
  • 2行目はファイルの確認
  • 3行目でセットアップ実行
  • セットアップファイルの削除

オプション

composer-setup.phpを実行するときのオプションに以下が説明されている。

–install-dir
実行ファイルをインストールするディレクトリーを指定する。
php composer-setup.php --install-dir=bin
–filename
インストールする実行ファイル名を指定する。デフォルトはcomposer.phar
php composer-setup.php --filename=composer

その他に--version--helpも説明あり。

グローバルインストール

指定したファイルにローカルインストールする方法もあるが、ここでは/usr/local/binにグローバルインストールする。

セットアップ実行の際に、/usr/local/binに書き込むためroot権限で実行し、セットアップするディレクトリーとファイル名(composer)を指定している。

プロンプトにcomposerと入力してインストールされたことを確認。