最近、PHPのフレームワーク「Laravel」を学んでいるので、学んだことをアウトプットするために、簡易的なつぶやきアプリを開発してみました。
このアプリでは、ユーザーが簡単につぶやきを投稿・編集・削除できるようになっています。また、セキュリティを考慮し、ログインユーザーのみが投稿できる機能も実装しました。
今回は、Laravelを使ってどのようにアプリを作成したのか、その流れを解説します!
1. Laravelでつぶやきを投稿する機能を作成
まず、つぶやきを投稿できるようにするため、Laravelのモデル・マイグレーション・コントローラーを作成しました。
① データベースのテーブル作成
つぶやきを保存するためのテーブルをマイグレーションで作成。
php artisan make:migration create_tweets_table
マイグレーションファイルに、以下のカラムを追加。
Schema::create('tweets', function (Blueprint $table) {
$table->id();
$table->string('content');
$table->foreignId('user_id')->constrained()->onDelete('cascade');
$table->timestamps();
});
② Eloquentモデルの作成
php artisan make:model Tweet
モデル内で、ユーザーと紐づくようにリレーションを設定。
public function user() {
return $this->belongsTo(User::class);
}
③ コントローラーで投稿機能を実装
php artisan make:controller TweetController
TweetControllerに以下のコードを追加し、フォームからの投稿を保存できるようにしました。
public function store(Request $request) {
$request->validate(['content' => 'required|max:255']);
Tweet::create([
'content' => $request->content,
'user_id' => auth()->id(),
]);
return redirect()->route('tweets.index');
}
これで、つぶやきの投稿ができるようになりました!
2. 投稿の編集・削除機能を追加
投稿したつぶやきを編集・削除できるようにします。
① 編集機能の実装
編集画面を作成し、以下のルートを設定。
Route::get('/tweets/{tweet}/edit', [TweetController::class, 'edit'])->name('tweets.edit');
コントローラーで編集処理を実装。
public function update(Request $request, Tweet $tweet) {
$this->authorize('update', $tweet);
$request->validate(['content' => 'required|max:255']);
$tweet->update(['content' => $request->content]);
return redirect()->route('tweets.index');
}
② 削除機能の実装
削除処理を追加。
public function destroy(Tweet $tweet) {
$this->authorize('delete', $tweet);
$tweet->delete();
return redirect()->route('tweets.index');
}
これで、つぶやきの編集・削除ができるようになりました。
3. ユーザー認証(ログイン機能)を実装
つぶやきはログインユーザーのみが投稿可能とするため、Laravelの認証機能(Laravel Breeze)を導入しました。
composer require laravel/breeze --dev
php artisan breeze:install
php artisan migrate
ミドルウェアで、ログインユーザーのみが投稿できるように設定。
Route::middleware('auth')->group(function () {
Route::post('/tweets', [TweetController::class, 'store'])->name('tweets.store');
Route::get('/tweets/{tweet}/edit', [TweetController::class, 'edit'])->name('tweets.edit');
Route::delete('/tweets/{tweet}', [TweetController::class, 'destroy'])->name('tweets.destroy');
});
これで、未ログインユーザーは投稿できず、閲覧のみ可能になりました。
4. アプリのデザインを整える
最後に、BladeテンプレートとTailwind CSSを活用して、デザインをシンプルに整えました。
一覧ページのBladeテンプレート例:
@foreach($tweets as $tweet)
<div class="bg-white p-4 rounded shadow mb-2">
<p>{{ $tweet->content }}</p>
<small>投稿者: {{ $tweet->user->name }} | 投稿日: {{ $tweet->created_at->diffForHumans() }}</small>
</div>
@endforeach
シンプルながら見やすく、使いやすいデザインに仕上げました!
まとめ
今回は、Laravelを使って簡単なつぶやきアプリを開発しました。
- つぶやきを投稿できる機能を実装
- 投稿の編集・削除機能を追加
- ログイン機能を導入し、投稿は認証ユーザーのみ可能に
- デザインを整えて、シンプルで使いやすいUIを作成
Laravelの基礎を学ぶには、実際に動くアプリを作ることが一番の近道です!
これからも、いろいろな機能を追加しながら、さらに技術を磨いていきます。
試してみたい機能があればコメントください!
今後も技術を追求しながらアップデートしていきます!
「こんな機能を試してほしい」「ここを詳しく知りたい」など、皆様のお悩みも随時募集しております!