Laravel 基礎知識

1. Laravel と

Laravel は PHP で書かれたオープンソースの Web アプリケーションフレームワークです。2011 年に Taylor Otwell によって作られ、現在では PHP フレームワークの中で最も人気のあるものの一つとなっています。MVC(Model-View-Controller)アーキテクチャを採用しており、ビジネスロジック・データ・表示を分離して開発できます。

1.1 主要な機能
機能説明
Eloquent ORMデータベース操作をオブジェクト指向で直感的に扱える。SQLをほとんど書かずにDB操作が可能
Blade テンプレートシンプルかつ強力なテンプレート構文。HTMLとPHPを綺麗に分離
Artisanコマンドラインツール。コードの自動生成・マイグレーション・キャッシュクリアを効率化
ルーティングRoute::get(‘/users’, …) のような直感的な記述でURLとコントローラーを結びつける
認証(Auth)ログイン・登録・パスワードリセットなどの認証機能を標準装備
マイグレーションデータベース構造のバージョン管理
キューと スケジューラ非同期処理・タスクの定期実行

2.Composer による依存管理

2.1 Composer とは

Composer は PHP の依存管理ツールです。JavaScript の npm、Python の pip に相当します。Laravel 自体も Composer を使ってインストール・管理されます。「アプリの部品調達係」と考えると理解しやすいです

2.2 Composer の3つの役割
  • 買い物リストの管理: composer.json = 「このアプリに必要な部品リスト」
  • 部品の調達と配置: Packagist からライブラリを取得して vendor/ に配置
  • 部品同士の互換性チェック: バージョン矛盾がないか自動確認

2.3 ライブラリの所在
場所役割
Packagist (packagist.org)PHPライブラリのカタログ(Amazonのサイトに相当)
GitHub実際のソースコードの置き場所(Amazonの倉庫に相当)
vendor/ フォルダあなたのPCに取ってきた完成品(自宅に届いた荷物)
ローカルキャッシュ一度落としたものの控え(物置に置いてある予備)
2.4 よく使うコマンド

composer install               # composer.lock通りにインストール
composer update                # 制約内で更新
composer require guzzlehttp/guzzle  # 新規パッケージ追加
composer remove vendor/package      # パッケージ削除
composer dump-autoload         # オートローダーの再生成

3.ライブラリの選定基準

3.1 評価軸(重要度順)
観点確認場所重要度
メンテナンスの活発さGitHubの最終コミット日・Issue対応状況★★★
ダウンロード数・利用実績Packagistの月間DL数★★★
GitHub StarsGitHubのスター数★★☆
ライセンスcomposer.jsonのlicense欄★★★

ドキュメントの質
GitHubのREADME★★☆
Laravel公式・コミュニティ標準か
Laravel News・ブログ記事★★★
依存ライブラリの少なさcomposer.jsonのrequire欄★★☆

印刷・PDF出力 実装ガイドライン

基本方針

このプロジェクトでは、PDF生成ライブラリ(dompdf, snappy, browsershot等)を使用せず、ブラウザの印刷機能(Ctrl+P / Cmd+P)を利用したPDF出力・印刷を採用しています。

  • ❌ PDF生成ライブラリは使用しない
  • ✅ 印刷・PDF化はユーザーのブラウザに任せる
  • ✅ 画面表示(スクリーン)と印刷(プリント)で見た目を明確に分離する
  • ✅ モノクロ印刷を前提に、色に頼らず罫線・太字・濃淡で情報を区別する

2. 用紙サイズの使い分けルール

用紙用途目安列数
A4縦列数が少ない一覧、明細表5〜7列程度まで
A4横中程度の一覧表8〜12列程度
A3横大規模なデータ出力、横長の集計表13列以上

3. 必須実装ルール

3.1 ページ設定(@page)
@page { size: A4 portrait; margin: 15mm 10mm; }
@page { size: A4 landscape; margin: 10mm; }
@page { size: A3 landscape; margin: 10mm; }
3.2 テーブルの基本ルール(最重要)

一覧表の印刷品質を決める核心部分です。以下を必ず守ってください。

  • • table に width: 100%; border-collapse: collapse; を設定
  • • th, td に border: 0.5pt solid #000; を設定
  • • thead を使い display: table-header-group; で各ページに繰り返す
  • • tr に page-break-inside: avoid; で行の途中で改ページしない
  • • 数値列は text-align: right; font-variant-numeric: tabular-nums;
  • • 合計行は font-weight: bold; border-top: 1.5pt solid #000;
3.3 モノクロ前提の配色

色だけで情報を区別しない。太字、罫線の太さ、記号で区別します。

/* 悪い例: 色だけで区別 */
<span class="text-red-500">未払</span>
/* 良い例: 記号+テキストで区別 */
<span class="status">● 未払</span>
3.4 印刷不要要素の非表示
@media print {
  nav, aside, .sidebar, .btn, button, .pagination, .no-print {
    display: none !important;
  }
}
3.2 PDF生成ライブラリの比較例

PDF生成は「鬼門」と言われるほど難しい分野です。文字化けや不安定さの原因の多くは、ライブラリそのものではなく、日本語フォント設定・CSS制限・サーバー環境に起因します。

ライブラリ特徴日本語対応
barryvdh/laravel-dompdf最も定番。HTML→PDFが簡単。PHPだけで動く
CSSの再現度高い。
設定が必要だが可能
barryvdh/laravel-snappySpatie製で信頼性高い。
可能
spatie/laravel-pdfNode.js+Chromiumが必要Node.js+Chromiumが必要可能
3.3 ブラウザ印刷 vs サーバーPDF生成

このプロジェクトでは、PDF生成ライブラリの複雑さを回避するため、ブラウザの印刷機能(@media print)を採用しています。

比較項目ブラウザ印刷サーバーPDF生成
文字化けほぼ起きないフォント設定が必要
CSSの対応最新CSS全て使用可能部分的な制限あり
開発の難易度通常のHTML開発と同じ調整に時間がかかる
自動化・バッチ処理不可可能
メール添付不可可能
サーバー負荷ゼロ(クライアント処理)高い

4. チェックリスト(実装後に必ず確認)

確認項目状態
@page で用紙サイズと余白が指定されている
印刷不要な要素(ボタン、ナビ等)が非表示になる
フォントサイズが pt 単位(本文10pt前後、表9〜10pt)
<thead> <tbody> <tfoot> を正しく使い分け
テーブルヘッダーが各ページに繰り返される
行(<tr>)の途中で改ページしない
すべてのセルに罫線がある
数値列が右寄せ・等幅数字になっている
モノクロ印刷でも情報を区別できる
Chrome の印刷プレビューで複数ページを確認した

5. アンチパターン(やってはいけないこと)

  • ❌ PDF生成ライブラリ(dompdf, snappy 等)を新たに導入する
  • ❌ <thead> を使わずに1行目をそのまま <tr> で書く
  • ❌ 色のみでステータスを区別する(モノクロで読めなくなる)
  • ❌ 印刷時のフォントサイズを px で指定(必ず pt)
  • ❌ テーブル幅を px で固定(% を使う)
  • ❌ position: fixed でヘッダー固定(2ページ目以降で崩れる)
  • ❌ 背景色を使ったのに print-color-adjust: exact を付け忘れる

6.共通ルーチン設計

6.1 推奨ディレクトリ構成
resources/views/
├── layouts/
│   ├── app.blade.php        ← 通常画面用
│   └── print.blade.php      ← 印刷用ベース
└── reports/
├── sales-list.blade.php ← 各帳票はprintレイアウトを継承
    └── inventory-list.blade.php

6.2 用紙サイズの動的切り替え

クエリパラメータで用紙サイズを切り替える実装を推奨します。

Route::get('/reports/sales/print', [ReportController::class, 'print']);
// URL: /reports/sales/print?paper=a3-landscape
6.3 共通CSS(print-common.css)

CSSは必ず外部ファイルに分離し、全帳票で共通の印刷CSSを管理します。インライン記述だと帳票ごとにコピペが増えます。

public/css/
└── print-common.css  ← 全帳票で共通の印刷CSS

ブックマークする パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です