これからLaravel(ララベル)で掲示板を作成します。まずローカルで作成して動作確認をしたあとアップロードします。そのためにはローカルでPHPとComposerが使用できるようにしておかなければなりません。
Contents
ローカルでテストできるようにする
PHPが使えるようにするために一番手っ取り早いのはXAMPP(ザンプ)をインストールする方法です。公式サイトからダウンロードしてインストールしましょう。
次にComposerのインストールします。公式サイトからインストーラをダウンロードしてインストールします。
インストールが終わったらコマンドプロンプトで以下を実行します。
1 |
$ composer global require laravel/installer |
あとは適当なフォルダを作成して、そこでコマンドプロンプトで以下を実行します。これはプロジェクト名をfirstにする場合です。
1 2 |
cd プロジェクトを作成したいディレクトリに移動 laravel new first |
これによってfirstフォルダが生成され、そのなかに必要なファイルが生成されますが、このフォルダをプロジェクトのフォルダと呼ぶことにします。
必要なライブラリのインストール
あと必要なライブラリもインストールしておきます。
このときにnpmが必要になるのでNode.jsもインストールしておきます。ここからインストーラをダウンロードしてください。
Laravelでカラムを変更できるようにするためには、doctrine/dbalというライブラリが必要です。
Laravelでフォームを使用するには、laravelcollective/htmlというライブラリが必要です。
ユーザー管理機能を追加するにはlaravel/uilというライブラリが必要です。
> よりも右側をコマンドプロンプトまたはパワーシェルで入力してください。
1 2 3 4 5 6 7 |
> cd (プロジェクトのフォルダ)に移動 (例 cd first) > composer require doctrine/dbal > composer require laravelcollective/html > composer require laravel/ui > php artisan ui vue --auth > npm install > npm run dev |
これで準備は整いました。
データベースの設定をする
まず掲示板を作成するためにはデータベースが必要です。データベースはMySQLではなくSQliteを使用します。そこでそのための準備をします。
まずWindowsにSQLiteがインストールされていない場合はインストールします。
SQLite公式(ダウンロードページ)にアクセスしてsqlite-tools-win32-x86-XXXXXXX.zipのリンクをクリックしてzipファイルをダウンロードします。そしてこれを解凍したら適当なフォルダにコピーします。そしてコマンドプロンプトでsqlite3とタイプしたら実行できるようにパスを通しておきます。
1 2 3 4 5 |
> cd (プロジェクトのフォルダ)\database > sqlite3 database.sqlite # 以降、入力するのはsqlite> よりも右側の文字列 sqlite> .tables sqlite> .exit |
これで(プロジェクトのフォルダ)\databaseのなかを見てみるとdatabase.sqliteというファイルが生成されていることが確認できます。
次にプロジェクトのフォルダのなかに.envというファイルがあります。このなかに
1 2 3 4 5 6 |
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=first DB_USERNAME=root DB_PASSWORD= |
と書かれている部分があります。これを以下のように変更します。DB_CONNECTION=sqlite と書き換えて、それ以外のDB_何とかと書かれている行の先頭に # をつけます。
1 2 3 4 5 6 |
DB_CONNECTION=sqlite # DB_HOST=127.0.0.1 # DB_PORT=3306 # DB_DATABASE=first # DB_USERNAME=root # DB_PASSWORD= |
モデルとコントローラの作成
次にデータベースにテーブルを作成します。Articleというモデルとマイグレーション、コントローラを作成するためにはプロジェクトのフォルダで以下を実行します。
1 |
> php artisan make:model Article -m -c -r |
を実行します。
そのあと(プロジェクトのフォルダ)\app\Modelsを確認してみるとArticle.phpというファイルが生成されていることがわかります。また(プロジェクトのフォルダ)\app\Http\ControllersのなかにはArticleController.phpというファイルが生成されています。そして(プロジェクトのフォルダ)\database\migrationsのなかには(実行日時)_create_articles_table.phpというファイルが生成されていることが確認できます。
次にここで書かれている内容をデータベースに反映させます。そのためにはプロジェクトのフォルダで以下を実行します。
1 |
> php artisan migrate |
テーブルにカラムを追加する
ところであとになってデータベースのテーブルにカラムを追加したくなることがあるかもしれません。例えばユーザーネームやタイトルを追加したくなるかもしれません。その場合は以下を実行します。
1 |
> php artisan make:migration add_column_username --table=articles |
すると(プロジェクトのフォルダ)\database\migrations\(実行日時)_add_column_username.phpというファイルが生成されます。ただしこの処理をするためには前述したとおり、doctrine/dbalというライブラリが必要です。
コマンドを実行したらマイグレーションファイルを編集します。
ここではarticlesテーブルにuser_nameカラムとtitleカラムを追加しています。
(プロジェクトのフォルダ)\database\migrations\(実行日時)_add_column_username.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up() { Schema::table('articles', function (Blueprint $table) { // この2行を追加した(すでにデータが存在する場合はdefaultの値を指定すること) // それ以外の部分は編集しないでそのまま $table->string('user_name')->default(''); $table->string('title')->default(''); }); } public function down() { Schema::table('articles', function (Blueprint $table) { // }); } }; |
そして編集が終わったらマイグレーションを実行します。
1 |
> php artisan migrate |
カラムが追加されたことを確認する
実際にカラムが追加されたかどうかを確認してみましょう。Laravelにはartisan tinkerというコマンドラインインターフェイスがあります。これを使うと、Laravelアプリの環境を有効にしたまま、Laravelの機能をコマンドで操作できます。
プロジェクトのフォルダで以下を実行します。
1 |
$ php artisan tinker |
artisan tinkerを起動したあと、articlesテーブルのすべてのデータを取り出すのであれば以下を実行します。
1 |
>>> Article::all() |
するとデータが存在するのであれば(掲示板に投稿する処理自体つくっていないのでデータは存在しないはずなのですが…)以下のように表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[!] Aliasing 'Article' to 'App\Models\Article' for this Tinker session. => Illuminate\Database\Eloquent\Collection {#3883 all: [ App\Models\Article {#4490 id: "1", content: "Hello Laravel", created_at: "2022-03-31 04:45:56", updated_at: "2022-03-31 19:13:29", user_name: "ユーザーその1", title: "タイトルその1", }, App\Models\Article {#4491 id: "2", content: "よろしくね", created_at: "2022-03-31 13:37:24", updated_at: "2022-03-31 19:09:00", user_name: "ユーザーその2の名前だよーん", title: "ユーザーその2がつけたタイトルだよーん", }, ], } |
終了するときはCtrl+Cです。