Windows10にVagrantとVirtualBoxでCentOSの仮想環境を構築⑫Dドライブに再インストール
Cドライブ容量不足問題が発生したので、VBとVagrantをアンインストールしてみた。Dドライブに入れてみる。 ※Windows10 ※調べたら、ディレクトリを移動する方法もあったらしい。
①VBのインストール
参考:https://eng-entrance.com/virtualbox-install
ダウンロード元:https://www.virtualbox.org/
ダウンロード デフォルトのダウンロード先:C:\Program Files\Oracle\VirtualBox\ ←これをDドライブにする。
インストール完了。 VB起動するとアクセスできないVMが表示されるので、除去。
アンインストールしたはずのvagrant関連でC:\Users\Username.vagrant.dディレクトリが残っていたので、削除。 C:\Program Files (x86)\HashiCorpディレクトリも残っていたので、削除。
②Vagrantのインストール
参考:https://eng-entrance.com/linux-vagrant-install
ダウンロード元:https://www.vagrantup.com/downloads
64bit デフォルトのダウンロード先:C:\HashiCorp\Vagrant\ ←これをDドライブにする。 PCを再起動して、Dドライブで下記コマンド実行して、バージョンが表示されればインストール成功。
vagrant --version
CSSチャレンジ1:カルーセルをつくる(HTML、CSS、jQuery)
ライブラリを使わずにHTML、CSS、jQueryのみでカルーセルを作成する。 参考URL:
https://ascii.jp/elem/000/000/481/481241/
- HTML
<div id="carouselWrap"> <p id="carouselPrev">←</p> <p id="carouselNext">→</p> <div id="carousel"> <div id="carouselInner"> <div id="c1" class="column"> <a><img src="images/menu-photo0.jpg"></a> </div> <div id="c2" class="column"> <a><img src="images/menu-photo1.jpg"></a> </div> <div id="c3" class="column"> <a><img src="images/menu-photo2.jpg"></a> </div> </div> </div> </div>
/* カルーセル*/ #carouselWrap{ margin:100px auto; /* 位置を固定する*/ width:500px; /* カルーセルの幅 */ height:135px; padding:5px; position:relative; } #carouselPrev{ position:absolute; top:65px; /* カルーセルの高さの半分。半分の高さに表示。*/ left:-8px; /* 左寄せ。カルーセルの若干外に。*/ cursor:pointer; } #carouselNext{ position:absolute; top:65px; /* カルーセルの高さの半分。半分の高さに表示。*/ right:-8px; /* 右寄せ。カルーセルの若干外に。*/ cursor:pointer; } #carousel{ width:100%; height:100%; overflow:hidden; /* carouselInner をマイナスマージンにし、はみ出た部分は非表示にすることでカルーセルにする。 */ } #carouselInner .column{ float:left; } #carouselInner .column img{ width: 500px; height: 100%; border:none; overflow:hidden; }
var next = function() { $("#carouselNext,#carouselPrev").hide(); $("#carouselInner").animate( { marginLeft : parseInt($("#carouselInner").css("margin-left"))-500+"px" }, "slow", "swing", function(){ $("#carouselInner").css("margin-left","-500px"); $("#carouselInner .column:first").appendTo("#carouselInner"); $("#carouselNext,#carouselPrev").show(); } ); }; $(function(){ //初期設定 $("#carouselInner").css("width",500*$("#carouselInner .column").length+"px"); //カルーセル枠の幅をカルーセルの全画像のトータル幅にする。 $("#carouselInner .column:last").prependTo("#carouselInner"); // 最後の画像を最初の画像の前に入れる。 $("#carouselInner").css("margin-left","-500px"); //カルーセル枠の左マージンを-500にする。つまり最初の画像の前に入れた最後の画像を見れなくする。 // 6秒に一回カルーセル内コンテンツを変更 setInterval(next, 6000); //戻るボタン $("#carouselPrev").click(function(){ $("#carouselNext,#carouselPrev").hide(); $("#carouselInner").animate( { marginLeft : parseInt($("#carouselInner").css("margin-left"))+500+"px" }, "slow", "swing", function(){ $("#carouselInner").css("margin-left","-500px"); $("#carouselInner .column:last").prependTo("#carouselInner"); $("#carouselNext,#carouselPrev").show(); } ); }); //進むボタン $("#carouselNext").click(function(){ next(); }); });
Laravel 6.xでPDF出力機能(Snappy)
LaravelでPDF出力をしたい。調べたらbarryvdh/laravel-dompdfとSnappyが良く出てくる。
下記を参考に、あと、dompdfは日本語フォントインストールとかややこしそうで、Snappyはフォントインストール要らない&他と違ってCSS使えるっぽいのでSnappyにしてみる。
Laravel Browsershot: https://github.com/verumconsilium/laravel-browsershot
Puppeteerを使う
正確さでは一番か?
Laravel DOMPDF: https://github.com/barryvdh/laravel-dompdf
DOMPDFのLaravelラッパー
PHPだけあれば動くのでお手軽
Laravel Snappy: https://github.com/barryvdh/laravel-snappy
Qt WebKitレンダリングエンジンを使ってPDFを出力するツールであるwkhtmltopdfのPHPラッパーであるSnappyのLaravelラッパー(ややこしい)
Laravel DOMPDFより高速
今回はバランスを考えてLaravel Snappyを選択しました。
普通のCSSをサポートしているPDF出力ライブラリを探して見つけたのがコレ、
Laravel-Snappyです。
参考URL:https://reffect.co.jp/laravel/how_to_create_pdf_in_laravel_snappy#Laravel-Snappy
↓後から追記。
下記、持っていない場合は事前にインストールが必要。
sudo yum install libXrender libXext ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts
プロジェクトフォルダで下記。
composer require h4cc/wkhtmltopdf-amd64 0.12.x
composer clear-cache
composer require h4cc/wkhtmltoimage-amd64 0.12.x
composer require barryvdh/laravel-snappy
snappyインストール中に下記が出た。
- Installing knplabs/knp-snappy (v1.2.1): Downloading (100%)
- Installing barryvdh/laravel-snappy (v0.4.7): Downloading (100%)
knplabs/knp-snappy suggests installing h4cc/wkhtmltopdf-i386 (Provides wkhtmltopdf-i386 binary for Linux-compatible machines, use version `~0.12` as dependency)
knplabs/knp-snappy suggests installing h4cc/wkhtmltoimage-i386 (Provides wkhtmltoimage-i386 binary for Linux-compatible machines, use version `~0.12` as dependency)
knplabs/knp-snappy suggests installing wemersonjanuario/wkhtmltopdf-windows (Provides wkhtmltopdf executable for Windows, use version `~0.12` as dependency)
amd64じゃない方が良かったかも?
config/app.phpに追記。
SQLパフォーマンスの基礎
データベース論理設計のアンチパターン
https://kyabatalian.hatenablog.com/entry/2016/12/19/193430
なぜ、SQLは重たくなるのか?──『SQLパフォーマンス詳解』の翻訳者が教える原因と対策
https://employment.en-japan.com/engineerhub/entry/2017/06/26/110000
LaravelクエリビルダはアプリケーションをSQLインジェクション攻撃から守るために、PDOパラメーターによるバインディングを使用します。バインドする文字列をクリーンにしてから渡す必要はありません。
https://qiita.com/7968/items/6f089fec8dde676abb5b
インデックスとは
https://qiita.com/towtow/items/4089dad004b7c25985e3
Laravelのリレーション取得時のSQL文
https://qiita.com/mtakehara21/items/3cef9d12869d162e1ce9
DB::enableQueryLog()でクエリのログを記録することができる
DB::getQueryLog()でそれを出力。
※tinkerで実施。
MySQLクエリパフォーマンス改善簡易まとめ
https://qiita.com/peutes/items/6a5d771d41168e9b738d
一覧画面のページングについていろいろ考えた
https://qiita.com/egnr-in-6matroom/items/e1beba82d5dc76c85596
Laravel モデル(Eloquent)から値を取得する便利機能!(アクセサとミューテタ)
・謎の値に遭遇した。
usersテーブルにfull_nameなんてカラムは無いし、Userモデルにfull_name()なんて関数は定義していない。
第3の定義方法を発見した!便利すぎる!
①アクセサ
モデルに上記のように、
get(先頭大文字のキャメルケース)Attribute()
の形の関数を定義すると、()かっこ内をスネークケースにした文字でその関数の返り値をモデルの属性として取得できる。
getFullNameAttribute()を定義すると、$user->full_nameでフルネームを取得できる。
(姓last_nameと名first_nameはDBのカラムとして存在する状態)
逆に、DB保存するときの加工方法を指定できるミューテタというのもある。
setFirstNameAttribute()の形式で関数を宣言。
https://readouble.com/laravel/5.5/ja/eloquent-mutators.html
②DBのカラム
該当テーブルのカラムにあれば、取得可能。
③モデル内にリレーション定義していれば、取得可能。
Laravel 6.0プロジェクトの作り方(認証含む)
composerインストール済
①メモリ開放
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
②Laravelプロジェクト作成
1. プロジェクトを作成するフォルダへ移動
2. コマンド
composer create-project --prefer-dist laravel/laravel project_name "6.*"
・・・自動で6.0の最新を選択してくれる
③Gitの管理下に置く
Laravelフォルダに移動して
git init → git add . →git commit
※初期状態で一旦保存しておく
④データベースと接続
1. .envファイルのデータベース関連の情報を修正
DB_CONNECTION=mysql
DB_DATABASE=project-name ※あとで作成するDatabase名の通りにする
DB_USERNAME=abcde
DB_PASSWORD=password
2. データベース作成
sudo service mysqld start MySQLサーバ起動
mysql -u abcde - ログイン
CREATE DATABASE `project-name` データベース作成
3. 接続確認
php artisan tinker
DB::connection(); →エラーが出なければOK
⑤タイムゾーンの設定
config/app.phpファイルの下記を修正
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
⑥テーブル設計前の初期設定
app/Providers/AppServiceProvider.phpのbootメソッドに追記
public function boot()
{
\Schema::defaultStringLength(191);
}
https://readouble.com/laravel/6.x/ja/authentication.html
⑦ vagrant + centos7で仮想環境で見れるようにする
⑦-1. /etc/httpd/conf.d/vhost.confファイルを編集 ※Laravelの場合
<VirtualHost *:80>
DocumentRoot /var/www/html/project/public
ServerName localhost.project
</VirtualHost>
⑦-2. ホストPCの設定
C:\Windows\System32\drivers\etc\hostsファイルを編集
192.168.33.10 url.url
(ブラウザから検索するときにhttp://の後に入力する文字を数字の後に記載)
⑧ 認証一括作成
(プロジェクトフォルダで)composer require laravel/ui "^1.0" --dev
※引っかかった記録は下記。
php artisan ui vue --auth
Vue scaffolding installed successfully.
Please run "npm install && npm run dev" to compile your fresh scaffolding.
Authentication scaffolding generated successfully.
ホストOSにのプロジェクトフォルダに移動して下記。
npm install
npm run dev
※引っかかった記録は下記。
npm run watch ←これをすると、変更があるたびに自動でコンパイルしてくれる
■マイグレーション→モデル→ルータ・コントローラ・ビュー
⑦基本のデータを作成
⑦-1. CSSファイル
/public/css/app.cssファイルを作成し、cssを記述。
asset()関数を使うとpublicディレクトリ内のリソースを読み込める。
<link rel="stylesheet" href="{{ secure_asset('css/app.css') }}">
https://qiita.com/kotsuban-teikin/items/9b00d0faa0b7eaf70796
■Sass(Scss記法)
メディアクエリを書いておく。今回は基本をスマートフォン、指定した場合にPC用とする。
https://www.tam-tam.co.jp/tipsnote/html_css/post10708.html
⑦-2. jQueryを使う
(1) jQueryを利用する場合は、下記を記述すると自動で全jQueryリクエストヘッダにトークンを足してくれる。
<meta name="csrf-token" content="{{ csrf_token() }}">
※下記の代わりになる。
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
https://readouble.com/laravel/6.x/en/csrf.html
(2) metaタグにjQueryCDNを読み込み。(ダウンロードでも可)
下記から選んでコードをコピー、headに貼り付け。
(3) jsファイル作成
head内、必ず(2)より下に!!jsファイル読み込みを記述。
<script src="{{ secure_asset('js/app.js') }}"></script>
/public/js/app.jsファイルを作成。
Laravel 6.xの認証・ログインの中身
toCとtoBでログイン後の遷移先を分けたいと思って調べたこと
LoginControllerの中身
ルートに書かれているアクションは全てトレイトAuthenticatesUsersにある。
attemptLoginの返り値=attempt()の返り値。
このguard()は何なのか。
Illuminate\Support\Facades\Auth
Illuminate\Contracts\Auth\Factory
処理が何にもないfunction function_name () ;
これが返すのはtrueなのかfalseなのか???
return を省略した場合は NULL を返します。
https://www.php.net/manual/ja/functions.returning-values.php
結局分からず、下記サイトがとても分かりやすかった。
https://reffect.co.jp/laravel/laravel-authentification-by-code-base#attemptLogin
attempt() は、SessionGuardインスタンスのattemptメソッドらしい。