lalavel

Lalavelことはじめ・公式日本語版のインストールページの内容を参考に

はじめて、Lalavelを触れるので、しっかり公式の概要を読み解いてみる。
公式日本語版

Laravel(ララベル)は、Taylor Otwell さんが開発した PHP のフレームワーク。

フレームワークは思考のフレームワーク同様、「アプリケーションはこのように開発すべし」という基本的な設計方針を,再利用可能なクラスによって示したもの。開発者はフレームワークの決まりに従って、所定のクラスを実装していくだけで,一定の品質をもったアプリケーションを作ることができる。

Taylor さんは Microsoft の .NET の開発に関わっていた方のよう。
.NETも元々は構想というか、概念的な意味合いも大きいのでここでいうと、.NET Frameworkのことなのかな?

Laravel は、フリーのオープンソースで、MIT ライセンス。
その為、自由に利用できる。
MITライセンスは、数あるライセンスの中で非常にゆるいものとされている。

MITライセンスの要点

  • 「ライセンス文書に記載の著作権表示」と「本許諾表示」を、ソフトウェアのすべての複製または重要な部分に記載する。
  • コードは、現状のまま提供される。保証はない。作者または著作権者は、ソフトウェアに関してなんら責任を負わない。

インストール・サーバ要件

Laravelフレームワークを動作させるには多少のシステム要件があります。
Laravel Homestead仮想マシンでは、要求がすべて満たされています。
そのため、Laravelのローカル開発環境としてHomesteadを活用されることを強く推奨します。

Laravel 公式が提供している Homestead(ホームステード)は、Laravel が動作する開発環境を簡単に構築できるツール。

OS や Web サーバー機能、PHP、データベースなど必要なものが一式入った環境を構築する事ができる。
Homestead は、あくまで開発環境を構築するもので、Laravel (フレームワーク)自体のファイルはありません。

しかし、Homesteadを使用しない場合は、以下の要件を満たす必要があ。
  • PHP >= 7.3
    PHP 7.3以上。

  • BCMath PHP拡張
    任意の精度の演算をサポートするために、PHP は 2147483647 (または 0x7FFFFFFF) までの
    任意のサイズおよび精度の小数をサポートする BCMath を提供します。
    十分なメモリがあれば、文字列表現もサポートします。

  • Ctype PHP拡張
    英数字かどうかを調べる関数。

  • Fileinfo PHP拡張
    FileInfo クラスは、ファイルのコピー、移動、名前変更、作成、オープン、削除、内容の
    追加などの一般的な操作に使用します。

  • JSON PHP拡張
    JSONの拡張。

  • Mbstring PHP拡張
    日本語などマルチバイト文字を扱う為の拡張モジュール。

  • OpenSSL PHP拡張
    OpenSSL 関数

  • PDO PHP拡張
    PDOとは、PHP Data Objectsの略称で、一言で言い表すならば、
    PHPからデータベースのアクセスを抽象的にしてくれるもの。
    公式

  • Tokenizer PHP拡張
    tokenizer 関数は、Zend Engine に組み込まれた PHP tokenizer への
    インターフェイスを提供します。
    以下の関数により、 字句解析レベルの言語処理を行うことなく、
    PHP ソースを解析/修正するツールを作成することが可能となります。

  • XML PHP拡張
    –disable-xmlを指定してXMLサポート を無効にすることができます。
    Apache 1.3.9以降でモジュールとしてPHPを コンパイルする場合、

※PECL(ピクル、PHP Extension Community Library)は、
PHPで利用できる拡張ライブラリ(パッケージ)を提供しているサービス。
なおWindows版では、手動でphp.iniを修正して、あらかじめコンパイル済みの
PECL DLLを組み込むのが一般的な方法である。

インストールする為の設定あれやこれや

LaravelはComposerを依存パッケージの管理に使用している。
Laravelを始める前に、開発機にComposerのインストールが必要になる。

Composer(コンポーザー)は、ライブラリの依存管理ツール。
Composerは作曲者、といった意味を持つ英単語。
Composerを使用すると必要なライブラリを簡単にダウンロードしてくれる。

Laravel を使うには、Taylor さんが作ったライブラリ以外でも、たくさん必要です。
どのようなライブラリが必要かは、Packagist の Laravelに記載されている。
laravel/framework vv8.5.5 の場合は、ざっと下記が使われている。

Requires

php: ^7.3|^8.0
fideloper/proxy: ^4.4
fruitcake/laravel-cors: ^2.0
guzzlehttp/guzzle: ^7.0.1
laravel/framework: ^8.12
laravel/tinker: ^2.5

Requires (Dev)

facade/ignition: ^2.5
fakerphp/faker: ^1.9.1
laravel/sail: ^0.0.5
mockery/mockery: ^1.4.2
nunomaduro/collision: ^5.0
phpunit/phpunit: ^9.3.3

リンクをクリックして必要なライブラリを確認し、一つ一つダウンロード、となると大変。
Composer を使うと、ターミナルから下記のようにコマンドを入力するだけで、依存しているライブラリを vendor フォルダ内に全てダウンロードしてくれます。

composer create-project laravel/laravel --prefer-dist

便利!

この Composer は 2011 年に Nils Adermann さんと Jordi Boggiano さんが開発を始め、2012 年にリリースされたそう。
感謝!
Composer を使うには、[公式サイト] のダウンロードを参考に、インストールしてください。
また、Composer が動作するには PHP 5.3.2 以上が必要(2020年12月現在)。
※CakePHP など他のフレームワークも Composer を使ってインストールするのが一般的。

Laravelインストーラ

最初にComposerを使用し、Laravelインストーラをダウンロードする。

composer global require laravel/installer

皆さんのシステムのどこでlaravel実行ファイルが設置されても動作するように、
Composerのシステム全体のvendor/binディレクトリを$PATHへ登録する。

「PATH を通す」とは?

「PATH を通す」とは、特定のプログラムを「プログラム名だけで実行できるようにする」こと。
もっと言うと、プログラム名だけで実行できるようにするために、PATH という環境変数(設定の一種)に「このプログラムも名前だけで実行できるようにしてください」という値を追加すること。

プログラムは本来なら「フルパス」を指定しないと実行できない。

Windows メモ帳での例

たとえば「メモ帳」は C:\Windows\System32\notepad.exe というフルパスなので、メモ帳を開きたい時は「 C:\Windows\System32\notepad.exe を実行してください」と Windows に頼まなきゃいけない。

そうすると Windowsは
「C: ドライブ、の中にある Windows フォルダ、の中にある System32 フォルダ、の中にある notepad.exe というファイルを実行すればいいんだな?」
と解釈して、実行してくれる。

でもメモ帳を実行したい時に、毎回 C:\Windows\System32\notepad.exe と書くのは大変。
そこでメモ帳に関して PATH を通してあげると notepad.exe と指定するだけでメモ帳が開けるようになる。
PATH を通したおかげで C:\Windows\System32 の部分が自動的に補完されることとなる。

※このディレクトリはオペレーティングシステムにより場所が異なる。
通常は、以下の場所にある。

macOS: $HOME/.composer/vendor/bin

Windows: %USERPROFILE%\AppData\Roaming\Composer\vendor\bin

GNU/Linuxディストリビューション: $HOME/.config/composer/vendor/binもしくは、$HOME/.composer/vendor/bin

グローバルなComposerのインストールパスを見つけるには、ComposerをインストールしたOSのターミナルなどで

composer global about

を実行し、最初の行を確認する。

余談・Windowsで出てくるRomingフォルダはどんなファイル?

Roamingフォルダとはどのようなファイルを保存するんだろう?と気になったので簡単に調べてみました。
Roamingは、「(あてもなく)歩き回る、 ぶらつく、 放浪する」といった意味の英単語。
Roamingフォルダはたくさんのユーザー設定データが集まっている場所。
むやみやたらに消したりするのは危険。

Composer Create-Project

Laravelインストーラ
最初にComposerを使用し、Laravelインストーラをダウンロードします。

composer global require laravel/installer

システムのどこでlaravel実行ファイルが設置されても動作するように、Composerのシステム全体の
vendor/binディレクトリを$PATHへ登録してください。
このディレクトリはオペレーティングシステムにより場所が異なります。

通常は、以下の場所となる。

macOSの場合

$HOME/.composer/vendor/bin

Windowsの場合

%USERPROFILE%\AppData\Roaming\Composer\vendor\bin

GNU/Linuxディストリビューション

$HOME/.config/composer/vendor/binもしくは、$HOME/.composer/vendor/bin

グローバルなComposerのインストールパスを見つけるには、composer global aboutを実行し、最初の行を確認する。

自分はWSLのDebian環境に設定したかったので、その設定方法を調べてみました。

インストールし終えたら、laravel newコマンドにより、
指定したディレクトリに真新しいLaravelプロジェクトを作成できる。
たとえば、laravel new blogを実行すると、blogという名前のディレクトリへ、
必要とするパッケージが全部揃った、真新しいLaravelをインストールすることができる。


laravel new blog

便利!
ログイン、ユーザー登録などの機能を予め組み込んでいるLaravelプロジェクトを生成したい場合は
Laravel Jetstreamをみてみるとよい。

JetStreamには認証画面などのScaffolding(スキャフォールド)が含まれてる。
認証のコア処理部分はFortifyというパッケージを利用している。

JetStreamというラジオ番組、ありますよね。

スキャフォールドとは、元々英語で”足場”という意味。
Webアプリケーション開発に関しては、MVCフレームワークで開発する際に必要なモデルやコントローラー、
ビューをコマンドなどで自動生成してくれる機能のこと。

Laravel Fotifyとは

もともとLaravelは5系までは artisan make:auth というコマンドがあり、
こちらで基本的な認証のテンプレートが生成される仕組みが生成されるようになっていました。
6系からは laravel/ui というパッケージへこの認証のテンプレートを生成する機能が移動されました。
その後8系になって Laravel Jetstream パッケージが出来て、
それに付随するパッケージとして認証をラップした形で Laravel Forify がリリースされました。

参考:Laravel Fortifyとは何なのか(概要,仕組み)

ローカル開発サーバ

PHPがローカルにインストール済みで、PHPの組込み開発サーバを
アプリケーションサーバとして使いたい場合は、serve Artisanコマンドを使用します。


php artisan serve

Artisanコマンドはコマンドラインで実行するLaravel専用の命令を行うことができるコマンド。
このコマンドは、開発サーバをhttp://localhost:8000として起動します。

つまり、自分のローカルの開発機にサーバーを軌道させることができる、ということですね。
より堅牢なローカル開発の選択肢として、HomesteadとValetも利用できる、らしいです。

インストールしたら最初に行う設定たち!

Publicディレクトリ(公開する用のディレクトリ)

Laravelをインストールできたら、Webサーバのドキュメント/Webルートがpublicディレクトリになるように設定する。
このディレクトリのindex.phpは、アプリケーションへ送信された、全HTTPリクエストを始めに処理するフロントコントローラとして動作する。
とにかく、提供したいアプリケーションへのリクエストはこのindex.phpが受け止める形になる、という事ですね。

設定ファイル

フレームワークで使用する設定ファイルは、すべてconfigディレクトリ下に設置する
それぞれのオプションにコメントがついていて、使用可能なオプションを理解するため、ファイル全体に目を通しておくのがオススメとのこと。

ディレクトリパーミッション

Laravelをインストールした後に、多少のパーミッションの設定が必要です。
storage下とbootstrap/cacheディレクトリをWebサーバから書き込み可能にしてください。
設定しないとLaravelは正しく実行されません。Homestead仮想マシンを使用する場合は、あらかじめ設定されています。

アプリケーションキー

次にインストール後に行うべきなのは、アプリケーションキーにランダムな文字列を設定することです。
ComposerかLaravelインストーラを使ってインストールしていれば、php artisan key:generateコマンドが、あらかじめ設定しています。

通常、この文字列は32文字にすべきです。
キーは.env環境ファイルに設定されます。
もし、.env.exampleファイルをまだ.envへコピーしていなければ、今すぐ行ってください。
アプリケーションキーが設定されていなければ、ユーザーセッションや他の暗号化済みデーターは安全でありません!

その他の設定

Laravelのその他の設定は、最初に指定する必要がありません。
すぐに開発を開始しても大丈夫です!
しかし、config/app.phpファイルと、その中の記述を確認しておいたほうが良いでしょう。
アプリケーションに合わせ変更したい、timezoneやlocalのような多くのオプションが含まれています。

以下のようなLaravelのコンポーネントについても、設定しておいたほうが良いであろう。

  • キャッシュ
  • データベース
  • セッション

実際に公開する為に・Webサーバ設定

実際に公開する際に大事になってくるWebサーバ設定機能の設定です。
Webサーバ機能によって、実際にくるhttpリクエストなどを対応することができる。

Laravelは常にWebサーバで設定した「Webディレクトリ」のルートから提供する必要がある。

htpps://www.example.com 

みたいに、URL直下にLalavelで提供するアプリケーションは置かないといけないということですね。

htpps://www.example.com/lalavel

みたいな感じはよくないということですね。

「Webディレクトリ」のサブディレクトリでLaravelアプリケーションを提供しようと試みてはいけません。
そうした試みはアプリケーションの中に存在するセンシティブなファイルを曝してしまう可能性があります。

本来、公開しちゃいけないようなファイルも、公開しちゃう事になるから気をつけて、ということですね。

きれいなURL

URLが、ごちゃつかないようにある程度設定されてこんな風に制御しているよ?
という節になるんでしょうか?

Apache

Nginx(エンジンエックス)はAWebサイトを公開する際に必要な、Webサーバー機能を提供してくれるソフトウェアのこと。

URLパスにフロントコントローラのindex.phpを付けなくても良いように、Laravelはpublic/.htaccessファイルを用意しています。
.htaccessは

.htaccessとはWebサーバーの基本的な動作を、ディレクトリ単位で制御するための。
この後出てくる、Nginxでは使用できない為ほぼApacheでしか使用できない?

レンタルサーバー等でホームページを公開する際にも、.htaccessによっていろいろな機能を実現できることから、どのように役立つか知っておきたいところです。

MVCモデルとは?

LaravelをApache上で動作させるときは、確実にmod_rewriteモジュールを有効に設定し、そのサーバで.htaccessファイルを動作させます。

Laravelに用意されている.htaccessファイルが、インストールしたApacheで動作しない場合は、以下の代替設定を試してください。
GAEでURLを正規化するにはどうしたらいいんだろ。。。
あ、でも.htacess動作してた気がする。

Nginxでの例

Nginx(エンジンエックス)はApacheと同じくWebサイトを公開する際に必要な、Webサーバー機能を提供してくれるソフトウェア。

NginxとApacheとして、ざっくり下記のような違いがある。

Webサーバーに同時に複数のアクセスがあった場合に、以下の動作の違いがあります。

項目 Apache Nginx
同時・複数アクセスへの対処の仕方 1アクセスに対して、1つの対応 複数のアクセスに対し1つの対応にまとまる
アクセス急増時のサーバーへの負荷 いっきに負荷増 アクセスに比例し負荷は急激に増えない
Webサーバー負荷を受けて 遅くなり、ダウンしやすくなる 処理速度は維持し、ダウンしにくい

Nginxを使用する場合は、すべてのリクエストがindex.phpフロントコントローラへ集まるように、サイト設定に以下のディレクティブを使用する。

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

※HomesteadかValetを使用する場合は、きれいなURLの設定は自動的に行われます。
便利!

そして、実際にインストールしようとしたら。。。。

username@pcname:/home$ composer global require laravel/installer

Changed current directory to /home/username/.composer

The "https://repo.packagist.org/packages.json" file could not be downloaded: php_network_getaddresses: getaddrinfo 
failed: Temporary failure in name resolution

failed to open stream: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution
https://repo.packagist.org could not be fully loaded, package information was loaded from the local cache and may be out of date


  [Composer\Downloader\TransportException]
  The "http://repo.packagist.org/p/laravel/installer%2411159cb4c351d5a47356a1b662f36bb32b11ccaf5a95620b4a6f30f8f1637e
  5a.json" file could not be downloaded: php_network_getaddresses: getaddrinfo failed: Temporary failure in name reso
  lution
  failed to open stream: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

require [--dev] [--prefer-source] [--prefer-dist] [--fixed] [--no-progress] [--no-suggest] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--update-with-all-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--] [<packages>]...

username@pcname:/home$

なんか壮大なエラーになったな。。。と思ったら
Cisco AnyConnectを一旦OFFにしてみたら無事インストールいけたっぽい。

以前もCisco AnyConnect接続した状態だと、GCPもコマンド操作でうまくいかなかった事があった。
どのように影響しているかは今のところ謎だけど、何か影響しているんだろうなぁ。

username@pcname:/home$ composer global require laravel/installer

Changed current directory to /home/username/.composer
Using version ^4.1 for laravel/installer
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 12 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-php80 (v1.20.0): Downloading (100%)
  - Installing symfony/process (v5.2.0): Downloading (100%)
  - Installing symfony/polyfill-mbstring (v1.20.0): Loading from cache
  - Installing symfony/polyfill-intl-normalizer (v1.20.0): Downloading (100%)
  - Installing symfony/polyfill-intl-grapheme (v1.20.0): Downloading (100%)
  - Installing symfony/polyfill-ctype (v1.20.0): Loading from cache
  - Installing symfony/string (v5.2.0): Downloading (100%)
  - Installing psr/container (1.0.0): Loading from cache
  - Installing symfony/service-contracts (v2.2.0): Loading from cache
  - Installing symfony/polyfill-php73 (v1.20.0): Downloading (100%)
  - Installing symfony/console (v5.2.0): Downloading (100%)
  - Installing laravel/installer (v4.1.1): Downloading (100%)
symfony/polyfill-mbstring suggests installing ext-mbstring (For best performance)
symfony/polyfill-intl-normalizer suggests installing ext-intl (For best performance)
symfony/polyfill-intl-grapheme suggests installing ext-intl (For best performance)
symfony/service-contracts suggests installing symfony/service-implementation
symfony/console suggests installing symfony/event-dispatcher
symfony/console suggests installing symfony/lock
symfony/console suggests installing psr/log (For using the console logger)
Writing lock file
Generating autoload files
10 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

参考記事

公式の他、下記記事を参考にさせていただきました。感謝です。

「PATH を通す」の意味をできるだけわかりやすく説明する試み

【Laravel超入門】開発環境の構築(VirtualBox + Vagrant + Homestead + Composer)

【入門】Nginx(エンジンエックス)とは?Apacheとの違いと初期設定

例示/実験用として利用できるドメイン名

%d人のブロガーが「いいね」をつけました。