ページビューの合計

2023年9月27日水曜日

Laravel再学習

フロントエンド系の方に興味が行っていましたがまたバックエンド系に戻ってきました。

Laravelです。

かなり忘れてます、自分のブログを見ながらもう一度です。

今回はMVCパターン、そして Eloquentを使えるようになるのが目的です。

まずはプロジェクト作成から

1. Composerのインストール

最新版をインストールしておきます。2.6.3でした。

2. PHP環境のインストール

XAMPP 8.2.4をインストールします。
PHPは、8.2.4です。 

3. Laravelプロジェクトの作成

新規プロジェクトを作成する方法

このレベルで、もう忘れてる。

作成方法は2つ

  1. composer create-project laravel/laravel プロジェクト名 --prefer-dist
  2. laravel new プロジェクト名

”プロジェクト名”のフォルダが作成されてLaravelプロジェクトが新規作成されます。

本にも”--prefer-dist”って書いてありますが、今回指定を忘れました。

何の意味があるんだろうと思って調べたら、このオプションを指定するとLaravelを圧縮してダウンロードするのでダウンロード時間が短くなるそうです。

なるほど、じゃ別に指定しなくても大丈夫ですね。


2023年8月24日木曜日

HTML の基本

ウェブ入門の続き:HTMLの基本

1.4 HTMLの基本 

HTMLとは

HTMLとは HyperText Markup Language、ハイパーテキスト・マークアップ・ランゲージです。

そしてどうでもいいかも知れませんがHTMLは開発言語ではなくマークアップ言語です。

【悲報】HTML/CSSはプログラミング言語ではなかった!

別に悲報ではないと思いますがw

HTMLはコンテンツ(テキスト)に対してタグを使って文章を構造化し、意味づけを行っていきます。

例:

100だけだとなにか分かりませんが

<price>100</price>

とすれば値段だという意味づけができます。そしてタグを入れ子にすることで構造化していくこともできます。

そしてCSSはコンテンツに対して装飾(色、強調、レイアウト)などを追加します。
 

ブラウザ

HTMLはタグで囲まれただけのただのテキストです。 それを表示するには所謂ブラウザが必要になります。
ブラウザにはレンダリングエンジンというものがあってそれがサーバから受け取ったHTMLを解釈して普段私たちが目にする形にレンダリングして表示します。

ブラウザの種類とレンダリングエンジン

 

サーバサイドJavaScriptとは?

脱線ついでにJavaScriptもブラウザ上のJavaScriptエンジンで実行されて動作します。

ブラウザとJavaScriptエンジンの関係とJavaScriptエンジンの構造

上記で記載がありますが、V8 Engineがとてもポピュラーです。

JavaScriptエンジンはブラウザ内に実装されています。なのでブラウザはJavaScriptの実行環境ということもできます。

最近良く聞く「サーバサイドJavaScript」ですが、誰が言い出したのか知りませんが誤解を招く表現ですね。サーバサイドで動作するJavaScript?

別にクライアント(PC)上でも動作しますよね?

もしくはクライアント(ブラウザ)、サーバ(PC)という意味で使っているのかもしれませんが分かりずらいと思います。

正確にはGoogle Chrome上に実装されていたJavaScriptエンジンである"V8 Engine"をOS上でも動くように移植して、その他のモジュールも梱包したJavaScriptの実行環境であり、その1つがNode.jsです。

なのでOSのコマンドライン上で

$ node test.js

とすることでJavaScriptのソースコードを実行することができます。

下記のサイトに分かりやすい図があったので載せておきます。
あくまでOS上で動作するJavaScriptの実行環境(runtime)であるというのがNode.jsの本質です。

Take a tour of Node.js

横道に逸れたので元に戻ります。

HTML は、コンテンツの構造を定義するマークアップ言語です。"タグ"で囲むことで、単語や画像をどこかにハイパーリンクさせたり、単語を斜体にしたり、フォントを大きくしたり小さくしたりすることができます。

HTML 要素の中身 

要素は主に以下のようなもので構成されています。

  1. 開始タグ (opening tag): これは、要素の名前(この場合は p)を山括弧で囲んだものです。どこから要素が始まっているのか、どこから効果が始まるのかを表します。 — 今回の場合どこから段落が始まるかを表しています。
  2. 終了タグ (closing tag): これは、要素名の前にスラッシュが入っていることを除いて開始タグと同じです。どこで要素が終わるのかを表しています。 — この場合は、段落が終わる場所を表します。終了タグの書き忘れは、初心者のよくある間違いで、おかしな結果になることがあります。
  3. コンテンツ (content): 要素の内容です。今回の場合はただのテキストです。
  4. 要素 (element): 開始タグ、終了タグ、コンテンツで要素を構成します。

属性には、実際のコンテンツには表示させたくない、要素に関する追加情報が含まれています。ここでは、 class が属性の名前で、 editor-note が属性のです。

ああ、属性はあくまで属性であってコンテンツそのものとは異なるということですね。単なる追加情報であってコンテンツとしては表示しないということですね。

上記ではclassを例に挙げていますが、CSSで特定のclassに対してスタイルを適用したりします。

値を設定する属性の形式は以下の通りです。

  1.  要素名(すでにいくつか属性がある場合はひとつ前の属性)との間の空白
  2.  属性名とそれに続く等号
  3.  引用符で囲まれた属性の値

メモ: ASCII のホワイトスペース(または " ' ` = < > のいずれかの文字)を含まない単純な属性値は引用符を省略することができますが、コードを一貫性のあるものにし、理解を容易にするため、すべての属性値を引用符で囲むことをお勧めします。
属性値は<p class="editor-note">という感じで設定します。

上記の条件(ASCIIのホワイトスペース、 " ' ` = < > のいずれかの文字を含まない)を満たす場合は引用符を省略できるようですが、常に引用符" "で囲んだ方が良さそうです。

 <p class=editor-note> OK(引用符省略可能)

 <p class=editor=note> NG(引用符省略不可能)

 

要素の入れ子

要素をネスト(入れ子)にすることができますが、当然正しい順に記載する必要があります。

<p>My cat is <strong>very grumpy.</p></strong>: NG

空要素

コンテンツを持たない要素だそうです。

そんなものあったかと思ったら<img>でした。

確かにコンテンツとして何らかのテキストを指定する必要はありません。属性"src"で指定する画像ファイルがもっとも重要なものになります。

<img src="images/firefox-icon.png" alt="My test image" />


HTML 文書の構造

Visual Stdio CodeでHTML形式のソースコードで、「!」を入力してエンターキーを押下すると以下のようなコードが自動的に挿入されます。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>

つまりこれらはHTML形式のファイルとして必要最小限な要素ということですね。

(1) <!DOCTYPE html>
文書型宣言
1行目に記載します。


【HTML初心者入門者向け】doctype宣言とは?

  1. この文書がHTMLであること
  2. HTMLのバージョンを明記すること
  3. このDTD(Document Type Definition/文章の構成要素バージョン)がなにか明記すること

だそうです。

HTMLの過去・現在・未来

によると最初のHTML version1.0はオフィシャルにはないようですが、1993年にInternet Draftとして提出されたものをそう呼ぶようです。
HTMLはインターネットの黎明期から版数を重ねてきました。
そのためバージョンを明記する必要があるんですね。


ただ現在のHTML5では「<!DOCTYPE html>」とだけ記載すれば良いようです。
単にこの文章がHTMLであることを示すだけですね。

(2) <html></html>

この要素は、このページのすべてのコンテンツを囲み、ルート要素と呼ばれることもあります。ここでは文書の主要な言語を設定する lang 属性も指定します。

実質ここからがHTMLの中身です。

lang属性も設定できます、日本語であれば"ja"ですね。

(3) <head></head>

この要素は、ページの閲覧者に向けて表示するためのコンテンツではない、 HTML ページに含めたいものをすべて収めるための入れ物です。検索エンジン向けの キーワード やページのディスクリプション(説明書き)、ページの見た目を変更するための CSS、文字コードの宣言などを含みます。
若干記述が冗長ですが、閲覧者向けのコンテンツではないとうことのようです。

(3-1) <meta charset="utf-8">

この要素は、大部分の書き言葉の文字のほとんどを含む UTF-8 を文書で使用するように設定しています。基本的には、文書はどんなテキストコンテンツでも扱えるようになります。これを設定しない理由はありませんし、後でいくつかの問題を回避するのに役立ちます。

もう今の時代に文字コードとか文字化けとかもう面倒なことを考えたくないですね。どんなものでもUTF-8一択で良いのではないのでしょうか。

(3-2) <meta name="viewport" content="width=device-width, initial-scale=1.0">

このビューポート属性は、このページがある幅のビューポートで描画されることを保証し、モバイルブラウザーがビューポートより広い幅でページを描画した上で縮小して表示するのを防止します。

うーん、なんかビューポートの説明がピンときませんね。 

viewportとは?HTMLのmeta要素やinitial-scale、非推奨の設定を解説

今まで「viewport」を全く意識したことが無かったのですが、レスポンシブデザインに必須の要素だそうです。

viewportとは、Webページを表示するブラウザの表示領域で、デバイスの画面サイズや解像度に合わせて、Webページを最適に表示する機能があります。

スマホやタブレット、パソコンなど、デバイスに合わせて表示領域を設定する機能があるため、パソコン向けのWebサイトを、スマホやタブレットでも快適に表示させるための必須要素です。

Googleはレスポンシブデザインを推奨しており、対応するためにはviewportが欠かせません。
ふむふむ
レスポンシブデザインという言葉は浸透してた感がありますが、Googleが推奨してたんですね。 

ぐぐってみると

Google がお勧めするスマートフォンに最適化されたウェブサイトの構築方法

これが元ネタみたいです。2012年の6月

 

 


2023年8月23日水曜日

ファイルの扱い

ウェブ入門の続き:ファイルの扱い

1.3ファイルの扱い

(a) 大文字や空白を使わない

どんな環境でも間違いなくファイル名を認識できるように大文字、空白は避けるべきですね。

ハイフン: Googleの検索エンジンはハイフンを単語の区切りとして扱う。
アンダースコア: Googleの検索エンジンはアンダースコアを単語の区切りとして扱わない。

my-file.html OK
my_file.html NG

フォルダ名やファイル名を小文字で書き、スペースを入れず、単語をハイフンで区切る習慣をつけるとよいでしょう。
ハイフンとアンダースコアの違いはピンと来なかったので調べました。

つまり、SEO(Search Engine Optimization)も考慮して、安全かつ自由にURLを作るためには可能な限り以下の文字だけを使うようにすると良いと思います。

  1. 小文字アルファベット : a〜z
  2. 数字 : 0〜9
  3. ダッシュ(ハイフン) : 『–』
だそうです、なるほど。


(b) ウェブサイトはどのような構成にするべきか

このタイトルは少し分かりずらいですね。

Webサイトを構成する際のファイル名やフォルダ名そしてフォルダ階層などの話題です。主な対象は以下のものになります。

  • HTMLファイル
  • 画像
  • スタイルシート
  • スクリプトファイル
  1. index.html: サイトにアクセスしたときに最初に表示するページです。サイトのフォルダの直下に置くことが多いです。
  2. imagesフォルダー: サイトで使う全ての画像を置いておくフォルダです。
  3. stylesフォルダー: コンテンツの装飾をするCSSを置いておくフォルダです。
  4. scriptsフォルダー: JavaScriptのソースコードを置いておくフォルダです。


(c) ファイルパス

同じ階層
下階層
上階層

ファイルパスの指定方法は相対パスと絶対パスがありますが、相対パスの方が良いでしょう。

(d) 他にするべきこと

(e) ファイルエンコード(文字エンコーディング)

近年ではUnicodeが当たり前になってきましたが以前は、SJIS、EUCなどが混在していてExcelやテキストエディタで開くと文字化けすることが良くありました。

今後はもうUnicode一択で良いでしょう。

 



2023年8月21日月曜日

ウェブサイトをどんな外見にするか

 ウェブ入門の続き:ウェブサイトをどんな外見にするか

 1.2 ウェブサイトをどんな外見にするか

まずはじめに、次の質問に答える必要があります。

  1. 何についてのウェブサイトですか? 犬、ニューヨーク、それともパックマン?
  2. 主題についてどんな情報を表現しようとしていますか? タイトルといくつかの段落、それからページに表示させたい画像を考えます。
  3. ウェブサイトをどんな外見にしますか? 簡単で大まかな言葉で言うと?背景色は?適切なフォントはフォーマル?漫画?太字で派手?繊細?

大げさに言えばグランドデザインですね。

 複雑なプロジェクトでは、色、フォント、ページのアイテム間の余白、適切な文体など、詳細なガイドラインが必要です。これは、デザインガイド、デザインシステム、ブランドブックなどと呼ばれます。一例として、 Firefox Photon Design Systemがあります。
そうですね。担当が勝手に実装するとページ単位での見た目とかが異なることになります。

デザインガイド、デザインシステム、ブランドブックでググってみました。

デザインシステムとは?|国内外の参考になる事例10選と共に解説

デザインシステムとは?内容や作り方、運用方法を解説します

2022年版 おすすめのデザインシステム5選

「デザインシステム」とは「一貫性を持ったデザインにするためにデザインのルールを定めたもの」です。

だそうです。

なるほど、プログラミングでも命名規則やコーディング規則を作成して可読性やメンテナンス性を高める工夫をします。
これらは(良くはないですが)守らなくても動作するプログラムを実装することができます。
ただデザインシステムを守らないと1つのWebサイトとしては一貫性が無くユーザの操作に大きな影響を与えることになるででしょう。
 

 (a)デザインをスケッチする

アナログで紙に描いても良いでしょうが、ワイヤーフレームツールを使ってまずはざっと描いてみてブラッシュアップしていくのだろうと思います。

 以前はAdobe XDのフリー版があったのですが、今は無くなりました。

【2023年版】ワイヤーフレームツールおすすめ11選を徹底比較!(無料あり)

これはというツールがないですね。

敢えて選ぶならFigmaかCacooくらいですかね。

(b) 資産を選ぶ

(c) テキスト

(d) テーマカラー

(e) 画像

Google画像検索というのがあるんですね。

私は普通にGoogleで検索して「画像」タブを選択して適当なフリー画像を探していました。

言うまでもなく多くの画像には著作権があるので勝手に使うことは出来ません。

著作権フリーまたは「xxxxxの画像を使っています。」と記載するだけでも良いものもあるのでいずれ調べてまとめておきたいですね。

(f) フォント

特に日本語については、ゴシック、明朝だけでなくとてもたくさんのフォント(書体)があります。

Googleフォントというのがあります。

いわゆるWebフォントというものです。

これらのGoogleフォントファミリーの名前はNotoですが、その名前には面白い由来があります。

豆腐のない世界がNoto Sansの夢?

Fonts for all languages

"Noto" means "I write, I mark, I note" in Latin. The name is also short for "no tofu", as the project aims to eliminate 'tofu': blank rectangles shown when no font is available for your text.

Google翻訳で翻訳すると

「Noto」とはラテン語で「書く、印を付ける、メモする」を意味します。 このプロジェクトは、テキストに使用できるフォントがない場合に表示される空白の四角形である「豆腐」を排除することを目的としているため、この名前は「no tofu」の略でもあります。

  1. ラテン語の「書く、印を付ける、メモする」
  2. No Tofu(対応するフォントがない場合に表示される四角形のこと)

のダブルミーニングということです。

フォントが見つかったら、そのフォントを使用する方法は大きく分けて 2 つあります。

  1. Google のサーバーからフォントを読み込むために、コードに参照を追加する。
  2. 自分のシステムにフォントファイルをダウンロードし、フォントをホスティングし、ウェブサイトのコードでホスティングしたコピーを使用する。

 Googleのサーバを参照するか、ダウンロードするかの二択ということです。

メモ: Google フォントでホスティングされているフォントを提供すると、フォントサービスがユーザーの IP アドレスを公開するため、EU のデータプライバシー規則である GDPR に抵触する可能性があります。これが問題になりそうな場合は、2 つ目の選択肢を選んでください。

 以上のような注意書きがありました。フォントサービスがユーザのIPアドレスを公開するというのは、ちょっといただけないですね。

 Googleフォントは「Download family」というボタンがあるので自由にダウンロードできるようです。

フォントのインストールは単純に「C:\Windows\Fonts」 にダウンロードしたフォントをコピーするだけで良いみたいです。

Noto Sans Japanese


 
Noto Serif Japanese

日本語OS(Windows11)標準の日本語フォント

またこれは仕事をしていたときの実際の経験です。

フィリピンで働いているので英語版のWindowsを使っています。明朝体やゴシックはインストールされていないので実装担当がWebフォントを使っていたのですが、日本語版のWindowsを使う前提なのでWebフォントを使わないで下さいと客先から指示がありました。

MSからダウンロードした明朝体、ゴシックフォントをインストールしてWebフォントを使わないようにしました。

 その時に、では何が標準の日本語フォントとして使えるんだろうと思ってググりました。

 Windowsに標準インストールされている日本語フォント

  1. BIZ UD ゴシック・明朝体
  2. UDデジタル教科書体
  3. Yu Gothic UI
  4. 游ゴシック・游明朝
  5. Meiryo UI
  6. メイリオ
  7. MSゴシック・MS明朝
  8. MSPゴシック・MSP明朝
  9. MS UI Gothic

以外とありますね。 

 

SansとSerifの違い 

フォントファミリーでちょいちょい出てくるのです正確に知らないので調べました。

フォントを語る上で知っておきたい基礎知識10

serif
sans-serif

"sans-"はフランス語で「無い」という意味だそうです。
なので"serif"があるかないかという区別ですね。
その"serif"は、字体の曲がり角にある飾り(うろこ)のことを指すそうです。
日本語だと"serif"は「山」と表現するようです。

なので

  1. serif(明朝):セリフ(山)があり、線の太さが一定ではないもの
  2. sans-serif(ゴシック):セリフ(山)がなく、線の太さが一定であるもの

とうのが大まかの区別になります。  


セーフウェブフォント

また、Arial、Times New Roman、Courier New などのセーフウェブフォントを使用することもできます。
と最後にさらっと書いてあります。

セーフウェブフォントって?
ぐぐってみましたが表記にブレがあるようです。
Web Safe font
Safe Web font

CSS Web セーフ フォント 

Web セーフ フォントとは何ですか?
Web セーフ フォントは、すべてのブラウザとデバイスに共通してインストールされるフォントです。
確かに以下はどのOSでも使えそうなフォントですね。

  • Arial
  • Times New Roman
  • Courier New

あくまでデバイス(OS)にインストールされているのが前提なのでGoogleフォントのようなWebフォントはセーフウェブフォントにはならないようです。

【2023】Webセーフできれいに表示されるフォント30選  

 

Webフォントのメリット・デメリット

恥ずかしながら上記のように仕事で指摘されるまでWebフォントなんてあると知りませんでした。

WEBフォントって何?メリット・デメリットとオススメサービスをご紹介!【2020年】

メリット

  1. デバイスを気にせずにフォントデザインが選べる
  2. SEO対策を強化できる
  3. レスポンシブデザインとも相性が良い


デメリット

  1. 利用料が必要になることがある
  2. 表示速度が遅くなることがある
  3. 利用規約によっては商用利用できないことがある

Webフォントの前にはフォントはデバイス(OS)にインストールされているものでした。

なのでデバイスによっては想定しているフォントがインストールされていなくて異なる見た目になったり最悪は□(豆腐)になっていたということですね。

Webフォントにすると、そういったことは解消されて想定した通りの見た目をどのデバイスでも再現できるということでしょう。

その反面、費用や商用利用、速度の問題があるということですね。

費用や商用利用についてはGoogle フォントを使えば良いでしょう。


 

速度については、不要なフォントを読み込まない、サブセット化するということで速度向上ができるようです。

【Webフォント高速化】使わない文字を除く!サブセット化の方法

アルファベットに比べて日本語は1文字のデータ量も大きいし文字数も多い。

何も考えずに使うと表示速度が遅くなる(読み込みに時間がかかる)ということが起きます。

そのため最近まで日本語のWebフォントはあまり普及してなかったようですが、今後は普及していくと思います。

 


2023年8月18日金曜日

ウェブ入門

MDNのカリキュラムを読み進めます。

MDN Web Docsは最高の学習素材です
に従って「ウェブ開発を学ぶ」から始めることにします。
完全な初心者向けの記事もあるようです。

なんとなく分かった気になってる部分もあるので、初心者向けの記事も読むことにします。
ただ、十分に知っている(開発できる、他人に説明できる)ものはさらっと読むだけにしておきます。

ウェブ開発を学ぶ

このエリアの目的は対象者を「初心者」から「エキスパート」にすることではなく、「初心者」から「中級者」にすること


だそうです。
明確に目的とゴールがあるのは良いですね。

読み始める場所
によると

  1. 全くの初心者の方
  2. 基本の次の段階の方
  3. スクリプト作成まで進む方
  4. フレームワークとツールの利用

の4段階あるそうです。

全くの初心者の方用の「ウェブ入門」を読んでみます。

1. ウェブ入門

1.1 基本的なソフトウェアのインストール

まずは開発環境の整備からですね。

(a) コンピューター
コンピューターというよりはOSでしょう。
Windows, macOS, Linuxがありますが開発環境としてはWindowsかmacOSでしょうね。
特にこだわりがなければWindowsにしておけば良いと思います。

(b) テキストエディター
下手すると宗教戦争wになるので深く突っ込むのは止めます。
Web開発をするなら"Visual Studio Code"で良いでしょう。
Visual Studio Codeは2015年に公開されました。
私は当時マイクロソフトがオープンソースのソースコードエディタを出すってと懐疑的に思っていました。
おそらく私はその当時はEclipseとか使っていたと思います。 

VS Codeは機能も順調に増えていますし、プラグインで色んな機能を追加できます。
もうデファクトスタンダードと言って良いでしょうね。

(c) ウェブブラウザー
ブラウザは最初は文字だけの文章をリンクでたどって参照、閲覧できるだけのものでした。
ヘルプのちょっと高機能版くらいですね。

それがあっという間にWebアプリの実行環境となりました。
ただブラウザ戦争などの影響もあってブラウザ依存やサポートしている機能の差異などもあります。
その辺を調べるサイトもあるので、xxxだと表示が崩れる、期待する動作をしないということを避けることができます。

とりあえず

  1. Google Chrome
  2. Firefox
  3. Microsoft Edge

の最新版でテストしておけば問題ないと思います。

Safariは現在はmacOS版しかないので、どうしてもmacOSを使いたいという要件がなければテスト対象外にして良いでしょう。
また「古いブラウザー(IE 8-10 など)でもサイトがどう動くのかをテストしましょう。」
とありますがとりあえず無視でいいと思います。

(d) 画像編集ソフト
仕事でWebサイトを構築するとデザインはpsd, ai, xd形式で受け取ることが多いでしょう。
どれもAdobeのアプリ用のファイル形式ですね。
Adobeはサブスクリプション形式になって、いわゆる"Adobe税"を支払わなければならない状態です。
フリーランスで開発を受託している人たちなどは結構な負担になりますね。

以前psdファイルを扱うことが出来る無料ソフトを探したのですが以下の三択になりそうです。

  1. GIMP
  2. Paint.NET
  3. Photopea

GIMPは昔からある有名な画像編集ソフトですね。ただ個人的にはあのUIがダメです。どこで何をしていいのか迷います。

Paint.NETはWindowsでのみ動作する画像編集ソフトですね。Windows標準のPaintの延長上で使えます。
Paintでは機能が少なすぎ、PhotoShopなどは機能が多すぎって人がカジュアルに使うには良いと思います。
またプラグインを導入する必要がありますが、psdにも対応できます。
 
PhotopeaはWebベースのアプリケーションです。
画面右側に広告が表示されますが、無料でpsd, ai,xd, sketch, pdf, xcf, rawと様々なフォーマットに対応しています。
UIもフォトショップに似ているので人によってはすぐに使えるようになるでしょう。

 

(e) バージョン管理システム
チームで開発するときはもちろん自分1人であってもソースコードの変更履歴の管理や特定の版から派生して開発をしたり、その結果をマージしたりとなくてはならないツールですね。
ツールとしてはGitが事実状の標準と言ってよいでしょう。2014年出版と古いですがPro Gitという使い方を説明した書籍が無料で公開されています。

Gitに基づいたソースコードホスティングサービスがあります。有名なのは以下の3つですね。
サービス上でソースコードをリポジトリという単位で管理できます。

  1. GitHub
  2. GitLab
  3. Bitbucket
GitHubは最も有名なホスティングサービスでしたが2018年にマイクロソフトに買収されました。
当時はGitHubの優位が崩れてマイクロソフトによる強い支配wが始まるかと危惧しましたが、幸いそうはなりませんでした。
無料版でもプライベートリポジトリが作成できるようになりましたし、コラボレーターの制限もなくなりました。
オープンソースは元より企業での開発においても十分に使えるようになったと思います。 

(f) FTP プログラム
ローカルの開発環境で開発したものは、テスト環境や本番環境にコピー(デプロイ)する必要があります。
開発したファイル一式をFTP(File Transfer Protocol)というプロトコルに対応したアプリケーションでサーバにアップロードします。
この目的では、 FTP の代わりに Git が用いられつつあります
とありますが、Gitにソースコードをコミットしたら自動的にサーバにデプロイするように環境を構築するというのが正確でしょうか。

私はFFFTPを使っています。特に理由はないですが新入社員wのころに使いだして慣れているせいかそのまま使い続けています。

曽田純氏による開発は2011年8月31日をもって終了したようですが、その後は有志によるオープンソースでの開発が続けられているようです、ありがたい。
 
(g) 自動化システム

Webpack、Grunt、Gulp はコードの最小化やテストの実行などのような反復作業を自動的に実行することができます。

Webpackは複数になっているJavaScriptをまとめて1つにするいわゆるモジュールバンドラーのことですね。
Grunt、Gulpはタスクランナーという分類だそうです。
何が違うんだろとググってみました。

タスクランナー ビルドツール モジュールバンドラ 違い 

モジュールバンドラ
モジュールをひとまとめに(bundle)するツール。
=JavaScriptの依存関係を解決して、ひとつのファイルにまとめてくれるツール
 
タスクランナー
フロントエンドの仕事で面倒なタスクを自動的にやってくれる便利なツール 

うん、分からんw

ふむ、ちょっと読みずらいですが抜き出して整理すると以下のようです。

Webpack のようなモジュールバンドラーの主たる目的
  1. それぞれのモジュールの依存関係を解決すること。
  2. それらの複数モジュールを1つファイルとしてまとめる(バンドル)すること。

Gulp や Grunt といったタスクランナーの主たる目的
  1. タスクを自動化すること
  2. Web 製作には様々な細かいタスクがありますが、その中にモジュールバンドルがあります
  3. 他のタスクとしては、ファイルのコピーや結合、JavaScriptやCSSファイルなどの構文チェック、 正しく機能が動作しているかという テストなど、様々なタスクを含めて複合的に実行することができます。
ああ、なるほどタスクランナーが管理するタスクの一つとしてモジュールバンドルがあり、そこでモジュールバンドラーを使うんですね。
 
(h) ライブラリーやフレームワークなど
ライブラリーは、既存の JavaScript や CSS のファイルであり、コードで使用するために、すぐに使える機能を提供しています。フレームワークは、この考えをさらに進めて、ウェブアプリケーションを書くためのカスタム構文を持つ完全なシステムを提供する傾向があります。
私は以下のように漠然と認識していました。
ライブラリ:共通的な機能をまとめたもの。 使える機能が提供されているのでプログラマが実装したい要件に合わせて利用するもの。

フレームワーク:ライブラリをさらに進めて特定の用途(Webアプリケーション、デスクトップアプリ、組み込み系アプリ)の開発のための枠組みを提供するもの。
 
ググってみると決定的な違いは「制御の反転」 にあるようです。
 
ライブラリ
ライブラリを呼び出すのはユーザのコードです。
関数の中で共通機能を呼び出して自分の実装したい機能を実現していきます。
 
フレームワーク
ユーザのコードはフレームワークから呼び出されます。
フレームワークによって作法が違いますが、作法や記法に従って特定のフォルダの下にファイルを追加して、ファイル内にクラスや関数を実装していきます。
そしてその関数を呼び出すのはフレームワーク側の処理です。
 
(i) 他にも便利なツールがたくさんあります!
そうですね。私もブログを書きながら思い出したり、見つけたりした場合は記載しておこうと思います。

 
 

2023年8月15日火曜日

Web技術の学習の開始

Web技術の学習

超今更感がありますが、時間があるのでWeb技術の学習をすることにします。

  1. HTML
  2. CSS
  3. JavaScript

が学習の中心になるでしょう。

またPC版だけでなくMobile版でも適切なデザインに対応するために「レスポンスデザイン」についても学習していきます。
現状では画面の解像度にしたがってコンテンツの並びや見た目をCSSで変えていくだということくらいしか知りません。

学習教材

ホームページ、YouTubeと探せば山のように教材はあるのですが、たくさんありすぎて逆に迷います。

色々探していて見つけたのが以下のサイトです。
MDN Web Docs

MDNはMozilla Developer Networkの略です。

ウェブ標準及びMozillaプロジェクトの開発文書のためのMozillaの公式ウェブサイトである。
MDN Web Docsは開発者向けの資源であり、開発者や技術ライターのコミュニティによって維持されており、HTML5、JavaScript、CSS、ウェブAPI、Django、Node.js、WebExtensions及びMathMLといった様々な話題に多くの文書をホストしている。モバイルウェブ開発者向けに、MDNはHTML5モバイルアプリ、モバイルアドオンの構築、位置認識アプリといった話題に関する文書を提供している。

だそうです、以下を参照
https://ja.wikipedia.org/wiki/MDN_Web_Docs

通り一遍ではなく、開発者や技術ライターの執筆した質の高い記事が期待できそうです。


MDN Web Docsは最高の学習素材です。
というNoteの記事を見つけました。
良記事ですね。

ただ、「MDN Web Docs」は非常に情報量が多くて、どのように活用すればよいかわからない、という方もいらっしゃると思いますので、本記事ではまずは「MDN Web Docs」について簡単に整理した後、私のオススメの活用方法について紹介しようと思います。

まさにそんな感じです。
適宜リンクやまとめはあるんですか、コンテンツが多すぎてどっから手を付けるか迷います。

自分の学びたいことと、この記事をナビにして学習していこうと思います。

phpMyAdminでサイズの大きいデータをインポートする

客先からもらったMySQLのダンプファイルが大きすぎてインポートに失敗しました。

設定変更でインポートできるようになるようです。

phpMyAdminのインポートできる容量を大きくする

サービスプロバイダーを使ってる場合は設定変更する権限がなかったりします。 
今回は、ローカルサーバなのでさっくり設定変更しておきます。

XAMPPを使っているのでApacheのConfigボタンを押下してPHP(php.ini)を選択します。

post_max_size
upload_max_filesize
が40Mになっていました。
インポートファイルが42MBだったのでちょっと足らなかったです。
とりあえず128Mにしておきます。

設定を保存してApacheを再起動

再度ダンプファイルをインポートしましたがエラーとなりました。
DBを事前に作成にしとかないとダメのようです。
適当な名前でDBを作成してインポートします。
 
DBがインポートできました。
 

2023年7月27日木曜日

WordPressを静的HTMLサイトに部分的に組み込む方法(環境構築)

Webサイト全体をWordPressで作っても良いのですがHTMLと組み合わせたい場合があります。
静的なコンテンツ(HTML)と動的なコンテンツ(WordPress)の組み合わせです。

WordPressで書いた記事やブログなどをHTMLに組み込む感じです。

まずは環境構築から、XAMPPを使う前提です。

XAMPPでWordPressの環境設定


1. XAMPPとWordPressのインストール
下記の通りに設定すれば良いです。

XAMPPを使ってWordPressローカル環境を構築する全手順

ただし、WordPressのインストール先は変えます。
対象のWebサイトと同じフォルダにします。
例:
htdocs/testsite/index.html
htdocs/testsite/wordpress/

index.htmlから./wordpressでアクセスする前提です。

2. htmlでPHPを実行できるようにする
色んなサイトには".htaccess"を編集するとありますがXAMPPにはなさそうです。

XAMPP Control PanelでApacheのConfigボタンを押下してApache(httpd.conf)を選択します。

httpd.confの編集


テキストエディタが起動するのでhttpd.confの
<IfModule mime_module>
に以下の記述を追加してApacheを再起動します。
AddType application/x-httpd-php .php .html

確認方法

以下のようなサンプルをtestsiteの下に作成してブラウザでアクセスして

Hello HTML

Hello PHP
と表示すれば問題ありません。


<html>
<body>
<p>Hello HTML</p>

<?php
    print "Hello PHP";
?>

</body>
</html>




2023年6月9日金曜日

Responsive Viewer

レスポンシブデザインに対応するといくつもの解像度に対応する必要があります。

Google ChromeのDevToolsなどで解像度を変えられますが複数のサイズを確認するのは結構大変です。

それらを一度に確認することができるプラグインです。

Responsive Viewer

既存にあればそれを選択、なければサイズとタイプ(iPhone, iPad, Google Chromeなど)を入力して作ることもできます。

それらをまとめて確認できるので便利です。 

PerfectPixel

デザインカンプを元にWebサイトを実装するわけですが、ぴったり合わせるのはなかなか難しいです。 

PerfectPixelというプラグインがあります。

PerfectPixel by WellDoneCode (pixel perfect)

デザインカンプから画像として出力したファイルを読み込んでWebサイト上の上に重ね合わせることで、どれくらいズレているかはっきり分かります。

DevToolsで微調整すればリアルタイムで位置や大きさの調整が出来ます。

2023年5月18日木曜日

Webサイトを作成時に役立つGoogle Chrome拡張機能

Webサイト(フロントエンド)を作成していると、デザインカンプ通りに出来ているか色々確認したくなります。

それに役立つツールを検索してみました。
Google Chrome拡張機能として使うものです。

1. 画面上のオブジェクトの位置やサイズを知る

Designer Tools

以下のサイトで詳しい説明がされています。

「Designer Tools」の使い方:画像や任意の位置のサイズをピクセル単位で測定可能


2. オブジェクトの並びを知る

横方向や縦方向の並びを知るものです。
オブジェクト同士の位置関係を知るために画面上に線を引けます。定規ツールですね。


以下のサイトで詳しい説明がされています。


3. フォント名やサイズを知る

WhatFont

Designer Toolsではフォントを含んだ箱のサイズしか分かりません。テキストのフォント名やサイズを知るためのツールです。

以下のサイトで詳しい説明がされています。

フォントサイズが分かる拡張機能「WhatFont」が便利だよ


4. 色の値を取得する

Webサイトで使っている色の値(カラーコード)を知るためのもです。

ColorZilla




2023年4月12日水曜日

PostgreSQLの日付フォーマット違いでCSVインポート時にエラー

日本から受領したCSVデータをローカルのPostgreSQLにインポートしたらなぜか

date/time field out of range "1/31/2022"

というエラーメッセージが、範囲外って言われても?

Error “date/time field out of range” occurs for MDY date style

えっ?

ひょっとして、 "31/1/2022"って書かないとダメってこと?

これが正解でした。

いやおかしい、私の環境では問題なく、他の担当の環境で発生しました。

同じPostgreSQLでバージョンも15なんですが??? 

釈然としませんが忘備録としてメモしておきます。

 

2023年4月10日月曜日

Laravel 自習 Model、マイグレーションファイルそしてシード

以前の記事でデータベースにアプローチする方法を記載しました。 

  1. DBクラス(クエリビルダ): Controller内に記述します。
  2. Eloquent(ORM) :Modelを生成して使用します。

MVCモデルを使って実装していきたいので、Eloquent(ORM)「エロクアント」の使い方について学んでいきます。

EloquentはORM(Object-Relational Mapping) です。
RDBのテーブルやレコードをPHPのオブジェクトのように扱うことが出来るようになります。
 
公式ドキュメントには以下の記述があります。
Eloquentを使用する場合、各データベーステーブルに対応する「モデル」があり、そのテーブル操作に使用します。Eloquentモデルは、データベーステーブルからレコードを取得するだけでなく、テーブルへのレコード挿入、更新、削除も可能です。
上記の通り、Eloquentを使用するには対象のテーブルに対応するモデルがあり、それに対して操作を行うとのことです。
 
また前回の記事にも書きましたが、モデル名はテーブル名に対応したものにする必要があります。
再度書いておきます。
テーブル名
別の名前を明示的に指定しない限り、クラスの複数形の「スネークケース」をテーブル名として使用します。

 

Modelの作成

とりあえずModelを作ってみます。

Userモデルを作ろうと思ったのですがなぜか最初から存在しています。
Productモデルを代わりに作成します。

$php artisan make:model Product

app/Models/Product.phpが以下のように生成されました。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasFactory;
}

 

マイグレーションファイルの作成

マイグレーションはデータベースのバージョン管理のようなもので、チームがアプリケーションのデータベーススキーマを定義および共有できるようにします。
上記の公式の説明があるようにデータベース特にテーブルのバージョン管理みたいなものです。開発中あるいは開発後でもバグ対応、仕様追加、パフォーマンスのためにテーブル構造は変わっていきます。 
テーブルの変更を適用するためのSQL文を作成して実行しても構いませんが管理が大変になっていきます。
最初からテーブル構造のバージョン管理ができる機能があるのは便利ですね。
変更があってもレポジトリから最新のマイグレーションファイルを取得してartisanコマンドを実行すれば最新の状態になります。 

実際にModel Productに対応したテーブルを作成するためのマイグレーションファイルを生成してみます。

$php artisan make:migration create_products_table

こんな感じでコマンドを実行するとdatabase\migrations/2023_04_10_075612_create_products_table.phpが以下のように生成されました。

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('products');
    }
};

ただこれだけだと、idとタイムスタンプしかないので編集していきます。

プライマリーキーは、product_idにしました。以下のように設定します。

protected $primaryKey = 'product_id';

マイグレーションファイル

$php artisan migrate

を実行すると以下のようにテーブルが作成されました。

コマンド実行してテーブルを新規作成する

DBを確認すると以下のようにテーブルが作成されていました。

作成されたテーブル

シーダーを使った初期データ登録

 
開発を行うに当たってマスターテーブルの初期データやテスト用のデータが必要となります。
 
Product用のシーダーを作成します。
$php artisan make:seeder ProductSeeder
を実行すると
database/seeders/ProductSeeder.phpが生成されました。

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class ProductSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        //
    }
}

上記のようにrun()メソッドがあるだけです。

ここに初期データを記載していきます。Eloquentを使って1件のデータを作成してみます。

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\Product;

class ProductSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        Product::create([
            'product_name' => 'Test1',
            'product_price' => 100,
        ]);
    }
}

$php artisan db:seed --class ProductSeeder

を実行します。

想定したレコードがproductsテーブルに挿入されました。

設定したのは、”product_name”、”product_price” のみです。他のカラムは自動的に設定されました。

プライマリーキーも自動で1が設定されています。


 

2023年4月8日土曜日

Laravel 自習 データベースにアプローチする方法

前回でアプリ用のDBの作成が終わりました。

DB用の接続情報を設定してからModelとマイグレーションファイルを作ってみます。

DB接続情報の記述

.envファイルの11 - 16行目がDB接続情報の記述欄です。

デフォルトでMySQLになっているので、DB名、ユーザ名、パスワードだけを修正すれば良いです。

.envファイルのDB接続情報

 

Modelの作成

フレームワークの中で直接SQL文を書くものもありますが、大体のフレームワークではテーブルを隠蔽してオブジェクトとしてプログラムから操作できる場合が多いですね。
ただテーブル間のリレーションがシンプルなら良いのですが、以前のプロジェクトでサブクエリとか使いまくって酷く歪なテーブルリレーションのプロジェクトに当たったことがあります。
思わず「テーブルの正規化とかスタースキーマとか勉強して出直して来い」って言いたくなるほどでした。そういうプロジェクトには適用しずらいでしょうね。
閑話休題
 
Laravelには2種類のデータベースにアプローチする方法があるようです。
 
DBクラス(クエリビルダ)
 
DBクラスを使う方法
 
ただ、この機能はControllerの中で呼び出すみたいですね。
Controllerの中でDBクラスを呼び出して必要なデータを取得してから、Viewに渡して結果を表示する感じです。
 
use Illuminate\Support\Facades\DB;の機能です。
SQL文をそのまま書きます。
一般形は
$items = DB::命令文の種類('実際のSQL文', パラメータ);
実際のSQLの中に":キー"という書式を埋め込むことができます。

これはSQL文中にある:idのように、あとからそこに値を割り当てるものでプレースホルダといいます。
後からくる値(パラメータで渡す)のために場所を取っておく感じです。
単なる値でも複数の値を配列で渡すこともできます。

例:
  • DB::select('select * from テーブル名 where id = :id', $id);
  • DB::insert('insert into テーブル名 (id, name) values (:column1,:column2)', $param);
  • DB::update('update テーブル名 set column1 = :column1, column2 = :column2' where id = :id, $param);
  • DB::delete('delete * from テーブル名 where id = :id', $id);

クエリビルダを使う方法
この機能もControllerの中で呼び出すみたいですね。
Controllerの中でクエリビルダを呼び出して必要なデータを取得してから、Viewに渡して結果を表示する感じです。
 
上記のDBクラスは直接SQL文が書けるので、SQL文が分かっている人にとっては便利でしょうね。
SQLクライアントを使ってSQL文を実行して想定した結果が得られることを確認してからソースコードにコピペして変数の部分だけパラメータ渡しにすれば良いです。

私的にはこれで全然問題ないのですが、
  • SQL文にパラメータの値を組み込んで最終的なSQL文を生成するので正しいSQL文が実行されているか分かりずらい。
  • 渡す値によっては予想外のSQL文が実行される危険がある。
  • PHPでプログラムを書いているのにDBアクセスのところだけ別の言語で書かないといけないのはストレスになる。
といった理由でクエリビルダが生まれたようです。
DBクラスと違って直接SQL文を書くことはなく、必要なメソッドを呼び出してパラメータを渡すことでSQL文を生成してくれます。
なので最終的なSQL文は表面上には現れません。
 
use Illuminate\Support\Facades\DB;を使います。
 
DB::table(テーブル名) 
でビルダ(\Illuminate\Database\Query\Builder)を取得します。 
ビルダはSQLクエリ文を生成するための機能を提供します。

例:
  • DB::table(テーブル名)->get();
  • DB::table(テーブル名)->insert($param);
  • DB::table(テーブル名)->where('id', $id)->update($param);
  • DB::table(テーブル名)->where('id', $id)->delete();
 
対象のテーブルのビルダを取得して用意されてるメソッドを使って操作するのでSQL文の書き間違いは無くなるでしょうね。
ただクエリビルダで複数テーブルをジョインするような場合はどうするんだろう?
 
Eloquent(ORM)
EloquentはORM(Object-Relational Mapping)で「エロクアント」と読みます。
DBのテーブルやレコードをオブジェクトとして扱える仕組みです。 

Eloquentを使用する場合、各データベーステーブルに対応する「モデル」があり、そのテーブル操作に使用します。Eloquentモデルは、データベーステーブルからレコードを取得するだけでなく、テーブルへのレコード挿入、更新、削除も可能です。

 ようやくModelが出てきました。

モデルは通常app\Modelsディレクトリにあり、Illuminate\Database\Eloquent\Modelクラスを拡張します。make:model Artisanコマンドを使用して、新しいモデルを生成します。
$php artisan make:model モデル名

でモデルを生成できます。

1点注意が必要です。 モデル名はテーブル名に合わせる必要があります。
 例:
モデル名 テーブル名
Flight flights
AirTrafficController air_traffic_controllers
 
公式に以下の説明があります。

クラス名の複数形をスネークケースにしたものが自動的にテーブル名と見なされます。

これに適合しない場合はモデルのtableプロパティに設定します。

テーブル名
上記の例をちょっと見て、どのデータベーステーブルがFlightモデルに対応するかをEloquentに知らせていないことにお気づきかもしれません。別の名前を明示的に指定しない限り、クラスの複数形の「スネークケース」をテーブル名として使用します。したがって、この場合、EloquentはFlightモデルがflightsテーブルにレコードを格納し、AirTrafficControllerモデルはair_traffic_controllersテーブルにレコードを格納すると想定できます。

モデルの対応するデータベーステーブルがこの規約に適合しない場合は、モデルにtableプロパティを定義してモデルのテーブル名を自分で指定できます。
以下の気になる記述が公式にありました。
はっきり言って嫌いですね。 下手なテーブル定義の温床です。
きっちりテーブル設計すれば、”id”なんていう主キーを定義する必要はないはずです。
これについてはアンチパターンとして議論がされているようです。
主キー
Eloquentは、各モデルの対応するデータベーステーブルにidという名前の主キーカラムがあることも想定しています。必要に応じて、モデルのprotected $primaryKeyプロパティを定義して、主キーとして機能する別のカラムを指定できます。
主キーについては、さらに下記の記述があります。
これは問題ないですね。PostgreSQLなどだと主キーにシリアルを設定して複数ユーザが同時にレコード挿入しても自動的にバッティングしない値になることが保証されています。
設計の都合上、非数値にしたい場合でも設定が可能です。
さらに、Eloquentは、主キーが増分整数値であることも想定しています。これは、Eloquentが主キーを自動的に整数にキャストすることを意味します。非インクリメントまたは非数値の主キーを使用する場合は、モデルにpublicの$incrementingプロパティを定義し、falseをセットする必要があります。
この記事では、モデルの作成、マイグレーションファイル作成、シードの作成まで行こうと思っていましたが長くなってきたので次の記事で書くことにます。
 

2023年4月7日金曜日

Laravel 自習 DB作成(phpMyAdmin)

Laravelの実行、デバッグ環境はLaragonにしました。

アプリを起動して画面で右クリック→MySQL→phpMyAdminを選択してもなんか良く分からんWebページが表示されるだけで起動しません。

Laragon で PHP による動的サイトの開発環境を構築

によれば

https://www.phpmyadmin.net/downloads/

ここから最新版をダウンロードして「C:\laragon\etc\apps」に展開すれば良いようです。

フォルダ名は”phpMyAdmin”

もう一度起動すると問題なくログイン画面になります。


ユーザ名:root

パスワード:(空白)

でログインできます。

ログインできました。

適当にDBを作成します。

 

以前書いた気がしますが

https://web2sunny.blogspot.com/2023/03/xamppmysqldb.html

文字コード:utf8mb4
Collation:utf8mb4_bin
で良いと思います。

適当にユーザを作ります。
権限の新規作成からユーザアカウントを作成します。



 

Laravel 自習開始

改めてLaravelの学習を始めます。
バージョンは現在最新の10.xにします。

Breezeとか使わずに自分でイチから機能を組んでいきます。

プロジェクトの作成
ComposerとPHPの環境が必要です。
 

現在の状況

$composer -v
Composer version 2.4.2 2022-09-14 16:11:15 

$PHP -v
PHP 8.0.19 (cli) (built: May 10 2022 08:46:29) ( ZTS Visual C++ 2019 x64 )

Laragonのインストール

Xamppがインストール済でC:\xampp\phpにPathが通っています。

https://laravel.com/docs/10.x/releases
によるとLaravel10はPHPのバージョンが8.1 - 8.2が必要になっています。

ローカルのXampは8.0.19
Xamppのバージョンを上げておきます。
ググると
https://www.tairaengineer-note.com/xampp-update/
実はXAMPPは上書きアップデートを実行することができません。

うわ、めんどくさい

面倒なのでLaragonに変えます。

ここからダウンローダを落として実行します。
日本語にも対応しています。
普通に次へを押すだけです。






 

起動後に、「ルート」ボタンを押下すると
C:\laragon\www
をファイルエクスプローラで開きます。

ここがドキュメントルートみたいですね。

Composerのインストール

最新は2.5.5です。
https://getcomposer.org/
から最新版をダウンロードして再インストールしておきます。

インストーラを起動するとDeveloper modeとかいう謎の選択肢が表示されます。
チェックするとアンインストーラーがダウンロードされないそうです。
未チェックでいきます。っていうかそんな機能いらん。

PHPのパスがXamppの方になっているのでLaragonの配下に変えておきます。

パスを追加するようにチェックします。

Proxyは未チェックで


インストールします。


インストールが完了します。

 

版数の確認、問題ありません。

$PHP -v
PHP 8.1.10 (cli) (built: Aug 30 2022 18:05:49) (ZTS Visual C++ 2019 x64)

$composer -v
Composer version 2.5.5 2023-03-21 11:50:05

Laravelプロジェクトの作成


遠回りしたけどようやくプロジェクトの作成です。
C:\laragon\wwwの下でコマンドを実行します。
$composer create-project laravel/laravel experimental-app


http://localhost/experimental-app/public/
これでデフォルトの画面が表示されます。


 


2023年4月5日水曜日

今後のLaravelの学習に関して

公式のBootcampは正直つまらなかった。
なんか言われるままに作ってお終い。
構造とか何のために何をしてるかの説明はほとんど無し。

とりあえずランダムに覚えたいことや確認したいことを書いておきます。

・MVCに関して
・Routingに関して
・Middlewareに関して
・メールの送信機能に関して
・Auth認証機能の実装

Breezeだと最初からAuth認証機能が実装されていました。
それでも構いませんが自分でも実装できるようにしておいたほうが良いでしょう。
要件によってはロールを分けてアクセスできるページに制限をかけるようなケースもありますから。

・ファイルのアップロード
・ファイルのダウンロード

せっかくだからExcel形式でデータをダウンロードできると良いですね。
プラスPDF形式にも対応したい

・Validationに関して
・Migrationに関して
・Seedに関して
・Bladeに関して

画面を分割して、ヘッダー、フッター、ナビゲーションバーなどを共通化して読み込む感じにする。

・CSSに関して

TailWind, BootStrapの利用に関して

・検索機能に関して

・マルチ言語対応に関して

メニュー、メッセージなどを別ファイルにして読み込めるようにする


・ページネーション

・デバッグ
PHPUnit
VSCode上でデバッグ
ブラウザ上でデバッグ

・フラッシュメッセージの作り方
・Logの残し方
・セッションの管理の仕方
・CSRF保護について
・レスポンシブデザイン対応

とりあえず今のところ思いつくのはこれくらい。

小さくても良いからなんかのWebアプリで実装してみるのが良いでしょうね。


 

2023年4月4日火曜日

Laravel Bootcamp: 09. Conclusion & Next Steps

 最後の章です。
一応体験的なものはこれで終わりみたいですね。

なんとなくコーディングしただけであまり構造や知識が身に付いた感がないのが残念です。

今後の課題として色んな機能が紹介されています。

  •     Automated Testing
  •     Broadcasting (Web Sockets)
  •     Form Request Validation
  •     Queues
  •     Task Scheduling
  •     File Storage
  •     HTTP Client
  •     Database Seeding
  •     Collections
  •     Subscription Billing
  •     Administration Panels
  •     Server Management
  •     Serverless Deployment


この辺で気になるのは

  • Automated Testing
  • Form Request Validation
  • File Storage
  • Database Seeding

これでいったんBootcampは終わりとします。

 

Laravel Bootcamp: 08. Deploying

今まではローカル開発環境で実行してきましたが本番環境へのデプロイを行うようです。

Choosing a provider

デプロイするプロバイダを選択します。
PHPをホスティングを提供するプロバイダはいくつかあるようです。
Webサーバ、データベース、PHPの実行ができる環境が最低限になるでしょう。

Laravel ForgeLaravel Vaporが紹介されています。

Laravel Forge

PHPのウェブアプリをDigitalOcean, Linode, AWSなどのクラウド環境にホスティングするための環境構築を楽にしてくれるツールのようです。

Laravel Vapor
Laravel Vapor を使って Serverless な Laravel アプリケーションをデプロイする
Laravel を AWS Lambda 上で動作させることができる 有料 のツールで、Serverless な Laravel アプリケーションを構築することができるそうです。

Laravel Forge用に以下のプロバイダが紹介されています。

  •     DigitalOcean ($100 free credit available)
  •     Linode ($50 free credit available)
  •     AWS (free tier available)
  •     Vultr ($50 free credit available)
  •     Hetzner
  •     Custom VPS server


AWS以外は聞いたことがないですね。

Connecting to source control

Forgeはソースコード管理システムが必要のようです。
GitHub, GitLab, Bitbucketが紹介されています。
こだわりが無ければGitHubで良いでしょうね。

Connecting to your server provider

Forgeはサーバの構築にプロバイダのAPIキーを必要とするようです。

Creating a server

ソースコード管理システムとサービスプロバイダに接続できるようになった状態でサーバを生成します。
必要な情報を入力してサーバ生成ボタンを押すだけです。

Creating a site (optional)

Forgeは自動的に「デフォルト」サイトを生成するようです。
サーバにパブリックIPアドレス(グローバルIPアドレス)でアクセスできるようです。
簡単に確認するなら、ドメインを取得する必要がなくて便利ですね。

ドメイン名を使いたい時は、「デフォルト」サイトを削除して登録するだけのようです。

Creating a database

「デフォルト」サイトを使っている場合はアプリ用のDBの作成が必須らしいです。

Installing a repository

ちょっとわかりずらいですが、生成したサーバにソースコード管理システムからソースコードをデプロイするんだと思います。

Configuring your environment file

.env.exampleが環境に存在するはずなので、DBあるいはMail関連の設定を行います。

Configuring your deploy script

デプロイのためのスクリプトが自動生成されるようです。
そしてNode の依存関係と Vite を使用しているため、依存関係をインストールしてアセットを構築する手順を追加する必要があるようです。

Running a queue worker (optional)

Queue workerというのは何か不明です。
ググると
Laravelではキューとジョブがあります。
個々の処理がジョブでそれがキューの中に配置されて実行されるのを待っている感じです。
Laravelでジョブとキューを理解する

Laravelのキューワーカー(queue:work)はソースコード反映に再起動が必要だった件
 

Queue workerが実際にキューからジョブを取り出して実行する機能なのでしょう。
Queue workerが動きっぱなしになっているとメモリを消費するし、古いソースコードで動くことになりますね。

Running a task scheduler (optional)

タスクスケジューラ?
cronみたいなもののようですが、ここでなぜ出てくるのか不明です。

Deploying

デプロイボタンを押せば実際のデプロイが始まるようです。


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

Continue to conclusion and next steps...

2023年4月3日月曜日

Laravel Viteでnpm run buildを行っても変更が反映されない

現在は開発環境なのでnpm run devを実行します。Ctrl + Cで止めるまで起動し続けます。
開発中だからどんどんソースファイルが変わっていきますが、TailWind CSSやVue.js等の修正をリアルタイムで変換してブラウザ側で読み込めます。

本番では、ソースコードは固定のはずなので上記処理は不要です。
なのでnpm run buildを実行して問題なく動作するかと思ったら画面が崩れました。

npm run buildの実行結果

画面のデザインが崩れています


ググったらすぐに見つかりました。
Laravel Viteでnpm run buildを行っても変更が反映されない原因と対策
 

npm run devを実行中にhotファイルを作成しますが、npm run devを停止しても残ってしまう場合があるようです。

確かに"hot"ファイルが残ったままですね。

しかも$npm run buildで生成した本番環境用ファイルもpublic/build/assetsの下にあります。 

そのため今回のような現象になったようです。

public配下の状態

まずはさっくり"hot"ファイルを削除します。

そうすると問題なく画面が表示されました。



Laravel再学習

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