0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LaravelとLivewireでの日報管理システム開発に関する備忘録

Last updated at Posted at 2024-09-16

概要

日報管理システムの開発では、リアルタイムなユーザーインターフェースを提供することが求められました。LaravelのLivewireを使用することで、フロントエンドとバックエンドのコードを統合し、効率的な開発が可能になりました。ここでは、開発中に学んだポイントを備忘録としてまとめます。

1. Livewireを使ったリアルタイムなUIの実現

Livewireを使うことで、ページのリロードを必要とせずにリアルタイムでデータを更新できます。以下は、私が日報作成画面で使用したLivewireコンポーネントの一部です。

namespace App\Livewire;

use Livewire\Component;
use App\Models\DailyReport;
use App\Models\User;
use App\Models\Scheduled;

class DailyReportForm extends Component
{
    public $reportDate;
    public $userId;
    public $content;
    public $scheduledId;

    public function mount()
    {
        $this->reportDate = now()->format('Y-m-d');
        $this->userId = auth()->id();
    }

    public function saveReport()
    {
        $this->validate([
            'reportDate' => 'required|date',
            'content' => 'required|string',
        ]);

        DailyReport::create([
            'date' => $this->reportDate,
            'user_id' => $this->userId,
            'content' => $this->content,
            'scheduled_id' => $this->scheduledId,
        ]);

        session()->flash('message', '日報が作成されました。');
        $this->reset(['content']);
    }

    public function render()
    {
        return view('livewire.daily-report-form');
    }
}

  • ポイント
    Livewireコンポーネントを使うことで、フロントエンドでのユーザー操作をリアルタイムでサーバーに反映できます。この方法により、日報の作成や編集がシームレスになり、ユーザーエクスペリエンスが向上しました。

リアルタイムなユーザーインターフェースではなかった場合どうなるか?

もしLivewireを使わず、リアルタイムなユーザーインターフェースを実現しなかった場合、次のような問題が発生する可能性があります:

  1. ユーザー体験が低下する
    ページのリロードが必要な場合、ユーザーは毎回データの更新が行われるたびに待たされることになります。これにより、操作感が鈍くなり、特に日報のように頻繁に入力・更新が行われるアプリケーションでは不便を感じる可能性が高まります。
  2. 操作の連続性が途切れる
    リアルタイムでない場合、ユーザーがフォームを送信してからページがリロードされるまでの間に、入力した内容や状態が一時的に見えなくなります。これにより、ユーザーの操作が中断され、作業効率が低下します。
  3. サーバー負荷が増加する
    ページのリロードごとにサーバーへ新たなリクエストが送信されるため、リアルタイム更新を行わない場合に比べてサーバーへの負荷が増えます。リアルタイムUIでは、必要なデータだけを更新するため、サーバーリソースの効率的な利用が可能です。

Livewireを使うことで、こうした問題を回避し、フロントエンドとバックエンドのコードを統合してシンプルに保つことができました。Livewireは、Bladeテンプレート内でのリアクティブなUIをサポートし、データ更新のためにページ全体をリロードする必要がないため、開発が容易で、ユーザー体験も向上します。

2. 入力データのバリデーションとエラーハンドリング

日報の入力データに対して適切なバリデーションを行い、エラーメッセージをユーザーに明確に伝えることが重要です。

$this->validate([
    'reportDate' => 'required|date',
    'content' => 'required|string',
]);

  • 備忘ポイント
    入力データのバリデーションを行うことで、不正なデータが保存されるのを防ぎます。Livewireのvalidateメソッドを使用することで、エラーメッセージを自動的に生成し、ユーザーにわかりやすく表示します。

3. 関連データの自動取得と表示

日報の作成時に、ユーザーに関連する予定(Scheduled)データを自動的に取得し、表示することで入力の手間を省く工夫をしました。

public function mount()
{
    $this->reportDate = now()->format('Y-m-d');
    $this->userId = auth()->id();
    // ユーザーに関連するScheduledデータを取得
    $this->scheduledId = Scheduled::where('user_id', $this->userId)
                                  ->where('date', $this->reportDate)
                                  ->value('id');
}

  • 備忘ポイントmountメソッドを使って、コンポーネントが初期化される際に必要なデータを取得します。これにより、ユーザーにとって使いやすいインターフェースを提供できます。

4. ユーザーフィードバックの実装

データ保存後にユーザーにフィードバックを与えることで、操作が成功したことを明示的に伝えます。

session()->flash('message', '日報が作成されました。');

  • 備忘ポイント
    フラッシュメッセージを使用して、ユーザーに保存の成功を伝えることで、安心感を与えます。このようなフィードバックは、ユーザーエクスペリエンスを大幅に向上させる重要な要素です。

5. 今後の改善点

  • UIのさらなる改善

    ユーザーからのフィードバックをもとに、UIをさらに改善し、より直感的で使いやすい日報作成画面を目指します。

  • パフォーマンスの最適化

    コンポーネントの再レンダリングを最小限に抑え、パフォーマンスを向上させるための最適化を検討します。

結論

日報管理システムの開発を通じて、Livewireの強力なリアルタイム機能を活用する方法を学びました。JavaScriptフレームワークを使わずに、シンプルなリアルタイムUIを実現できるLivewireは、今後もLaravelを使った開発で活用していきたいツールです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?