MacでLaravel + PHP + Composer + MySQL を使って簡単なメモアプリを作成する手順

# MacでLaravel + PHP + Composer + MySQL を使って簡単なメモアプリを作成する手順

この記事では、Mac環境で Laravel + PHP + Composer + MySQL を使って「メモアプリ」を最小構成で作成する手順を紹介します。

## ✅ 前提環境
- macOS（Ventura 以降推奨）
- Homebrew インストール済み

## 1. 開発ツールのインストール

### PHP
```bash
brew install php
```

### Composer
```bash
brew install composer
```

### MySQL
```bash
brew install mysql
brew services start mysql
```

### Laravelインストーラ（任意）
```bash
composer global require laravel/installer
```

> ※ パスが通っていない場合は `~/.zshrc` に `export PATH="$HOME/.composer/vendor/bin:$PATH"` を追記


## 2. Laravel プロジェクト作成

### 最小構成で作成
```bash
composer create-project laravel/laravel php-memo-app
cd php-memo-app
```

## 3. .env 設定（MySQL 接続）

```dotenv
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=php_memo_db
DB_USERNAME=root
DB_PASSWORD=
```

MySQLにデータベースを作成しておく：
```sql
CREATE DATABASE php_memo_db;
```

## 4. メモ用マイグレーション作成
```bash
php artisan make:model Memo -m
```

### `database/migrations/xxxx_create_memos_table.php`
```php
public function up()
{
    Schema::create('memos', function (Blueprint $table) {
        $table->id();
        $table->string('title', 100);
        $table->text('text');
        $table->timestamps();
        $table->softDeletes();
    });
}
```

```bash
php artisan migrate
```

## 5. ルーティング設定
### `routes/web.php`
```php
use App\Http\Controllers\MemoController;
Route::resource('memos', MemoController::class);
```

## 6. コントローラー作成
```bash
php artisan make:controller MemoController --resource
```

### `app/Http/Controllers/MemoController.php`
```php
use App\Models\Memo;
use Illuminate\Http\Request;

public function index() {
    $memos = Memo::all();
    return view('memos.index', compact('memos'));
}

public function create() {
    return view('memos.create');
}

public function store(Request $request) {
    Memo::create($request->only(['title', 'text']));
    return redirect()->route('memos.index');
}

public function edit(Memo $memo) {
    return view('memos.edit', compact('memo'));
}

public function update(Request $request, Memo $memo) {
    $memo->update($request->only(['title', 'text']));
    return redirect()->route('memos.index');
}

public function destroy(Memo $memo) {
    $memo->delete();
    return redirect()->route('memos.index');
}
```

## 7. モデル設定
### `app/Models/Memo.php`
```php
class Memo extends Model
{
    use SoftDeletes;
    protected $fillable = ['title', 'text'];
}
```

## 8. Blade テンプレート作成

`resources/views/memos/` に以下の3ファイルを作成：
- `index.blade.php`（一覧）
- `create.blade.php`（作成）
- `edit.blade.php`（編集）

```blade
<!-- index.blade.php -->
<h1>メモ一覧</h1>
<a href="{{ route('memos.create') }}">新規作成</a>
<ul>
@foreach ($memos as $memo)
    <li>
        {{ $memo->title }}
        <a href="{{ route('memos.edit', $memo) }}">編集</a>
        <form method="POST" action="{{ route('memos.destroy', $memo) }}">
            @csrf @method('DELETE')
            <button>削除</button>
        </form>
    </li>
@endforeach
</ul>
```

```blade
<!-- create.blade.php -->
<form method="POST" action="{{ route('memos.store') }}">
    @csrf
    <input name="title" placeholder="タイトル">
    <textarea name="text"></textarea>
    <button>保存</button>
</form>
```

```blade
<!-- edit.blade.php -->
<form method="POST" action="{{ route('memos.update', $memo) }}">
    @csrf @method('PUT')
    <input name="title" value="{{ $memo->title }}">
    <textarea name="text">{{ $memo->text }}</textarea>
    <button>更新</button>
</form>
```

## 9. アプリを起動
```bash
php artisan serve
```

ブラウザで `http://localhost:8000/memos` にアクセスすれば、
一覧 → 作成 → 編集 → 削除 の一連の流れが確認できます。

---

## ✅ まとめ
この手順では、Vue/React、認証、JSビルドなどの余計な要素を省いて、Laravel本来のシンプルなMVC構成だけで**「純粋なメモCRUDアプリ」**を作成しました。

Qiitaなどでシンプルなサンプルコードを探している方の参考になれば幸いです。