20210325のPHPに関する記事は9件です。

PHP5上級試験/準上級試験の上級合格に挑戦(13) プログラミングPHP第3版 1章〜2章

タイトルの通り。
プログラミングPHP第3版で、黒本にはなかったところをまとめていきたい。

1章PHPについて

  • PHP設定変更後はPHPは再起動が必要

1)クロスプラットフォーム(複数の異なるプラットフォームで動作する)のGUIアプリケーションを作れるのは?
2)PHPが動作するOSで、Unix系を3つ答えよ
3)PHPが動作するWebサーバーを3つ答えよ
4)PHPが動作するDBを7つ答えよ
5)DBの抽象化やエラー処理といった一般的な作業をやるPHPコードを集めたライブラリとは?
6)PHPを初めて考案した人物は?また何年か?
 
 
 

解答
1) PHP-GTK
※なお、GUIはGraphic User Interface:画面操作の略。反対はCUI(Command User Interface)、すなわちコマンドラインからの操作のこと。
2)Linux,FreeBSD,Solaris
3)Apache,Microsoft IIS,Netscape/iPlanetサーバー
4)MySQL/PostgreSQL/Oracle/Sybase/MS-SQL/DB2/ODBCに準拠するDB/SQLite/MongoDB(NoSQL)
5)PEAR(PHP Extension and Application Repository)
6) Rasmus Lerdorf(ラズマス・ラードフ)・1994年

2章PHP言語の基本

  • PHPの終了タグ(?>)の直前のセミコロンは省略可能 (2.1.2 命令文とセミコロン)
  • 空白文字はPHPの動作に影響を及ぼさないので字下げを適切にして読みやすく (2.1.3 空白と改行)
  • コメントは//(C++形式)だけでなく、#(シェル形式)もあるし/~/(C形式、CSS形式)もある (2.1.4 コメント)
  • コメントは上記の組み合わせも可能 (2.1.4 コメント)
  • 式は左から右へと進んでいく つまり、 2/2*2の結果はリアルで言うと(2/2)*2と同じ結果になる。(2.4.2 演算子の優先順位)

1)constとdefine()の違いはなにか? (2.1.6.4 定数)
2)スカラー型とは? (2.2 データ型)
3)整数型/浮動小数点/文字列/論理値/配列かどうかを調べる関数は? (2.2 データ型)
4)浮動小数点のうち広い範囲の数値を扱う上で、必要なモジュールとは? (2.2 データ型)
5)NULLは0であるか否か? (2.2.9 NULL)
6)変数に値が入っているかどうかを調べる関数、変数を空っぽにする関数は? (2.3.4 ガベージコレクション)
7)文字列と数値を比較する時、どのように比較されるか? (2.4.4 暗黙のキャスト)
 
 
 
 

解答
1)defineは関数constは構文。したがって、constは返り値や変数などを使うことができない。関数内でも使えない。
 逆にdefineはクラス内での定数定義には使えない。といった違いがある。
2)単一の数値を取る型のこと。
3)IsInt(),IsInteger() / Isfloat(),isReal()/IsString()/IsBool()/IsArray()
4)BC拡張モジュール・GMBモジュール
5)NULLは0ではない
6)isset()、unset()
7)文字列は数値としては0となり、必ず数値のほうが大きいという判断になる。 

  • 値を返すのはreturnがあるが、返さなくてもいい終了ワードはexitになる。die()はそのexitに文字列を渡す 例は下記(2.5.8 exitとreturn)
index.php
$db = mysql_connect("localhost",$USERNAME,$PASSWORD)
  or die("DB接続不備");

index.php
echo 3 . 2.74;
print "<br>";
echo "9 Lives" -1;
print "<br>";
echo "3.14 Pies" * 2;
print "<br>";
echo "9 Lives" - 1;
print "<br>";
echo "1E3 Points of Light" + 1;

function double($i) {
    return $i*2;
}
$b = $a = 5;
echo '$a:' . $a;
print "<br>";
echo '$b:' . $b;
print "<br>";
$c = $a++;
echo '$c:' . $c;
print "<br>";
$e = $d = ++$b;
echo '$e:' . $e;
print "<br>";
echo '$d:' . $d;
print "<br>";
$f = double($d++);
echo '$f:' . $f;
print "<br>";
$g = double(++$e);
echo '$g:' . $g;
print "<br>";
$h = $g += 10;
echo '$h:' . $h;

$i = 'a';
$i++;
echo $i;
print "<br>";
$i = 'z';
$i++;
echo $i;
print "<br>";
$i = 'spaz';
$i++;
echo $i;
print "<br>";
$i = 'K9';
$i++;
echo $i;
print "<br>";
$j = ($k = 4) + 5;
echo $j;
print "<br>";
echo $k;
print "<br>";
$l = "Hello ";
$l .= "There!";
echo $l;

出力は

32.74
8
6.28
8
1001

$a:5
$b:5
$c:5
$e:6
$d:6
$f:12
$g:14
$h:24

b
aa
spba
L0
9
4
Hello There!

※ 最初は連結前にそれぞれ文字列に変換
※ 数値っぽいものは数値として変換される
※ 1E3は1000として変換されるため
※ ++\$varの場合、先に加算される \$var++の場合、後で加算される
bとcは後で加算されてるのでcはもとの5が入る。
eとfは前で加算されてるので、eとfは5に+1した6が入る。
当然、fとgもそのように計算される。 
* 最後の段は文字列もインクリメントされ、26進数を扱っているかのようになる

関数

1)関数名が文字かアンダースコアで始まり、その後に任意の数の文字・ 数字・あるいはアンダースコアが続くもの
 →これを正規表現で表すと?
2)以下のコードはどう出力される?

index.php
<?php

//(1)
function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);
echo $a;
print '<br>';

//(2)
function &func(&$x){
  return $x;
}

$b = 1;
$c = & func($b);
$b = 2;
echo $c;
print '<br>';

//(3)
function &funct(&$y){
  echo $y + 2;
  print '<br>';
  return $y;
}

$c = 2;
$d = & funct($c);
$c = 5;
echo $d;

//4)
$foo = "bar";
$$foo = "baz";
echo $bar;
?>

解答
1)^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*\$.
つまり、アルファベット(大文字小文字)、アンダースコア、0x7Fから0xFFまでの文字のいずれか。
2文字目からはこれらに加えて0から9までの数値が入る。
2)
6
2
4
5
baz
※参照渡しで、たしかに関数内では4になるのだが、なぜか外だと5になる。
関数内がどんな数式であっても、結局は代入された\$cの値が\$dとなる。
()内で代入がされたら、それはそれで$k+5されると考えれば良い

ビット演算子

2進数の計算に使う。そもそもプログラムはビット、つまり0と1だけで動いている。
6つしかないので覚えてしまおう。

1.論理積
2.論理和
3.排他論理和
4.否定
5.左シフト
6.右シフト

それぞれ記号と意味を答えよ。
参照:https://www.sejuku.net/blog/78679
ありがとうございます!
 
 
 
解答
1.&(アンパサンド) ・・・1と1の場合は1でそれ以外は0
2.|(パイプ)    ・・・0と0の場合は0でそれ以外は1
3.^(キャレット) ・・・両方同じ場合は0、それ以外は1
4.~(チルダ) ・・・すべての値が反転
5.<<     ・・・左に値をずらし、空いた桁は0
6.>>       ・・・右に値をずらし、余った桁は無視(なくなる)、空いた桁は0

※代入演算子もあるが、+=とかと同じ挙動なので省略
※参考 ※覚えておくとビット計算のときに役立つはず
bindec() 2進数を10進数に変換する
decbin() 10進数を2進数に変換する

キャスト演算子

これをつけると特定の型として扱うことができる。
それぞれの予期しない数値になることもあり、下記の記事を参考にどういう結果になるのか
確認しておく。

参照:@mpywさん
 https://qiita.com/mpyw/items/3aac811629622f7f4d8b

その他演算子

  • エラー抑制演算子 →@
  • 実行演算子 → `(バックティック)で囲まれた文字列をシェルコマンドとして実行
  • 条件演算子 →要するに三項演算子
  • 型演算子 →instanceof クラスのインスタンスを調べる際に使用

Switch

Caseが以下のように2つ並んでいる場合「または」という意味になる

index.php
// 'sivel'または'brutus'のときにYesとプリント
switch ($name){
     case 'sivel' :
     case 'brutus':
       print 'yes';
       break;
     default :
       print 'no';
       break;
}

continue & breakの数値オプション

数値オプションは数値の分だけループから抜けることを意味する。
これはcontinueでも同じ。

index.php
$i = 0;
$j = 0;

while ($i < 10){
  while ($j < 10){
    if ($j == 5){
       break 2; //2種類のwhileループから抜けることを意味する
    }
   $j++;
  }
 $i++;
}

echo "{$i}, {$j}";

出力
0,5

でもcontinueはもっと複雑かも。

index.php
$i = 0;
$j = 0;

while ($i < 10){
  $i++;
  while ($j < 10){
    if ($j == 5){
       continue 2; //2種類のwhileループから抜けることを意味する
    }
   $j++;
  }
}

echo "{$i}, {$j}";

出力
10,5
continueは一旦その場はスキップするという処理。
それを2回分する場合、一番上のwhileの初めまで戻るということ。
つまり\$iはどんどん増えていくが、\$jはいつまでたっても5以上にはならず、永遠にスキップし、
\$iの条件式が終わるまで続く。
そのため10,5という結果になる。

declare文

declare 文は、あるコードブロックの中に 実行ディレクティブ(現在はticks、 encoding、 strict_types をセットするというもの。
オプションは実行する回数になる。
この記述がスクリプト冒頭にない場合はphp.iniのzend.script_encodingの設定が元になる。

ticks

・declareが宣言されてるコードで、N個の低レベル tick 可能な文を実行するごとに 発生するイベントのことです。Nの値は declareブロックのディレクティブの箇所で ticks=Nのように 指定します。(下記)
ただし、条件式や引数式などは tick できない。
イベントごとにコールされる関数はtick_handler()で作成し、それをregister_tick_function()でコールする。

index.php
<?php


declare(ticks=1);

// tick イベントごとにコールされる関数
function tick_handler()
{
    echo "tick_handler() called";
    print "<br>";
}

register_tick_function('tick_handler'); // tick イベント発生

$a = 1; // tick イベント発生

if ($a > 0) {
    $a += 2;   // tick イベント発生
    print($a . "<br>"); // tick イベント発生
}

?>

出力は
tick_handler() called
tick_handler() called
tick_handler() called
3
tick_handler() called

register_tick_functionでtickイベントごとにコールされる関数を登録、
それ以降行ごとにtickイベントが発生してコールされている。

encording

スクリプトのエンコーディングをスクリプトごとに指定するために使う。

index.php
declare(encoding='ISO-8859-1');
// ここにコードを書きます

strict_type(厳密な型付け)

マクロで言う、Option Explicitみたいなもの。
型宣言に正確に対応する値のみを受け入れ、 そうでない場合、TypeError が発生する。

index.php
declare(strict_types=1);

SGML形式/ASP形式/<script>タグ/直接入力

  • SGML形式はショートタグと呼ばれ、「<? echo "..." ?>」とかく はじめのタグにphpがないだけ
  • --enable-short-tagsオプションか、short_open_tagを有効にする
  • ASP形式は「<% echo "..." %>」
  • --enable-asp-tagsオプションか、asp_tagsを有効にする
  • スクリプト形式はJSと同じように<script language="php"></script>とし、その中に書く
  • 直接入力は「<?= "DAWN"; ?>」みたいな形式。これはASP形式でも可能。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS DynamoDBに接続する

AWS DynamoDBに接続する

AWS DynamoDBを使用するWebサイトを開発するにあたって、
まずはサイトからDynamoDBに接続するための設定を行う必要がある。
いくつか方法があるようだが、マシンにAWSへの接続情報を持たせる方法についてメモ。

ローカルに開発環境を作成するための備忘録。

AWS認証情報の取得

まずは、AWSに接続するためのアクセスキー(認証情報)を作成し、保存する。

1.AWS マネジメントコンソール にサインインし、IAM コンソールを開く。
2.ユーザー→認証情報→アクセスキーの作成をクリック
3.アクセスキーが生成され、表示されるのでコピペするかCSVダウンロードするなりして保存

認証情報をサーバーに設定する

取得したAWSアクセスキーを、サーバーの環境変数に設定する。

AWS_ACCESS_KEY_ID:<取得したAccess key ID>
AWS_SECRET_ACCESS_KEY:<取得したSecret access key>

以上で、Webサーバーへの認証情報の設定は完了!
DynamoDBにつながるようになったよ!

試してみた環境(ローカルの開発環境)

 Windows10
 PHP/Laravel/Vue.js

参考

公式ドキュメントのこのあたり
DynamoDB (ウェブサービス) のセットアップ
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SettingUp.DynamoWebService.html#SettingUp.DynamoWebService.GetCredentials
環境変数からの認証情報の使用
https://docs.aws.amazon.com/ja_jp/sdk-for-php/v3/developer-guide/guide_credentials.html

 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel入門書 出版しました。【動かして学ぶ!Laravel開発入門】原稿は3年間の授業で積み上げた資料が元に (動画あり)

◇自己紹介

はじめまして。著者、山崎です。『動かして学ぶ!Laravel開発入門』を書きました。

QiitaではこんなLaravel記事を書いてきました。

更新!!Laravel6/7 (laravel/ui)でのLogin機能の実装方法

Laravel8 : 新ログイン「jetstream」を早速試してみたメモ

Laravel8 (laravel/ui)でのLogin機能の実装方法

Laravel DB.com 操作マニュアル。 〜コード書かずに超スピード開発(DEMO動画あり)〜

もしかしたら、PHP/Laravel系の人では見ていただいた記事もあるのではと思います。
なので、Laravel好きなPHPerと見ていただいて良いと思います(^^)

◇なぜ出版することに?

個人として大学・大学院・スクールとプログラミング系の講義を受け持っており、
3年前、Laravelの授業内容を新しく作るのがきっかけで授業資料として書き始めました。

ちなみに、授業資料作成の流れは、Documentページを見ながら1つのアプリケーションを構築し、その手順(コマンド・画面遷移等...)を学生にも分かりやすく、イメージがつきやすいように「まとめ」ていくのが私流です。(それを何十回もスパイラルに繰り返し、情報を整理していき、見せれる段階まで持っていきます)

Laravel授業やるようになり継続的にアウトプット、Qiita、Twitter、LaravelDB.comの運用、PHPカンファレンス等でLaravelについて発信してたので、たまたま編集者の方からお声がけいただいた次第です。

授業資料も、たまたまWordに纏めていったのが功を奏した感じです。
書籍の場合txtやWord等で編集者さんに渡します。パワポはNGですね(今まで3社で本を出しましたが、私が関わってきた編集者さんでパワポOKだった人はいません)。

3年間、授業資料としてアップデートを重ねてきた内容で、
「初めてLaravelを学習」するための、必要・不必要な情報の整理ができた資料がほぼ完成されていたので、そのままを本用に変更していった感じです。

3年の積み重ねですね。。。
本を書くために執筆したというよりは初学者に作ってもらうための資料が本になったと言えるかもしれません。

◇本の開発環境

  • 受業人数多い&OS・バージョン、バラバラ問題:
    前述のとおり私は大学・院・スクールでも教えてますが、学生はWindows率が多い印象をもっています。正直、OSもスペックもバージョンもバラバラです。統一して同じ画面で授業となると、それも何十人も同時となると、環境を合わせるのが、かなり難しいんですね。もちろんスキルもバラバラ。

  • Cloud9を採用
    そこで、AWS/Cloud9であれば「同じ環境、同じコマンド、同じ画面」全て統一して進められることで採用しました。
    ※3年前はCloud9はAWSに買収される前でしたので、無料で簡単にアカウントも発行できました。今のCloud9とは少し違いました。
    現在は、AWSと統合してAWSのアカウントが必要です。

  • 学生の場合
    「学生用アカウント」で登録できるのでクレジットカード登録不要(先生側から発行が可能)

  • 一般の場合
    クレジットカード登録は必要ですが「12ヶ月無料枠(1ヶ月750時間無料✕12ヶ月)」があるので、無料枠内の設定で学べます。

  • 「12ヶ月無料枠(1ヶ月750時間無料✕12ヶ月)」
    1ヶ月(31日)✕24時間 = 744 なので、Cloud9の場合は設定を変えなければ無料枠を超えることはありません。本書でも、今回の動画でも解説しています。

 【無料枠の設定は「本書・以下動画」でも解説してます】

◇本のサンプルコード

  • シンプルなCRUD:初学者には「できるだけ少ない情報」で完結できるのが良いと考えているからです。
  • Githubに「サンプルコード」と「コマンドリスト」を用意しています(コピーして使用できます)。

◇初学者の成長に「必要なもの」に焦点を当ててます

  • 最小の単位で挫折せずに「一度作り切る」こと。
  • 成長に必要な「小さな成功体験」をしてもらうこと。

クラウド環境初めての人のために動画で解説

・クラウド無料枠の設定ポイント
・環境構築
書籍で詳しく解説してるので「動画はあくまでも流れを見る」感じです(書籍2~3章)。

※AmazonLinux2を使用する場合:https://youtu.be/ISiU3nCSgh0

最後に、フレームワークの学習ポイント

「途中で止まらないこと」です。100%理解して進むことは不可能ですので、半信半疑でOK!!まずは一度、書籍を終わらせてそれを「3回くらい」繰り返します。何と!それで理解してるのです!!それがフレームワークを覚えるコツです。
「NG: 理解してから作る」→ 「Good:作って理解する」が正しい学び方の1つです!

以上

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel入門書 出版しました。【動かして学ぶ!Laravel開発入門】原稿は3年間の授業で積み上げた資料が基に (動画あり)

◇自己紹介

はじめまして。著者、山崎です。『動かして学ぶ!Laravel開発入門』を書きました。

QiitaではこんなLaravel記事を書いてきました。

更新!!Laravel6/7 (laravel/ui)でのLogin機能の実装方法

Laravel8 : 新ログイン「jetstream」を早速試してみたメモ

Laravel8 (laravel/ui)でのLogin機能の実装方法

Laravel DB.com 操作マニュアル。 〜コード書かずに超スピード開発(DEMO動画あり)〜

もしかしたら、PHP/Laravel系の人では見ていただいた記事もあるのではと思います。
なので、Laravel好きなPHPerと見ていただいて良いと思います(^^)

◇なぜ出版することに?

個人として大学・大学院・スクールとプログラミング系の講義を受け持っており、
3年前、Laravelの授業内容を新しく作るのがきっかけで授業資料として書き始めました。

ちなみに、授業資料作成の流れは、Documentページを見ながら1つのアプリケーションを構築し、その手順(コマンド・画面遷移等...)を学生にも分かりやすく、イメージがつきやすいように「まとめ」ていくのが私流です。(それを何十回もスパイラルに繰り返し、情報を整理していき、見せれる段階まで持っていきます)

Laravel授業やるようになり継続的にアウトプット、Qiita、Twitter、LaravelDB.comの運用、PHPカンファレンス等でLaravelについて発信してたので、たまたま編集者の方からお声がけいただいた次第です。

授業資料も、たまたまWordに纏めていったのが功を奏した感じです。
書籍の場合txtやWord等で編集者さんに渡します。パワポはNGですね(今まで3社で本を出しましたが、私が関わってきた編集者さんでパワポOKだった人はいません)。

3年間、授業資料としてアップデートを重ねてきた内容で、
「初めてLaravelを学習」するための、必要・不必要な情報の整理ができた資料がほぼ完成されていたので、そのままを本用に変更していった感じです。

3年の積み重ねですね。。。
本を書くために執筆したというよりは初学者に作ってもらうための資料が本になったと言えるかもしれません。

◇本の開発環境

  • 受業人数多い&OS・バージョン、バラバラ問題:
    前述のとおり私は大学・院・スクールでも教えてますが、学生はWindows率が多い印象をもっています。正直、OSもスペックもバージョンもバラバラです。統一して同じ画面で授業となると、それも何十人も同時となると、環境を合わせるのが、かなり難しいんですね。もちろんスキルもバラバラ。

  • Cloud9を採用
    そこで、AWS/Cloud9であれば「同じ環境、同じコマンド、同じ画面」全て統一して進められることで採用しました。
    ※3年前はCloud9はAWSに買収される前でしたので、無料で簡単にアカウントも発行できました。今のCloud9とは少し違いました。
    現在は、AWSと統合してAWSのアカウントが必要です。

  • 学生の場合
    「学生用アカウント」で登録できるのでクレジットカード登録不要(先生側から発行が可能)

  • 一般の場合
    クレジットカード登録は必要ですが「12ヶ月無料枠(1ヶ月750時間無料✕12ヶ月)」があるので、無料枠内の設定で学べます。

  • 「12ヶ月無料枠(1ヶ月750時間無料✕12ヶ月)」
    1ヶ月(31日)✕24時間 = 744 なので、Cloud9の場合は設定を変えなければ無料枠を超えることはありません。本書でも、今回の動画でも解説しています。

 【無料枠の設定は「本書・以下動画」でも解説してます】

◇本のサンプルコード

  • シンプルなCRUD:初学者には「できるだけ少ない情報」で完結できるのが良いと考えているからです。
  • Githubに「サンプルコード」と「コマンドリスト」を用意しています(コピーして使用できます)。

◇初学者の成長に「必要なもの」に焦点を当ててます

  • 最小の単位で挫折せずに「一度作り切る」こと。
  • 成長に必要な「小さな成功体験」をしてもらうこと。

クラウド環境初めての人のために動画で解説

・クラウド無料枠の設定ポイント
・環境構築
書籍で詳しく解説してるので「動画はあくまでも流れを見る」感じです(書籍2~3章)。

※AmazonLinux2を使用する場合:https://youtu.be/ISiU3nCSgh0

最後に、フレームワークの学習ポイント

「途中で止まらないこと」です。100%理解して進むことは不可能ですので、半信半疑でOK!!まずは一度、書籍を終わらせてそれを「3回くらい」繰り返します。何と!それで理解してるのです!!それがフレームワークを覚えるコツです。
「NG: 理解してから作る」→ 「Good:作って理解する」が正しい学び方の1つです!

以上

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【動かして学ぶ!Laravel開発入門】原稿は3年間の授業で積み上げた資料が基に (動画あり)

◇自己紹介

はじめまして。著者、山崎です。『動かして学ぶ!Laravel開発入門』を書きました。

QiitaではこんなLaravel記事を書いてきました。

更新!!Laravel6/7 (laravel/ui)でのLogin機能の実装方法

Laravel8 : 新ログイン「jetstream」を早速試してみたメモ

Laravel8 (laravel/ui)でのLogin機能の実装方法

Laravel DB.com 操作マニュアル。 〜コード書かずに超スピード開発(DEMO動画あり)〜

もしかしたら、PHP/Laravel系の人では見ていただいた記事もあるのではと思います。
なので、Laravel好きなPHPerと見ていただいて良いと思います(^^)

◇なぜ出版することに?

個人として大学・大学院・スクールとプログラミング系の講義を受け持っており、
3年前、Laravelの授業内容を新しく作るのがきっかけで授業資料として書き始めました。

ちなみに、授業資料作成の流れは、Documentページを見ながら1つのアプリケーションを構築し、その手順(コマンド・画面遷移等...)を学生にも分かりやすく、イメージがつきやすいように「まとめ」ていくのが私流です。(それを何十回もスパイラルに繰り返し、情報を整理していき、見せれる段階まで持っていきます)

Laravel授業やるようになり継続的にアウトプット、Qiita、Twitter、LaravelDB.comの運用、PHPカンファレンス等でLaravelについて発信してたので、たまたま編集者の方からお声がけいただいた次第です。

授業資料も、たまたまWordに纏めていったのが功を奏した感じです。
書籍の場合txtやWord等で編集者さんに渡します。パワポはNGですね(今まで3社で本を出しましたが、私が関わってきた編集者さんでパワポOKだった人はいません)。

3年間、授業資料としてアップデートを重ねてきた内容で、
「初めてLaravelを学習」するための、必要・不必要な情報の整理ができた資料がほぼ完成されていたので、そのままを本用に変更していった感じです。

3年の積み重ねですね。。。
本を書くために執筆したというよりは初学者に作ってもらうための資料が本になったと言えるかもしれません。

◇本の開発環境

  • 受業人数多い&OS・バージョン、バラバラ問題:
    前述のとおり私は大学・院・スクールでも教えてますが、学生はWindows率が多い印象をもっています。正直、OSもスペックもバージョンもバラバラです。統一して同じ画面で授業となると、それも何十人も同時となると、環境を合わせるのが、かなり難しいんですね。もちろんスキルもバラバラ。

  • Cloud9を採用
    そこで、AWS/Cloud9であれば「同じ環境、同じコマンド、同じ画面」全て統一して進められることで採用しました。
    ※3年前はCloud9はAWSに買収される前でしたので、無料で簡単にアカウントも発行できました。今のCloud9とは少し違いました。
    現在は、AWSと統合してAWSのアカウントが必要です。

  • 学生の場合
    「学生用アカウント」で登録できるのでクレジットカード登録不要(先生側から発行が可能)

  • 一般の場合
    クレジットカード登録は必要ですが「12ヶ月無料枠(1ヶ月750時間無料✕12ヶ月)」があるので、無料枠内の設定で学べます。

  • 「12ヶ月無料枠(1ヶ月750時間無料✕12ヶ月)」
    1ヶ月(31日)✕24時間 = 744 なので、Cloud9の場合は設定を変えなければ無料枠を超えることはありません。本書でも、今回の動画でも解説しています。

 【無料枠の設定は「本書・以下動画」でも解説してます】

◇本のサンプルコード

  • シンプルなCRUD:初学者には「できるだけ少ない情報」で完結できるのが良いと考えているからです。
  • Githubに「サンプルコード」と「コマンドリスト」を用意しています(コピーして使用できます)。

◇初学者の成長に「必要なもの」に焦点を当ててます

  • 最小の単位で挫折せずに「一度作り切る」こと。
  • 成長に必要な「小さな成功体験」をしてもらうこと。

クラウド環境初めての人のために動画で解説

・クラウド無料枠の設定ポイント
・環境構築
書籍で詳しく解説してるので「動画はあくまでも流れを見る」感じです(書籍2~3章)。

※AmazonLinux2を使用する場合:https://youtu.be/ISiU3nCSgh0

最後に、フレームワークの学習ポイント

「途中で止まらないこと」です。100%理解して進むことは不可能ですので、半信半疑でOK!!まずは一度、書籍を終わらせてそれを「3回くらい」繰り返します。何と!それで理解してるのです!!それがフレームワークを覚えるコツです。
「NG: 理解してから作る」→ 「Good:作って理解する」が正しい学び方の1つです!

以上

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【laravel】`base table or view already exists 1050 table 'users' already exists`が出た時の、php artisan migrate:fresh以外の解決法

はじめに

 laravelでmigrationをタイポで間違えて、やり直した際に、base table or view already exists 1050 table 'users' already existsが出た際に、よくある解決法が、php artisan migrate:fresh

でも、ローカルのDBをリセットしたくない!! って思いませんか。
そんな思いを持った私が見つけたもう一つの解決方法です!!

ぜひ、php artisan migrate:freshをせずに、マイグレーションを成功させましょう!

前提

環境

PHP 7.4.16
Laravel 6.20.17
mysql 8.0.23
nginx 1.18.0

作りたいテーブル

location_tagテーブル

カラム名 外部キー
id int
location_id int
tag_id int

エラー文 (php artisan migrate 実行時)

   Illuminate\Database\QueryException  : SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'location_tag' already exists (SQL: create table `location_tag` (`id` bigint unsigned not null auto_increment primary key, `location_id` bigint not null, `tag_id` bigint not null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8mb4 collate 'utf8mb4_unicode_ci')

解決方法

1

php artisan tinkerで`tinker開く

2

テーブルが存在するか確認する

$Schema::hasTable("location_tag");
//location_tagはデーブル名
=> true

3

特定のテーブルだけ削除する

$Schema::drop("location_tag");

4

テーブルが消えたか確認する

$Schema::hasTable("location_tag");
//location_tagはデーブル名
=> false

5

tinkerを終了し、マイグレーションの状態を確認する

php artisan migrate:status

6

マイグレーションをrollbackする

php artisan migrate:rollback

7

再度、migrateする

php artisan migrate

これにて完了!!

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】「ヘルパ」PHP関数を使っていこう

今回はヘルパ関数について改めて触れる機会があったので
忘備録としてまとめておく。
公式を参考にしているのでより正確な解釈を知りたい方は
最後にリンクを載せてますのでそちらを御覧ください!

「ヘルパ」PHP関数とは

Laravelで定義されている便利なグローバル関数。
例えばよく使うものでいくと
autholdenvあたりがすぐに触れるでしょうか。
ちなみに僕は上記の関数は使ってましたがグローバル関数としての認識をもって使ってませんでした。
極端に詳しく調べなくてもいいかと思いますが仕組みを理解して使うと
簡潔な実装につながるかと思うので機会があれば処理を追ってみるといいでしょう。

様々な関数

割とたくさんの関数があるのでよく使うものを纏めておきます。

// 指定された変数の内容を表示し、スクリプトの実行を停止します。
dd($value);

// 環境変数の値を取得します。取得できない場合はデフォルト値を返します。
env('APP_ENV', 'production');

// セッションに一時保持データーとして保存されている直前の入力値を取得します。
old('value', 'default');

// Authenticatorインスタンスを返します。Authファサードの代わりに使用できます。
auth()->user();

// viewインスタンスを返します。
view('auth.login');

// 指定値を返します。関数の2番目の引数としてクロージャを渡たすと、
// クロージャが実行され、その戻り値を返します
$callback = function ($value) {
    return (is_numeric($value)) ? $value * 2 : 0;
};
$result = with(5, $callback);

// 指定した名前付きルートのURLを生成します。
route('route.name', ['id' => 1]);

// 設定変数の値を取得します。
// 設定値はファイル名とアクセスしたいオプションを「ドット」記法で指定します。
// デフォルト値が指定でき、設定オプションが存在しない時に返されます。
config('app.timezone', $default)

上記以外にも便利な関数はたくさんあります。
ぜひともまずは使ってみる、試してみることをやっていきましょう!

参考
laravel.jp

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

RubyとPHPは何が違うのか、と聞かれたら

私は未経験からエンジニアを目指している人間だが、もし同じ境遇であればちょっと読んでみて欲しい、、、。

まず、なぜこんな記事を書くのかというところからだが、とある企業の面接を受けた時にこう聞かれて、上手く答えられなかったからだ。

「今まではRubyを勉強してきて、現在はPHPを勉強しているということですが、RubyとPHPの言語の違いは何かありますか?」

質問された瞬間、「あ、これ答えられない。」と思ってしまって、本当にこんな質問だったか、答えた内容が的を得ていたかもはっきり思い出せない。。。
学んでいる上では、Rubyの方が可読性が高い、、気がします。みたいなことを言っていた気がする。

そもそも、自分がRubyからPHPを学び始めたのは、PHPのシェアが多いから、使えて損はないだろうという浅い考えだった。

エンジニアを目指すと言いながら、言語の違いすらも説明できなかった。そんな反省の思いからこの記事を書いている。ショックのあまりポエムっぽくなっているかもしれないが、許して欲しい。。。

とりあえず答えから

あくまで、「私の考え方で、聞かれた質問の記憶から推測するに」なのでもっと良い答え方があるかもしれないが、もう一度同じ質問をされた場合はこう答えると思う。

「Rubyは、設計思想として「新しさ」よりも「気持ちよさ」や「自由度」を重視して設計されている、と開発者のまつもとゆきひろ氏がおっしゃられているように、学んでいて、実際にストレスフリーで、常に楽しく学ぶことができました。PHPは、勉強する上ではコードも非常にわかりやすく、学びやすいと感じました。しかし、プログラムを改めて見たときに、Rubyと比べるとわずかですが、可読性に欠けるのではないかと感じました。」

どうだろうか、まだ浅いかもしれない。というか、PHPの経験が浅過ぎてこれ以上深くならない。ぁぁ。
しかし、今回の質問で聞かれているのは、自分が学んできて、何か違いを感じているか?という趣旨に聞こえた。学んできたことから今のところ感じているのはこのくらいなのだ、、、。
と言いつつ質問の趣旨が違ったら申し訳ないのだが。違う場合は、「RubyとPHPを学ぶんだったらその違いくらい理解した上で目的があって勉強してるんだよね?だったらその違いは説明できるよね?」という趣旨になると思う。
というか、こっちの可能性の方が高い!!

じゃあ可能性が高かった方で

今、この記事を書きながら、何もソースがない状態で少し考えてみた。
思ったことを、そのまま書いてみようと思う。

どちらも、Webページ・Webアプリが作れる。RubyはPHPほどWebに強くはないが、汎用性が高い。PHPは、基本的にはWebに特化している。RubyもPHPも日本語ドキュメントが豊富なので、学びやすい。。。シェアで言えばPHPの方が高い、、、。つまり、Webならどっちでも良い!?かといって、Web以外の用途の場合、今度はRubyじゃなくても良い?Rubyじゃなくても良いものをRubyで開発する理由をあげるなら、やっぱり設計思想から、、?

私の知見からは以上(終わった)。

記事を漁っていると、こんな情報が。

大規模になると採用するフレームワークが重要になるので、言語云々よりも、フレームワークの選択肢を含めてみてみないと意味が無いかも知れません。
PHPかRubyで迷っています。

な、なにぃぃぃ!!

、、、いや、確かにそういわれると納得できる気がする。
そうなるとここで、開発言語を選ぶ基準を誰もが知りたくなるはずだ。
誰もが知りたくなるはずだ。(大事なことなので)

そこで、こんな面白い記事があった。(一番上に出てきたがな)
プロダクトの開発言語ってどうやって選ぶの?

この記事は、
・schoo
・Socket
・chatwork
・Talknote
のそれぞれのサービスがどのような基準で言語を選んできたのかを解説している。
特に気になったのは、この部分だ。

PHPはデザイナーでも読み書きできる人が多く、バックエンドとフロントエンドの接合点での調整がしやすいのも選定理由の一つです。

「あ、作るシステムにマッチしているかとか、そういうのだけでなくこんなことも考えた上で選別するのか!」
これは面白いと思った。今までは、実際に開発言語を選ぶ時は、「早く開発したいから」とか、「この言語は処理はやいじゃん?」とか(流石にそこまで適当ではないが)、なんとなく、あくまでも作る対象に合わせた決め方・言語そのものの特徴による決め方をしているのだろうと考えていた。
もちろん重要な部分ではあるだろうし、そこに重点を置いている開発もあると思う。
ただ、実務未経験の自分からすれば、そういう想定外な視点はとても面白い。

Socketの場合だと、

ノンフレームワークなPHPは、サービスの本当の初期にとりあえず実証できるものをささっと1人で作る、といったことに非常に向いているので、モックアップを作るときにはいつもPHPを使っています。WebネイティブでありながらCに近いノリでOSの様々な部分に割と気軽にアクセスできるので、「フレームワークの仕様的にこれはできない(時間がかかる)」といった障壁に初期の事業コンセプトが惑わされにくいんです。
初期の事業検証が終わったら、サービスプロトタイプをチームで開発するフェーズに入ります。まだ社内エンジニアがいなかった僕らにとっては「外部の人にも手伝ってもらいやすい」ことが、言語を選ぶ上で何より重要な指標でした。時流的にも、僕らの周りにも、優れたRailsのエンジニアが多くいました。Railsを選んだ理由はそこです。ただ、僕自身のRailsの経験値は当時そこまで高くなかったので、個人的にはそれなりに労を割きましたが(笑)

とあるように、とりあえずさくっと作るためにPHP、外部の人にも手伝ってもらいやすいからRailsみたいな選び方もある。
一言で言ってしまえば、「選び方は様々」ということで。
こういう言い方をすると、そりゃそうだろって思ってしまうのだが、実際こういう選び方もしますし、こういう場合もありますって言われたら、「様々」の中で想像していなかったことが必ずあると思う。

結局は?

で、結局質問されたらどう答えれば良いのか?
ここにきてふと気付いたのだが、趣旨として、「RubyとPHPの言語としての違い」を問われたのなら、とにかく違いを述べれば良いのではないだろうか。

具体的にいうと、
Rubyはnewline terminated方式(?)で波かっこやセミコロンが必要ない。
PHPはsemicolon terminated方式で、波かっこやセミコロンが必要。
TruthyとFalsyにおいて、
Rubyはfalseとnilがfalseになり、0や空文字列、空配列はtrueになる。
PHPはfalseとnullがfalseなのは自明だが、0、空文字列、空配列もfalseになる。
というような、プログラムを書いている上で気を付けるべき違いが述べられれば良かったのだろうか?

そもそも質問がはっきり思い出せないことからも、質問の意図を汲み取れていないというのがはっきりわかるので、本当はどういう質問だったのかが明らかになることはないが、自分が勉強する・していることくらいはある程度根拠と知識を持っておくべきだと反省した。

経験者やこれがすでに当たり前になっている人からすればつまらない話だったかもしれないが、最後まで読んでくれてありがとうと言いたい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel学習、始めました。(Laravel、MySQL環境構築)

こんにちは!

ここ数日でphp、Laravelの学習をし始めました。
とりあえず環境構築関係から投稿していきます。

先週に2日間くらいphpの基礎構文と、Laravel,Lumenドキュメントや色々なソースコードを拝見しました。
正直あまりわかっていませんが、細かくアウトプットするのも重要だと思い記事にしました。

目次

Laravel環境構築
MySQL環境構築
感想

Laravel環境構築

Homebrew install

まずphpをインストールするのにHomebrewが必要なので、入っていない方は下記コマンドでinstall。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

バージョン確認。

% brew -v
Homebrew 3.0.9

オッケーですね。

php install

次にphpのインストール。ここが少し時間かかりますね。

% brew install php

バージョン確認。

% php -v
PHP 8.0.3 (cli) (built: Mar  4 2021 20:45:17) ( NTS )

オッケーです。

Composer install

Laravelの導入で必要になるcomposerをインストールします。

brew install composer

バージョン確認。

% composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.0.11 2021-02-24 14:57:23

なんかカッコイイ。オッケーですね。

Laravel install

下記コマンドでLaravelのインストールとプロジェクトを作成をできます

% composer create-project "laravel/laravel=8.*" {プロジェクト名}

バージョン確認。

% cd {プロジェクト名}
% php artisan --version
Laravel Framework 8.34.0

できました!

MySQL環境構築

私が今Laravelの学習で実際にプロジェクトを作って動かしながら学習しており、MySQLを使ってますので環境構築を記載いたします。

brew install mysql@5.7

なぜ5.7なのかといいますと、入社前にJavaを学習していた時に5.7ならできるのに8だとできない!という状況に陥ったため、ここでも5.7にしてます。それだけなのです。。。。
上記コマンドを打つと、ターミナルに
スクリーンショット 2021-03-24 23.35.28.png
こんな文章が出てきます。
「まずパスを通してね!」的な感じなので、

% echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc
% source ~/.zshrc

コピペします。

バージョン確認します。

 % mysql --version
mysql  Ver 14.14 Distrib 5.7.32, for osx10.16 (x86_64) using  EditLine wrapper

オッケーです。

起動してみます。

% brew services start mysql@5.7
==> Successfully started `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)

うむ。大丈夫ですね。

ではログインしてみましょう

% mysql -u root -p

パスワードは初期状態なら何も入力せずにEnterでログインできます。
無事にログインできたら、ターミナルがzshではなく、mysqlになってるはずです。

musql>

こんな感じで。

感想

いかがでしたでしょうか。
本当は実際に今Laravelで制作しているものの途中経過や、現時点で使うコマンドや説明を載せたかったのですが、
また別の記事でまとめたいと思います。

数日前まで
「echo」ってなんぞや。から始まり、
「INSERT文もSELECT文も無いのになんでDBの操作できてるんだ!?」という状態でしたが、
なんとなくふんわりと理解できてきたので、またアウトプットしていきたいと思います。
フレームワークって便利ですね。
初心者日記みたいな投稿で申し訳ありません。
以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む