さて、laravelを色々と触り始めていますが、やっぱりDBを用意しないとガッツリとしたものは作れないので、早速用意してみましょう!
Webページを作る際も例えばユーザーの情報などを保存したりして、その情報を用いてログイン機能なんかを作ったりできるはずです。
今回はmacの方向けの記事になります...
いつかwindowsでも書きたいところ...
それでは、やっていきましょう!
目次
postgreSQLとは・・・?
データベース(=DB)にはたくさんの種類のものが用意されています。
その中の一種類だと考えていただければと思います。
今回、postgreSQLを選んだ理由はただただ僕が業務で使っている環境に近いからです...w
そのうち別のDBとかも触ろうとは思いますが...!
本来はもっとDBへの追加や削除が早いか遅いかとか、その他諸々のことを考えた上で導入すべきですけどね!
postgresSQLをインストールする
さて、では早速postgresSQLをインストールします。
laravelを入れたかたならhomebrewが入っていると思うので、そのまま行けるはずです。
brew install postgresql
homebrewが入っていない方は以下を先に実行した上で実行してみてください。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
インストールがされていることを確認してみます。
postgres --version
これでバージョンが表示されればOKです!
postgres (PostgreSQL) 12.2
postgreSQLを起動する
さて、インストールが完了したので、今度はサーバを起動しましょう。
データベースは常に動き続けている必要があります。
いつデータのリクエスト(データくれ!とか、データ入れろ!とか)がくるのか待ち構えていないといけないですからね。
そのため、データベースを使用する間は常にサーバーを動かしてあげる必要があるわけです。
起動は以下のコマンドで可能です。
postgres -D /usr/local/var/postgres
また、上記を実行したらわかるかと思いますが、一度起動するとターミナルの入力ができません。
というのも、ターミナル上で動かしているので、ログがリアルタイムでターミナルに表示されるから、出力に占有されてしまうんですね...
では、一旦"Control(^) + c"で強制終了させましょう。
そうするとサーバーが停止し、入力ができるようになるはずです。
今度はバックエンドでサーバーを動かしましょう。
まず、入力を楽にするため、環境変数に以下を追加します。
export PGDATA=/usr/local/var/postgres
追加したら、今度は以下を実行します。
pg_ctl start
すると、サーバーをバックエンドで実行することができるはずです。
とめたい場合は
pg_ctl stop
でとめることができます。
ユーザーを作る
さて、次はユーザーを作ります。
先ほどサーバーをとめてしまった方は再度動かしておきましょう。
動かしっぱなしの人はそのままで大丈夫です。
では、以下を実行します。
ただし、takaponの部分はあなたのユーザーネームになるので、適宜変えてください。
$createuser -P takapon
すると、そのユーザー用の初回パスワード設定を求められるので、任意のものを2度入力します。
Enter password for new role: ここで1回目入力後Enter
Enter it again: ここで2回目入力後Enter
これで準備オッケーです!
DBを作る
さて、それでは次はやっとこさ、データベースを作成しましょう!
データベース作成は以下のコマンドで作成ができます。
ただし、takapon-testはDB名、takaponはユーザー名です。
各自、任意の値に書きかかえてください。
createdb takapon-test -O takapon
これで、takaponが所有しているtakapon-testデータベースが作成されました。
DBへアクセスしよう!
さて、それではデータベースができたので、ターミナルからアクセスしてみましょう!
takaponがユーザー名、そしてその後に先ほど作成したDB名を入力して以下のコマンドを実行します。
psql -U takapon takapon-test
すると...?
Takapon:~ taka$ psql -U takapon takapon-test
psql (12.2)
Type "help" for help.
takapon-test=>
このようにtakapon-test=>と少しターミナルが違う雰囲気になりました!
これで接続OKです!
テーブルを作る
さて、それでは接続ができたら"\d"と打ってEnterを押してみてください。
takapon-test=> \d
Did not find any relations.
リレーションがないよ〜といわれます。
このrelationsというのは、ちょっと長くなるので省略しますが、Postgresqlがリレーショナルデータベースと呼ばれており、それが由縁になっていると思います。
さて、この"\d"コマンドなんですが、テーブルというデータの入れ物を一覧表示するために使うコマンドです。
今回はテーブルがなかったので、適当に作ってみましょう!
以下のコマンドで、articleというテーブルを作成することができます。
create table article (id integer, title text, contents text);
CREATE TABLEと出たらOKです。
takapon-test=> create table article (id integer, title text, contents text);
CREATE TABLE
では再度"\d"をやってみましょう!
takapon-test=> \d
List of relations
Schema | Name | Type | Owner
--------+---------+-------+---------
public | article | table | takapon
(1 row)
ふむ。
articleと言う名前のテーブルがあることがわかりますね!
テーブルの作成がバッチリできました!
テーブルにデータを追加する
さて、それでは次にテーブルのデータをみてみましょう。
先ほど"\d"だけで、テーブル一覧をみることができたんですが、さらにテーブル名をつけることで、例えばarticleテーブルの構成を詳細にみることができます。
\d article
takapon-test=> \d article
Table "public.article"
Column | Type | Collation | Nullable | Default
----------+---------+-----------+----------+---------
id | integer | | |
title | text | | |
contents | text | | |
どんなカラム(縦行)があって、それぞれタイプはどんななのか?とか、NULLは入ってもいいか?とか、デフォルトだとどんな値が入れられるのか?とかとか確認ができます。
ただし、実際に入っているデータは見れないので注意してください。
さて、それではデータを追加しましょう!
以下のコマンドを入力してみてください。
valuesの中には先ほど確認したタイプに合わせ、最初にid(int型)、次にtitle(text型)、最後にcontents(text型)でデータを入れます。
takapon-test=> INSERT INTO article values (1, 'first article', 'first contents');
"INSERT 0 1"と表示されればOKです。
では、実際の中身を確認してみましょう!
以下のコマンドでarticle内の中身を全てみることができます。
これは、articleテーブルの中から、*(全て!)を選択して表示します。的な感じです。
select * from article;
すると...?
takapon-test=> select * from article;
id | title | contents
----+---------------+----------------
1 | first article | first contents
(1 row)
追加されていますね!
これが基本的な追加です。
また、先ほどの追加方法だとテーブルのデータの順序(最初がidでint型で...とか)を覚えておかなければいけません。
それが煩わしいなら以下のようにどこのデータがこのフィールド(idやtitle)だぞ!って明示的に書けたりもします。
INSERT INTO article(title, id, contents) values ('second article', 2, 'second contents');
takapon-test=> select * from article;
id | title | contents
----+----------------+-----------------
1 | first article | first contents
2 | second article | second contents
(2 rows)
まとめ
さて、今回はpostgresqlをローカル環境にて使えるようにしてみました!
あとほんのちょっぴりデータの追加も触りましたが...
もちろん、削除や更新、一部だけセレクトして表示なんてこともできるので、そのうち詳細をかけたらいいなぁと。