Git と GitHub について復習する

はじめに

Git と GitHub、セットでなんとなく勉強して、違いをよく理解しないままなんとなく使っていた。 今後仕事で使っていくだろうし、こんな理解ではまずい。 きちんと理解を深めるために、簡単に学習したことをまとめたいと思う。

Git と Github とは

Git とは、

プログラムソースなどの変更履歴を管理する分散型のバージョン管理システムのこと。-Wikipediaより

GitHubとは、

ソフトウェア開発のプラットフォームであり、ソースコードホスティングする。コードのバージョン管理システムにはGitを使用する。-Wikipediaより

ん??もう少し詳しく。

Git について

Git は、Linux の生みの親 Linus Torvalds によって開発された。Linux カーネル コミュニティは困難な問題に直面した。バージョン管理システム BitKeeper を使うことができなくなり、他のソフトウェア構成管理 (SCM) システムも分散システムのニーズを満たすことができなかった。Linus は 10 日間くらいの間雲隠れし、翌週には Git を持って登場した。13年以上たった今も世界中で使われているシステムを10日間で作り上げたのである。

Gitの最大の特徴は、分散型の名の通り、ローカル環境(自分のパソコンなど)に、全ての変更履歴を含む完全なリポジトリの複製が作成されるということ。これは、各ローカル環境がリポジトリのサーバーとなれるということである。分散型ではない、これまでのバージョン管理システムでは、サーバー上にある1つのリポジトリを、利用者が共同で使っていた。このため、利用者が増えると変更内容が衝突したり、整合性を維持することが大変であった。

Gitでは、ローカル環境にもコードの変更履歴を保存(コミット)することができるので、リモートのサーバーに常に接続する必要がなく、ネットワークに接続していなくても作業を行うことができる。

作業の流れ

Gitは分散型のソースコード管理システムであるため、リモートサーバ等にある中心リポジトリの完全なコピーを手元(ローカル環境)に作成して、そのローカルリポジトリを使って作業を行う。

一般的な開発スタイルでは、以下のようなステップの繰り返しで作業が行なわれる。

  1. git clone:リモートサーバ等にある中心リポジトリをローカルに複製する。
  2. git commit:ローカルでコンテンツの修正・追加・削除を行い、ローカルリポジトリに変更履歴を記録する。必要に応じて過去の状態の閲覧や復元などを行う。場合によってはこのステップを何度か繰り返す。
  3. git pull:中心リポジトリに加えられた他人による変更をローカルに反映させる。
  4. git merge:他人の変更内容が自分の変更内容と衝突することもある。衝突は、Gitが自動で解決できることもあれば、手動で解決しなければならないこともある。
  5. git push:ローカルの変更内容を中心リポジトリに反映させる。ステップ2.へ戻る。

初期設定を行う

$ git config --global user.name "XXXX"
$ git config --global user.email "XXXX@hogehoge.com"

ローカルにリポジトリを作成し、リモートにプッシュする

リポジトリ:コミットを書き入れるもの。履歴を持っているもの。
ローカルリポジトリ:自分のパソコン
リモートリポジトリ:GitHub

$ git init
$ git add .
$ git commit -m "Initial commit"
$ git remote add origin https://github.com/XXXX/XXXXXX.git
$ git push -u origin master

リモートの原型の部分をoriginという。
commitはローカルリポジトリの中で行なって、それをpushしてGitHubに送り込む。
GitHubはファイルを共有して管理するために使う。

Github について

GitHubは、 いろんなプロジェクトのためにGitのリポジトリホスティングするサービスである。 GitHubソースコードホスティングすることで複数人のソフトウエア開発者と協働してコードをレビューしたり、プロジェクトを管理しつつ開発を行うことができる。

独自の便利な機能もたくさんある便利なツールである。

まとめ

Gitとは、バージョン管理システムVCS):ソフトウェア、分散管理
GitHubとは、web上のGitリポジトリサービス:無料のサービス
本質的な2つの違いを理解する!

「関数」についてよく分かっていなかったので、復習する

はじめに

なんで今さら「関数」を勉強するのか?
この3ヶ月くらい、いろんな言語をちょっとずつつまんだり、WordPressの勉強をしてきた。 その中で、「関数」についてももちろん、Progate・スクール・本で勉強していたつもりだった。 でもいざ「関数」とは何かを聞かれると、答えられない。関数作ってみてと言われても、作れない。 曖昧にやり過ごしてきた結果だけど、プログラミングの世界で避けて通れない「関数」のことを一度立ち止まってしっかり復習していきたいと思う。
PHPにおける関数を学んだので他の言語と違う部分もあるかもしれないけど、基本となることは同じだという理解で進めていきます。

関数とは?

まず、関数とは何か?

関数(function)がコードの再利用の鍵となります。1つの関数は、命令文をタイプし直すかわりに、関数名によって実行することができる名前のついた命令文のセットです。 -オライリー・ジャパン『はじめてのPHP5』より

関数とは、コードの再利用をするときに使うツールのひとつのよう。

関数は大きく分けて2つある。
組み込み関数ユーザー定義関数

組み込み関数とは、PHPで提供している関数で、PHP以外の言語(C言語)で書かれている。 trim(セル内の余分なスペースを削除する関数)、strln(指定した文字列の長さを取得する関数)などがある。 PHPは他の言語と比べても特に多くの組み込み関数を持っているという。

ユーザー定義関数とは、ユーザーが独自に処理を記述した関数である。 これらの違いは明瞭で、関数を利用するのに ユーザーはDefine(定義)とUse(使用)部分が必要だとすると、 組み込み関数はあらかじめ定義されているので、Use を n回で利用していくのに対して ユーザー関数は、Define 1回と Use n回で利用していく。

関数の宣言と呼び出し

関数を新しく作成するには、関数名に続けて、関数のキーワードと中括弧で囲んで関数の本文を書く。

引数なしの場合

function 関数名()
{
  ・・・処理・・・
}

引数ありの場合

function 関数名($引数1 …)
{
  ・・・処理・・・
}

引数なしの関数はいつも同じものを実行するのに対して、引数を使うことで関数に柔軟性を持たせることができて関数の威力は増大する。
関数の呼び出し例は以下

引数なし

//関数の定義
function foo(){
  echo 'hello';
}
//関数の呼出し
foo();

実行結果

hello

関数あり

//関数の定義
function foo($val){
  echo $val + 100;
}

$num = 100;
 
//関数の呼出し
foo($num);

実行結果

200

引数を渡す

関数の引数にはデフォルトを設定することができ、それによってオプションの引数をとる。 呼び出し元によってはNULLを渡してしまう可能性があるときなどに、あらかじめデフォルト値をセットしておけば、NULL参照のエラーを防ぐことができる。

以下のように書く

function foo($val = 10)

引数の値をカンマで区切ることで複数の引数を渡すことができるが、 オプションの引数はすべての必須の引数の後に持ってこなければならない。

function page_header($color, $title, $header = 'Welcome')

値を返す(return)

データの出力や情報をデータベースに記憶させるなどの動作に加えて、関数は値を計算することもでき、返り値としてプログラムの後で使用することもできる。 その場合は return オプションを使用して返り値を取得する。 関数内でreturnを指定すれば、関数の処理の途中でも任意の場所で関数を呼び出し元に制御を戻すことができる。

以下のように書く

function 関数名()
{
  …実行処理…
  return $返り値;
}

変数のスコープを理解する

関数内部で引数の変数を変更しても、関数の外部にある変数には影響を与えない。なぜなら関数内の動作は異なるスコープで起こるからである。 PHPの変数は、使える有効範囲が限られており、この範囲のことをスコープと言う。 関数の外で定義された変数をグローバル変数と呼び、関数の内部で定義された変数をローカル変数と呼ぶ。それぞれの関数は別々のスコープを持っている。

グローバル変数は、グローバルとついているが関数内では直接使用できない

$val = 'グローバルスコープ';

function func2(){
 return $val;
 }

echo $val;
echo func2();

実行結果

グローバルスコープ
Undefined Variable: val

外部の値を関数内で使用したい場合は、次のふた通りの手段がある。
① $GLOBALS 配列
$GLOBALSはPHP組み込み変数の1つで、グローバルスコープの変数のうち、現在のPHPスクリプト上で使用可能な全ての変数を参照する事ができる。

書き方は以下

$GLOBALS["変数名"];

$GLOBALSはスパーグローバルと呼ばれ、その変数がすべてのスコープで使用可能になる。

② globalキーワードを使う
このキーワードを変数の前につけて宣言する事によってスコープの違う変数でも参照できるようになる。 global宣言で「どちらのスコープでも使用可能」な変数が作成できる事になる。

function func2(){
 global $val; // globalキーワードを使用
 return $val;
}

いいウェブサイトを作るには?HTMLサイトかWordPressか・・・

はじめに

現在LaravelフレームワークPHPを勉強しつつ、地域情報サイトのようなウェブサイトを作る作業もしています。
時間もあるし、2つくらい同時にできるだろうとタカをくくっていましたが思った以上にどちらも奥が深くなかなか作業ははかどりません。
でも奥が深いということを知っただけでも成長したということだし、折れずにコツコツやっていこうと思います!

井の中の蛙大海を知らず」です。


話を戻すと、今回取り組んでいる地域情報サイト、ちゃんと集客できていいものにしたいんです。ただWordPressのテーマを当てはめてブログのようにするのではなく、一度サイトに来た人がまた訪れてくれるような、読みやすくてなんだか気持ちよくて、コンテンツも充実しているような。
まだまだ素人レベルの自分にどこまでできるかわかりませんが、もちろん周りのお世話になっている方々の力を借りつつ、作るからには時間をかけていいものを作りたいという想いがあります。

そこでまずどういった方法で制作を進めていくかですが、HTMLサイトにするかWordPressを使うか。まずは、この2つを検証したいと思います。

HTMLとWordPressの違い

HTMLとは?

HTMLとは、Hyper Text Markup Language(ハイパーテキストマークアップ・ランゲージ)の略です。
普段、私たちが見ているほとんどのWebサイトの見た目がHTMLとCSSで作られています。
CSSは、Cascading Style Sheets(カスケ―ディング・スタイル・シート)の略です。
つまり、HTMLでWebサイトの骨組み(段落や見出しなど)を作り、CSSで細かなスタイル(文字の大きさや色など)を指定していくのです。

WordPressとは?

ブログを作成するために公開されたオープンソースのソフトウェア。CMS(Contents Management System)の一種です。
WordPress自体にブログとしての機能やページを更新するための仕組みが組み込まれているため、サイトを作成・更新が今までのツールよりも簡単にできます。

サイトやブログなどを構築する際において、HTMLでベタ打ちでコーディングしていく場合(1ページ1ページHTMLコードを書く)とWordPressなどのCMSを活用する場合など複数の手段があります。

それぞれのメリット・デメリット

この2つはそれぞれ長所と短所があり好みは分かれますが、簡単にまとめたいと思います。

HTMLの場合

○ 表示スピードが早い。
○ 独自のデザインや凝ったWebさいとの構築ができる。
○ セキュリティ面が強化できる。
○ アクセス集中など高負荷に耐えられるサイトを構築できる。

× 習得が難しい。
× 更新が煩雑である。
× Webコンテンツが多いとさらに煩雑になるのでページが多いサイトに向いていない。

WordPressの場合

○ 専門知識がなくても始められる。
○ コンテンツ更新がラク
○ Webページが多くても対応できる。
○ Web更新の手間が削減できる。
○ プロが利用できるだけの拡張性と自由度がある。
○ 利用者が多いので情報がたくさんある。
プラグインを利用することで様々な機能を追加することができる。

× オリジナルにアレンジしていくには、専門知識が必要。
× プラグイン・アドオンなどを追加しすぎると重くなる。
× SEO対策をするにはスキルが必要。
× 全世界で使われているシステムなので、セキュリティ対策をしっかりとしなければならない。

WordPressを使おう!

以上を踏まえると、私の状況ではWordPressが優位かなと考えます。
地域情報サイトはコンテンツが多く、ボリュームもかなりのものになる可能性があること、 実際に記事を書いたり、中身を変えていくのは私だけではなくいろんな人に携わってもらうことになるので、更新しやすくしたいということと、 その他もろもろ比較してみても今回はWordPressで挑戦してみたいと思いました。

さて、土台作り頑張ります。
早くコードが書きたいなあ〜

Linux パーミッションを設定する

パーミッションとは、フォルダやファイルのアクセス権限のことです。
開発環境を設定するとき、データベースを作成するとき、インストールしたソフトウェアを使用するとき。
私のように勉強始めたてでも、いろんな場面に「パーミッション」が出てきてつまづいてきたので、一度きちんとまとめておこうと思います。

パーミッションについて

パーミッションについてもう少し詳しく見ていきます。
パーミッションとは、Linuxを含むUnixで扱われるファイルやディレクトリのアクセス権の設定のことです。
ファイルやディレクトリは扱う所有者、グループ、その他の3種類毎に、実行できるか、書き込み変更ができるか、読み込みができるか、という3種類のアクセスの可・不可を設定できます。

パーミッションはセキュリティのためにとても重要です。
一般ユーザはシステムに書き込みが出来ないようになっています。不意な誤動作をしてもシステムに与える影響を最小限とするためです。
他にも、本番環境にあるWebサイトを誤って編集してしまったということが無いように、責任者以外は本番環境のWebサイトを編集できないようにすることなどができます。

パーミッションの確認

ターミナルで「ll」または「ls -l」を実行します。

-rw-r--r-- 1 ken users 0 12月 22 16:28 myfile.txt
①-rw-r--r-- ②1 ③ken users ④0 ⑤12月 22 16:28 ⑥myfile.txt

上記のように表示されたとします。 こちらを一つずつ読んでいきます。

パーミッション情報
パーミッションの基礎情報。所有者、グループ、その他のユーザに対してのアクセス権限が表記される。

②リンクされている数、サブディレクトリの数
この場合ハードリンクの数を示している。ディレクトリの場合ディレクトリ内のサブディレクトリ数となる。

③所有者やグループ情報

④ファイルサイズ
何もせず単に「touch」コマンドでファイルを作成すると「0」バイトとなる。viなどで編集し保存すれば数値が変化する。

⑤日時
一般的なタイムスタンプとなる。更新日時が表記されるようになっている。

⑥ファイル名

権限の見方

-rw-r--r--   読み出し可能なファイル。所有者だけが書き込み可能
-rwx------  実行可能なファイル。所有者以外のアクセスはすべて不可
-rwxrwxrwx  すべてのユーザーが,すべての操作を行える
-rwxrwxr-x  所有者とグループ・ユーザーのみ書き込み可能
-rwsrwxr-x  ファイルを実行する際,所有者の権限で実行する
-rwxrwsr-x  ファイルを実行する際,グループの権限で実行する
-rwTrw-rw-  全てのユーザーがファイルの変更はできるが,削除やファイル名の変更は所有者のみが行えるファイル
drwxr-xr-x  ディレクトリ。他のユーザーは書き込み不可
drwx------  プライベートなディレクトリ
drwxrwxrwt  すべてのユーザーがディレクトリ内のファイルを作成・変更できるが,削除やファイル名変更は所有者のみが行えるディレクトリ
lrwxrwxrwx  シンボリック・リンク。パーミッションはリンク先のものを引き継ぐ


r    読み出し可能。マイナス(-)の場合は読み出し不可
w   書き込み可能。マイナス(-)の場合は書き込み不可
x   実行可能。マイナス(-)の場合は実行不可
t   ディレクトリへのスティッキ・ビット。所有者のみがディレクトリ内のファイル名の変更,削除を行える
T   ファイルへのスティッキ・ビット。所有者のみがファイル名の変更,削除を行える
s   セットID。その他のユーザーがファイルを実行する際,所有者またはグループの権限で実行する


rwx  7(=4+2+1)
rw- 6(=4+2)
r-x 5(=4+1)
-wx 3(=2+1)
r-- 4
-w- 2
--x 1
--- 0

パーミッションの変更

パーミッションの変更にはchmodコマンドを使用します。

chmod モード 対象ファイル名


例えば、

$ chmod 764 hoge.txt

上記の「764」は
所有者に対して「読み取り」「書き込み」「実行」
所有グループに対して「読み取り」「書き込み」
その他「読み取り」を付与しています。


変更対象、変更方法を指定してコマンドを実行することもできます。

変更対象 意味
u ユーザー
g グループ
o その他
a すべて
変更方法 意味
= 指定した権限にする
+ 指定した権限を付与する
- 指定した権限を除去する

hoge.txtに対して所有者の実行権限を付与する場合

$ chmod u+x hoge.txt

複数指定もできます

$ chmod go+w hoge.txt

合わせて使える!便利なオプションコマンド

-v --verbose コマンド実行の診断結果を表示する

-c --change コマンドの実行結果、変更があった場合のみ、結果を表示する

-R --recursive 複数ファイルに対して設定する場合、ディレクトリ内も設定対象とする

関連コマンド

chgrp ファイルやフォルダのアクセスできるグループを設定する

chown ファイルやフォルダの所有者を設定する

適正なパーミッションの設定

パーミッションによってはサイトの乗っ取りや改ざんが行われ、悪さをされてしまう恐れがあります。 設定を見直すことで安全性を強化することができます。
パーミッション設定は、環境や運用面などで適切な設定は変わってきます。 サイトなどを参考に適正なパーミッションの設定をしましょう。

また、パーミッションを「777」「666」などに設定した場合、「誰でも書き込める」状態になっています。 使用するときにはくれぐれも注意が必要です。

ターミナルの基本操作

ターミナルとは

ターミナルとはMacOSX上で動くCUIシェルソフトです。

CUIについて

CUIとは、Character User Interfaceの略。 コンピュータやソフトウェアが利用者に情報を提示したり操作を受け付けたりする方法の類型の一つで、すべてのやり取りを文字によって行う方式です。 一方でGUIというワードもあります。 GUIとは、Graphical User Interfaceの略。 コンピュータやソフトウェアが利用者に情報を提示したり操作を受け付けたりする方法の類型の一つで、情報の提示に画像や図形を多用し、基礎的な操作の大半を画面上の位置の指示により行うことができるような手法のこと。

簡単にいうと、CUIはキーボードからコマンドを打ち込むことによって操作して、GUIはグラフィカルな画面の中の アイコンやメニューなどをマウスなどによって操作することに よって操作を進めるという操作の違いがあります。

つまりターミナルでは、コマンド(意味のある文字)を打つことで、パソコンを意のままに操作することが可能なのです。

シェルについて

シェルとは、日本語で「殻(から)」という意味です。 シェルはその硬い殻で、OSの中心部である「カーネル」という部分を保護しています。 ターミナルは、このシェルを通してカーネルを直接操作できるアプリケーションなのです。

ターミナルとコマンドプロンプト

この2つはなにが違うのか? 同じような機能と特徴を持ちますが、OSによって使用しているソフトの違いがあるそうです。 ターミナルはLinuxで用いられる言い回しで、コマンドプロンプトWindowsで用いられる言い回しです。

ターミナルの主要コマンド

cd
ディレクトリ間を移動する

cd test.html  # testテストというファイルに移動する
cd ~/  #ホームディレクトリに移動する
cd ..  #一つ上の階層のファイルに移動する

ls
現在のディレクトリ内に存在する、ディレクトリやファイルを表示する

ls  #カレントディレクトリにあるファイルやディレクトリを表示する
ls -l  #ファイルやディレクトリの詳細も同時に表示する
ls -a  #隠しファイルも含めファイルやディレクトリを全て表示する
ls −la  #隠しファイルを含む全てのファイルやディレクトリの詳細を表示する

rm
ファイルを削除する

rm test.html  #test.htmlを削除する
rm -r test  #testというディレクトリとその中身を削除する
rm -f test  #testというファイルを警告なしで削除する
rm -rf test  #testというディレクトリとその中身を警告なしで削除する

mv
ファイルやディレクトリの名前を変更する、または移動する

mv test.html tmp/  #test.htmlというファイルを相対パスでtmp/に移動する
mv test.html test2.html  #test.htmlというファイルをtest2.htmlに名前変更する

cp
ファイルをコピーする

cp test.html tmp/  #test.htmlを相対パスでtmp/というディレクトリの中にコピーする
cp test.html test2.html  #test.htmlをtest2.htmlという名前でコピーする
cp −r dir /tmp/  #dirというディレクトリとその中身を絶対パスで/tmp/にそっくりコピーする

open
ターミナルからFinderでファイルを開く

open .  #現在のターミナルのディレクトリFinderで開く
open ~/  #ホームディレトリをFinderで開く

history
これまでのコマンド履歴を表示する

history  #これまで実行してきたコマンドの履歴を表示する
history -c  #これまで実行してきたコマンドの履歴を消去する

pwd
今開いているディレクトリまでのパスを表示する

mkdir
ディレクトリを作成する

man
コマンドのマニュアルを開く。「man マニュアルを開きたいコマンド名」で実行
多くのコマンドにはオプションと呼ばれる機能を付加して実行することができ、マニュアルのOPTION項目でそれを確認することができる。

find
ファイルやディレクトリを検索する。「find 検索する場所 -name 検索するファイル名」で実行

clear
ターミナル画面をクリアし、表示された文字を全て消去する

touch
中身が空のファイルを作る

exit
ログアウトする。「logout」でも代用できる

コマンド中級編

ターミナルで作業するにはもっとたくさんのコマンドを使います。 主要コマンドの使用に慣れてきたら、こちらのページを参考にさせていただいて勉強を進めたいと思います!  

Laravel データベース接続編

やること

  • データベースを作成する。
  • ユーザーを作成して権限を与える。
  • .envファイルを修正する。
  • php artisan migrateの実行。

データベースを作成して、ユーザーに権限を与える

MySQLをインストールして、データベースを作成する。

mysql -u root //MySQLに接続  
create database 'db_name'; //DB作成   
show databases; //DBが作成されたか確認   



次に、ユーザーを作成しデータベースに対する権限を与える。

//ユーザー作成。
create user 'user_name'@'%' identified by 'password'; 
// %はワイルドカードで、どんなホスト名がここに入ってもOKということになる。

//ユーザーに権限を付与。
GRANT ALL ON <db_name>.* TO 'user_name'@'%'; 

//どんな権限がどこに付与されているのか確認。
show grants for 'user'@'%'; 

//設定を確実に反映させる。
flush privileges 


MySQL8.0 認証方式を変更する

私はまずここでハマりました。
このままデータベースの設定を終えて、進めて最後にマイグレーションを実行すると

$ php artisan migrate
   Illuminate\Database\QueryException  : SQLSTATE[HY000] [2054] The server requested authentication ・・・


というエラーが発生してしまいます。

MySQLはそれぞれのアカウントが「どうやって認証されるべきか」をアカウント情報の中に持っている(5.6とそれ以降) mysql.user テーブルには plugin というカラムがあり、 MySQL8.0では、 mysql_native_password ではなく、caching_sha2_password がデフォルトの認証プラグインとなりました。

SELECT user, host, plugin FROM mysql.user; //既存ユーザーの認証方式を確認。

+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| vagrant          | 127.0.0.1 | caching_sha2_password |
| vagrant          | 192.168.% | caching_sha2_password |
| mysql.infoschema | localhost | mysql_native_password |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| root             | localhost | caching_sha2_password |
| vagrant          | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+



この場合、root@localhost は caching_sha2_password で認証される、という設定になっています。
MySQLの認証はチャレンジ・レスポンス認証なので、クライアント(今回はLaravel)とサーバー(MySQL)で同じ認証形式をサポートしている必要があります。

Laravel5.6のDB接続機能ではこの方式に対応していないので、ユーザーの認証方式を変更する必要があります。

alter user 'username' identified with mysql_native_password by 'password';

これで完了!


.envファイルの設定変更

データベースの設定を終えた段階でマイグレーションを実行すると、以下のようなエラーが出てきます。

Illuminate\Database\QueryException  : SQLSTATE[HY000] [1045] Access denied for user ・・・



次に.envの中身を作成したデータベースに応じて書き換えなければいけません。
.env は開発環境やステージング環境、本番環境などで、環境毎に変更したい情報をまとめておくファイルのこと。
Composer経由でLaravelのプロジェクトを作成すると.envファイルが作成されます。
それでは、.envファイルにデータベースの設定をします。

[.env]

DB_CONNECTION=mysql
DB_HOST=127.0.0.1  //localhostに変更
DB_PORT=3306
DB_DATABASE=homestead  //変更
DB_USERNAME=homestead  //変更
DB_PASSWORD=secret  //変更


変更するのはこの箇所。

さらに、
念のため.env.exampleとconfig/database.phpも作成したDBに応じて変更します。 ただ、マイグレーションを実行した時に先に読まれるのは、database.phpではなく、.envだそうです。


[config/database.php]

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'), #変更
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'tutorial'), #変更
            'username' => env('DB_USERNAME', 'root'), #変更
            'password' => env('DB_PASSWORD', ''), #変更
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],


.envの変更を反映させる

.envを変更した後に、こちらを実行すると反映されます。

php artisan config:cache



こちら を参考にさせていただきました。
以上で、データベース接続に関するだいたいのエラーは解消されそう!


残る疑問...

実は、一つ解消できなかった問題があります。
今回作成したユーザーに権限を与えて、そのユーザーを使ってデータベース接続をしたかったのですが、何度やってもエラー。。

ユーザー作成

権限付与

flushで設定を反映

.env書き換え

.env変更を反映

php artisan migrateの実行

同じ手順を踏んでいるのに、

Illuminate\Database\QueryException  : SQLSTATE[HY000] [1045] Access denied for user ・・・


こちらのエラーが出続けるんです。
ユーザーをrootに切り替えたらすんなり実行できました。

しばらく戦いましたが出口が見えてこないので、
この課題は持ち帰ります。。

Laravel 【server error 500】の壁

やりたいこと

Laravelで作成したプロジェクトで、localhost:8000にアクセスした時にLaravelの初期画面を表示させる。

やったこと

2つプロジェクトを作り、1つ目は問題なく初期画面にアクセスでき、「Laravel」というページが表示された。

問題は1つ目のプロジェクト。

laravel new プロジェクト名

でプロジェクトを作成して、同じくlocalhost:8000にアクセスしようとしたら、
画面に「500 | server error」の文字が・・・

解決策その1

調べていったらポート番号は1つにつき1つのアプリケーションしか開けないことが判明。(本当に知識がないんです。。)
つまり8000のポートをすでに使っているので、2つ目に関しては違うポート番号を指定しなければいけないとのこと。
ポート番号についてはこちら

でももっと単純な方法があります。 Control + C で1つ目のサーバーのアプリケーションを落とす。それだけ。

解決策その2

前述の方法を試しましたが、まだ「500 | server error」の文字が出てきます。
まだ何か問題があるのか?

原因は、.envファイルが作成されていないこと。
.env ファイルは実行環境ごとに分ける必要がある情報を格納しています。
プロジェクト作成時には.env.exampleが自動生成されるのですが、
それをコピーして、.envファイルを自分で作成する必要があります。

ということで

cp .env.example .env

でコピーを作成。

php artisan key:generate

を実行。

これで、「Laravel」の文字がやっと表示されました!
やった〜。

ちなみに、 git を使っている方は、.env を .gitignore ファイルに追加する必要があるそうです。