この記事では,Laravelで実用的なWebアプリケーションを簡単に開発する方法をご紹介します.特に,学生のポートフォリオとしてオススメの内容になっていますので,ぜひ最後までご覧ください.
導入:Laravelとは
Laravel(ララベル)とは,PHPをベースにしたWebアプリケーションフレームワークです.ログイン機能やCRUD(データベースと連携したデータ作成・表示・更新・削除)などを簡単に実装することができます.
他にも有名なPHPのフレームワークとして,Cake PHPやSymfonyなどがあります.
続いて,PHP以外も含めた他のフレームワークと比較したメリット・デメリットについてご紹介します.
・自由度が高い
・ライブラリ,パッケージが豊富
・Eloquent ORMにより,SQLを書かずにDB操作できる
・処理が重い
・コードが複雑化しやすい
・トレンドとしては少し古い
自由度の高さ
フレームワークの中では,比較的コーディングルールの縛りが寛容であり,自由度は相対的に高いと言えます.しかし,自由度の高さとコードの複雑化は表裏一体の関係にあり,それぞれのエンジニアが思い思いにソースコードを書いた結果,プロジェクト全体としてコードの複雑化に繋がります.
今回のように,個人開発の範疇では特に大きな影響は無いかと思います.
パッケージやライブラリの充実
Laravelは,Webアプリケーションでよく使用される機能(ユーザ認証など)がパッケージやライブラリとして提供されており,充実度も高いと言えます.
特に,バックエンドのロジックが複雑化しやすい認証機能も,コマンドを数回実行するだけでソースコードを書くことなく,簡単に実装することができます.具体的な実装方法については,以下の記事でご紹介しています.
Eloquent ORM
Eloquent (エラクウェント) ORMとは,Laravelに組み込まれているORM(Object-Relational Mapping,オブジェクト関係マッピング)です.
SQLの代わりにシンプルな記述で,オブジェクト指向の記述によりデータのCRUD(作成・取得・更新・削除)処理を行うものです.
例えば,以下のSQL
SELECT *
FROM courses
WHERE user_id = ?
AND (registered = 1 OR acquired = 1);は,Eloquent ORM で次のように記述することができます.
$courses = Course::where('user_id', $userId)->where(function ($query) {
$query->where('registered', true)->orWhere('acquired', true);
})->get();SQLで慣れている人にとっては,学習コストの増大に繋がるため,かえってデメリットに感じるかもしれません.
トレンドとしては少し古い(と感じる人もいる)
人によって評価が分かれるところですが,トレンドとしては少し古いと考える人も少なからずいるようです.
Laravelによる開発は,LAMP(Linux+Apache+MySQL+PHP)という昔ながらの技術スタックにカテゴライズされます.
一方で,近年はMERN(MongoDB+Express+React+Node.js)スタックなどに代表されるフロントエンドとバックエンドを切り分けて開発を行う方式が主流になりつつあります.
とは言え,WordPressなどの世界を代表するCMSの多くがLAMPスタックで開発されていることもあり,依然としてPHPの市場シェアは高水準を維持しています.また,LaravelはPHPベースのフレームワークの中でもとりわけ根強い人気を誇っており,ドキュメントの多さや需要の多さを踏まえると,おすすめのフレームワークの一つであると言えます.
今回開発するアプリ
今回は,上記の特長を活かして学生向けのポートフォリオということで,大学等で使用されている教務システム(Webアプリケーション)の開発を行いたいと思います.
皆さんが履修登録や成績照会などで普段からお世話になっているであろうあのシステムです.もちろん,実用に耐えるレベルのアプリケーション開発ともなれば,機能面やセキュリティ,バリデーション(不整合チェック)など検討すべき事項が山のようにあるため,困難を極めますが,それっぽいアプリ(もどき)であればある程度簡単に作ることができます.
連載記事として,チュートリアル形式で順を追って解説しますので,ぜひ最後までご覧いただけると幸いです.
なぜ教務システム?
ポートフォリオですから,実用・実践的なWebアプリを開発したいところですが,実際に企業が使うような会計システムや勤怠管理システムなど学生にとって馴染みの薄いアプリをいきなり開発するのは,ハードルが高くなってしまいます.
そこで,学生にとって馴染みのあるWebシステムと言えば,履修や成績を管理する教務システムではないでしょうか? 普段使い慣れているシステムであれば,UIやスキーマ(データの構造),ロジックなどのイメージが湧きやすいため,開発の難易度を下げることができます.
また,教務システムはユーザ認証やCRUD等の処理を多用するため,Laravelの特長を最大限に活かしながら,実践的なWebアプリを作ることができます.
完成形のイメージ
普段使っている教務システムを思い浮かべてみましょう. ロール(役割)別に以下の機能を列挙することが出来るかと思います.
・科目管理(各科目情報の作成・更新・削除)
・ユーザ管理(教員,学生の追加・異動反映・削除)
・事務連絡の通知
・成績修正,成績強制入力
・時間割や各ターム,行事予定(テスト期間,成績報告期間,成績公開日)の設定 等
・履修学生情報の参照(学生名簿を帳票出力)
・成績報告
・出欠管理
・アンケート,課題管理
・履修登録
・時間割参照
・成績情報参照
・アンケート,課題提出
上記は,あくまでも代表的な機能を列挙したものであり,全ての機能を網羅的に記述しているわけではありません.また,上記に列挙した機能の中から,いくつかピックアップして実装方法をご紹介します.(全機能の実装をご紹介するわけではありませんので,あらかじめご了承ください.)
スクリーンショット
完成形のイメージをアプリのスクリーンショットとともにご紹介します.
注)現時点での構想であり,細かいデザインや仕様については変更する場合があります.
ログイン画面

Laravelの認証基盤とSimpleSAMLphpによるSAML認証基盤を組み合わせたものになります.
成績情報参照(学生)
科目テーブルと履修テーブルのリレーションにより,以下の表をアプリ上で動的に生成することができます.

成績報告(教員)
成績報告(教員向け)機能です.ここで報告された成績が上記の成績情報参照画面に反映されます.
こちらも同様に,科目テーブルと履修テーブルのリレーションにより,以下の入力画面をアプリ上で動的に生成することができます.

時間割(学生)
年度・学期別に時間割を表示させることができます.



