ページビューの合計

2023年3月31日金曜日

Laravel Bootcamp: 07. Notifications & Events

へー、新しい投稿があったときにEメールを送る機能を実装するんだ
通知を送る方法としてEメール,SNS, Slackに対応しているようです。.

Creating the notification

$php artisan make:notification NewChirp

 app/Notifications/NewChirp.phpが生成されました。

NewChirp.phpのtoMail()メソッドを修正します。

送信機能の実装に関して
ChirpController クラスの store メソッドから直接通知を送信することもできるがContollerの負荷が増えるのでバッググランドで動くイベントを使用して通知を行うようです。
 

Creating an event

$php artisan make:event ChirpCreated
イベントを生成します。
app/Events/ChirpCreated.phpが生成されました。

ChirpCreated.phpのコンストラクタを修正します。

Dispatching the event

app/Models/Chirp.phpを修正します。
Chirpが生成されるたびにイベント:ChirpCreatedも生成されます。

Creating an event listener

EventとListenerの関係が良く分からないのでぐぐってみました。

イベント
何らかの処理をきっかけにイベントを発行します。
イベントを生成するだけで実際の処理をするわけではありません。

リスナー
イベントの発生を監視していて、実際の処理を行うのはリスナー、今回だと通知を送る処理ですね。
イベント毎にリスナーを作成します。

これを読めばLaravelのイベントとリスナーが設定できる

Laravelでイベントとリスナーを使ってみる

$php artisan make:listener SendChirpCreatedNotifications --event=ChirpCreated

app/Listeners/SendChirpCreatedNotifications.phpが生成されました。

イベント:ChirpCreatedに対してリスナーを作成するということですね。

handle()メソッドで、自分以外の全てを対象にするようにループして通知を送るようにしているようです。

ループ内ではcursorを使ってDBから対象を取得していますが、これは一度に全てのユーザをロードすることを回避するためだそうです。

ぐぐるとcursorとchunkがあり、一度にデータを取得せず小分けにしてメモリの消費量を抑えるためのもののようです。

 

Registering the event listener

イベントリスナーの登録
?リスナーを作っただけでは駄目で登録が必要なようです。

App/Providers/EventServiceProvider.php

EventServiceProvider.phpは最初から存在しています。
EventServiceProvider クラスの$listenにイベントとリスナーを登録します。

実際に投稿してその他のユーザに通知を送信するか試します。

受け取るには本人以外のユーザが必要なのでユーザを新規に登録します。

後はメール送信環境
ドキュメントでは MailHogが推奨されています。Laravel Sailの環境であれば含まれているようです。
MailHogでぐぐるとDockerの環境で使う話ばかり出てきます。
うーん、めんどいのでクラウドで使うサービスを使うことにします。
MailTrapを使ってみます。
https://mailtrap.io/
Sign up for freeを押して情報入力します。


届いたメールのリンクを押下したら、入力したアカウントでログインします。

送信メールを送信するための設定に関して

左のメニューのEmail Testing→Inboxesをクリックします。

画面にInboxesが表示されるのでMy Inboxをクリックします。

SMTP Settingsが表示されます。

Integrationsのドロップダウンで「Laravel 7+」を選択します。

Laravel用のSMTP設定が表示されます。

表示内容をLaravelプロジェクトの.envファイルに反映します。

反映前

 

反映後

 

現在ユーザAとBが存在する状態です。

ユーザAでログインして投稿を行います。

ユーザBに対して通知メールが送信されるはずです。

MailTrap上で想定したメールが送信されたことが確認できました。


では次のチャプターに行きましょう

Continue to learn about deploying your application...


カラーピッカーとExcelのセルへの設定の仕方

ちょっと説明資料でダウンロードした画像と同じ色をExcelのセルに指定したかったので調べました。

1. カラーピッカー
カラーピッカーはMicrosoftのPowerToysに中にあるそうです。
ここからインストールできます。
https://apps.microsoft.com/store/detail/microsoft-powertoys/XP89DCGQ3K6VLD

PowerToys で画面の色を調べるカラーピッカーを利用する方法

Color Pickerをクリックして、Launch Color Pickerを押下します。



マウスポイントの右に色と色コードが表示されるようになります。

調べたいところに持っていくと自動的に変わります。
クリックするとウインドウがポップして詳細が分かります。
HEX, RGB, HSLで値が表示されます。右のアイコンをクリックすると値がコピーされます。



2. Excelのセルの塗りつぶしをカラーコードで指定する。

セルの設定から「その他の色」から色の設定で「ユーザ設定」タブでカラーコードで指定ができます。
使えるのはRGBとHSLとHex

https://hamachan.info/win7/excel/color.html

これで色指定が値で出来ます。

 


2023年3月30日木曜日

Laravel Bootcamp: 06. Deleting Chirps

残る機能は投稿の削除機能です。

Routing

routes/web.php

destroyを追加します。

Updating our controller

app/Http/Controllers/ChirpController.php

Controllerを修正します。

deleteメソッドを呼び出して一覧画面に戻るように実装します。

Authorization

Editとの時と同じようにChirpへの削除権限を付与します。

Updating our view

resources/views/chirps/index.blade.php
一覧のEditボタンの下にDeleteボタンを追加します。

これで出来上がり 

一覧のEditの下にDeleteボタンが追加されました。クリックすると該当データを削除して一覧画面をリフレッシュします。

Deleteボタンの追加

該当データを削除して一覧画面をリフレッシュ

 

では次のチャプターに行きましょう

Continue to notifications & events...

Laravel Bootcamp: 05. Editing Chirps

投稿の作成、表示ができるようになったので次は編集です。

Routing

routes/web.php
chirps.editとchirps.updateをルータに追加します。

Linking to the edit page

resources/views/chirps/index.blade.php
投稿一覧にメニューを追記します。
created_atとupdated_atが同じじゃなかったらなんか表示するみたいですね。
後はドロップダウンを追記してる?

保存すると表示したデータの右側に・・・を表示し、クリックするとEditとドロップダウンを表示するようになりました。



Creating the edit form

resources/views/chirps/edit.blade.php
編集画面を別途作成します。

Updating our controller

コントローラを修正して編集画面へ遷移するようにします。

Authorization

どうやらデフォルトではChirpを変更できないそうです。変更できるようにするために権限の設定を行います。

$php artisan make:policy ChirpPolicy --model=Chirp

app/Policies/ChirpPolicy.phpが生成されました。

メソッド: update()に追記します。

軽く動作確認を行います。

一覧のEditを押すと編集画面に遷移します。

投稿内容修正して「SAVE」を押すとデータを更新して一覧画面に戻ります。

うーん、このChirpというモデル名はよろしくないですね。

アプリ名がChirpだし、Chirpというのは特に意味はないようです。投稿データということが分かる名前の方が良いでしょう。


では次のチャプターに行きましょう。

Continue to allow deleting of Chirps...


2023年3月29日水曜日

Laravel Bootcamp: 04. Showing Chirps

前の章で投稿を保存できるようになったので、今度はそれを表示する機能の実装ですね。

Retrieving the Chirps

app/Http/Controllers/ChirpController.php
を修正します。

ログインユーザの投稿を全て取得して投稿日の降順に並べるのかな?

Paginationについても言及されています。
たくさんのデータを取得する場合はページネーションを行って適切にした方が良いですね。
さもないとたくさんのデータをスクロールで見ることになって不便です。

Connecting users to Chirps

app/Models/Chirp.phpに修正を加えます。

belongsToを使ってChirpからUserを見たときのリレーションを定義します。

【laravel】1対多のbelongsTo(hasMany)まとめ。select, insertなどの複数保存や検索も解説

UserからChirpへはhasMany
ChirpからUserへはbelongsTo
の関係性になるということです。

Updating our view

resources/views/chirps/index.blade.php
Chirpsのデータを表示できるように追記します。

入力欄の下に投稿した内容を表示するようになりました。

では次のチャプターに行きましょう。

Continue to allow editing of Chirps...

2023年3月28日火曜日

GitHubへの最初のプッシュ

たとえ1人で開発していてもGitやGitHubを使う意義はあります。
版数管理を手動で行い、フォルダやファイルをコピーして末尾に番号とか日付を付けるのはとても非効率ですね。
特にGitHubはフリーエディションでもPrivateレポジトリが作れるようになり便利になりました。

GitHubからのCloneとかPushは簡単ですが、そもそも一番最初にレポジトリを用意して最初のコードを準備するのはどうやるんだっけ?
と思ったのでメモしておきます。

【Git初心者向け】リポジトリの作成からpushまでを解説
https://www.sejuku.net/blog/70775


1. リモートプロジェクトの準備
GitHubにログインしてリポジトリを作成します。
リポジトリのURLがhttps://github.com/ユーザ名/レポジトリ名.git
になります。

2. ローカルレポジトリの作成
先ほどGitHub Desktopをインストールしたので、これを使ってみます。
GitHub Desktopを起動して

Create a New Repository on your hard drive... :ローカルレポジトリが存在しない場合
Add an Existing Repository from your hard drive... :ローカルレポジトリが存在する場合

今回は「Create a New Repository on your hard drive...」を選択します。

Create a new repositoryというダイアログが起動します。

レポジトリ名、ローカルPCのパスを入力します。
Initialize this repository with a READMEはチェックしておきます。

  • Gitignore
  • License

どっちもとりあえずNoneで指定しておきます。

Create repositoryを押下してローカルリポジトリを作成します。

成功してメイン画面になります。



とりあえず、LaravelのBootcampの今までやったところをGitHubのリモートレポジトリにプッシュしておきます。

Historyタブをクリックすると全てのファイルに+マークがついています。
これでコミットできるようになっているのかな?



Publish repository
GitHub.comを選択して、Publish repositoryを押下します。



 

ん?GitHub上に既に存在するというエラーに
え、既存のレポジトリにPushできないの?

めんどくさいのでGitHub側のレポジトリを削除しておきます。

再実行したらリモートレポジトリが作成されてソースコードがプッシュされました。


リモートレポジトリ上はこんな感じ



軽く編集してみます。

Changeタグに変更したファイルが表示されます。

コミットメッセージを入れて「commit to main」を押下します。

 

Push commits to the origin remoteと表示されるので「Push origin」を押下します。


変更がリモートレポジトリに反映されます。

さすがにアトラシアンのSource Treeほどではありませんがシンプルな操作なら問題なく出来るようです。



GitHub Desktop

GitHubは説明不要なくらい有名なGitのホスティングサイトです。
なんやかやあって、マイクロソフトに買収されました。

ブラウザ上で使う場合が多いですが、GitHub Desktopというインストールして使うものもあるようなので使ってみます。

https://desktop.github.com/


OSに合ったものをダウンロードします。

インストーラを起動します。
GitHubかGitHub Enterpriseのどちらかでサインインするようです。 

 
 
選択すると自動的にブラウザが起動するのでAuthorize desktopを押下します。 

GitHub Desktopに戻ってCinfigure Git画面
設定を確認してFinishを押下します。


Let's get started!
これで使えるようになったようです。




2023年3月27日月曜日

Laravel Bootcamp: 03. Creating Chirps

https://bootcamp.laravel.com/blade/creating-chirps

前回までで環境構築とログインができるところまで来ました。

こっからが本番です。

Models, migrations, and controllers

この3つを作っていくようです。

Laravelはartisan(職人)コマンドで色々作れます。

$php artisan make:model -mrc Chirp

mrcオプションってなんだろ
php artisan make:model --help

-m, --migration       Create a new migration file for the model
-r, --resource        Indicates if the generated controller should be a resource controller
-c, --controller      Create a new controller for the model

m(migration)とc(controller)は分かるけどr(resource controller)とは具体的になんだろ?

メッセージを見るとModelとMigration fileとControllerが作成されたようです。

とりあえず気にせず進みます。

Controllerにレスポンスを書き込みます。

http://localhost:/chirps
にアクセスします。

Hello, World!
がブラウザに表示されます。

Blade

Controllerで直接Responseを返していたのをBladeのViewを返すように修正します。
Bladeはそのままコピペで

Navigation menu
navigation.blade.phpの18行目,75行目に追記します。

Dashboardの右に"Chirps"というタブが追加になります。
 

Saving the Chirp

chirps.storeで保存するようです。

ChirpControllerのstoreメソッドに実装を追加します。
やってるのはメッセージ欄へのバリデーション(必須入力、最大入力文字数255文字)
未入力や255文字を超える入力にはエラーメッセージを表示します。

適当な文字を入れてボタンを押すとDB関連のエラーになります。
まだ実装してないからでしょう。

Creating a relationship

Userモデルにhas Manyというリレーションシップを作成するようです。


これによると、ユーザが複数の投稿を行う(Chirperもそんな感じの機能を実装します)ような関係性だそうです。
 
app/Models/User.phpにchirpsメソッドを追加します。
 
app/Models/Chirp.phpにデータmessageを追加します。これで画面で入力したメッセージを永続化することができるのでしょう。
 

Updating the migration

ああ、 マイグレーションファイル「databases/migration/<timestamp>_create_chirps_table.php」を見るとidとtimestampしかありません。
ユーザIDとメッセージを格納するための定義を追加するようです。
現時点でDB上にはchirpsというテーブルはありません。
ユーザIDとメッセージの定義を追加した上で以下のコマンドを実行します。
$php artisan migrate
実行したらDB上にテーブル「chirps」が生成されました。

画面に戻って適当なメッセージを入力してボタンを押したら初期画面に戻りました。
DBを確認するとchirpsに1行データが挿入されていました。
id, created_at, updated_atは自動的にデータが設定されていますね。
user_idもログインしているユーザのuser_idも設定されています。
簡単すぎて逆にとまどいます。


php artisan migrateに関して
開発していく内にテーブル構造が変わったり追加になります。
何度か実行することになるでしょう。
一から作成するだけでなく特定のテーブルだけ再作成したい時もあるでしょう。以下のサイトが参考になります。

 

Testing it out

投稿を保存することができるけど、投稿を見ることはできません。
今後は表示画面を作ることになるのかな?


Artisan Tinker

?なんでしょうか
ググるとLaravelのコードが実行できる対話型のコンソールらしいです。
【Laravel】Laravel tinkerを使ったら開発が快適になった話
https://e-seventh.com/laravel-tinker-ease-develop/

ああ、なるほど
作った機能をテストするにはそれを呼び出す機能も作らないといけないけど
Tinkerを使えば機能を直接呼び出せるということですね。

$php artisan tinker

実行すると版数表示とプロンプト">"が表示されました。
ShellScriptの対話モードと似ていますね。



Chirp::all();
実行したら、Class "Chirp" not found.
というエラーになりました。
 
ぐぐったら

どうやらChirpクラスが自動ロードされないためのクラスが見つからないのが原因だそうです。
composer dump-autoloadを実行すれば良いらしいです。
 
その後に、Chirp::all();
を実行すると想定する結果が得られました。

Ctrl+cを押すと対話モードから抜けれます。
 
では次のチャプターに行きましょう。

Continue to start showing Chirps...

pgAdmin4でマスターパスワードを無効にする

PostgresSQLも使っているのですが、pgAdmin4を起動すると必ずマスターパスワードを聞かれて鬱陶しいので無効にする方法を探しました。

ググったら一発でした。

データベース - pgAdmin - マスタパスワード

pgAdmin 4の起動時
 

 自己責任と書いてありますが気にせずに実行します。

私の環境では「C:\Program Files\PostgreSQL\15\pgAdmin 4\web」にconfig.pyがありました。

というかファイル拡張子がパイソンなんですね。

管理者権限で「config_local.py」というファイルを作って以下の内容を書き込めば良いようです。

MASTER_PASSWORD_REQUIRED=False

コマンドプロンプトを管理者権限で起動して 

$echo MASTER_PASSWORD_REQUIRED=False > config_local.py

これでマスターパスワードを聞かれなくなりました。 


 

2023年3月22日水曜日

LaragonのMail Catcher

以前実行環境としてLaragonについて書きました。

Mail Catcherという便利な機能があるので紹介しておきます。

上記のリンク先にあるようにmail() を呼び出したときに画面の右下にウインドウを表示します。

送信したメールは自動的にテキストとして保存されます。

なので正しい形式(ヘッダー、タイトル、ボディ)で送信しているか確認できます。

標準で対応しているのが嬉しいですね。

一般的にはFake SMTPと言われるアプリやサイトを使って、そこへメールを送信するようにSMTPサーバやポート番号などを設定する必要があります。

Fake SMTP servers for testing

Mailtrap: A Fake SMTP Server for Pre-Production Email Testing

ReactのWebサイトが一新

ReactのWebサイトが一新になったそうです。

今までのサイト(今後は更新することはほぼないそうです)
 
新しいサイト
 

 

サンドボックスの使い方?

新しいWebサイトの最大の特徴は、JavaScriptのサンプル・コードと、その実行結果を並べて表示する「サンドボックス」だ。記述してあるサンプル・コードは自由に書き換えることができ、書き換えた結果に応じて、実行結果の表示もリアルタイムで変化する。サンドボックスは、Reactの使い方を初歩から解説するWebページや、ReactのAPIドキュメントの600カ所以上に登場する。実際にコードを書き換えるとどうなるのかをすぐに試せるので、解説をより理解しやすくなる。

とありますが、コードとその右に実行結果が表示されてますが、編集できないんですが?

サンドボックス?コードの編集は出来ないけど
 

と思ったら勘違いでした。
App.jsと表示されて左端に行番号があるものがサンドボックスです。
紛らわしいですね。
サンドボックス、リアルタイムで変更が右の画面に反映される


2023年3月20日月曜日

リセットCSSとは

以前無料のフロントエンドのコーディングの講座を受けたことがあります。

HMML, CSSだけでデザインカンプから実際のサイトを構築するものです。

そこで初めて”リセットCSS”というのがあるのを知りました。

ブラウザ毎にデフォルトのCSSがあり、リセットしないと思ったような見た目にならないとか。

うーん、そんなことしないといけない時点でブラウザの互換性なんてあってないようなものですね。

ブラウザ毎にサポートしている機能や仕様があるのは理解できますが、どうもこういうのは慣れないですね。

2023年、現在の環境に適したリセットCSSのまとめ

【リセットCSSとは】使い方やおすすめのリセットCSSを紹介

CSSのベストプラクティス14選(初心者向け)

Laragonとは

いわゆるLAMPの環境をWindows上で構築するのに手っ取り早いのでXAMPPを使っています。
特に不満はありません。
順調に版数も上がっているようですし 

たまたま会社のプログラマが"Laragon"というのを使っていたのでメモしておきます。

 
タイトルはともかくまとまっています。
 
 
Laragonは軽量でPHP以外にも対応しているようですね。
機会があれば使ってみたいと思います。
 

2023年3月16日木曜日

Laravel Mix, Laravel Vite, webpack

Laravel関連のドキュメントやメルマガを読んでるとちょいちょい出てくるLaravel MixとLaravel Vite

なんだか分からないけど、放置しておくと面倒になりそうなのでまとめておくことにします。

Laravel Mixとは?スッキリ分かる解説とインストールの手順 

  • Laravel Mix: webpackのAPIラッパーで使いやすくするもの
  • Laravel Vite: Laravel Mixの代わりのツールで2022年6月29日から、LaravelがViteをデフォルトでいれるようになったそうです。詳細は上記参照


webpackとは

webpackには、JavaScriptやCSSといったファイルをまとめたり、コンパイルする役割があります。
コンパイルは、コンピュータ上で実行可能なように変換すること。
Webアプリの場合は、ブラウザで表示できるようにするってことです。
Laravel Mixは、このwebpackを使いやすくしてくれるのです。

シンプルなWebサイトであればHTML, CSS, JavaScriptもシンプルで数も少ないでしょうね。
ただ大規模な開発するようになってCSSもJavaScriptも機能が追加になってくるとファイル分割して開発、そして最後はまとめるような機能が別途必要となるということでしょう。 

JavaScriptに関して

WebブラウザNetscape Navigatorに起源を持つようですが、Internet Explorer 3.0に搭載されたことで広まったようですね。
もともとLiveScriptという名前だったようですが、色んな思惑でJavaScriptに改名したようです。
Javaとは1mmも関係ないですが、初心者などは勘違いすることもあるとかないとか。

その起源から”ブラウザ”上で動作するものですが、最近はOS上でも動作するようになりました。

なぜかそれを”サーバサイド”JavaScriptと呼ぶことが多いのですが、もやっとしますね。

別にクライアント(PC)でも動きますが?

多分、クライアントサイドでブラウザが動作し、サーバサイドでサーバが動いている、クライアント・サーバモデルをイメージしてるんですかね?
そのためクライアント=ブラウザということかな?

OS上でもJavaScriptを動かすための環境として有名なのがNode.jsです。

私の理解だと

Node.jsはブラウザ(Google Chrome)上でJavaScriptを実行するためのエンジン(V8)をOSで動くように移植したJavaScriptの実行環境が正しいと思います。 

https://www.kwbtblog.com/entry/2019/03/11/071635

JavaScriptは、ブラウザ上でちょっとした動きを付けたり、イベント処理するくらいの小さなプログラム用だったのがOS上でも動作するようになり飛躍的に複雑化したという印象です。

JavaScriptの標準化

ECMAとか出てくるのでややこしいですね。

JavaScript って何? 

上記が詳しいです。ECMA(European Computer Manufacturers Association)という組織がJavaScriptの標準化を行うことになったのでECMAScriptとも呼ばれることになったと。

ESMAはエクマって読むらしいです。

標準化は1997年6月は始まってますね、以外と早くから進んでいたんですね。

ECMAScript 2015、この辺からですね、私がJavaScriptがかなり機能を詰め込んで変わったきたと何となく思い出したのは。

JavaScriptの仕様ES5以前とES2015(ES6)以降の違いの抑えるべき項目

色々変わった点が書いてあるけど一番の目玉はクラス化ですかね。 

ECMAScript 2015以前

function Profile() {
  this.name = '太郎'; // プロパティ
}
Profile.prototype.desc = function() { // メソッド
  console.log(this.name + 'はお人好しでカワイイです。');
};
var person = new Profile();
person.desc();

ECMAScript 2015から

class Profile {
  constructor() {
    this.name = '太郎';
  }

  desc() {
    console.log(`${this.name}はお人好しでカワイイです。`);
  }
}
let person = new Profile();
console.log(person.name); // 太郎
person.desc(); // 太郎はお人好しでカワイイです。

これはヒドイ、ECMAScript 2015以前はオブジェクト指向風に無理くり書いてる感じがします。

あとはモジュール化

ES6 moduleとは?なぜ必要?

JavaScriptには、長い間moduleシステムがありませんでした。
アプリケーションが改善されて肥大化するにつれて、コードも大きくなり、それらを管理して 1つのファイルに保持することが困難になっていきました。
それを解決する為、モジュールの概念が生まれました。
これは、ほとんどのプログラミング言語では基本的な部分ですが、JavaScriptではそうではありませんでした。

これもヒドイ、普通のプログラム言語の経験があれば機能を適度にモジュール分割して、ファイルも分けるのが基本だけどJavaScriptではできなかったのか、まあ出自を考えるとそこまで肥大化するとは思ってなかったんでしょうね。

moduleの背後にある基本的な考え方は、コードの一部をexportして、それを他のファイルにimportして使用できるというものです。
moduleを使用すると、大きなスクリプトを小さなmoduleに分割して、他のファイルでも使用できます。

なるほど、 ECMAScript 2015からようやくオブジェクト指向やモジュール化して大規模な開発ができるようになった感じです。

 えっと長かったけど、最初のwebpackとはに戻って

【webpack】をサクッとまとめる

webpackモジュールバンドラと呼ばれており、ソースコードを束ねて、ブラウザで実行できる静的なJavaScriptファイルを出力するものです。Webアプリの開発において様々なnpmパッケージを使う人にとっては必須のツールといっても過言でもないでしょう!

モジュール化によって機能を複数のJavaScriptファイルに分けて開発することができるようになりました。
ただ実行時は1つのファイルにまとめた方がHTMLファイルからも参照し易いでしょうね。
なのでモジュールバンドラとしてwebpackが登場するということでしょう。

モジュールバンドラーとトランスパイラ

モジュールバンドラー
JavaScriptは細かく分けて開発を進めた方が効率的で生産性も上がる。
ただ、本番環境で実行するときはファイルを細分化する必要はない。
むしろ、読み込み回数が増えてパフォーマンスが悪くなる。
そこで、 開発はファイルを分けて行い、本番用にビルドするときに1つのファイルにまとめるという思想を実現するため、
jsファイルやcssファイル等をまとめてくれるモジュールバンドラーが作られた。

現在主流のモジュールバンドラーはWebpack

トランスパイラ(コンパイラ)
モジュールバンドラーが複数のファイルを一つにまとめてくれるものならば、
トランスパイラはJavaScriptの記法をブラウザで実行できる形に変化してくれるもの。
ECMAScriptは毎年仕様が変わり、バージョンが変わりますが、それに全てのブラウザが対応しているわけではない。
ex)ES6はIE(InternetExplore)でエラーが出て全然動かない。。。
そこで、トランスパイラを使用すると、新しい記法で書かれたJavaScriptを古い記法(多くのブラウザで実行できる形)に変換してくれます。

現在主流のトランスパイラはBabel(旧 6to5)
モジュールハンドラについては既出だけど良くまとまってる。

トランスパイラについてもわかりやすい、ブラウザのサポートについては悩ましい、サポートの状況もブラウザによって異なるから古い形式にトランスパイルしないといけないわけか、いろいろめんどくさいけどしょうがいない。

webpackはバンドラー、Babelはトランスパイラ

余談
これから主流になるであろうビルドツール Vite
これからフロントエンドで主流となると言われているビルドツールにViteというものがある
Vue.jsの開発者であるEvan You氏が中心となって開発
Webpackよりも圧倒的に高速である

Vite(フランス語で「素早い」という意味の単語で /vit/ ヴィートと読むらしい、 Vue.jsの開発者のEvan You氏が中心になって開発してるらしいですね。

Laravelでも既にLaravel Mix(webpack)からLaravel Viteに移行しているらしい。

Laravel Mixすら使ったことないのにもうLaravel Viteに移行しているとかスピードが速すぎる。
Laravel Viteを使うことにします。 

CSSに関して

CSSはCascading Style Sheets(カスケーディング・スタイル・シート)の略です。

CSSの歴史。誕生の背景やLevel別の特長を学ぼう。

CSSの基本的な書き方・CSSとは? 

CSSでできること

  1. デザイン(装飾)
  2.  レイアウト・サイズ調整(HTMLの表示位置調節や整列)
  3.  アニメーション

HTMLが構造をタグで規定するに対して、見た目を整えるのがCSSになります。

SCSSとSassとSASS

CSSも古いので最近の事情に合わせて拡張しているようです。
ただ、ネーミングがダメですね。わざと混乱させてるとしか思えない。
https://and-engineer.com/articles/Yw7uwBAAACMA7ZUr

Sass:Syntactically Awesome StyleSheet、CSSを拡張して扱いやすくしたスタイルシートです。

記法が2つあり

(1) SASS形式:最初に作られたもの。拡張子は「.sass」
(2) SCSS形式:こちらの方が普及している。拡張子は「.scss」
SCSS形式のファイルはそのままではWebブラウザは認識できないので、CSSに変換するためのコンパイル作業が必要となる。
webpackなどを使ってコンパイル(CSSへ変換)するのでしょう。

SCSSの方が普及してるらしいので、これからSassを学習するならSCSS一択でしょうね。

webpack を使って Sass をコンパイルする方法

ということで 

Laravel MixとLaravel ViteはLaravelのフロントエンド(JavaScript, CSS)のビルドツールだということですね。
今はLaravel Viteに移行したらしいのでLaravel Viteを学習するのが良いでしょう。

2023年3月15日水曜日

Laravel Bootcamp: 02. Installation

Build Chirper with Blade

https://bootcamp.laravel.com/blade/installation

フロントエンドとしてBladeを選んだのでこちらのルートになります。

"chirper"という名前でプロジェクトを作成します。

$composer create-project laravel/laravel chirper

コンポーザを使ってプロジェクトを作成するという普通の手順ですね。
以下のように表示されれば作成です。

Laravelプロジェクトを作成

コンポーザをインストールしていない場合は以下の手順に従ってインストールとZIPの設定しておいて下さい。
https://web2sunny.blogspot.com/2023/02/laravel_52.html

実行するのは"C:\xampp\htdocs"の下です。
私の環境ではXAMPPをインストールしているのでXAMPPを起動するとブラウザ上で確認ができます。

$cd chirper
$php artisan serve
これでhttp://localhost:8000にアクセスするとページが表示されます。

ただ上記したようにXAMPPを使うのでこれはスキップします。

DB
チュートリアルではSQLiteを使うようですね。
しかしせっかくなのでMySQLを使うことにします。

チュートリアル上はSQLite
DB_CONNECTION=sqlite

デフォルトでMySQLを使うようになっていますね。ローカルでDBを作ってDB名、ユーザ名、パスワードを設定することにします。
https://web2sunny.blogspot.com/2023/03/xamppmysqldb.html

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=chirper_db
DB_USERNAME=chirper_user
DB_PASSWORD=test0001
 

Installation via Docker

Laravel Sailを使ったDockerの環境の構築が記載されています。

Laravel Sail(セイル、帆、帆船)は、LaravelのデフォルトのDocker開発環境を操作するための軽量コマンドラインインターフェイスです。 Sailは、Dockerの経験がなくても、PHP、MySQL、Redisを使用してLaravelアプリケーションを構築するための優れた出発点を提供します。

ただDockerには詳しくないのとXAMPPの環境があるので、ここもスキップします。

Installing Laravel Breeze

最低限の機能を含んだBreezeのインストールを行います。

$composer require laravel/breeze --dev
$php artisan breeze:install blade



$npm run dev
'npm' is not recognized as an internal or external command,
operable program or batch file.

なんかエラーになりました。npmがインストールされてないようです。

途中で手順を飛ばしたせいですかね?

そもそもnpmってなんでしたっけ?

npm入門

Node Package Manager の略でJavaScript系のパッケージ管理アプリのようですね。

パッケージ間に依存関係がある場合でもまとめてインストールしてくれるようです。

Node.jsをインストールすると一緒にインストールされるみたいです。
Node.jsをインストールすることにします。 

18.15.0 (同梱 npm 9.5.0)が現在の最新のようです。

インストーラをダウンロードして次へと進んでいくだけです。

npm run devを再実行するとviteが無いってメッセージ、めんどくさいですね。

$npm run dev

> dev
> vite

'vite' is not recognized as an internal or external command,
operable program or batch file.

Laravel 9.x アセットの構築(Vite)

ここの記述に従ってViteをインストールしてきます。

Nodeのインストール
ViteとLaravelプラグインを実行する前に、Node.js(16以上)とNPMを確実にインストールしてください。
だそうです。
もう終わってます。

ViteとLaravelプラグインのインストールを行います。

$npm install

92のパッケージがインストールされたようです。npmのマイナーバージョンアップがあるようですがこのままにしておきます。

npm install の実行結果
 npm run devを再実行します。

 今度こそ上手くいったようです。


 http://localhost:5173/にアクセスします。

This is the Vite development server that provides Hot Module Replacement for your Laravel application.

と表示されるのでVite開発用のサーバでソースコードを変更しても自動的に反映されて表示されるのでしょう。


 
$php artisan migrate

DB関連のエラーになります。

 

XAMPPの起動とMySQL関連の設定をするのを忘れていました。

.envのDB関連の設定を行11 - 16に行います。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=chirper_db
DB_USERNAME=chirper_user
DB_PASSWORD=test0001

 

再実行して、上手くいきました。

phpMyAdminで確認するとテーブルが出来ていました。


http://localhostにアクセスするとアプリのトップ画面が表示されます。


 
右上のRegisterをクリックします。
ユーザ登録画面に遷移します。


後日、実行したら以下のようなエラーになりました。


開発用サーバが動いてないとエラーになるんですね。

$npm run dev

を実行して再ロードしたら、ユーザ登録画面が表示されました。

 

テスト用に適当にユーザを作成します。

ユーザ名、パスワード、Eメールを適当に入力して「Register」ボタンを押します。

ダッシュボート画面が表示されました。

ダッシュボード画面
 

ログアウトしてから直接「http://localhost/dashboard」をブラウザから入力しましたが、ログイン画面にリダイレクトされました。

認証機能もちゃんと動いているようです。

直接URLを入力してもログイン画面へリダイレクトする

 

では次のチャプターに行きましょう。

Continue to start creating Chirps...

 

Laravel再学習

フロントエンド系の方に興味が行っていましたがまたバックエンド系に戻ってきました。 Laravelです。 かなり忘れてます、自分のブログを見ながらもう一度です。 今回はMVCパターン、そして Eloquentを使えるようになるのが目的です。 まずはプロジェクト作成から 1. Com...