サマリー
PHPは、サーバーサイドで動作するスクリプト言語であり、主にWebアプリケーションの開発に使用されるものとなる。PHPは、1995年にRasmus Lerdorfによって開発され、現在はオープンソースのコミュニティによって開発、保守されている。
PHPは、動的なWebページの生成やデータベースの操作、ファイルのアップロードやダウンロードなどの機能を実現するために広く使用されており、HTMLに埋め込むことができるので、Webページ内でPHPスクリプトを直接実行するという使い方もできる。また、WordPress、Joomla、Drupalなどのような人気のあるWebアプリケーションのフレームワークとしても広く使用されており、多くのオペレーティングシステムで動作することができ、かつ多くのデータベースやWebサーバーとの統合が容易であるため、Webアプリケーション開発に適している言語として認織されている。
PHPでは、さらにWebアプリケーション開発を効率化するために、Laravel、Symfony、CodeIgniter、CakePHP等のアプリケーションフレームワークと呼ばれるWebアプリケーション用のツールや機能を提供するソフトウェアを持つ。
ここでは「PHPフレームワークLaravel Webアプリケーション開発」をベースにこのPHPのアプリケーションフレームワークであるLaravelについて、その仕組みと具体的な実装について述べる。
今回はLaravelの概要と開発環境設定まで述べる。
Laravel概要
Laravel(ララベル)は、Taylor Otwell氏が開発を進めているPHPのフレームワークとなる。PHPにはCakePHPやSymfony、Codeigniter、Zend Frameworkなど多くのフレームワークが存在するがLaravelは比較的後発フレームワークながら、他の多くのフレームワークを凌ぐ支持を得ているものとなる。
Laravelの特徴としては学習コストの低さがある。たとえばLaravelの特徴的な機能の一つであるFacade(ファサード)を使うと、PHPのstaticなクラスメソッドをコールする容量で各機能を利用できる。
//セッションファサードを使ってキー値を取得する。
Sname = \Session::get("name");
上記のコードは、一見するとSessionのクラスメソッドを読んでいる様に見えるが、実際は別クラスのインスタンスメソッドを実行している。フレームワーク内部の複雑な仕組みをうまく遮蔽して、使いやすいインターフェースを提供している。
次の特徴としてLaravelはコア部分にSymfony Componentを使用しているというものがある。Symfonyは、古くからさまざまなシステム開発に利用され、実績があるフレームワークとなる。Laravelはこの高い信頼性を持つSymfonyの上に成り立っている。
さらにLaravelは多くの機能を持つフレームワークとなる。ルーティングやコントローラ、ビュー、ORM(Object/Relational Mapping)などの基本的な機能のほか、パスワードやOAuthによる認証、イベント、キュー、ユニットテスト、DIコンテナなど充実した機能を備えている。また、サービスプロバイダとサービスコンテナで、コアクラスの差し替えや機能追加が容易なことも特徴の一つとなる。
ここでLaravelの構成の概略について述べる
インストール後のLaravelは、app/Http配下にControllersディレクトリ、resourceは以下にviewsディレクトリが作成されるが、ディレクトリ配置は強制されるものではなく、Laravel自体が各機能の依存性やパッケージの管理にComposerを使用しており、クラスをオートロードて積さえすれば、ディレクトリ構成は開発者が自由に定められる形となっている。
MVC(MOdel View Controller)パターンでの開発はもちろん可能だが、そのほかにもADR(Action Dpmain Response)やリポジトリパターンを使用したり、レイヤードアーキテクチャやヘキサ後なるアーキテクチャといったドメイン駆動設計の文脈で採用されるアーキテクチャも利用できる。開発者が作るWebアプリケーションはその種類も規模もさまざまになるが、Laravelでは開発チームに即した手法やアプリケーションの方針に沿って開発を進めることができる。
Laravelの開発環境構築(Laravel Sail)
次にLaravelを動作させるための開発環境構築について述べる。
Laravelの環境構築に関しては、macOSもしくはWindows上に仮想環境を構築し、その上でLaravelが動作する環境を構築するものとなる。ここではまず代表的な2種類の方法、Laravel SailとHomesteadによる実行環境の構築について述べる。
Laravel Sailは、Laravelの実行に必要な基本構成(PHP、ビルトインWebサーバ、MySQL)とキャッシュ向けミドルウェアのRedis、簡易メールサーバーのMailhog、SeleniumやNodeを含み、Dockerとともに利用する動作環境となる。
HomesteadはLaravel Sailに含まれるソフトウェアのほか、nginx Webサーバー、PostgreSQLなどの複数のRDBMSやmemcached、Gulpを含むNodeなどがセットになっている。
Laravel Sailは標準で必要なソフトウェアが揃い、Homesteadと比較して軽快に動作することが利点となる。Homesteadは、LaravelアプリケーションをVagrantで動かすためのyamlファイルの編集やコマンドライン操作が比較的多く、Homesteadが利用する仮想環境(Vagrant)の仕組みに精通したユーザーには馴染みやすい構築手段となる。Laravel Sailより多くのソフトウェアが含まれているのも特徴となる。
Docker環境立ち上げ
ここでは、Laravel Sailを用いた環境構築について述べる。Laravel SailはLaravelが公式に提供している開発環境となる。Dockerと呼ばれるツールを利用して、Laravelの開発環境を簡易に構築することができる。
Dockerは、コンテナと呼ばれる仮想環境を作成・実行できるソフトウェアで、仮想環境PFであるVurtual Boxと比較して軽量で高速に動作できることが特徴となる。また、サーバーやインフラリソースやミドルウェア、各種環境の設定をコード化して管理でき、そのコードから環境を容易に再現することも可能となる。この仕組みを利用することで、開発環境とプロダクション環境のOSやミドルウェア設定などを合致させることが容易であるため、近年はさまざまなWebサービスにおいて利用が広がっている。
このDockerを提供しているDocker社は2020年にエンタープライズ向けの製品を他社へ売却し、デベロッパー向けの製品展開にフォーカスするという大きな戦略転換をしており、それ以来DockerコンテナのリポジトリサービスであるDocker HubとDocker Desktopが主力製品として、Docker Hubについては個人向けの無料プランを残しつつ有料化を進め、Docker Desktopも個人向けの無料プランを残しつつ、250名以上もしくは11億円以上の企業には有料とした。(2019年9月より)価格としては月額$5、$7、$22の3種類となる。
Laravel Sailは、Dockerの仮想コンテナ上でLaravelアプリケーションを実行する。まずはLaravel Sailの動作に必要となるDockerをセットアップする。なお、window環境でDcokerを動作させるには、64bit版windows10以上のOSが必要となる。
dockerのインストールは、dockerの「get started」にアクセスする。macの場合は「see docker desktop for mac」windowsの場合は「see docker desktop for windows」にそれぞれ進み指示に従いインストールを行う。
macの場合はCUPが「intel chip」と「apple silcon」のケースに分かれているが、それぞのチップのバージョンのアプリを「download docker desktop for mac」の下のボタンから選択してダウンロードし、アプリケーションフォルダーに移動させれば動作させることができる。
windowsの場合は同様に「download docker desktop for windows」の下のボタンを選択してダウンロードし、「install Docker Desktop on Windows」の指示に従い設定を行う。windowsの場合はmacの場合と異なり一手間必要で、以下の4つの手順が必要になる。
- docker desktopのインストール
- windows subsystem for linux(WSL)のインストールと設定
- microsoftのページよりx64マシン用WSLLinuxカーネル更新プログラムパッケージをインストール
- linuxサブシステムのインストールと設定
- コマンドラインで操作するためのwindows powershellを管理者権限から開く(windowsメニューから「windows PowerShell」を右クリックし「管理者として実行する」を選んで実行)
- windows subsystem for linuxオプション機能を有効にするため、Powershellに下記のコマンドを入れてenter
> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux/all /norestart > dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart >wsl --set-default-version 2
- linuxサブシステムをdockerで利用するための設定
- windows上で動作させるLinuxサブシステムをインストール(Microsoft Storeにアクセスして「Ubuntu」をクリックしてインストール)
- インストールしたLinuxサブシステムをDockerに認織させるための設定として、docker desktopのメニューバーのアイコンをクリックしてSetting画面を表示し、メニュー「General」を選択し、「Use the WSL 2 based engine」にチェックが入っていることを確認
- 続いて「resiuece」→「WSL INTEGATION」をいリックし、インストールしたLinuxサブシステム(今回はubuntu)にチェックを入れ、「Apply&Restart」をクリックしてDockerを再起動する。
Laravel Sail
Dockerのインストールおよび設定が終わったら、Laravel Sailをダウンロードする。まずコマンドラインからユーザーのホームディレクトリ配下に「laravel_docker」の名前でディレクトリを作成し、そのディレクトリ内にダウンロードする。
//Laravel Sailのダウンロード
#ホームディレクトリに移動
$ cd
#[Laravel_docker]ディレクトリを作り、移動
$ mkdir laravel_docker
$ cd laravel_docker
# curlコマンドを利用してLaravel Sailをダウンロード
$ curl -s https://laravel.build/sample | bash
ダウンロード中、ディレクトリの権限を変更するためにパスワードを入力する。最終的に書きのメッセージが表示されればダウンロードは完了
Thank you! we hope you build something incredible, Dive in with: cd sample && ./vendor/bin/sail up
laravel_dockerディレクトリ真下にsampleディレクトリが作成され、sampleディレクトリ内にLaravelのプログラムファイル一式が入っている。
Laravel Sailのダウンロードが完了したところで、早速Laravel Sailを起動してLaravelを動かす。コマンドラインで前述のsampleディレクトリに移動し、./vendor/bin/sail up -dコマンドを実行する。
//Laravel Sailの起動コマンド
# sampleディレクトリに移動しきどきどう起動コマンドを実行
$ cd sample
$ ./vendor/bin/sail up -d
コマンドを実行すると下記の様なメッセージが表示され、起動処理が始まる。初期起動は、必要なファイルのダウンロードが行われるため、数分程度の時間を要する。「sample」から始まる6つのコンテナがいずれも起動し「done」が表示されたら起動完了。
Laravel Sailの起動が完了したら、webブラウザで「hyyp://localhost」にアクセスするとLaravelのWelcome画面が表示される。
Laravel Sailの終了はコマンドラインの画面で、./vendor/bin/sail downを入力する。
Laravelのコマンドでは、「sail up」でコンテナが起動される。「sail up -d」はコンテナをバックグラウンドで起動することとなる。またコンテナの終了は「sail down」で実現できる。
次回は具体的なアプリケーションの構築の概略について述べる。
コメント
[…] Laravelを使ったwebページ開発(1) Laravel概要と環境設定まで […]
[…] Laravelを使ったwebページ開発(1) Laravel概要と環境設定まで […]
[…] Laravelを使ったwebページ開発(1) Laravel概要と環境設定まで […]
[…] 「PHPフレームワークLaravel Webアプリケーション開発」より。前回は、Laravelの環境設定まで行ったの行った。今回はそれらを使ってのアプリケーションの構築の概略について述べる。 […]