Laravelのデバッグ方法について

Laravelのデバッグ方法について

ddヘルパーを使って、値を出力する

Laravelでもvar_dumpを使うことができますが、もっと見やすく出力できるddヘルパーというものが用意されています。

dd($hogo)

ddヘルパーに変数を渡して値を出力する

loggerヘルパーを使って、ログを出力できます。

loggerヘルパーを使うと簡単にログを出力することができます。

これを使うと、ファイルに出力してくれるので、こちらもデバッグや変数の内容を確認したい時には使うことができます。

logger()

渡す引数はddヘルパーと同じで、クラスのインスタンス変数でも文字列でも大丈夫です。

storage/logs/laravel.logにログが出力される。

storage/logs/laravel.logファイルについては、Laravelでエラーが出た時にもログが出力されるので解決する時に役に立ちます。

ログ出力する際には、他にも下記のようなメソッドが使用できるようになっています。

ログ出力する時の重要度に合わせて、メソッドを使いわけましょう。どのログレベルで出力するかは作成者が決めて使うようにします。

メソッド 内容
emergency システムが使用不可なレベル
alert    緊急に対処すべきレベル
critical 致命的なエラーレベル
error 一般的なエラーレベル
warning 警告レベル
notice  通知レベル
info    システム情報レベル
debug   デバッグ情報レベル

また、ログ出力するのにloggerヘルパー以外にも、Illuminate\Support\Facades\Logクラスを使用することも可能です。

こちらを使用する場合も、同じように記述することができます。

ヘルパーを使用せずにLogクラスを使うようにする場合はuse文を入れた後に、Log::debug($hoge);となります。

PHP関数、言語構造

  • PDOStatement::bindParam — 指定された変数名にパラメータをバインドする
public PDOStatement::bindParam(
    string|int $param,
    mixed &$var,
    int $type = PDO::PARAM_STR,
    int $maxLength = 0,
    mixed $driverOptions = null
): bool

PDO::prepare

  • PDO::prepare — 文を実行する準備を行い、文オブジェクトを返す
public PDO::prepare(string $query, array $options = []): PDOStatement|false

変数名->prepare();

PDOStatement::execute

public PDOStatement::execute(?array $params = null): bool

変数名->execute();

htmlspecialchars

  • htmlspecialchars — 特殊文字を HTML エンティティに変換する
htmlspecialchars(
    string $string,
    int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
    ?string $encoding = null,
    bool $double_encode = true
): string

trim

  • trim — 文字列の先頭および末尾にあるホワイトスペースを取り除く
trim(string $string, string $characters = " \n\r\t\v\x00"): string

empty

  • empty — 変数が空であるかどうかを検査する
empty(mixed $var): bool

mb_strlen

  • mb_strlen — 文字列の長さを得る
mb_strlen(string $string, ?string $encoding = null): int

文字列の長さを取得します。

filter_var

  • filter_var — 指定したフィルタでデータをフィルタリングする
filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed

preg_match

  • preg_match — 正規表現によるマッチングを行う
preg_match(
    string $pattern,
    string $subject,
    array &$matches = null,
    int $flags = 0,
    int $offset = 0
): int|false

getDatabaseConnection関数

session_start

  • session_start — 新しいセッションを開始、あるいは既存のセッションを再開する
session_start(array $options = []): bool

isset関数

  • isset関数とは、引数に指定した変数に値が設定されている、かつ、NULLではない場合にはtrue(正)の値を戻り値とします。

それ以外は、戻り値にfalse(偽)の値を返します。

bool isset($var1 [, $var2 …])

echo

  • echo — 1 つ以上の文字列を出力する
echo(string ...$expressions): void

ひとつ以上の(文字列として評価される)式を出力します。末尾に改行やスペースを付加することはありません。

foreach

foreach は、配列を反復処理するための便利な方法です。 foreach が使えるのは配列とオブジェクトだけであり、 別のデータ型や初期化前の変数に対して使うとエラーになります。 この構造には二種類の構文があります。

foreach (iterable_expression as $value)
    文
foreach (iterable_expression as $key => $value)
    文

最初の形式は、iterable_expression で指定した反復可能な値に 関してループ処理を行います。各反復において現在の要素の値が $valueに代入されます。

2番目の形式は、さらに各反復で現在の要素のキーを変数 $keyに代入します。

unset関数

  • unset — 指定した変数の割当を解除する
unset(mixed $var, mixed ...$vars): void

unset() は指定した変数を破棄します。

関数 unset() の内部動作は、 破棄しようとする変数の型に依存します。

PDOStatement::fetch

  • PDOStatement::fetch — 結果セットから次の行を取得する
public PDOStatement::fetch(int $mode = PDO::FETCH_DEFAULT, 
int $cursorOrientation = PDO::FETCH_ORI_NEXT, 
int $cursorOffset = 0): mixed

PDOStatementオブジェクトに関連付けられた結果セットから1行取得します。 mode パラメータは、PDO がその行をどの様に返すかを決定します。

password_verify

  • password_verify — パスワードがハッシュにマッチするかどうかを調べる
password_verify(string $password, string $hash): bool
  • password_verify()のカッコ内に引数を指定することで、password_verify 関数を利用することが可能です。
  • 引数とは、関数を利用する際に指定する値です。引数を変化させることで、柔軟に関数を操作することが可能です。

  • パスワードには、使用したパスワードを指定します。変数に代入したものを使用しても良いです。ハッシュ値には、password_hash() 関数で生成したハッシュ値を指定します。変数に代入したものを使用しても良いです。

  • パスワードとハッシュが適合する場合に TRUE、それ以外の場合に FALSE を返します。返すというのはプログラミング用語です、一般的な表現でいうと、結果を取得するというイメージです。

mb_substr

  • mb_substr — 文字列の一部を得る
mb_substr(
    string $string,
    int $start,
    ?int $length = null,
    ?string $encoding = null
): string
  • 文字数に基づきマルチバイト対応の substr() 処理を行います。位置は、 string の始めから数えられます。
  • 最初の文字の位置は 0、2 番目の文字の位置は 1、といったようになります。

PDO::lastInsertId

  • PDO::lastInsertId — 最後に挿入された行の ID あるいはシーケンスの値を返す
public PDO::lastInsertId(?string $name = null): string|false
  • 最後に挿入された行の ID、 あるいはシーケンスオブジェクトから次の値をを返します。 これは、構成しているドライバに依存します。 例えば PDO_PGSQL の場合、name パラメータにシーケンスオブジェクト名を指定する必要があります。

date

  • date — Unixタイムスタンプを書式化する
date(string $format, ?int $timestamp = null): string

指定された引数 timestamp (Unixタイムスタンプ) を、与えられた フォーマット文字列によりフォーマットし、日付文字列を返します。 タイムスタンプが与えられない場合は、現在の時刻が使われます。 つまり timestamp はオプションであり そのデフォルト値は time() の値です。

Unixタイムスタンプはタイムゾーンを処理しません。 タイムゾーン情報が付加された日付/時刻の情報を書式化するには、 DateTimeImmutable クラスや、 DateTimeInterface::format() を使って下さい。

strtotime

  • strtotime — 英文形式の日付を Unix タイムスタンプに変換する
strtotime(string $datetime, ?int $baseTimestamp = null): int|false

この関数は英語の書式での日付を含む文字列が指定されることを期待しており、 その書式を Unix タイムスタンプ (1970 年 1 月 1 日 00:00:00 UTC からの経過秒数) に変換しようとします。

baseTimestamp が指定された場合は、そのタイムスタンプを基準とした相対時刻のタイムスタンプに変換します。

baseTimestamp が指定されていない場合は、現在時刻を基準とした相対時刻のタイムスタンプに変換します。

パースされる日付を含む文字列の書式は、 サポートする日付と時刻の書式 で定義されており、考慮すべき微妙な点がいくつかあります。

サポートする日付と時刻の書式について、読んでおくことを強く推奨します。

警告
この関数が返す Unixタイムスタンプ は、タイムゾーンの情報を含んでいません。 
日付/時刻の情報を含めて計算するには、 より多くの機能がある DateTimeImmutable を使うべきです。

この関数の各パラメータでは、パラメータ内でタイムゾーンを指定しない限りはデフォルトのタイムゾーンを使います。

意図的にそうする場合は別として、パラメータごとにタイムゾーンを変えてしまったりしないように気をつけましょう。

デフォルトのタイムゾーンを定義する方法については date_default_timezone_get() を参照ください。

$_GET

  • $_GET — HTTP GET 変数

URL パラメータ (a.k.a クエリストリング) で現在のスクリプトに渡された変数の連想配列です。 この配列の値は、GETリクエストだけでなく、クエリストリングが含まれた全てのリクエストで収集されることに注意して下さい。

例1 $_GET の例

<?php
echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
?>

session_destroy

  • session_destroy — セッションに登録されたデータを全て破棄する
session_destroy(): bool

session_destroy()は、現在のセッションに 関連づけられたすべてのデータを破棄します。 この関数は、 セッションに関するグローバル変数を破棄しません。 また、セッションクッキーを破棄しません。 セッション変数の利用を再開するには session_start() をコールする必要があります。

SQL データベース構造の操作

データベースの追加

  • 構文
create datebase データベース名;

データベースオブジェクトに使って良い文字

  • 半角のアルファベット・・・ a,b,c
  • 半角の数字・・・0,1,2・・・
  • アンダースコア・・・_

  • ただし、名前の最初は半角のアルファベットとする。

テーブル構造の変更

  • 構文
alter table テーブル名 change 旧列名 新列名 データ型;

列名の削除

  • 構文
alter table テーブル名 drop 列名;

テーブルの削除

  • 構文
drop table テーブル名;

データベースの削除

  • 構文
drop database テーブルベース名;

操作の注意点

※注意事項:alter table, drop table, drop database等

  • 操作は基本的に取り消せない

    • 特に、実務において本番環境を操作する時は、サービスをメンテナンスモード にして、バックアップをとってから、alter table等を実行するのが安全
  • 想定外に時間が掛かりシステムトラブルになる場合も

    • テスト環境でalter tableのテストをして問題点を洗い出してから、本番環境で 実行するのがおすすめ。

SQL データの更新

新規データを1件追加する insert

  • 構文
insert into
  テーブル名 (列1, 列2, 列3, ・・・)
values
  (値1, 値2, 値3, ・・・)

注意点:列リストと、values句の値リストは、列数が一致している必要がある

列リストを省略して1件レコードを追加する。

  • values句に列の定義順、カンマ区切りで、値を設定
  • ただし、列を省略するには、条件がある。
  • テーブルの全列に対して、値を指定する必要がある。

行を複数追加する

  • 構文
insert into
  テーブル名 (列1, 列2, 列3, ・・・)
values
  (値1, 値2, 値3, ・・・),
 (値1, 値2, 値3, ・・・),
 (値1, 値2, 値3, ・・・);

MySQL,PostgreSQL, SQL Server, DB2では使用可能。Oracleでは使えない。

レコードの更新 update

  • 構文
update テーブル名 set 列1 = 値1, [列2 = 値2...]
  [where 条件式];

行の削除

  • 構文
delete from テーブル名[where 削除条件];

※注意点

  • deleteで削除したデータは、基本的には元に戻せない。
  • 大量のデータをdeleteする時に予想外に時間が掛かる場合がある。
  • うっかり、where句を指定し忘れると、テーブル全体が削除対象となる。

削除条件にサブクエリを使う

  • delete文を使用
  • 削除条件にサブクエリを使う

MySQL,PostgreSQL, Oracle, SQL Server, では動作する。DB2では動作しない。

SQL 条件分岐case

条件分岐case

  • 構文
case
  when 条件式1 then 値1       ・・・条件式1がtrue(真)ならば値1
  [when 条件式2 then 値2 ・・・]  ・・・条件式2がtrue(真)ならば値2
  [else 値3]            ・・・どれにも当てはまらなければ値3
end

[]の部分は省略可能。

最後のendは省略不可。

忘れやすいので注意!

SQL サブクエリ

サブクエリ

  • ある問い合わせの結果に基づいて、異なる問い合わせを行う仕組み

  • 構文

select
  列名, ...
from
  テーブル名
where
  列名 演算子(select 列名 from テーブル名2 ...);

スカラ・サブクエリ

  • 必ず1行1列だけの戻り値を返す、サブクエリのこと。
  • スカラとは単一のという意味
  • 絶対にサブクエリが複数行を返さないようにする

SQL ビュー

テーブルとビューの違いは?

  • テーブル

    • 実際のデータを保存
  • ビュー

    • ビューの中にはselect文が保存される
    • ビュー自体はデータを持たない。

ビューの制限

  • order b句が使えない

  • ビューに対する更新は不可能ではないが制限がある。

ビューのメリット

  • データを保存しないので、記憶装置の容量を節約できる。

  • よく使うselect文をビューにしておくことで、使い回しができる。

ビューのデメリット

  • パフォーマンス低下を招く場合がある

ビューの作成

  • 構文
create view ビュー名(<ビューの列名>,<ビューの列名2>, ,..)
as
<select文>

ビューの削除

  • 構文
 drop view ビュー名;