【投稿アプリ自作(4)】テーブル設計とマイグレーション実行(Laravel)
Webアプリを自作するためにPHPのフレームワークのLaravelを導入することに決めました。
PHP初心者かつLaravel初心者ですが、自分なりにスキルを得るためにLaravelを用いた記事投稿アプリを自作しました。その過程を備忘録としてまとめます。
最終的にはブラウザを利用して記事投稿画面の表示、ユーザごとの記事投稿数のグラフ化を目指したいと思います。
本記事は連載【投稿アプリ自作】の第四回目で、投稿アプリのテーブル設計に基づいてマイグレーションファイルを作成し、実行することで、投稿アプリに使用するテーブルの生成をする過程をまとめます。
※:Laravelは5.3からファイル構成が大幅に変わりました。本記事ではLaravel5.3以降を使って説明したいと思います。
※2:データベースはXAMPPに入っていたMySQLを使うことにします。事前にデータベースアカウントを登録しておいてください。
目次
ゴール
本記事では、以下の2つを目指します。
・テーブル設計に基づいてマイグレーションファイルを作成する
・マイグレーションを実行することで、投稿アプリに使用する新規テーブルを作成する
必要なもの
必要なもの | 価格(円) | ||
---|---|---|---|
1 | PC | ピンキリ | |
備考 | インターネット接続可能なこと | ||
2 | XAMPP | 無料 | |
備考 | 持っていない場合は、こちらを参照→XAMPPのインストール方法 | ||
3 | Composer | 無料 | |
備考 | 持っていない場合は、こちらを参照→Composerのインストール方法 | ||
4 | Laravelフレームワーク | 無料 | |
備考 | インストールしていない場合は、こちらを参照→Laravelのインストール方法 | ||
5 | MySQLのデータベースアカウント | 無料 | |
備考 | 持っていない場合は、こちらを参照→phpMyAdminでデータベースとユーザを新規登録する |
事前準備
XAMPPでApacheとMySQLを起動!
データベースの設定をするために、ApacheとMySQLを起動します。
データベースの準備
データベースにアクセスるため、MySQLのデータベースおよびユーザを新規作成します。
以下にphpMyAdminを使ってMySQLのデータベース、ユーザを新規作成する方法をまとめました。
ご参考にしてください。
http://ysktec.com/shiguregaki/blog/?p=1135shiguregaki.hatenablog.com
テーブル設計
この章では投稿アプリに使用するテーブルを定義します。
テーブルは以下の5つのテーブルを作成することにします。
・Articlesテーブル
・DetailedArticlesテーブル
・Articlesテーブル
・Categoriesテーブル
・Tagsテーブル
テーブルの構成
Articlesテーブル
記事を管理するテーブルです。各記事はユーザやカテゴリー、タグを紐づけられています。
カラム名 | 変数名 | 補足 |
---|---|---|
記事ID | article_id | 主キー |
ユーザID | user_id | 外部キー |
ユーザごとの記事ID | user_article_id | |
カテゴリーID | category_id | 外部キー |
タグID | tag_id | 外部キー |
DetailedArticlesテーブル
記事詳細を管理するテーブルです。Articlesテーブルとarticle_idで1:1に関連を持っています。
カラム名 | 変数名 | 補足 |
---|---|---|
記事ID | article_id | 主キー 外部キー |
タイトル | title | |
記事内容 | body | |
投稿日 | published_date |
ArticleUsersテーブル
記事を書くユーザを管理するテーブルです。Articlesテーブルとuser_idで1:多に関連を持っています。
カラム名 | 変数名 | 補足 |
---|---|---|
ユーザID | user_id | 主キー |
ユーザ名 | user_name | |
パスワード | password | |
性別 | gender | |
メールアドレス | mail_address |
Categoryテーブル
記事のカテゴリーを管理するテーブルです。Articlesテーブルとcategory_idで1:多に関連を持っています。
カラム名 | 変数名 | 補足 |
---|---|---|
カテゴリーID | category_id | 主キー |
カテゴリー名 | category_name |
Tagsテーブル
記事のタグを管理するテーブルです。Articlesテーブルとtag_idで1:多に関連を持っています。
カラム名 | 変数名 | 補足 |
---|---|---|
タグID | tag_id | 主キー |
タグ名 | tag_name |
テーブルの関連性
上記のテーブルの関連性をER図にまとめると下の様になります。(IDEDF1X記法で記述)
※ネットで検索しながら見よう見まねで書いたので間違っているかもしれませんがご容赦ください。
Laravelソースファイルの変更
変更や新規作成するLaravelファイル一覧
Laravelのプロジェクトファイル配下にあるファイルで本記事の中で変更、新規作成するファイルについてまとめました。
ファイル名 | 対応 | 備考 | |
---|---|---|---|
1 | database/migrations/xxxx_xx_xx_xxxxx_ create_articles_table.php |
新規作成 | “php artisan make:model <モデル名> -m”コマンドで新規作成(後述) |
2 | app/Article.php | 新規作成 | 同上 |
3 | database/migrations/xxxx_xx_xx_xxxxx_ create_detailed_articles_table.php |
新規作成 | 同上 |
4 | app/Detailed_Article.php | 新規作成 | 同上 |
5 | database/migrations/xxxx_xx_xx_xxxxx_ create_article_users_table.php |
新規作成 | 同上 |
6 | app/Article_User.php | 新規作成 | 同上 |
7 | database/migrations/xxxx_xx_xx_xxxxx_ create_categories_table.php |
新規作成 | 同上 |
8 | app/Category.php | 新規作成 | 同上 |
9 | database/migrations/xxxx_xx_xx_xxxxx_ create_tags_table.php |
新規作成 | 同上 |
10 | app/Tag.php | 新規作成 | 同上 |
モデルファイルとマイグレーションファイルの新規作成
データベースを作成するためにモデルファイルとマイグレーションファイルを作成します。
モデルファイルとはデータベースのカラムの設定やデータベースから得た情報の操作を行うことができるファイルになります。
マイグレーションファイルはデータベースに対してテーブル作成やカラム追加などの操作を行うことができるファイルになります。
それぞれのファイルはartisanコマンドを使って作成します。
以下のコマンドを使って、モデルファイルとマイグレーションファイルを新規作成します。
- mオプションがモデルファイルと同時にマイグレーションファイルを作成するオプションになります。
注意:
このコマンドを実行した順番でマイグレーションファイルが実行されるため、このコマンドを実行する順番を考慮する必要があります。
これはマイグレーションファイルで指定するテーブル間の外部キー制約が原因で、作成されるテーブルの順番を考えないと制約に違反してエラーとなってしまうためです。
テーブルの関連性の章で示した通り、各テーブル間は外部キーで関連をもっています。
ArticlesテーブルはArticleUsersテーブル、Categoriesテーブル、Tagsテーブルと外部キーで関連づいています。
DetailedArticlesテーブルはArticlesテーブルと外部キーで関連づいています。
ですので、上記コマンドでモデルファイルを実行する順番は
という順番になります。
下の画像の様にArticleUserモデル、Categoryモデル、Tagモデル、Articleモデル、DetailedArticleモデルを順に新規作成します。
※モデルは単数表記で記載するのが慣例のようです。
モデルの作成と同時に自動でマイグレーションファイルが作成されています。
xxxx_xx_xx_xxxxx_create_article_users_table
xxxx_xx_xx_xxxxx_create_categories_table
xxxx_xx_xx_xxxxx_create_tags_table
xxxx_xx_xx_xxxxx_create_articles_table
xxxx_xx_xx_xxxxx_create_detailed_articles_table
正常にモデルファイル、マイグレーションファイルが作成されると以下のディレクトリにコマンドで指定した名称でファイルができているはずです。
ArticleUsersテーブルのマイグレーションファイルの変更
テーブル設計の章で設計した内容に基づいてArticleUsersテーブルのマイグレーションファイルを設定していきます。
以下のソースでは主キーにuser_idを指定し、その他のカラムも型に応じて設定しています。
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateArticleUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('article_users', function (Blueprint $table) { //ユーザIDの設定(主キー) $table->increments('user_id'); //ユーザ名の設定 $table->string('user_name'); //パスワードの設定 $table->string('password'); //性別の設定 $table->string('gender'); //メールアドレスの設定 $table->string('mail_address'); //NULL値可能なcreated_atとupdated_atカラム追加 $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('article_users'); } }
up()はマイグレーションを実行したときにコールされる関数です。
down()はマイグレーションが失敗時に実行される関数です。
Categoriesテーブルのマイグレーションファイルの変更
テーブル設計の章で設計した内容に基づいてCategoriesテーブルのマイグレーションファイルを設定していきます。
以下のソースでは主キーにcategory_idを指定し、その他のカラムも型に応じて設定しています。
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateCategoriesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('categories', function (Blueprint $table) { //カテゴリーIDの設定(主キー) $table->increments('category_id'); //カテゴリー名の設定 $table->string('category_name'); //NULL値可能なcreated_atとupdated_atカラム追加 $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('categories'); } }
Tagsテーブルのマイグレーションファイルの変更
テーブル設計の章で設計した内容に基づいてTagsテーブルのマイグレーションファイルを設定していきます。
以下のソースでは主キーにtag_idを指定し、その他のカラムも型に応じて設定しています。
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateTagsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('tags', function (Blueprint $table) { //タグIDの設定(主キー) $table->increments('tag_id'); //タグ名の設定 $table->string('tag_name'); //NULL値可能なcreated_atとupdated_atカラム追加 $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tags'); } }
Articlesテーブルのマイグレーションファイルの変更
テーブル設計の章で設計した内容に基づいてArticlesテーブルのマイグレーションファイルを設定していきます。
以下のソースでは主キーにarticle_idを指定し、ユーザID、カテゴリーID、タグIDを外部キーとして紐づけています。
その他のカラムも型に応じて設定しています。
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateArticlesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('articles', function (Blueprint $table) { //記事IDの設定 $table->increments('article_id'); //ユーザIDの設定 $table->integer('user_id')->unsigned(); //ユーザIDをarticle_usersテーブルの主キーと紐づける $table->foreign('user_id')->references('user_id')->on('article_users'); //ユーザごとの記事IDの設定 $table->integer('user_article_id')->unsigned(); //カテゴリーIDの設定 $table->integer('category_id')->unsigned(); //カテゴリーIDをcategoriesテーブルの主キーと紐づける $table->foreign('category_id')->references('category_id')->on('categories'); //タグIDの設定 $table->integer('tag_id')->unsigned(); //タグIDをcategoriesテーブルの主キーと紐づける $table->foreign('tag_id')->references('tag_id')->on('tags'); //NULL値可能なcreated_atとupdated_atカラム追加 $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('articles'); } }
DetailedArticlesテーブルのマイグレーションファイルの変更
テーブル設計の章で設計した内容に基づいてDetailedArticlesテーブルのマイグレーションファイルを設定していきます。
以下のソースではarticle_idをArticlesテーブルの外部キーと紐づけています。
その他のカラムも型に応じて設定しています。
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateDetailedArticlesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('detailed_articles', function (Blueprint $table) { //サロケードの場合、ここを有効にして複合キーを無効にする $table->integer('article_id')->unsigned(); //記事IDをarticlesテーブルの主キーと紐づける $table->foreign('article_id')->references('article_id')->on('articles'); //タイトルの設定 $table->string('title'); //記事内容の設定 $table->text('body'); //投稿日の設定 $table->timestamp('published_date'); //NULL値可能なcreated_atとupdated_atカラム追加 $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('detailed_articles'); } }
マイグレーションの実行
マイグレーションを実行するには以下のコマンドをコマンドプロンプト上で実行します。
データベースの確認
データベースが正しく作成されているか確認するため、phpMyAdminにアクセスします。
ブラウザでphpMyAdmin(以下のURL)にアクセスしてください。
以下の5つのテーブルが新規で作成されているはずです。
・articles(Articlesテーブル)
・article_users(ArticleUsersテーブル)
・categories(Categoriesテーブル)
・detatiled_articles(DetatiledArticlesテーブル)
・tags(Tagsテーブル)
※以下の3つのテーブルはlaravelにデフォルトであるテーブルです。
・migrations
・password_resets
・users
ArticleUsersテーブルの確認
テーブル設計の章で設計した以下のカラムができています。
・ユーザid:user_id(主キー)
・ユーザ名:user_name
・パスワード:password
・性別:gender
・メールアドレス:mail_address
※created_at,updated_atはテーブル生成とアップデートした時間でマイグレーションファイルで指定した$table->timestamps();によって作成されているカラムです。
Categoriesテーブルの確認
テーブル設計の章で設計した以下のカラムができています。
・カテゴリーid:category_id(主キー)
・カテゴリー名:category_name
※created_at,updated_atはテーブル生成とアップデートした時間でマイグレーションファイルで指定した$table->timestamps();によって作成されているカラムです。
Tagsテーブルの確認
テーブル設計の章で設計した以下のカラムができています。
・タグid:tag_id(主キー)
・タグ名:tag_name
※created_at,updated_atはテーブル生成とアップデートした時間でマイグレーションファイルで指定した$table->timestamps();によって作成されているカラムです。
Articlesテーブルの確認
テーブル設計の章で設計した以下のカラムができています。
・記事id:article_id(主キー)
・ユーザid:user_id(外部キー)
・ユーザごとの記事id:user_article_id
・カテゴリーid:category_id(外部キー)
・タグid:tag_id(外部キー)
※created_at,updated_atはテーブル生成とアップデートした時間でマイグレーションファイルで指定した$table->timestamps();によって作成されているカラムです。
DetatiledArticlesテーブルの確認
テーブル設計の章で設計した以下のカラムができています。
・記事id:article_id(主キー、外部キー)
・タイトル:title
・記事内容:body
・投稿日:published_date
※created_at,updated_atはテーブル生成とアップデートした時間でマイグレーションファイルで指定した$table->timestamps();によって作成されているカラムです。
まとめ
今回はLaravelを使って以下の2つのことを確認しました。
・テーブル設計に基づいてマイグレーションファイルを作成する
・マイグレーションを実行することで、投稿アプリに使用する新規テーブルを作成する
今回は設計に基づいたマイグーレーションを作成し、実行することでテーブルを新規に作成しました。
これによりテーブルの型が決まりました。しかし、実際にアプリからアクセスするにはモデルにも設定が必要です。
次回以降ではモデルの設定をして、実際のデータにアクセスする方法をまとめたいと思います。
次回記事
次回記事はモデルファイルの設定についてまとめたいと思います。http://shiguregaki.hatenablog.com/entry/p45shiguregaki.hatenablog.com
前回記事
以上!
PHP技術者認定準上級を取得しました。
こんにちは、しぐれがきです。
最近、PHP技術者の勉強でなかなかブログが更新できていなかったですが。。。。
7月1日(土)にPHP技術者試験を受験して余裕ができたので久しぶりにブログを更新します。
PHP技術者試験ですが、結果から言うと準上級に合格できました。
もともと準上級の取得を目指して受験を決めたのですが、勉強をするに従いどうせなら上級を取りたいと感じるようになり上級を目指して勉強してきましたが。。。
結果は60点で準上級が精いっぱいでした。
非常に残念でしたが、事前に十分勉強したので、実力が足りなかったのだと切り替えることにしました。
(平日1日2時間、土日で12時間くらいなので100時間勉強しました)
受験した感想としては、事前に解いた問題集より問題文量も選択肢も増えてて難しくなっており、やはり普段からPHPを使って、リファレンスをきちんと読んでいないと厳しいと感じました。
2,3問は問題集と似たような問題がありましたが、ほとんど新規の問題ばかりですので問題集をたくさん解いたからと言って、しっかり知識がないと点数はとれないと思います。
また、問題集やテキストで使用されている用語とテストで出題されている用語が異なっているのもあると感じました。
例えば、問題集では遅延静的束縛と記載されているものがテストではカタカナ表記でレイトスタティックバインディングを記載されているなど、事前に慣れていないと知らない用語がでてきたと勘違いしてしまいます。
そのため問題文を読むのも一苦労で、時間には2時間60問で解くだけでぎりぎりになってしまい、十分な見直しもできなかったです。
上級を目指すなら、問題集はもちろんのことAPIリファレンスを読み、重要な用語は英語表記も覚えておく必要があると感じました。
今のところ上級を受けるつもりはないですが、もし取得をするなら上記のことを気を付けたいと思います。
今回、受験するまえにテキストや問題集の内容を一通り整理したので備忘録としてまとめておこうと思います。
別記事で投稿しますので、今後、準上級/上級を目指す方へのご参考になればうれしいです。
以上!
PHP技術者認定上級/準上級を1ヶ月で取得することを目指す
こんにちは、しぐれがきです。
最近、PHPのフレームワークであるLaravelの自作アプリについての投稿をしていますが、『実践したら知識として資格を残すべきだ』の考えがモットーの私ですので、PHPの資格を取得したいとここ最近考えていました。
PHPの資格を調べてみますと、以下のような資格がありました。
一般社団法人 PHP技術者認定機構
https://www.phpexam.jp/
レベルは幾つかあるようで初級はITスキル標準レベル1、準上級はレベル2、上級はレベル3見たいです。
準上級は上級と同じ試験で点数取得パーセントが50%以上70%未満だと準上級、70%以上なら上級となるようです。
ITスキル標準レベル2というと、この前取得したJava Silverと同程度なので、1か月ぐらいでとれるかも!となかなかよさそうな資格なので今後のスキルアップも兼ねて受験をすることに決めました。
このブログでは、PHP技術者認定上級/準上級の資格概要と、試験日程の目標、勉強方法について計画を立てたいと思います。
目次
資格概要
資格情報
・資格名PHP技術者認定 上級/準上級
・概要
PHPの言語仕様から実用的なプログラミングテクニックまでの知識を問う試験
・レベル
ITスキル標準(ITSS):準上級試験 レベル2 上級試験 レベル3
試験情報
・受験料金15,000円(税抜)
・受験方法
プロメトリックにてPCで受験
http://it.prometric-jp.com/
・設問数
60問
・試験時間
2時間
・出題形式
選択式(複数または単一選択)
・合格条件
7割以上の正解 上級試験合格
5割以上-7割未満の正解 準上級試験合格
教材紹介
教材は以下の2つです。
2.徹底攻略 PHP5 技術者認定 [上級] 試験問題集 [PJ0-200]対応
プログラミングPHP 第3版
本情報
■タイトル
プログラミングPHP 第3版
■価格(2017/5/25現在)
4104円
■著者
オライリージャパン Kevin Tatroe (著), Peter MacIntyre (著), Rasmus Lerdorf (著), 高木 正弘 (翻訳)
■ページ数
416ページ
■章構成
はじめに
1章 PHPについて
2章 PHP言語の基本
3章 関数
4章 文字列
5章 配列
6章 オブジェクト
7章 ウェブに関するテクニック
8章 データベース
9章 グラフィックス
10章 PDF
11章 XML
12章 セキュリティ
13章 アプリケーションに関するテクニック
14章 さまざまなプラットフォームでのPHP
15章 ウェブサービス
16章 PHPのデバッグ
17章 日付と時刻
索引
■詳細
内容
PHP技術者認定の公式なテキストではないのですが、検索してみるとこちらの本がよくヒットしたので購入しました。
内容は幅広く、結構深くまで記載されています。
ですのでこの前に一度PHPの初級者向けのテキストを読むことをお勧めします。
各章に関連したメソッドの紹介と使い方が書かれています。
コードは少なめなので、余裕があればコードを自分で書きながら確認するとよいと思います。
初級者テキストについて
この書籍の初心者向けのテキストとして、初めてのPHP5 増補改訂版があるのでこちらがおすすめです。私は、やさしいPHP 第3版 (「やさしい」シリーズ)というSBクリエイティブのやさしい~シリーズを購入して読みました。このテキストはソースがたくさん記載されているのでイメージが付きやすいです。
徹底攻略 PHP5 技術者認定 [上級] 試験問題集 [PJ0-200]対応
本情報
■タイトル
徹底攻略 PHP5 技術者認定 [上級] 試験問題集 [PJ0-200]対応
■価格(2017/5/25現在)
4664円
■著者
インプレスジャパン 鈴木憲治 (著), 堀 邦彰 (著), 水野史土 (著), 山田裕進 (著), PHP技術者認定機構 (監修), 株式会社ソキウス・ジャパン (編集)
■ページ数
656ページ
■章構成
はじめに
第1章 関数
第2章 文字列
第3章 配列
第4章 オブジェクト
第5章 ウェブに関するテクニック
第6章 データベース
第7章 グラフィックス
第8章 PDF
第9章 XML
第10章 セキュリティ
第11章 アプリケーションに関するテクニック
第12章 PHPの拡張
第13章 WindowsでのPHP
第14章 追加1(SPL、日付クラス、PEAR)
第15章 追加2(名前空間、クロージャ、リフレクション、遅延静的束縛)
第16章 追加3(JSON)
第17章 追加4(PDO、mysqlnd)
第18章 追加5(正規表現)
第19章 追加6(APD/Xdebug、memcache)
第20章 追加7(フィルタ)
第21章 総仕上げ問題
索引
■詳細
内容
PHP技術者試験 上級/準上級に向けて問題集です。
全問で348問あるため、試験の問題数は70問なのでこの問題集を解くことで5回分解いたことになります。
ページ数が多いですが、同時に章も多いため、各章の問題数は20問くらいでさくさく進めていけるのではないかと思います。
解説ページもかなり詳細に書いてあるので、この問題集1冊だけでもかなりの知識が付きそうです。
勉強方法
あまり時間がないことと内容が幅広いということで今回は勉強のアプローチを変えました。
以下の4ステップで勉強を進めたいと思います。
勉強方法:4ステップ
ステップ1と2はいきなりテキストを読み進めるのではなく、問題集をベースに進めていきます。
ステップ1:知識詰め込み
問題集徹底攻略 PHP5 技術者認定 [上級] 試験問題集 [PJ0-200]対応の章に従って、該当する章をテキストプログラミングPHP 第3版で簡単に読みます。
ステップ2:問題集を解く
ステップ1で読んだ章に該当する問題集徹底攻略 PHP5 技術者認定 [上級] 試験問題集 [PJ0-200]対応の章の問題を解きます。
間違えた問題はテキストに戻るだけではなく、ネットで検索して解決させます。
特に問題集に追加されているライブラリについてはネットで仕様書を確認することにします。
ステップ1、2を問題集徹底攻略 PHP5 技術者認定 [上級] 試験問題集 [PJ0-200]対応の章に従って解いていきます。
ステップ3:総仕上げ問題を解く
問題集徹底攻略 PHP5 技術者認定 [上級] 試験問題集 [PJ0-200]対応の最後にある総仕上げ問題を解きます。
ここでは時間を図って実際の試験と同じような状況にして解きます。
ステップ4:前日に問題集を一気に読み直す
再度問題集を読み直します。
ここは流し読みで、知識を総まとめさせるためです。これによって当日への知識の積み込みを行います。
個人的にはこれを行うことでかなり知識が整理できて、当日はステップ3の模擬試験よりも実力が出せます。
勉強スケジュール
ブログのタイトルで記載した通り、目標は1ヶ月取得です!
PHP技術者認定上級/準上級の資格は申し込めばいつでも受けられるので
今日から1ヶ月後を設定したいと思います。
今日が2017年5月25日なのでこれから1月後の2017年6月25日(日)を試験日としましょう。
一応、宣言も込めて・・・
試験日:2017年6月25日(日)
です!!!
試験日:2017年5月25日(日)にむけて逆算してスケジュールを立てていきます。
前日はステップ4の「前日に参考書を一気に読み直す」をします。
ステップ1,2は同時に進めていきます。
問題集が21章あり、今日を除くと2017/5/26(金)-6/16(金)の21日なので、一日1章ずつ解いていくことになります。なかなか厳しそうですね。。。。
ステップ3は試験日の1週間前に設定しました。
日程 | ステップ |
---|---|
2017/5/25(木)-6/16(金) | ステップ1 |
2017/5/25(木)-6/16(金) | ステップ2 |
2017/6/17(土)-6/23(金) | ステップ3 |
2017/6/24(土) | ステップ4 |
2017/6/25(日) | 試験日 |
上記のスケジュールに従って勉強を進めていきたいと思います。
ところどころのポイントで進捗日記がかければいいと思います。
また、資格取得に向けて、これまで週2で更新していたブログを週1に抑制したいと思います。
WordPressのブログは毎週月曜朝の7時に更新したいと思います。
以上!
【投稿アプリ自作(3)】データベースに接続(Laravel)
Webアプリを自作するためにPHPのフレームワークのLaravelを導入することに決めました。
PHP初心者かつLaravel初心者ですが、自分なりにスキルを得るためにLaravelを用いた記事投稿アプリを自作しました。その過程を備忘録としてまとめます。
最終的にはブラウザを利用して記事投稿画面の表示、ユーザごとの記事投稿数のグラフ化を目指したいと思います。
本記事は連載【投稿アプリ自作】の第三回目で、データベースの接続およびマイグレーションによる新規テーブル作成方法をまとめます。
※:Laravelは5.3からファイル構成が大幅に変わりました。本記事ではLaravel5.3以降を使って説明したいと思います。
※2:データベースはXAMPPに入っていたMySQLを使うことにします。事前にデータベースアカウントを登録しておいてください。
目次
ゴール
本記事では、以下の2つを目指します。
・データベースの設定をし、特定のデータベースに接続する
・マイグレーションを実行することで、下の画像の様に新規テーブルを作成する
必要なもの
必要なもの | 価格(円) | ||
---|---|---|---|
1 | PC | ピンキリ | |
備考 | インターネット接続可能なこと | ||
2 | XAMPP | 無料 | |
備考 | 持っていない場合は、こちらを参照→XAMPPのインストール方法 | ||
3 | Composer | 無料 | |
備考 | 持っていない場合は、こちらを参照→Composerのインストール方法 | ||
4 | Laravelフレームワーク | 無料 | |
備考 | インストールしていない場合は、こちらを参照→Laravelのインストール方法 | ||
5 | MySQLのデータベースアカウント | 無料 | |
備考 | 持っていない場合は、こちらを参照→phpMyAdminでデータベースとユーザを新規登録する |
事前準備
XAMPPでApacheとMySQLを起動!
データベースの設定をするために、ApacheとMySQLを起動します。
データベースの準備
データベースにアクセスるため、MySQLのデータベースおよびユーザを新規作成します。
以下にphpMyAdminを使ってMySQLのデータベース、ユーザを新規作成する方法をまとめました。
ご参考にしてください。
Laravelソースファイルの変更
変更や新規作成するLaravelファイル一覧
Laravelのプロジェクトファイル配下にあるファイルで本記事の中で変更、新規作成するファイルについてまとめました。
ファイル名 | 対応 | 備考 | |
---|---|---|---|
1 | .env | 変更 |
.envの変更
.envファイルはアクセス先URLやデータベースの設定値など環境ごとに変わる情報をまとめたファイルになります。
事前準備で新規作成したデータベース名、データベースユーザ名、パスワードを変更します。
変更箇所を以下にまとめました。太字部分はお使いの環境に合わせて変更してください。
行 | 修正前 | 修正後 | |
---|---|---|---|
1 | 9 | DB_HOST=127.0.0.1 | DB_HOST=localhost |
2 | 11 | DB_DATABASE=homestead | DB_DATABASE=<事前準備で作成したデータベース名> |
3 | 12 | DB_USERNAME=homestead | DB_USERNAME=<事前準備で作成したデータベースユーザ名> |
4 | 13 | DB_PASSWORD=secret | DB_PASSWORD=<事前準備で作成したデータベースパスワード> |
マイグレーションの実行
マイグレーションとはデータベースに保存されているデータを保持した状態で、テーブルの作成やカラムの変更などのデータベースの操作を行うための機能です。
Laravelにはデフォルトで以下の2つのマイグレーションファイルがあります。
※xxxは環境依存
これら2つのマイグレーションファイルを実行して、データベースが作成できるかを確認していきます。
マイグレーションを実行するには以下のコマンドをコマンドプロンプト上で実行します。
データベースの確認
データベースが正しく作成されているか確認するため、phpMyAdminにアクセスします。
ブラウザでphpMyAdmin(以下のURL)にアクセスしてください。
上の.envファイルで指定したデータベースに以下の3つのテーブルが新規で作成されているはずです。
・migrations
・password_resets
・users
migrationsテーブルはマイグレーションの実行された履歴が格納されています。
password_resetsテーブル、usersテーブルは前述したデフォルトであったマイグレーションファイルのxxx_password_resets_table.php、xxx_create_users_table.phpの内容に基づいて作成されているテーブルです。
これでマイグレーションを実行して新規のテーブルが作成できることを確認できました。
まとめ
今回はLaravelを使って以下の2つのことを確認しました。
・データベースの設定をし、特定のデータベースに接続する
・マイグレーションを実行することで、下の画像の様に新規テーブルを作成する
今回はデフォルトでるマイグレーションファイルを使って新規テーブルを作成しましたが、実際はデータベースを設計してマイグレーションファイルを作成します。
次回以降でこのマイグレーションファイルの作成方法もまとめていきます。
次回記事
次回はダミーデータベースを設計し、その設計に基づいてマイグレーションファイルの作成、実行する方法をまとめたいと思います。http://shiguregaki.hatenablog.com/entry/p42shiguregaki.hatenablog.com
前回記事
以上!
phpMyAdminでデータベースとユーザを新規登録する
phpMyAdminはMySQLサーバーをブラウザで管理するためのデータベース接続クライアントツールです。
ブラウザからのGUI操作でSQL文を記述することなく、MySQLデータベースに対して様々な操作が行えます。
本記事ではphpMyAdminで新規データベースの作成および新規ユーザの登録する方法をまとめます。
※本記事はXAMPPを利用します。XAMPPをインストールしていない方は事前にインストールをしてください。
XAMPPのインストール方法はこちら
目次
必要なもの
必要なもの | 価格(円) | ||
---|---|---|---|
1 | PC | ピンキリ | |
備考 | インターネット接続可能なこと | ||
2 | XAMPP | 無料 | |
備考 | 持っていない場合は、こちらを参照→XAMPPのインストール方法 |
事前準備
本記事ではXAMPPを使って説明しますので、事前準備としてXAMPPをインストールしてください。
XAMPPをインストールする!
XAMPPはPHPやSQL,apacheなどのサーバのコンポーネントを1つにまとめたソフトになります。
これからPHPを使ってコーディングをしていくので、PHPをインストールする必要があるのですが、XAMPPをインストールすればapacheも同時にインストールできるため、ローカル環境のブラウザ上でPHPの表示確認ができるようになります。
XAMPPのイントール方法をブログにまとめたので、よろしければご参照ください。
XAMPPでApacheとMySQLを起動!
データベースの設定をするために、ApacheとMySQLを起動します。
新しいデータベースの作成
この章では新規データベースを登録方法についてまとめます。
ブラウザでphpMyAdmin(以下のURL)にアクセスしてください。
すると以下のような画面が表示されるはずです。
新規データベースを作成するには左側にあるメニューの中の"New"をクリックします。
するとデータベースの新規作成ページが表示されます。
新規作成したいデータベース名を入力し、"作成"ボタンをクリックします。
下の画像の様に先ほど新規作成したデータベース名が表示されるはずです。
新しいユーザの登録
次にデータベースにアクセスできるユーザを新規登録します。
先ほど作成したデータベースを選択すると、上のメニューに"特権"があります。そこをクリックします。
下の画像のようにユーザ一覧が表示されたら、"Add user account"ボタンをクリックします。
新規に作成するユーザの情報を入力します。
以下の入力欄に値を入力していきます。
・User name:お好きなユーザ名
・Host name:localhost
・パスワード・Retype:お好きなパスワード
・Authentication Plugin:Native MySQL authentication
以下のチェックボックスにチェックを入れます。
・データベース”***”へのすべての特権を与える
・グローバル特権 Check all
その後、右下にある実行ボタンをクリックします。
以下の画像の様に"新しいユーザを追加しました"と表示されれば新規ユーザの作成は完了です。
まとめ
本記事ではphpMyAdminを使ってMySQLサーバへの新規データベース作成および新規ユーザ作成の操作をする方法をまとめました。今回でデータベースを新規作成できましたので、次はそれを操作するアプリの作成が必要です。
私は練習も兼ねてPHPのフレームワークであるLaravelを用いて記事投稿Webアプリを自作してみました。
よろしければそちらの記事もご参考にしてください。
以上!
【投稿アプリ自作(2)】Laravelで"Hello World"表示 (Laravel)
Webアプリを自作するためにPHPのフレームワークのLaravelを導入することに決めました。
PHP初心者かつLaravel初心者ですが、自分なりにスキルを得るためにLaravelを用いた記事投稿アプリを自作しました。その過程を備忘録としてまとめます。
最終的にはブラウザを利用して記事投稿画面の表示、ユーザごとの記事投稿数のグラフ化を目指したいと思います。
本記事は連載【投稿アプリ自作】の第二回目で、Laravelで"Hello World"を表示させることを目指します。
※Laravelは5.3からファイル構成が大幅に変わりました。本記事ではLaravel5.3以降を使って説明したいと思います。
目次
ゴール
本記事では、下の画像の様にブラウザ上でHello Worldが表示できるようになることを目指します。
必要なもの
必要なもの | 価格(円) | ||
---|---|---|---|
1 | PC | ピンキリ | |
備考 | インターネット接続可能なこと | ||
2 | XAMPP | 無料 | |
備考 | 持っていない場合は、こちらを参照→XAMPPのインストール方法 | ||
3 | Composer | 無料 | |
備考 | 持っていない場合は、こちらを参照→Composerのインストール方法 |
Laravelソースファイルの変更
変更や新規作成するLaravelファイル一覧
Laravelのプロジェクトファイル配下にあるファイルで本記事の中で変更、新規作成するファイルについてまとめました。
ファイル名 | 対応 | 備考 | |
---|---|---|---|
1 | app/Http/Controllers/ArticleController.php | 新規作成 | “php artisan make:controller”コマンドで生成 |
2 | resources/views/layout.blade.php | 新規作成 | |
3 | routes/web.php | 変更 |
コントローラーの新規作成
コントローラーはブラウザからのアクションに応じて実行されるファイルです。
ブラウザからのアクションはURLによるページアクセスから入力フォームからのPOSTなどさまざまです。
各アクションに応じたコントローラーを後述するルーティングファイルによって紐づけています。
コントローラーはLaravelのプロジェクトフォルダ上でartisanコマンドにて作成します。
※上の画像ではコントローラー名をArticleControllerにしています。実際に使う時はお好きな名前に変更してください。
コントローラーはLaravelのプロジェクトフォルダの以下のディレクトリに格納されます。
上記格納場所を確認すると、コマンドで指定したファイル名でコントローラーが自動生成されているはずです。
コントローラーの中身を確認すると、下記のようにControllerクラスを継承したコントローラが定義されており、メソッドは空の状態であることが分かります。
上で実行した"artisan make:controller"コマンドのオプションを指定することでデフォルトで基本メソッドを追加したりすることもできます。
ArticleController.phpのデフォルト
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class ArticleController extends Controller { // }
コントローラーの変更
先ほど作成したコントローラーにメソッドを追加します。
後述のルーティングファイルからコントローラーのこの関数を呼ぶことにします。
特に処理はなくこの関数が呼ばれるとlayoutという名称のビュー(後述)が実行されて画面出力されます。
ArticleController.phpの変更
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class ArticleController extends Controller { public function sayHello(){ return view('layout'); } }
ビューの新規作成
コントローラーの次はビューファイルを作成します。
ビューはコントローラーから加工したデータなどを引数として受け取り、画面上に出力させるためのファイルです。
ブラウザに出力させたいので、HTML文で記入します。
ビューは下記のディレクトリに格納します。
上記のディレクトリに新しくビューを作成します。このとき注意が必要なのはファイルの拡張子です。
ビューの拡張子は必ず.blade.phpにしてください。
ビューの変更
先ほど作成したビューをHTMLで"Hello World"と表示させるため以下の様に変更します。
layout.blade.php
<!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title>My Blog</title> </head> <body> <h1>Hello World!</h1> </body> </html>
非常に簡単ですが、body要素の中に"Hello World"を入れました。
ルーティングの変更
最後にルーティングを変更します。
ルーティングは特定のアクセス先とコントローラーを紐づけるファイルです。
ルーティングは下記のディレクトリに格納されています。
上記のディレクトリにあるweb.phpを変更します。変更内容は以下の一行をweb.phpに追加しました。
web.phpに一行追加する
Route::get('sayhello', 'ArticleController@sayHello');
sayhelloというアクセスに対して、コントローラー名@メソッド名(上のソースの例ではArticleController@syaHello)で実行するメソッドを指定します。
以上でソースファイルの変更はすべてとなります。
いよいよ次にブラウザで表示できるかを確認してみます。
ブラウザで確認
上で変更したソースが正しく動作するかをブラウザで確認します。
Apacheの起動
ブラウザでlocalhostにアクセスするため、Apacheを起動します。
私の環境ではXAMPP導入してApacheを起動させました。
※XAMPPをもしインストールしていなかったら、下記のサイトを参考にインストールしてみてください。
XAMPPのインストール方法
ブラウザ上で動作確認
ブラウザ上で以下のURLにアクセスします。
下の画像の様に"Hello World!"と表示されていれば、成功です。
まとめ
今回はLaravelを使って画面上に"Hello World"を表示させる方法をまとめました。
URLアクセス=>ルーティングファイル=>コントローラー=>ビュー=>画面表示というおおまかな流れがつかめたと思います。
今後はデータベースやグラフ化などを行っていきますが、この枠組みに従ってまとめていきたいと思います。
次回記事
次回はデータベースに接続するための準備についてまとめたいと思います。http://shiguregaki.hatenablog.com/entry/p41shiguregaki.hatenablog.com
前回記事
以上!
【投稿アプリ自作(1)】Laravelプロジェクト作成 (Laravel)
Webアプリを自作するためにPHPのフレームワークのLaravelを導入することに決めました。
PHP初心者かつLaravel初心者ですが、自分なりにスキルを得るためにLaravelを用いた記事投稿アプリを自作しました。
その過程を備忘録としてまとめます。
最終的にはブラウザを利用して記事投稿画面の表示、ユーザごとの記事投稿数のグラフ化を目指したいと思います。
本記事は連載【投稿アプリ自作】の第一回目で、Laravelプロジェクトの作成方法をまとめます。
目次
ゴール
本記事で目指すのは、下の画像の様に特定フォルダの下にLaravelのプロジェクトファイルを作成することです。
必要なもの
必要なもの | 価格(円) | ||
---|---|---|---|
1 | PC | ピンキリ | |
備考 | インターネット接続可能なこと | ||
2 | XAMPP | 無料 | |
備考 | 持っていない場合は、こちらを参照→XAMPPのインストール方法 | ||
3 | Composer | 無料 | |
備考 | 持っていない場合は、こちらを参照→Composerのインストール方法 |
事前準備
Laravelをインストールする前にXAMPPやComposerが必要になります。
事前準備としてXAMPPのインストールおよびComposerのインストールをしてください。
XAMPPをインストールする!
XAMPPはPHPやSQL,apacheなどのサーバのコンポーネントを1つにまとめたソフトになります。
これからPHPを使ってコーディングをしていくので、PHPをインストールする必要があるのですが、XAMPPをインストールすればapacheも同時にインストールできるため、ローカル環境のブラウザ上でPHPの表示確認ができるようになります。
XAMPPのイントール方法をブログにまとめたので、よろしければご参照ください。
Composerをインストールする!
LaravelのインストールはComposerを使って行うのが一般的なようです。
Cmoposerをインストールしていない場合は、インストールをしてください。
Composerのインストール方法をブログにまとめたので、よろしければご参照ください。
Laravelプロジェクトファイルの作成
コマンドプロンプトを開き、XAMPPのhtdocsフォルダへ移動します。※XXXXXXはXAMPPのhtdocsに変更してください。XAMPPのhtdocsフォルダ上で、下記のコマンドを入力します。
これでLaravelファイルの作成は終了です。非常に簡単ですね。
XAMPPのhtdocsフォルダを確認すると、上で指定したプロジェクト名のフォルダができており、その配下にLaravel関連のファイルが格納されているはずです。
まとめ
本記事ではLaravelでWebアプリを作成するに当たり一番初めに行うLaravelファイルの作成方法をまとめました。次回はここで作成したLaravelファイルに手を加えて"Hello World"を画面に表示させる方法をまとめたいと思います。
次回記事
http://shiguregaki.hatenablog.com/entry/p39shiguregaki.hatenablog.com
前回記事
今回の記事が最初です。以上!