■Laravelをインストールする方法(Windows、macOS、Linux別)
■LinuxにLaravelをインストール
kokaki@skynew:~$ mkdir /home/kokaki/www/laravel
kokaki@skynew:~$ cd /home/kokaki/www/laravel
1.Apacheをインストールする
2.PHPをインストールする
kokaki@skynew:~/www/laravel$ sudo apt install -y php libapache2-mod-php php-mbstring php-xmlrpc php-soap
php-gd php-xml php-cli php-zip php-bcmath php-tokenizer php-json php-pear
3.MariaDBをインストールする
4.Composerをインストールする
kokaki@skynew:~/www/laravel$ curl -sS https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...
Composer (version 2.6.6) successfully installed to: /home/kokaki/www/laravel/composer.phar
Use it: php composer.phar
kokaki@skynew:~/www/laravel$ sudo mv composer.phar /usr/local/bin/composer
kokaki@skynew:~/www/laravel$ sudo chmod +x /usr/local/bin/composer
5.PHP、MariaDB、Composerのインストールを確認する
kokaki@skynew:~/www/laravel$ php -v mysql --version composer -V
PHP 8.1.2-1ubuntu2.14 (cli) (built: Aug 18 2023 11:41:11) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2-1ubuntu2.14, Copyright (c), by Zend Technologies
6.Composerを使用してLaravelをインストールする
kokaki@skynew:~/www/laravel$ composer create-project --prefer-dist laravel/laravel testapp
51 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
INFO Discovering packages.
laravel/sail ....................................................................................................... DONE
laravel/sanctum .................................................................................................... DONE
laravel/tinker ..................................................................................................... DONE
nesbot/carbon ...................................................................................................... DONE
nunomaduro/collision ............................................................................................... DONE
nunomaduro/termwind ................................................................................................ DONE
spatie/laravel-ignition ............................................................................................ DONE
83 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan vendor:publish --tag=laravel-assets --ansi --force
INFO No publishable resources for tag [laravel-assets].
No security vulnerability advisories found.
> @php artisan key:generate --ansi
INFO Application key set successfully.
7.Laravelサーバーを実行する
kokaki@skynew:~/www/laravel$ cd testapp
kokaki@skynew:~/www/laravel/testapp$ php artisan serve
http://localhost:8000/
■【初心者入門】Laravelの使い方解説!Todoアプリ作成
kokaki@skynew:~$ mkdir /home/kokaki/www/laravel/testapp
kokaki@skynew:~$ cd /home/kokaki/www/laravel/testapp
kokaki@skynew:~/www/laravel/testapp$
kokaki@skynew:~/www/laravel/testapp$ composer create-project --prefer-dist laravel/laravel . "9.*"
--prefer-distオプション:パッケージをインストールするにあたって、
zip形式でダウンロードして展開するという指定です。
"9.*":Laravelのバージョンを指定する場合は、
パッケージを例えば「"6.*"」のように指定します。
・Laravelの初期設定
kokaki@skynew:~/www/laravel/testapp$ vi config/app.php
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
'fallback_locale' => 'ja',
'faker_locale' => 'ja_JP',
kokaki@skynew:~/www/laravel/testapp$ vi .env
APP_NAME=Laravel_TodoApp
・データベースとの接続
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=dev
DB_PASSWORD=dev
※MySQLにデータベース「laravel」を作成しておく!
kokaki@skynew:~/www/laravel/testapp$ vi config/database.php
'charset' => 'utf8',
'collation' => 'utf8_general_ci',
kokaki@skynew:~/www/laravel/testapp$ php artisan config:clear
kokaki@skynew:~/www/laravel/testapp$ php artisan migrate
※phpのPDOを有効にしておく。
php.iniのextension=pdo_mysqlのコメントを除く(有効にする)
・tasksテーブルを作る
kokaki@skynew:~/www/laravel/testapp$ php artisan make:migration create_tasks_table
kokaki@skynew:~/www/laravel/testapp$ vi database/migrations/2024_02_06_132644_create_tasks_table.php
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->string('name', 100);
$table->boolean('status')->default(false);
$table->timestamp('updated_at')->useCurrent()->nullable();
$table->timestamp('created_at')->useCurrent()->nullable();
});
kokaki@skynew:~/www/laravel/testapp$ php artisan migrate
・モデルを作る
kokaki@skynew:~/www/laravel/testapp$ php artisan make:model Task
kokaki@skynew:~/www/laravel/testapp$ php artisan make:controller TaskController --resource
kokaki@skynew:~/www/laravel/testapp$ vi routes/web.php
use App\Http\Controllers\TaskController;
Route::resource('tasks', TaskController::class);
kokaki@skynew:~/www/laravel/testapp$ php artisan route:list
GET|HEAD / ..................................................................................................
POST _ignition/execute-solution ignition.executeSolution › Spatie\LaravelIgnition › ExecuteSolutionContr…
GET|HEAD _ignition/health-check ....... ignition.healthCheck › Spatie\LaravelIgnition › HealthCheckController
POST _ignition/update-config .... ignition.updateConfig › Spatie\LaravelIgnition › UpdateConfigController
GET|HEAD api/user ...........................................................................................
GET|HEAD sanctum/csrf-cookie .............. sanctum.csrf-cookie › Laravel\Sanctum › CsrfCookieController@show
GET|HEAD tasks ........................................................... tasks.index › TaskController@index
POST tasks ........................................................... tasks.store › TaskController@store
GET|HEAD tasks/create .................................................. tasks.create › TaskController@create
GET|HEAD tasks/{task} ...................................................... tasks.show › TaskController@show
PUT|PATCH tasks/{task} .................................................. tasks.update › TaskController@update
DELETE tasks/{task} ................................................ tasks.destroy › TaskController@destroy
GET|HEAD tasks/{task}/edit ................................................. tasks.edit › TaskController@edit
Showing [13] routes
kokaki@skynew:~/www/laravel/testapp$ mkdir resources/views/tasks
kokaki@skynew:~/www/laravel/testapp$ vi resources/views/tasks/index.blade.php
kokaki@skynew:~/www/laravel/testapp$ vi app/Http/Controllers/TaskController.php
public function index()
{
return view('tasks.index');
}
kokaki@skynew:~/www/laravel/testapp$ php artisan serve
http://localhost:8000/tasks
■LaravelをApacheのDocumentRoot以外に配置する
kokaki@skynew:~$ sudo vi /etc/apache2/sites-available/laravel.conf
Alias /laravel-testapp /home/kokaki/www/laravel/testapp/public/
<Directory "/home/kokaki/www/laravel/testapp/public/">
Options Includes ExecCGI FollowSymLinks
AllowOverride All
Require all granted
#Order allow,deny
#Allow from all
</Directory>
kokaki@skynew:~$ sudo a2ensite laravel
kokaki@skynew:~$ sudo a2enmod rewrite
kokaki@skynew:~$ sudo systemctl restart apache2
・権限エラーが出るので、、、
kokaki@skynew:~$ sudo chmod -R 777 /home/kokaki/www/laravel/testapp/storage/
・URLの指定方法を変える(ローカルから実行する場合と、Apache2経由でのアクセスに対応)
<form action="/tasks" method="post" ・・・
↓
<form action="{{ url('/tasks') }}" method="post" ・・・
<form action="/tasks/{{ $task->id }}" method="post" ・・・
↓
<form action="{{ url('/tasks')}}/{{ $item->id }}" method="post" ・・・
・セッション情報の権限問題
ローカル実行時と、Apache2経由での実行で、ファイルの権限でエラー発生
kokaki@skynew:~$ rm -r (アプリケーションディレクトリ)/storage/framework/sessions/
→削除すればよい
■LaravelでSQLiteデータベースを使ってみよう
・SQLiteデータベースの作成(Laravel10の場合、事前に作成しなくてもよい)
※config/database.php内の記述「database.sqlite」に合わせる
kokaki@skynew:~/www/laravel/testapp$ touch database/database.sqlite
config/database.php内の記述抜粋
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
・.envファイルの編集
kokaki@skynew:~/www/laravel/testapp$ vi .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel10
DB_USERNAME=root
DB_PASSWORD=
↓
DB_CONNECTION=sqlite
・php artisan migrateでテーブルの作成
kokaki@skynew:~/www/laravel/testapp$ php artisan migrate
Illuminate\Database\QueryException
could not find driver (Connection: sqlite, SQL: PRAGMA foreign_keys = ON;)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:829
825▕ $this->getName(), $query, $this->prepareBindings($bindings), $e
826▕ );
827▕ }
828▕
➜ 829▕ throw new QueryException(
830▕ $this->getName(), $query, $this->prepareBindings($bindings), $e
831▕ );
832▕ }
833▕ }
+40 vendor frames
41 artisan:37
Illuminate\Foundation\Console\Kernel::handle()
※エラーが発生
→phpでsqliteがインストールされていないらしい。。。
・SQLiteモジュールのインストール
kokaki@skynew:~/www/laravel/testapp$ sudo apt install -y php8.1-sqlite3
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
php8.1-sqlite3
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 32.2 kB of archives.
After this operation, 139 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 php8.1-sqlite3 amd64 8.1.2-1ubuntu2.14 [32.2 kB]
Fetched 32.2 kB in 1s (34.3 kB/s)
Selecting previously unselected package php8.1-sqlite3.
(Reading database ... 72071 files and directories currently installed.)
Preparing to unpack .../php8.1-sqlite3_8.1.2-1ubuntu2.14_amd64.deb ...
Unpacking php8.1-sqlite3 (8.1.2-1ubuntu2.14) ...
Setting up php8.1-sqlite3 (8.1.2-1ubuntu2.14) ...
Creating config file /etc/php/8.1/mods-available/sqlite3.ini with new version
Creating config file /etc/php/8.1/mods-available/pdo_sqlite.ini with new version
Processing triggers for libapache2-mod-php8.1 (8.1.2-1ubuntu2.14) ...
Processing triggers for php8.1-cli (8.1.2-1ubuntu2.14) ...
kokaki@skynew:~/www/laravel/testapp$ sudo service apache2 restart
・php artisan migrateでテーブルの作成(リトライ)
kokaki@skynew:~/www/laravel/testapp$ php artisan migrate
INFO Preparing database.
Creating migration table ................................................................................. 14ms DONE
INFO Running migrations.
2014_10_12_000000_create_users_table ..................................................................... 28ms DONE
2014_10_12_100000_create_password_reset_tokens_table ..................................................... 12ms DONE
2019_08_19_000000_create_failed_jobs_table ............................................................... 24ms DONE
2019_12_14_000001_create_personal_access_tokens_table .................................................... 27ms DONE
2024_02_07_133544_create_tasks_table ...................................................................... 9ms DONE
・アプリケーションで使用時、エラーが発生
SQLSTATE[HY000]: General error: 8 attempt to write a readonly database
・データベースファイルの書き込み権限を追加
ユーザ「kokaki」で作成、「www-data」で使用するため
kokaki@skynew:~/www/laravel/testapp$ sudo chmod -R 777 database/
■ディレクトリ作成
kokaki@skynew:~$ mkdir /home/kokaki/www/laravel/todo2
kokaki@skynew:~$ cd /home/kokaki/www/laravel/todo2/
■プロジェクト作成
kokaki@skynew:~/www/laravel/todo2$ composer create-project --prefer-dist laravel/laravel .
:
:
:
Use the `composer fund` command to find out more!
> @php artisan vendor:publish --tag=laravel-assets --ansi --force
INFO No publishable resources for tag [laravel-assets].
No security vulnerability advisories found.
> @php artisan key:generate --ansi
INFO Application key set successfully.
■権限設定(オーナー)
kokaki@skynew:~/www/laravel/todo2$ sudo chown -R :www-data /home/kokaki/www/laravel/todo2/storage
kokaki@skynew:~/www/laravel/todo2$ sudo chown -R :www-data /home/kokaki/www/laravel/todo2/bootstrap/cache
■権限設定(アクセス)
kokaki@skynew:~/www/laravel/todo2$ sudo find ./ -type d -exec chmod 755 {} \;
kokaki@skynew:~/www/laravel/todo2$ sudo find ./ -type f -exec chmod 644 {} \;
■環境設定(国別指定)
kokaki@skynew:~/www/laravel/todo2$ vi config/app.php
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
'fallback_locale' => 'ja',
'faker_locale' => 'ja_JP',
■データベース設定
kokaki@skynew:~/www/laravel/todo2$ vi .env
#DB_CONNECTION=mysql
#DB_HOST=127.0.0.1
#DB_PORT=3306
#DB_DATABASE=laravel
#DB_USERNAME=root
#DB_PASSWORD=
DB_CONNECTION=sqlite
■プロジェクト実行
kokaki@skynew:~/www/laravel/todo2$ php artisan serve
http://localhost:8000/
■テーブル作成(DBも作る)
kokaki@skynew:~/www/laravel/todo2$ php artisan make:migration create_tasks_tablele
INFO Migration [database/migrations/2024_02_16_092723_create_tasks_table.php] created successfully.
kokaki@skynew:~/www/laravel/todo2$ vi database/migrations/2024_02_16_092723_create_tasks_table.php
public function up(): void
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->string('name', 100);
$table->boolean('status')->default(false);
$table->timestamp('updated_at')->useCurrent()->nullable();
$table->timestamp('created_at')->useCurrent()->nullable();
});
}
kokaki@skynew:~/www/laravel/todo2$ php artisan migrate
WARN The SQLite database does not exist: database/database.sqlite.
┌ Would you like to create it? ────────────────────────────────┐
│ Yes │
└──────────────────────────────────────────────────────────────┘
INFO Preparing database.
Creating migration table ................................................................................. 15ms DONE
INFO Running migrations.
2014_10_12_000000_create_users_table ..................................................................... 21ms DONE
2014_10_12_100000_create_password_reset_tokens_table ...................................................... 8ms DONE
2019_08_19_000000_create_failed_jobs_table ............................................................... 18ms DONE
2019_12_14_000001_create_personal_access_tokens_table .................................................... 26ms DONE
2024_02_16_092723_create_tasks_table ..................................................................... 10ms DONE
■モデルを作る
kokaki@skynew:~/www/laravel/todo2$ php artisan make:model Task
INFO Model [app/Models/Task.php] created successfully.
kokaki@skynew:~/www/laravel/todo2$ php artisan make:controller TaskController --resource
INFO Controller [app/Http/Controllers/TaskController.php] created successfully.
■ルーティング情報
kokaki@skynew:~/www/laravel/todo2$ vi routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TaskController; // 追加
Route::get('/', function () {
return view('welcome');
});
Route::resource('tasks', TaskController::class); // 追加
kokaki@skynew:~/www/laravel/todo2$ php artisan route:list
GET|HEAD / ..................................................................................................
POST _ignition/execute-solution ignition.executeSolution › Spatie\LaravelIgnition › ExecuteSolutionContr…
GET|HEAD _ignition/health-check ....... ignition.healthCheck › Spatie\LaravelIgnition › HealthCheckController
POST _ignition/update-config .... ignition.updateConfig › Spatie\LaravelIgnition › UpdateConfigController
GET|HEAD api/user ...........................................................................................
GET|HEAD sanctum/csrf-cookie .............. sanctum.csrf-cookie › Laravel\Sanctum › CsrfCookieController@show
GET|HEAD tasks ........................................................... tasks.index › TaskController@index
POST tasks ........................................................... tasks.store › TaskController@store
GET|HEAD tasks/create .................................................. tasks.create › TaskController@create
GET|HEAD tasks/{task} ...................................................... tasks.show › TaskController@show
PUT|PATCH tasks/{task} .................................................. tasks.update › TaskController@update
DELETE tasks/{task} ................................................ tasks.destroy › TaskController@destroy
GET|HEAD tasks/{task}/edit ................................................. tasks.edit › TaskController@edit
Showing [13] routes
kokaki@skynew:~/www/laravel/todo2$ mkdir resources/views/tasks
kokaki@skynew:~/www/laravel/todo2$ touch resources/views/tasks/index.blade.php
kokaki@skynew:~/www/laravel/todo2$ touch resources/views/tasks/edit.blade.php
kokaki@skynew:~/www/laravel/todo2$ mkdir resources/views/layout
kokaki@skynew:~/www/laravel/todo2$ touch resources/views/layout/layout.blade.php
kokaki@skynew:~/www/laravel/todo2$ touch resources/views/layout/tab-header.blade.php
Laravel入門 初回ガイダンス(第1回)
tasks
論理名 |物理名 |型 |制約 |補足
ID |id |bigserial |not null|pk
タスク名 |title |character varying(40) |not null|
ステータス|ststus |integer |not null|
概要 |description|character varying(200)| |
作成日 |created_at |timestamp | |
更新日 |updated_a t|timestamp | |
create table tasks (
id integer not null primary key
, title var(40) not null
, status integer not null
, description varchar(200)
, created_at timestamp
, updated_at timestamp
) ;
Schema::create('todos', function (Blueprint $table) {
$table->id();
$table->string('title', 40);
$table->boolean('status')->default(false);
$table->string('description', 200);
$table->timestamp('created_at')->useCurrent()->nullable();
$table->timestamp('updated_at')->useCurrent()->nullable();
});
INSERT INTO tasks (title,status,description) VALUES ('bitcoinの半減期を調べる',1,'bitcoinの半減期と価格の相関性を調べる');
INSERT INTO tasks (title,status,description) VALUES ('サンフランシスコ旅行',1,'サンノゼ空港からパロ・アルトへの行き方を調べる');
INSERT INTO tasks (title,status,description) VALUES ('アクアパッツァ',1,'再来週の食事会のためにアクアパッツァの作り方を学ぶ');
INSERT INTO tasks (title,status,description) VALUES ('サンフランシスコ行きの航空券',1,'羽田からサンノゼ空港行きのチケットを予約');
Laravelの認証機能を徹底解説
入門者のためのLaravelのバリデーションとエラーメッセージ