- 投稿日:2020-02-08T23:27:03+09:00
Laravel ダミーデータ登録(seeder, factory, faker)
ダミーデータの登録
- seeder: ダミーデータを登録する
- 少量のデータであればこれだけでOK
- factory: ダミーデータを量産する装置
- faker: 装置を使用してダミーデータを生成する
少数のデータ登録の場合
seederを作成し、データを直に入れる
$ php artisan make:seed UsersTableSeeder
UsersTableSeederpublic function run() { // $this->call(UsersTableSeeder::class); DB::table('depts')->insert([ ['id' => '1', 'name_id' => '1', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ], [ 'id' => '2', 'name_id' => '2', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ] }モデルごとに作成したseederを紐付ける
DatabaseSeeder.phppublic function run() { $this->call(UsersTableSeeder::class); }登録
$ php artisan db:seed $ php artisan db:seed --class=UsersTableSeeder # データベース初期化する場合 $ php artisan migrate:refresh --seeder多数のデータ登録の場合
factoryの作成
$ php artisan make:factory UserFactory
生成したfactoryファイルにfakerを使って生成する
生成したfactoryファイルのModelと書かれたところを、使用するModel名に変更する
UserFactory.php$factory->define(User::class, function (Faker $faker) { return [ 'name' => $faker->name(), 'email' => $faker->email, 'password' => $faker->password, // password 'created_at' => $faker->datetime($max = 'now', $timezone = date_default_timezone_get()), 'updated_at' => $faker->datetime($max = 'now', $timezone = date_default_timezone_get()) ]; });seederを作成する
$ php artisan make:seed UsersTableSeeder
使用するfactoryと生成するダミーデータの個数を追記する
UsersTableSeederclass UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { factory(User::class, 50)->create(); } }モデルごとに作成したseederを紐付ける
DatabaseSeeder.phppublic function run() { $this->call(DeptsTableSeeder::class); }登録
$ php artisan db:seed $ php artisan db:seed --class=UsersTableSeeder # データベース初期化する場合 $ php artisan migrate:refresh --seeder(補足)日本語のダミーデータを登録する
デフォルトでは英語のダミーデータが生成されが、設定すれば日本語のダミーデータが生成できるようになる
config/app.php'faker_locale' => env('APP_FAKER_LOCALE', 'ja_JP').env// 追記 APP_FAKER_LOCALE=ja_JP上記2ファイルの設定が終わると、次のコマンドでキャッシュを更新して登録すれば日本で登録される
$ php artisan config:cache # 次のコマンドを打つと壊れるので注意 $ php artisan config:clear(補足)使えそうなfakerリスト
'name' => $faker->name(), 'email' => $faker->email, 'password' => $faker->password, // password 'created_at' => $faker->datetime($max = 'now', $timezone = date_default_timezone_get()), 'updated_at' => $faker->datetime($max = 'now', $timezone = date_default_timezone_get()), $faker->sentence(rand(1,4)), // 1〜4つの単語で文章 $faker->realText(512), // 512文字の文章 $faker->word() // 単語 $faker->sentence(n) //単語数指定した文章 $faker->text($max) //$max文字数までの文章 $faker->name() //名前 (日本語) $faker->realText() //文字数指定した文章 デフォルトは200(日本語) $faker->phoneNumber() //電話番号(日本語) $faker->address() //住所(日本語) $fake->company() //会社名(日本語) $faker->randomElement(['男性', '女性'])(補足)リレーション関係でのfaker
use App\User 'user_id' => factory(User::class)->create()->id,参考
- 投稿日:2020-02-08T22:36:48+09:00
LaravelでYoutubeAPIを使って特定チャンネルのタイトル一覧抽出
概要
この記事ではLaravelとYoutube Data api(v3)を用いて
Youtubeの特定チャンネルのtitleを抽出し、
ブラウザに表示する機能のサンプルを実装します。参考ドキュメント
手順
事前準備
- YoutubeのAPIを叩くためのアプリケーションキーを取得
- Youtube APIを有効化
Google Youtube API 認証などで検索すれば出てくるはずです。
実施手順
インストール
$ composer create-project --prefer-dist laravel/laravel bollate "5.8.*"
起動確認
APPキーを生成
$ php artisan key:generate
起動確認
いつものLaravel画面が表示できればOK
GoogleAPIをインストール
phpでGoogleのAPIを使うにあたり便利なライブラリが存在するので利用します(感謝)
google-api-php-client公式の通りインストール
$ composer require google/apiclient:"^2.0"
GOOGLE_KEYを.envに設定
.envGOOGLE_API_KEY = "YOURKEYXXXX"Controller生成
$php artisan make:controller YoutubeController
以下はサンプルです。ライブラリが保持するクラスの関数やプロパティは
APIのリファレンスやライブラリのドキュメントを参照ください。YoutubeController.php<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use Google_Client; use Google_Service_YouTube; class YoutubeController extends Controller { const MAX_SNIPPETS_COUNT = 50; const DEFAULT_ORDER_TYPE = 'viewCount'; public function getListByChannelId(string $channelId) { // Googleへの接続情報のインスタンスを作成と設定 $client = new Google_Client(); $client->setDeveloperKey(env('GOOGLE_API_KEY')); // 接続情報のインスタンスを用いてYoutubeのデータへアクセス可能なインスタンスを生成 $youtube = new Google_Service_YouTube($client); // 必要情報を引数に持たせ、listSearchで検索して動画一覧を取得 $items = $youtube->search->listSearch('snippet', [ 'channelId' => $channelId, 'order' => self::DEFAULT_ORDER_TYPE, 'maxResults' => self::MAX_SNIPPETS_COUNT, ]); // 連想配列だと扱いづらいのでcollection化して処理 $snippets = collect($items->getItems())->pluck('snippet')->all(); return view('youtube/index')->with(['snippets' => $snippets]); } }Routing生成
web.phpRoute::get('youtube/channels/{id}'/titles, 'Api\YoutubeController@getListByChannelId');View生成
index.blade.php<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Youtube</title> <link rel="stylesheet" href="/css/app.css"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> </head> <body class="index"> <div class="main"> <div class="header"> <div class="header__title"> <h1 class="header__title__main"> Youtube Title List; </h1> <p class="header__title__sub"> This is Youtube Title GET; </p> </div> </div> <div class="content"> <div class="content__body"> @foreach ($snippets as $snippet) <div class="content__body__videos"> <p> {{ $snippet->title }} </p> </div> @endforeach </div> </div> </div> </body> </html>実行
$ php artisan serve
http://127.0.0.1:8000/youtube/channels/UCutJqz56653xV2wwSvut_hQ/titles
チャネルのIDをURLで指定することで特定チャンネルの動画のタイトルリストを得ることができました。
画像内容データ引用元:
【東海オンエア チャンネル】
https://www.youtube.com/channel/UCutJqz56653xV2wwSvut_hQ他にも、動画をアップロード・再生リストの作成など、様々な操作を実行可能です。
よきAPIライフを
- 投稿日:2020-02-08T21:23:44+09:00
Laravel CSRF対策について(検証中)
Laravelではこう書く
<form method="POST" action="/profile"> @csrf ... </form>@csrf
webミドルウェアグループに含まれている、VerifyCsrfToken ミドルウェアが、リクエスト中のトークンとセッションに保存されているトークンが一致するか、確認しています。
https://readouble.com/laravel/6.x/ja/csrf.htmlBut ...しかしながらエラー
- うまく遷移せず。。 トークン切れのエラーが出た。(詳細は再現できず)
threfore ...なので
<meta name="csrf-token" content="{{ csrf_token() }}">これだと上手く表示された。
原因は今後分かりしだい追記。
備忘録
- 投稿日:2020-02-08T20:17:50+09:00
とりあえずLaradockで
対象者
とりあえずインフラとかDockerとか慣れてなくてよく分からないけど、手早くLaravelを動かせればいいやーって人向けです。
Laradockとは
公式サイトには「Laradockは、Dockerに基づく完全なPHP開発環境です。」とあります。
Laradock is a full PHP development environment based on Docker.
公式
前提
- パソコンがある
- Wifiがある
※あとDockerのいんすとーるとかはやっといてくださーい、gitも要るよー。
手順
1. ローカルでディレクトリを作成
- 任意のディレクトリ作成
$ mkdir laradock $ cd laradock/2. LaradockのリポジトリをClone
GithubからLaradockのリポジトリをクローン
$ git clone https://github.com/Laradock/laradock.git laradock-practice $ cd laradock-practice/laradock-practiceの部分は、好きに変えてください。
デフォルトでは「laradock」というディレクトリになりますが、引数に名前を渡すとオリジナルのものができあがります。名前はつけておいたほうがいいっすね。3. 各種設定 (Laradock)
- 設定ファイルのコピー作成
$ cp env-example .env.env(設定ファイル)を開く
$ vi .env以下の項目を探し、修正してください
修正前
APP_CODE_PATH_HOST=../修正後
APP_CODE_PATH_HOST=../laradock-projectlaradock-projectの部分はこれから作るLaravelプロジェクトの名前にしてください。
LaravelのWebサーバー上で同期するディレクトリを指定しています。
これをちゃんと指定してあげないとアクセス時404エラーになります。※viコマンドはコマンドでファイルの編集ができます。編集したい箇所で「i」を入力するとインサートモードになり文字が打てるようになります。インサートモードを終了するには「esc」ボタンを入力します。その後、編集したファイルを保存し、終了するには「:」と「wq」を立て続けに入力してください。
修正前
MYSQL_VERSION=latest MYSQL_DATABASE=default MYSQL_USER=default MYSQL_PASSWORD=secret MYSQL_PORT=3306 MYSQL_ROOT_PASSWORD=root修正後
MYSQL_VERSION=5.7(別に5.7じゃなくても) MYSQL_DATABASE=このへんは MYSQL_USER=じゆうに MYSQL_PASSWORD=きめちゃってください MYSQL_PORT=3306 MYSQL_ROOT_PASSWORD=root※詳しく調べていませんが、mysqlのverをlatestで最新にするとセキュリティ上の問題でうまく接続できないらしいです。僕はちなみに、5.7にしているのにうまく動かない時があり、なぜだろうと思っていたら「5.7t」と記述しており、5.7トンという重さを指定してしまっていたことがありました。
- laradock-practice/nginx/sites/default.confの変更
これはnginxに関する設定ファイルです。
nginx起動時に表示するファイルなどを指定できるのですが、パスの指定がうまくいっていない場合があるので、修正する必要があれば書き換えましょう。
着目してもらいたいのは一部分です。
以下のような修正前の状態になっていれば、修正してください。
laradock-projectの部分はそれぞれ作成されるLaravelプロジェクトの名前を指定してください。修正前
root /var/www/public;修正後
root /var/www/laradock-project/public;4. コンテナ立ち上げ〜プロジェクトの作成
- コンテナの立ち上げ
$ docker-compose up -d mysql nginxdocker-compose upコマンドはdocker-compose.ymlに書かれた情報をもとに処理を実行します(コンテナイメージの作成からコンテナの立ち上げなど。引数なしだと記述されている内容すべてが実行されるので、ひとまずDBサーバのmysqlとwebサーバのnginxを指定します。
※-dはデタッチモード(バックグラウンドで起動します)
- コンテナの起動確認
以下のように立ち上がっていれば大丈夫です。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 82e444c0ae67 laradock_nginx "/bin/bash /opt/star…" 6 seconds ago Up 4 seconds 0.0.0.0:80-81->80-81/tcp, 0.0.0.0:443->443/tcp laradock_nginx_1 bd531621d6a3 laradock_php-fpm "docker-php-entrypoi…" 7 seconds ago Up 6 seconds 9000/tcp laradock_php-fpm_1 1665d8a83f3b laradock_workspace "/sbin/my_init" 8 seconds ago Up 7 seconds 0.0.0.0:2222->22/tcp laradock_workspace_1 d8b22e74c28f docker:dind "dockerd-entrypoint.…" 10 seconds ago Up 8 seconds 2375-2376/tcp laradock_docker-in-docker_1 7af2df7ebe17 laradock_mysql "docker-entrypoint.s…" 10 seconds ago Up 8 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp laradock_mysql_1
- ワークスペースコンテナに入る
ワークスペースコンテナに入ります。exec、bashでそのコンテナに対してコマンドが叩けるようになります。
ワークスペースとはLaravelの開発を進めるにあたって必要なcomposerなどのツール類が用意された作業スペースみたいなところです。
デフォルトだとrootでワークスペースに入ることになるのですが、後ほどcomposerコマンドを実行した際に、怒られてしまうので、怒られるのが苦手な人は--user=laradockとかでlaradockユーザーとしてワークスペースに入ってください。
$ docker-compose exec --user=laradock workspace bash .../var/www$
- Laravelプロジェクトの作成
以下のコマンドで、Laravelのプロジェクトがlaradockディレクトリと同じ階層の中に作成されます。
この実行内容だと最新verのLaravelでプロジェクトが作られます。ver指定したい場合は調べてください。.../var/www$ composer create-project laravel/laravel laradock-project ...以下略 Application key set successfully.
- プロジェクト内へ移動
プロジェクト内に移動します。
.../var/www$ cd laradock-project/5. 各種設定(Laravelプロジェクト)
- 設定ファイルの修正
.../var/www$ vi .env以下のように修正
修正前
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=修正後
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=このへんはさっきつくった DB_USERNAME=Laradockの.envの内容と DB_PASSWORD=合わせてください.envの内容は先ほど作ったLaradockの方の内容と整合性が取れている必要がありますので合わせておいてください。
7. MySQLの確認
MySQLの設定がうまくいっているかを確認します。
- MySQLコンテナへ入る
Ctl + dでワークスペースコンテナを出て、MySQLコンテナに入ります。
$ docker-compose exec mysql bash
- MySQLへ接続
MySQLへ、接続します。defaultの部分は先ほど.envファイルで設定したユーザーネームを指定し、その後パスワードを聞かれるので、同じように.envで設定したパスワードを入力してください。うまくログインできればsqlコマンドが打てる画面に移り変わります。
# mysql -u default -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.27 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
- データベースの確認
うまく設定できていれば、.envで設定したデータベースが作られているはずです
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | default | +--------------------+ 2 rows in set (0.02 sec)
- ユーザーの確認(rootで入った場合のみ行えます)
こちらも設定できていれば、.envで設定したユーザーが登録されていることが確認できますが、mysqlにroot権限で接続している必要があります。
mysql> select User from mysql.user; +---------------+ | User | +---------------+ | default | | root | | mysql.session | | mysql.sys | | root | +---------------+ 5 rows in set (0.02 sec)
- マイグレーションチェック
マイグレーションを実行し、データベースの接続が上手くいっているかを確認します。
Laravelにおけるマイグレーションとはデータベースのバージョン管理機能のことです。MySQL確認の延長ですが、一旦MySQLコンテナから抜け、ワークスペースコンテナに入り、プロジェクト内に移動して以下のコマンドを実行します。
データベース接続がうまくいっていればマイグレーションが実行されます。
$ php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.07 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.06 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.03 seconds)ここまでの流れで上手くいかない場合
- Laradock、Laravelプロジェクトの各.envファイルの整合性が取れていない可能性
→.envファイルの設定がそれぞれ同じになっているかを確認し、合っていなければ合わせてください。
- ストレージデータの影響
→laradockでDBを使用する際のストレージがデフォルトで、~/.laradock/dataに設定されています。~/.laradock/dataにmysqlというディレクトリが存在しているので一旦削除してやり直してみてください。
補足
デフォルトで~/.laradock/dataが設定されていると説明しましたが、これでは他にLaradockを使ってプロジェクトを作成した際に同じ場所を参照してしまうので変えた方がいいっぽいです。ここでは詳しく解説はしませんので詳細は調べてください。
- .envの書き換え等が反映されていない可能性
コンテナを立ち上げたまま、.env等の設定を書き換えただけでは内容が反映されません。
一度、コンテナを起動させ直しましょう。再起動
$ docker-compose restartダメなら停止と削除〜起動
$ docker-compose down$ docker-compose up -d mysql nginx8. プロジェクトの起動確認
- localhostへアクセス
nginxのコンテナを立ち上がっている状態でlocalhostへアクセスします。うまくいっていれば、Laravelのトップページが表示されます。
上手くいかない場合
- Laradockの.envファイルのAPP_CODE_PATH_HOSTの設定が正しくできていない
→プロジェクトが存在するパスをちゃんと記述してあげてください。
- nginxのdefault.confのパス指定が上手くできていない
→上記に手順を記載していますので、やり直してください。
- nginxコンテナが立ち上がっていない
→docker psコマンドで確認し、立ち上がっていなければ、立ち上げてください。
ここまでくればとりあえずの環境構築は完了です!
あとは煮るなり焼くなり好きにしてください!
- 投稿日:2020-02-08T20:17:50+09:00
とりあえずLaradock
対象者
とりあえずインフラとかDockerとか慣れてなくてよく分からないけど、手早くLaravelを動かせればいいやーって人向けです。
Laradockとは
公式サイトには「Laradockは、Dockerに基づく完全なPHP開発環境です。」とあります。
Laradock is a full PHP development environment based on Docker.
公式
前提
- パソコンがある
- Wifiがある
※あとDockerのいんすとーるとかはやっといてくださーい、gitも要るよー。
手順
1. ローカルでディレクトリを作成
- 任意のディレクトリ作成
$ mkdir laradock $ cd laradock/2. LaradockのリポジトリをClone
GithubからLaradockのリポジトリをクローン
$ git clone https://github.com/Laradock/laradock.git laradock-practice $ cd laradock-practice/laradock-practiceの部分は、好きに変えてください。
デフォルトでは「laradock」というディレクトリになりますが、引数に名前を渡すとオリジナルのものができあがります。名前はつけておいたほうがいいっすね。3. 各種設定 (Laradock)
- 設定ファイルのコピー作成
$ cp env-example .env.env(設定ファイル)を開く
$ vi .env以下の項目を探し、修正してください
修正前
APP_CODE_PATH_HOST=../修正後
APP_CODE_PATH_HOST=../laradock-projectlaradock-projectの部分はこれから作るLaravelプロジェクトの名前にしてください。
LaravelのWebサーバー上で同期するディレクトリを指定しています。
これをちゃんと指定してあげないとアクセス時404エラーになります。※viコマンドはコマンドでファイルの編集ができます。編集したい箇所で「i」を入力するとインサートモードになり文字が打てるようになります。インサートモードを終了するには「esc」ボタンを入力します。その後、編集したファイルを保存し、終了するには「:」と「wq」を立て続けに入力してください。
修正前
MYSQL_VERSION=latest MYSQL_DATABASE=default MYSQL_USER=default MYSQL_PASSWORD=secret MYSQL_PORT=3306 MYSQL_ROOT_PASSWORD=root修正後
MYSQL_VERSION=5.7(別に5.7じゃなくても) MYSQL_DATABASE=このへんは MYSQL_USER=じゆうに MYSQL_PASSWORD=きめちゃってください MYSQL_PORT=3306 MYSQL_ROOT_PASSWORD=root※詳しく調べていませんが、mysqlのverをlatestで最新にするとセキュリティ上の問題でうまく接続できないらしいです。僕はちなみに、5.7にしているのにうまく動かない時があり、なぜだろうと思っていたら「5.7t」と記述しており、5.7トンという重さを指定してしまっていたことがありました。
- laradock-practice/nginx/sites/default.confの変更
これはnginxに関する設定ファイルです。
nginx起動時に表示するファイルなどを指定できるのですが、パスの指定がうまくいっていない場合があるので、修正する必要があれば書き換えましょう。
着目してもらいたいのは一部分です。
以下のような修正前の状態になっていれば、修正してください。
laradock-projectの部分はそれぞれ作成されるLaravelプロジェクトの名前を指定してください。修正前
root /var/www/public;修正後
root /var/www/laradock-project/public;4. コンテナ立ち上げ〜プロジェクトの作成
- コンテナの立ち上げ
$ docker-compose up -d mysql nginxdocker-compose upコマンドはdocker-compose.ymlに書かれた情報をもとに処理を実行します(コンテナイメージの作成からコンテナの立ち上げなど。引数なしだと記述されている内容すべてが実行されるので、ひとまずDBサーバのmysqlとwebサーバのnginxを指定します。
※-dはデタッチモード(バックグラウンドで起動します)
- コンテナの起動確認
以下のように立ち上がっていれば大丈夫です。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 82e444c0ae67 laradock_nginx "/bin/bash /opt/star…" 6 seconds ago Up 4 seconds 0.0.0.0:80-81->80-81/tcp, 0.0.0.0:443->443/tcp laradock_nginx_1 bd531621d6a3 laradock_php-fpm "docker-php-entrypoi…" 7 seconds ago Up 6 seconds 9000/tcp laradock_php-fpm_1 1665d8a83f3b laradock_workspace "/sbin/my_init" 8 seconds ago Up 7 seconds 0.0.0.0:2222->22/tcp laradock_workspace_1 d8b22e74c28f docker:dind "dockerd-entrypoint.…" 10 seconds ago Up 8 seconds 2375-2376/tcp laradock_docker-in-docker_1 7af2df7ebe17 laradock_mysql "docker-entrypoint.s…" 10 seconds ago Up 8 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp laradock_mysql_1
- ワークスペースコンテナに入る
ワークスペースコンテナに入ります。exec、bashでそのコンテナに対してコマンドが叩けるようになります。
ワークスペースとはLaravelの開発を進めるにあたって必要なcomposerなどのツール類が用意された作業スペースみたいなところです。
デフォルトだとrootでワークスペースに入ることになるのですが、後ほどcomposerコマンドを実行した際に、怒られてしまうので、怒られるのが苦手な人は--user=laradockとかでlaradockユーザーとしてワークスペースに入ってください。
$ docker-compose exec --user=laradock workspace bash .../var/www$
- Laravelプロジェクトの作成
以下のコマンドで、Laravelのプロジェクトがlaradockディレクトリと同じ階層の中に作成されます。
この実行内容だと最新verのLaravelでプロジェクトが作られます。ver指定したい場合は調べてください。.../var/www$ composer create-project laravel/laravel laradock-project ...以下略 Application key set successfully.
- プロジェクト内へ移動
プロジェクト内に移動します。
.../var/www$ cd laradock-project/5. 各種設定(Laravelプロジェクト)
- 設定ファイルの修正
.../var/www$ vi .env
以下のように修正
修正前
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=修正後
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=このへんはさっきつくった DB_USERNAME=Laradockの.envの内容と DB_PASSWORD=合わせてください.envの内容は先ほど作ったLaradockの方の内容と整合性が取れている必要がありますので合わせておいてください。
7. MySQLの確認
MySQLの設定がうまくいっているかを確認します。
- MySQLコンテナへ入る
Ctl + dでワークスペースコンテナを出て、MySQLコンテナに入ります。
$ docker-compose exec mysql bash
- MySQLへ接続
MySQLへ、接続します。defaultの部分は先ほど.envファイルで設定したユーザーネームを指定し、その後パスワードを聞かれるので、同じように.envで設定したパスワードを入力してください。うまくログインできればsqlコマンドが打てる画面に移り変わります。
# mysql -u default -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.27 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
- データベースの確認
うまく設定できていれば、.envで設定したデータベースが作られているはずです
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | default | +--------------------+ 2 rows in set (0.02 sec)
- ユーザーの確認(rootで入った場合のみ行えます)
こちらも設定できていれば、.envで設定したユーザーが登録されていることが確認できますが、mysqlにroot権限で接続している必要があります。
mysql> select User from mysql.user; +---------------+ | User | +---------------+ | default | | root | | mysql.session | | mysql.sys | | root | +---------------+ 5 rows in set (0.02 sec)
- マイグレーションチェック
マイグレーションを実行し、データベースの接続が上手くいっているかを確認します。
Laravelにおけるマイグレーションとはデータベースのバージョン管理機能のことです。MySQL確認の延長ですが、一旦MySQLコンテナから抜け、ワークスペースコンテナに入り、プロジェクト内に移動して以下のコマンドを実行します。
データベース接続がうまくいっていればマイグレーションが実行されます。
$ php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.07 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.06 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.03 seconds)ここまでの流れで上手くいかない場合
- Laradock、Laravelプロジェクトの各.envファイルの整合性が取れていない可能性
→.envファイルの設定がそれぞれ同じになっているかを確認し、合っていなければ合わせてください。
- ストレージデータの影響
→laradockでDBを使用する際のストレージがデフォルトで、~/.laradock/dataに設定されています。~/.laradock/dataにmysqlというディレクトリが存在しているので一旦削除してやり直してみてください。
補足
デフォルトで~/.laradock/dataが設定されていると説明しましたが、これでは他にLaradockを使ってプロジェクトを作成した際に同じ場所を参照してしまうので変えた方がいいっぽいです。ここでは詳しく解説はしませんので詳細は調べてください。
- .envの書き換え等が反映されていない可能性
コンテナを立ち上げたまま、.env等の設定を書き換えただけでは内容が反映されません。
一度、コンテナを起動させ直しましょう。再起動
$ docker-compose restartダメなら停止と削除〜起動
$ docker-compose down$ docker-compose up -d mysql nginx8. プロジェクトの起動確認
- localhostへアクセス
nginxのコンテナを立ち上がっている状態でlocalhostへアクセスします。うまくいっていれば、Laravelのトップページが表示されます。
上手くいかない場合
- Laradockの.envファイルのAPP_CODE_PATH_HOSTの設定が正しくできていない
→プロジェクトが存在するパスをちゃんと記述してあげてください。
- nginxのdefault.confのパス指定が上手くできていない
→上記に手順を記載していますので、やり直してください。
- nginxコンテナが立ち上がっていない
→docker psコマンドで確認し、立ち上がっていなければ、立ち上げてください。
ここまでくればとりあえずの環境構築は完了です!
あとは煮るなり焼くなり好きにしてください!
- 投稿日:2020-02-08T17:11:26+09:00
Laravelをインストールしたときにまずやること(ログ設定変更)
TL;DR
config/logging.php
の設定を確認すること。stackのchannelsをdailyに変更
Laravelをインストールして、私がまずやるのはログの設定を変更することです。
ログの設定はconfig/logging.php
にまとめられています。
single
やdaily
、slack
などがあり、デフォルトはstack
で、stack
は複数のログをchannels
でまとめることができます。最新のLaravel 6.12.0では、
stack
のchannels
は['single']
となっていました。
私はこのsingle
をdaily
に変更します。config/logging.php... 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['daily'], 'ignore_exceptions' => false, ], ...古の昔(バージョン4時代)も今と同じく
single
だったのですが、最近はデフォルトでdaily
の記憶があります。
調べたら、5.8.35ではstack
のデフォルトはdaily
、
6.5.2までdaily
、6.8.0でsingle
に戻っていました。
何故に戻った。。。
single
のままだと、単一のログファイルにログが溜まっていき、巨大なログファイルを生成してしまいます。
しかも削除されません。
これがdaily
だとログローテーションで一定期間後には削除されます。
膨大なログを想定しているなら、それ相応のロギングシステムを外部サービス含めて検討すべきですが、
とりあえずはdaily
にしておくのが良策かなと思いますphp_sapi_nameでログファイルを分ける
さらにですが、Webアクセスとコンソールコマンドで出力先ログファイルを分けます。
config/logging.php... 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel-'.php_sapi_name().'.log'), 'level' => 'debug', 'days' => 14, ], ...例えば
artisan
コマンドでエラーがログファイルに出力された後に、Webアクセスでエラーが発生した場合、ログファイルに書き込み権限がなくて書き込めないエラーが発生します
それが上記のように変更することで、artisan
コマンドでのエラーはlaravel-cli-YYYY-MM-DD.log
、
Webアクセスからのエラーはlaravel-fpm-fcgi-YYYY-MM-DD.log
に出力されます(Apacheだとapache2handler
になります)。
しかもログファイルによってエラー発生元が切り分けられて調査も楽になるので、皆さんも是非!!
- 投稿日:2020-02-08T16:48:35+09:00
Laravelをインストールしたときにまずやること
TL;DR
config/logging.php
の設定を確認すること。Laravelのログ設定
Laravelをインストールして、私がまずやるのはログの設定を変更することです。
ログの設定はconfig/logging.php
にまとめられています。
single
やdaily
、slack
などがあり、デフォルトはstack
で、stack
は複数のログをchannels
でまとめることができます。最新のLaravel 6.12.0では、
stack
のchannels
は['single']
となっていました。
私はこのsingle
をdaily
に変更します。config/logging.php... 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['daily'], 'ignore_exceptions' => false, ], ...古の昔(バージョン4時代)も今と同じく
single
だったのですが、最近はデフォルトでdaily
の記憶があります。
調べたら、5.8.35ではstack
のデフォルトはdaily
、
6.5.2までdaily
、6.8.0でsingle
に戻っていました。
何故に戻った。。。
single
のままだと、単一のログファイルにログが溜まっていき、巨大なログファイルを生成してしまいます。
しかも削除されません。
これがdaily
だとログローテーションで一定期間後には削除されます。
膨大なログを想定しているなら、それ相応のロギングシステムを外部サービス含めて検討すべきですが、
とりあえずはdaily
にしておくのが良策かなと思います
- 投稿日:2020-02-08T16:39:18+09:00
mysqlのデフォルト値の設定
やりたいこと
デフォルトのプロフィール画像を設定したい。
マイグレーションでのデフォルト値設定
カラムにデフォルト値を設定するには->default('[値]')をつけるだけです。
public function up() { Schema::create('users', function (Blueprint $table) { $table->string('profile_image')->nullable()->comment("プロフィール画像")->default('default_icon.jpeg'); }); }profile_imageカラムにdefault_icon.jpegをデフォルト値を設定しました。
あとはストレージにdefault_icon.jpegを置いとくだけ。
- 投稿日:2020-02-08T15:17:10+09:00
Laravelのインストールやデプロイの自分用メモ
まじで自分用のメモ。
メモだけどおかしいところは突っ込んでもらえたらよろこびます。
パーミッション関係に自信がない・・・サーバの初期設定
$ yum-config-manager --enable remi-php71をしている状態です $ yum install --enablerepo=remi,remi-php71,remi-php73 php-zip $ yum -y install php-zip $ composer global require laravel/installerパスの登録
macOSとGNU/Linuxディストリビューション:$ HOME/.composer/vendor/bin ~/.bash_profile に下記を追加 PATH=$PATH:$HOME/.composer/vendor/bin PATH=$PATH:$HOME/.config/composer/vendor/bin かも source ~/.bash_profileapahceのmod_rewriteを有効にする
find / -name 'mod_rewrite.so' find / -name 'httpd.conf' 下記をhttpd.confの一番下とかに追加する LoadModule rewrite_module modules/mod_rewrite.so httpd.confのAllowOverride NoneをすべてAllowOverride AllにかきかえるLaravel最新版を使う場合はmariaDBのバージョンもふさわしく新しくする必要あり
https://www.petitmonte.com/linux/mariadb_install.htmlプロジェクトの初期設定
htaccessをいじる開発作業
laravel new [プロジェクト名]デプロイ作業
Laravelプロジェクトをgithubからダウンロードした直後にやること
https://blog.capilano-fw.com/?p=289#i-4 .envファイルの設定 config/app.phpの'timezone' => 'UTC'を'timezone' => 'Asia/Tokyo'とする # composer install --no-dev # php artisan storage:link # sudo chmod 777 storage -R # sudo chown -R apache:apache storage //ログ書き込みエラーで失敗する対策 # sudo chmod 777 bootstrap/cache -R # php artisan key:generate # npm install # npm run prod # mysql -u 'ユーザ名' -p'パスワード' mysql> CREATE DATABASE example CHARACTER SET utf8mb4; mysql> CREATE USER 'ユーザー名'@'ホスト名' IDENTIFIED BY 'パスワード'; mysql> GRANT ALL PRIVILEGES ON `dbname`.* TO 'username'@'hostname' IDENTIFIED BY 'password';(キューを使う場合は)キューの非同期処理
プロセス生成
/etc/supervisord.conf に設定を追加
supervisorの設定をする
https://readouble.com/laravel/5.5/ja/queues.html を参照すること# sudo supervisorctl reread # sudo supervisorctl update # sudo supervisorctl start laravel-worker:* 失敗時のテーブル生成(これはmigrationファイルがGitに登録されているはずなので不要) # php artisan queue:failed-table() # php artisan migrateDBのバックアップを定期的に取る
下記を参考にする
試しにバックアップとリストアをして、DBが復旧できることを確認する。
https://centosinstall.com/centos/database/mysql-backup
https://qiita.com/macer_fkm/items/d920ff77f0f5ae5484f9
- 投稿日:2020-02-08T14:16:40+09:00
【LaravelDB.com】新機能 ”テーブル定義をパッと見で理解する!” 「Newテーブル一覧表示機能」
New!2月8日 [Newテーブル一覧表示機能] について解説
DEMO動画(初めての人はこちらから)
【 YouTubeリンク>> LaravelDB.com の操作方法 】
LaravelDB.comについて詳しく知りたい人はこちらもどうぞ!!
https://qiita.com/daisu_yamazaki/items/068595670bdc2b6fe3fc
1. ER図画面から 「 ER図のLoad/Save 」ボタンをクリック
https://laraveldb.com
注意)テーブル定義(データ)が表示されてることを確認してください。
2. 「 MIGRATION/TABLE 」ボタンをクリック
3.ダウンロードしてフォルダを開く
ZIP圧縮ファイルをダウンロードします。
フォルダ内の「 table_design.html 」HTMLファイルをダブルクリックで開きます。
4.「テーブル一覧」を解りやすく表示
5.外部キー制約がある場合は以下のように表示されます。
これまた、わかりやすいですね。
カラム名・型・コメント、外部キーまで一覧で見れます!!これでTeamメンバーやお客さま、他の人にもテーブル情報を共有可能ですね!!
以上
- 投稿日:2020-02-08T14:16:40+09:00
【LaravelDB.com】〜機能解説〜 テーブル定義をHTML で”見やすく!”表示(機能アップデート)
LaravelDB.comの新機能[テーブル定義一覧(HTML)]について解説
DEMO動画(初めての人はこちらから)
【 YouTubeリンク>> LaravelDB.com の操作方法 】
LaravelDB.comについて詳しく知りたい人はこちらもどうぞ!!
https://qiita.com/daisu_yamazaki/items/068595670bdc2b6fe3fc1. ER図画面から 「 ER図のLoad/Save 」ボタンをクリック
https://laraveldb.com
注意)テーブル定義(データ)が表示されてることを確認してください。
2. 「 MIGRATION/TABLE 」ボタンをクリック
3.ダウンロードしてフォルダを開く
ZIP圧縮ファイルをダウンロードします。
フォルダ内の「 table_design.html 」HTMLファイルをダブルクリックで開きます。
4.「テーブル一覧」を解りやすく表示
5.外部キー制約がある場合は以下のように表示されます。
これまた、わかりやすいですね。
カラム名・型・コメント、外部キーまで一覧で見れます!!これでTeamメンバーやお客さま、他の人にもテーブル情報を共有可能ですね!!
以上
- 投稿日:2020-02-08T13:42:32+09:00
laravelでバリデーションを使ってみた
まず最初に
まず最初に。
初心者なので違ったことを書いている場合があるかもしれませんので、
その時はご指摘いただければと思います。現在、laravelでCRUDを勉強中。
今回はバリデーションを使ってみたんですが、少し戸惑うこともありましたが取りあえず完成しました。
今回はlaravel公式サイトの日本語訳サイトのバリデーションのドキュメントを参考にしました。MIT lisence/** Copyright (c) 2019 Taylor Otwell(Original) and Hirohisa kawase(Translation) This software is released under the MIT License. http://opensource.org/licenses/mit-license.php */バリデーションエラーを表示
バリデーションエラーを表示できるようにviewファイルに以下のコードを追加しました。
create.blade.php@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
表示のイメージは上記のような感じとなります。
ちなみにのエラーメッセージは後ほどカスタイズできるので便宜上”error message”としています。バリデータの生成
バリデータの生成を使うにはまずバリデータを使うコントローラーにValidatorファサードを使えるように次のコードを追加する必要があります。
こういうコードって忘れがちなんで気をつけていただければと思います。UserController.php<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; //この行を追加次にUseControllerクラスのstore関数に次のコードを追加します。
UserController.phpclass UserController extends Controller { public function store(Request $request) { $validator = Validator::make($request->all(), [ 'title' => 'unique:users', ]); if ($validator->fails()) { return redirect('users/create') ->withErrors($validator) ->withInput(); } } }まずmakeメソッドの第1引数の$request->all()はバリデーションを行うデータでリクエストの全てを取得しています。
第2引数はそのデータに適用するバリデーションのルールです。titleに適用するルールは'unique:users'となっていて
unique:usersはusersテーブルに使われているtitleは重複不可と言う意味です。
次にバリデーションでエラーが生じた場合のコードがif文から書いてありますが、私もよくわからないのでこういうものだということにしておきます。先程のコードで出てきたバリデータは3つに引数があります。
$validator = Validator::make($input, $rules, $messages);第1引数と第2引数は上記で説明した通りで、最後の第3引数はエラーメッセージのカスタムメッセージを渡します。
最初に出てきたエラーメッセージ”error message”を日本語にしてみたいと思います。以下のようなコードでカスタムエラーメッセージを指定することができます。
$messages = [ 'title.unique' => 'titleが重複しています。', ];バリデータのまとめ
以上のバリデータのコードを利用してバリデータをまとめたい思います。
$input = $request->all(); //第1引数:バリデーションを行うデータ $rules = ['title' => 'unique:users']; //第2引数:そのデータの適用するルール $messages = ['title.unique' => 'titleが重複しています。']; //第3引数:カスタムエラーメッセージを指定する $validator = Validator::make($input, $rules, $messages);わかりやすくするためにルールを1つにしたことでコードをすっきりすることができたと思います。
上記のように3つの引数を完全に分けて考えたほうが、複雑になってもメンテナンスしやすいんじゃないでしょうか?
私も見直すために投稿しているのでわかりやすくしたつもりなので、皆様の参考になればと思います。License
MIT
- 投稿日:2020-02-08T13:25:32+09:00
Dockerを使ったLaravelの環境構築
はじめに
最近は現場でも、Docker環境下でLaravleを触ることが増えて少しは知見も溜まってきたかと思いますので、忘れないように忘備録として残しておきます
ここでは、
docker
やdocker-compose
のインストールに関しては触れませんので、まだの方はこちらの記事がわかりやすかったので参考にしてみてください記事内の不備や、もっとこうした方がいいいよというアドバイスがございましたらコメントお願いします
構成
任意のディレクトリに
SampleProject
を作成して下記のディテクトり構成で環境を構築しますSampleProject ├── docker-compose.yml ├── docker │ ├── php │ │ ├── Dockfile │ │ └── php.ini │ └── nginx │ └── default.conf └── src └── Laravelのプロジェクトファイルdocker-compose.ymlの中身
docker-compose.yml
は複数のコンテナを同時に動かすためのツールである、Docker Compose
を利用するために使用するYAMLファイルですdocker-compose.ymlversion: '3' services: php: container_name: php-1 build: ./docker/php volumes: - ./src:/var/www nginx: image: nginx container_name: nginx-1 ports: - 80:80 volumes: - ./src:/var/www - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php db: image: mysql:5.7 container_name: db-host-1 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: sample_project MYSQL_USER: docker MYSQL_PASSWORD: docker TZ: 'Asia/Tokyo' command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./docker/db/data:/var/lib/mysql - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf - ./docker/db/sql:/docker-entrypoint-initdb.d ports: - 3306:3306 node: image: node:12.13-alpine tty: true volumes: - ./src:/var/www working_dir: /var/wwwDockerfileの中身
Dockerfile
とはDocker上で動作させるコンテナの構成情報を記述するためのファイルですFROM php:7.2-fpm COPY php.ini /usr/local/etc/php/ RUN apt-get update \ && apt-get install -y zlib1g-dev mariadb-client \ && docker-php-ext-install zip pdo_mysql #Composer install RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" RUN php composer-setup.php RUN php -r "unlink('composer-setup.php');" RUN mv composer.phar /usr/local/bin/composer ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer ENV PATH $PATH:/composer/vendor/bin WORKDIR /var/www RUN composer global require "laravel/installer"php.iniの中身
php.ini[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese"default.confの中身
default.conf
はngninxの設定情報を記述するためのファイルですdefault.confserver { listen 80; index index.php index.html; root /var/www/public; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }環境構築の手順
はじめに任意の場所に
SampleProject
を作成する~/ $ mkdir SampleProject
docker-compose.yml
ファイルを作成して、中身は冒頭で紹介したdocker-compose.yml
の内容をコピペする~/SampleProject $ touch docker-compose.yml
Dockerfile
とphp.ini
を作成して、中身は冒頭で紹介したそれぞれのファイルの内容をコピペする~/SampleProject/docker/php $ touch Dockerfile ~/SampleProject/docker/php $ touch php.ini
defalt.conf
ファイルを作成して、中身は冒頭で紹介したdefault.conf
の内容をコピペする~/SampleProject/nginx $ touch default.conf
docker-compose.yml
ファイルがあるディレクトリ内で下記コマンドを実行してdocker
を起動させる~/SampleProject $ docker-compose up -d Creating php ... done Creating db-host ... done Creating sampleproject_node ... done Creating nginx ... donephpのコンテナ内に入る
~/SampleProject $ docker-compose exec php bashphpコンテナ内でLaravelプロジェクトを作成する
root@7eb4359bf51c:/var/www# laravel newphpコンテナを抜ける
root@7eb4359bf51c:/var/www# exitこれで
SampleProject/src
内にLaravelのプロジェクトファイルが作成され、
http://localhost/ にアクセスするとおなじみのWelcomeページが表示されますMySQLコンテナに入る
~/SampleProject $ docker-compose exec db bashMySQLコンテナ内でMySQLにログイン
root@630fbaf32806:/# mysql -u root -proot今回のプロジェクトで使用するデータベースを作成する
データベース名はdocker-compose.ymlで指定した、MYSQL_DATABASE
と合わせる必要がありますmysql> mysql> CREATE DATABASE sample_project; Query OK, 1 row affected (0.01 sec)Laravelのプロジェクトファイル内の
.env
ファイルを下記に修正する.envDB_CONNECTION=mysql DB_HOST=db # docker-compose.ymlに記載したDBのサービス名 DB_PORT=3306 DB_DATABASE=sample_project # 使用するDB名 DB_USERNAME=root DB_PASSWORD=rootphpコンテナに入る
~/SampleProject $ docker-compose exec php bashphpコンテナ内でマイグレーションを実行する
root@7eb4359bf51c:/var/www# php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.06 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.04 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.02 seconds)マイグレーションが無事に実行されれば成功です!!
- 投稿日:2020-02-08T11:06:41+09:00
【個人開発】読みたい本を秒で見つける!会社の技術書管理アプリケーション「BookMark」を一般公開しました!
個人開発した会社の書籍管理アプリケーション「BookMark」を一般公開しました!
下記URLから見ることができます。(PC推奨)
URL:https://bookmark-tm.herokuapp.com/
GitHub:https://github.com/wallkickers/bookApplication情報は入力済みなのでログインをクリックするとログインできます。
■ユーザー側
ログインURL:https://bookmark-tm.herokuapp.com/login
■管理側
ログインURL:https://bookmark-tm.herokuapp.com/admin/login本記事では作ったアプリケーションの概要や機能の紹介など書いております。良かったら使っていただいて感想などもらえると嬉しいです。
■なぜ作ったか
まず、本棚に自分の見たい本があるのか分からない。会社にはたくさんの技術書があるのですが、ジャンル分けなどされていないので本を探すときには本棚の端から端まで見る必要がありました。
次に、書籍貸し出しが紙で管理されている。
会社で本を借りるときには書籍貸し出しリストに名前を書いて管理部の人に署名をもらう必要がありました。そのため、管理部の人が帰宅していると本を借りることができません。そもそもこれは紙で管理する必要があるのかという疑問がありました。そこで作ろうと思い立ったのが今回の「BookMark(書籍管理アプリケーション)」です。
■BookMarkとは
BookMarkは書籍の管理と貸し出し申請をウェブ上で行うことができるアプリケーションです。ユーザーは書籍名での検索、ワンクリックで書籍の貸し出し申請ができます。管理者は書籍情報のcsvをアップロードすることで書籍の登録ができたり、貸し出し申請があった際のslackへの通知設定ができたりします。■主な機能
BookMarkにはユーザー側の画面と管理側の画面があります。
ユーザー側
1. 会員登録 2. 書籍の検索 3. 貸し出し申請1. 会員登録
会員登録は必須です。会員登録には「名前」「メールアドレス」「パスワード」の設定が必要です。
2. 書籍の検索
書籍名をカタカナで検索できます。
3. 貸し出し申請
書籍の詳細画面から貸し出し申請画面に遷移できます。
管理側
1. 書籍の登録 2. 利用ユーザーの一覧表示 3. 書籍の一覧表示 4. 貸し出しがあった際の通知設定1. 書籍の登録
書籍の登録に必要なCSVファイルは「蔵書マネージャー」というスマホアプリと、クラウドにデータを保存できる「Dropbox」を使用すると簡単に作成できます。蔵書マネージャーで書籍のバーコードを読み取り、Dropbox経由でパソコンにcsvファイルをダウンロードしてBookMarkへcsvファイルをアップロードするという流れです。
準備
準備1. スマホに蔵書マネージャーアプリをインストールする
■蔵書マネージャー
・Androidはこちら:https://play.google.com/store/apps/details?id=com.bsy_web.bookmanager&hl=ja
・iPhone:https://apps.apple.com/jp/app/%E8%94%B5%E6%9B%B8%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3%E3%83%BC-%E6%9B%B8%E7%B1%8D%E7%AE%A1%E7%90%86-%E6%96%B0%E5%88%8A%E6%A4%9C%E7%B4%A2-%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%81%A7%E3%81%AE%E6%95%B4%E7%90%86/id1071740625準備2. Dropboxのアカウントを作成する
下記URLからDropBoxのアカウント登録を行います。
URL:https://www.dropbox.com/1-1. 蔵書マネージャーとDropBoxを連携する
蔵書マネージャー内のメニューからバックアップ(クラウド)を選択し、DropBoxにログインを行います。「蔵書マネージャーがアプリへのアクセスを許可するか」という質問をされるので、許可をクリックします。1-2. 書籍のバーコードを読み取る
蔵書マネージャーで「登録」→「カメラでバーコード」をクリックするとカメラが起動してバーコードの読み取り状態になります。カメラで書籍のバーコードを写すと自動で書籍の情報を読み取り、アプリ内に保存してくれます。1-3. 書籍情報をDropboxにアップロードする
再びメニューから「バックアップ(クラウド)」を選択して、「DropBoxへのバックアップ」画面に遷移します。DropBoxと連携ができていれば→「Dropboxでの基本の保管場所」にDropBoxのアカウントが表示されます。表示されていない場合はDropBoxとの連携ができていないので1-1の手順から確認をお願いします。問題なければ「開始」をクリックしてDropboxへcsvファイルのアップロードを行います。(wi-fi環境での実行がオススメです。)
1-4. Dropboxからcsvファイルをダウンロードする
Dropboxにログインします。「/アプリ/蔵書マネージャー」から「dat_book.csv」を選択し、ダウンロードをクリックします。csvファイルがダウンロードされたら成功です。
1-5. 管理画面からcsvファイルをインポートする。
管理画面にログインを行い、メニューから「import」を選択します。「ファイルを選択」をクリック後、先ほどダウンロードしたcsvファイル「dat_book.csv」を選択します。「CSV登録が完了しました。」というメッセージが表示されれば成功です。
2. 利用ユーザーの一覧表示
管理画面のトップ、もしくはメニューから「ユーザー一覧」をクリックするとユーザーの一覧を表示します。
ユーザーをクリックすることで、現在ユーザーが借りている書籍を見ることができます。ユーザーを削除したい場合、ユーザーが書籍を借りている状態だと削除できないようになっているので、書籍を返却してもらってから削除してください。3. 書籍の一覧表示
メニューから「書籍一覧」をクリックすることで登録されている書籍の一覧を表示できます。貸し出し状態では無い書籍は削除することができます。
貸し出し状態の書籍の詳細画面では書籍を借りているユーザーを見ることができます。4. 貸し出しがあった際の通知設定
ユーザーから貸し出し申請があった際にslack通知を行うことができます。準備
Slackのアカウント作成を行う。
下記URLからSlackのアカウント登録を行います。
URL:https://slack.com/get-started#/4-1. Webhook URLを取得する。
下記URLにアクセスしてWebhook URLを取得します。Slackにログインすると通知を送りたいワークスペースとチャンネルの選択をすることができます。URL:https://slack.com/services/new/incoming-webhook
画像ではワークスペース「森山Dev」のチャンネル「#general」へ通知設定を行うという想定で設定しています。「Incoming Webhookインテグレーションの追加」をクリックするとWebhook URLが作成されます。
4-2. 通知設定を行う
Slack Name:通知するアカウント名 Slack Icon:通知するアイコン Slack Channel:通知先チャンネル名 Slack URL:発行したWebhook URL管理画面のメニューから通知設定をクリックすると「通知アカウント名」「通知アイコン」「チャンネル名」「webhook URL」を設定する画面が表示されます。先ほど作成したWebhook URLは「Slack URL」へ入力してください。
■環境構築方法
環境構築の方法はgithubのREADME.mdに記載しました。
個人で利用したい方、会社で使いたい方はREADME.mdを参照してください。GitHub:https://github.com/wallkickers/bookApplication
■今後
今後は自社で使ってもらってフィードバックをもらい、さらなる改善をしたいと思っています。
機能追加の要望や不具合、ソースコードのレビュー等いただけると、とても嬉しいです!
- 投稿日:2020-02-08T10:54:43+09:00
【個人開発】読みたい本を秒で見つける!会社の技術書管理アプリケーション「BookMark」を一般公開しました!
個人開発した会社の書籍管理アプリケーション「BookMark」を一般公開しました!
下記URLから見ることができます。(PC推奨)
URL:https://bookmark-tm.herokuapp.com/
GitHub:https://github.com/wallkickers/bookApplication情報は入力済みなのでログインをクリックするとログインできます。
■ユーザー側
ログインURL:https://bookmark-tm.herokuapp.com/login
■管理側
ログインURL:https://bookmark-tm.herokuapp.com/admin/login本記事では作ったアプリケーションの概要や機能の紹介など書いております。良かったら使っていただいて感想などもらえると嬉しいです。
■なぜ作ったか
まず、本棚に自分の見たい本があるのか分からない。会社にはたくさんの技術書があるのですが、ジャンル分けなどされていないので本を探すときには本棚の端から端まで見る必要がありました。
次に、書籍貸し出しが紙で管理されている。
会社で本を借りるときには書籍貸し出しリストに名前を書いて管理部の人に署名をもらう必要がありました。そのため、管理部の人が帰宅していると本を借りることができません。そもそもこれは紙で管理する必要があるのかという疑問がありました。そこで作ろうと思い立ったのが今回の「BookMark(書籍管理アプリケーション)」です。
■BookMarkとは
BookMarkは書籍の管理と貸し出し申請をウェブ上で行うことができるアプリケーションです。ユーザーは書籍名での検索、ワンクリックで書籍の貸し出し申請ができます。管理者は書籍情報のcsvをアップロードすることで書籍の登録ができたり、貸し出し申請があった際のslackへの通知設定ができたりします。■主な機能
BookMarkにはユーザー側の画面と管理側の画面があります。
ユーザー側
1. 会員登録 2. 書籍の検索 3. 貸し出し申請1. 会員登録
会員登録は必須です。会員登録には「名前」「メールアドレス」「パスワード」の設定が必要です。
2. 書籍の検索
書籍名をカタカナで検索できます。
3. 貸し出し申請
書籍の詳細画面から貸し出し申請画面に遷移できます。
管理側
1. 書籍の登録 2. 利用ユーザーの一覧表示 3. 書籍の一覧表示 4. 貸し出しがあった際の通知設定1. 書籍の登録
書籍の登録に必要なCSVファイルは「蔵書マネージャー」というスマホアプリと、クラウドにデータを保存できる「Dropbox」を使用すると簡単に作成できます。蔵書マネージャーで書籍のバーコードを読み取り、Dropbox経由でパソコンにcsvファイルをダウンロードしてBookMarkへcsvファイルをアップロードするという流れです。
準備
準備1. スマホに蔵書マネージャーアプリをインストールする
■蔵書マネージャー
・Android:https://play.google.com/store/apps/details?id=com.bsy_web.bookmanager&hl=ja
・iPhone:https://apps.apple.com/jp/app/%E8%94%B5%E6%9B%B8%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3%E3%83%BC-%E6%9B%B8%E7%B1%8D%E7%AE%A1%E7%90%86-%E6%96%B0%E5%88%8A%E6%A4%9C%E7%B4%A2-%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%81%A7%E3%81%AE%E6%95%B4%E7%90%86/id1071740625準備2. Dropboxのアカウントを作成する
下記URLからDropBoxのアカウント登録を行います。
URL:https://www.dropbox.com/1-1. 蔵書マネージャーとDropBoxを連携する
蔵書マネージャー内のメニューからバックアップ(クラウド)を選択し、DropBoxにログインを行います。
「蔵書マネージャーがアプリへのアクセスを許可するか」という質問をされるので、許可をクリックします。連携できている場合は「Dropboxでの基本の保管場所」にDropBoxのアカウントが表示されます。
1-2. 書籍のバーコードを読み取る
蔵書マネージャーで「登録」→「カメラでバーコード」をクリックするとカメラが起動してバーコードの読み取り状態になります。カメラで書籍のバーコードを写すと自動で書籍の情報を読み取り、アプリ内に保存してくれます。
1-3. 書籍情報をDropboxにアップロードする
「バックアップ(クラウド)を選択」→「開始」をクリックしてDropboxへファイルのアップロードを行います。(wi-fi環境での実行がオススメです。)
1-4. Dropboxからcsvファイルをダウンロードする
Dropboxの「/アプリ/蔵書マネージャー」から「dat_book.csv」を選択し、ダウンロードをクリックします。csvファイルがダウンロードされたら成功です。
1-5. 管理画面からcsvファイルをインポートする。
管理画面にログインを行い、メニューから「import」を選択します。「ファイルを選択」をクリック後、先ほどダウンロードしたcsvファイル「dat_book.csv」を選択します。「CSV登録が完了しました。」というメッセージが表示されれば成功です。
2. 利用ユーザーの一覧表示
管理画面のトップ、もしくはメニューから「ユーザー一覧」をクリックするとユーザーの一覧を表示します。
ユーザーをクリックすることで、現在ユーザーが借りている書籍を見ることができます。ユーザーを削除したい場合、ユーザーが書籍を借りている状態だと削除できないようになっているので、書籍を返却してもらってから削除してください。3. 書籍の一覧表示
メニューから「書籍一覧」をクリックすることで登録されている書籍の一覧を表示できます。貸し出し状態では無い書籍は削除することができます。
貸し出し状態の書籍の詳細画面では書籍を借りているユーザーを見ることができます。4. 貸し出しがあった際の通知設定
ユーザーから貸し出し申請があった際にslack通知を行うことができます。準備
Slackのアカウント作成を行う。
下記URLからSlackのアカウント登録を行います。
URL:https://slack.com/get-started#/4-1. Webhook URLを取得する。
下記URLにアクセスしてWebhook URLを取得します。Slackにログインすると通知を送りたいワークスペースとチャンネルの選択をすることができます。URL:https://slack.com/services/new/incoming-webhook
画像ではワークスペース「森山Dev」のチャンネル「#general」へ通知設定を行うという想定で設定しています。「Incoming Webhookインテグレーションの追加」をクリックするとWebhook URLが作成されます。
4-2. 通知設定を行う
Slack Name:通知するアカウント名 Slack Icon:通知するアイコン Slack Channel:通知先チャンネル名 Slack URL:発行したWebhook URL管理画面のメニューから通知設定をクリックすると「通知アカウント名」「通知アイコン」「チャンネル名」「webhook URL」を設定する画面が表示されます。先ほど作成したWebhook URLは「Slack URL」へ入力してください。
■環境構築方法
環境構築の方法はgithubのREADME.mdに記載しました。
個人で利用したい方、会社で使いたい方はREADME.mdを参照してください。GitHub:https://github.com/wallkickers/bookApplication
■今後
今後は自社で使ってもらってフィードバックをもらい、さらなる改善をしたいと思っています。
機能追加の要望や不具合、ソースコードのレビュー等いただけると、とても嬉しいです!
- 投稿日:2020-02-08T07:49:53+09:00
【Laravel】authorizeResourceを使いつつ未ログインユーザーに特定のアクションを許可する
authorizeResourceメソッドとは
authorizeResourceメソッドを使うと、コントローラーのCRUDアクションに対して、一括してポリシーによる認可制御を適用できます。
app/Http/Controllers/ArticleController/php<?php namespace App\Http\Controllers; use App\Article; use App\Http\Requests\ArticleRequest; use Illuminate\Http\Request; class ArticleController extends Controller { public function __construct() { $this->authorizeResource(Article::class, 'article'); } // 略 }authorizeResourceメソッドと未ログインユーザー
authorizeResourceメソッドは便利ではあるのですが、認可されるにはユーザーが認証済みであることが必須であるため、アプリケーションの要件によっては使いづらい場合があります。
例えば、Qiitaでは未登録・未ログインユーザーでも各記事を参照できますが、このように参照系であるindexアクションやshowアクションを未ログインユーザー(ゲストユーザー)でも実行させたいとします。
しかし、authorizeResourceメソッドを使っていると、たとえポリシー側の対応するメソッド(viewAny, view)で一律trueを返していたとしても、未ログインユーザーには403がレスポンスされます。
app/Policies/ArticlePolicy.php<?php namespace App\Policies; use App\Article; use App\User; use Illuminate\Auth\Access\HandlesAuthorization; class ArticlePolicy { use HandlesAuthorization; public function viewAny(User $user) { return true; // 一律trueを返していても、未ログインユーザーは403になってしまう } public function view(User $user, Article $article) { return true; // 同上 } // 略 }認可の条件としてログイン済みを必須としない
認可の条件として、ログイン済みを必須としないようにするにはUserクラスの型宣言をnullable(
?User
)にします。app/Policies/ArticlePolicy.php// 略 public function viewAny(?User $user) { return true; } // 略このようにすると、未ログインユーザーでも該当のアクションを実行できます。
なお、その場合もポリシーのメソッドは実行されますので、
app/Policies/ArticlePolicy.php// 略 public function viewAny(?User $user) { return false; } // 略falseを返した場合、未ログインユーザーも403になります。
未ログインユーザーが無条件に認可されるわけではありませんので注意してください。
環境
Laravel 6.x
参考
- 投稿日:2020-02-08T01:43:07+09:00
Laravel artisanコマンドを設定してスクリプト実行
コマンド作成
下記コマンドでartisanコマンドを作成するためのファイルが生成される
$ php artisan make:command コマンド名
app/Console/Commands
配下にコマンド名.php
の形で下記ファイルが生成されるapp/Console/Commands/コマンド名.php<?php namespace App\Console\Commands; use Illuminate\Console\Command; class Scraping extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'command:name'; /** * The console command description. * * @var string */ protected $description = 'Command description'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { // } }下記項目を追記する
$signature
にコマンド名を記述$description
にコマンドの説明記述public function handle()
内に実行スクリプトを記述追記してみたファイル
app/Console/Commands/コマンド名.php<?php namespace App\Console\Commands; use Illuminate\Console\Command; class Scraping extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'コマンド名'; // 追記 /** * The console command description. * * @var string */ protected $description = 'コマンド名を実行します。'; // 追記 /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { echo 'スクリプトを実行しました。' . PHP_EOL; // PHP_EOLの結合で改行が可能 // 追記 } }
public function handle()
内を今回はサンプルでecho
を実行しているが、関数のスクリプトを記述すれば複雑な処理も実行されるコマンドの確認
設定したコマンドが設定されているか確認可能
# 使用可能なコマンドを確認できる $ php artisan list # 出力結果 (Available commands項目) Available commands: コマンド名 コマンド名を実行します # ここに表示される clear-compiled Remove the compiled class file down Put the application into maintenance mode dump-server Start the dump server to collect dump information. env Display the current framework environment help Displays help for a command inspire Display an inspiring quote list Lists commands migrate Run the database migrations optimize Cache the framework bootstrap files preset Swap the front-end scaffolding for the application serve Serve the application on the PHP development server tinker Interact with your application up Bring the application out of maintenance modeコマンドの実行
$ php artisan コマンド名 # 今回の場合の出力結果 スクリプトを実行しました(参考)
https://tac-blog.tech/index.php/2018/11/24/web-scraping-1-make-artisan/
- 投稿日:2020-02-08T00:16:11+09:00
備忘録_レンタルサーバーにLaravelのプロジェクト作って、git管理する
Laravelのプロジェクトを作る
composerが動く環境を用意する
プロジェクトを作成する
composer create-project --prefer-dist laravel/laravel ~/{プロジェクト名} "5.8.*"
(動作確認用)
ln -s {ドキュメントルート} ~/{プロジェクト名}/public
git管理する
さっき作ったプロジェクトのディレクトリに移動
cd ~/{プロジェクト名}
リポジトリ作る(ついでに、開発用ブランチも作ったりする)
git init git add -A git commin -m "init" git checkout -b developer mkdir ~/git_repo git clone --bare ~/{プロジェクト名} ~/git_repo/{プロジェクト名}.gitローカルに落とす
git clone {レンタルサーバーのユーザー名}@{レンタルサーバーのSSHドメイン}:git_repo/{プロジェクト名}.git
いやーーーーー
「git clone」とかで調べてもよく分からず詰まってましたが、最終的にgit公式のドキュメントが全て解決してくれました。
【まずは、公式ドキュメントから読む】はマジで癖つけんとアカンです。。。