Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Symfony でサクッと作る REST API サーバー

SAW
February 07, 2025

Symfony でサクッと作る REST API サーバー

OSAKA ENGINEER NIGHT Vol.5 の発表資料です。

SAW

February 07, 2025
Tweet

More Decks by SAW

Other Decks in Programming

Transcript

  1. $(whoami) 氏 名: 加藤 宗 一 郎 (30歳) ハンドルネーム: SAW

    X (旧 Twitter): @azuki_eater 関 西 の IT エンジニア コミュニティの賑やかし担当 ( 自 称) 大 阪在住・愛知出 身 得意分野: Web アプリケーション開発 Laravel, Vue 2 「覚えるのが苦 手 」ではなく 「忘れるのが得意」と 言 い換えては どうだろうか? 今 日 の迷 言
  2. Symfony とは PHP 製の Web アプリケーションフレームワーク OSS で開発されている Symofny 自

    体をコンポーネントとして再利 用 も可能 Laravel は内部に Symfony を利 用 している 3
  3. Symfony CLI のインストール Symfony の開発ツール (GitHub: symfony-cli/symfony-cli) Symfony のプロジェクトや boilerplate

    などを作成 Symfony の開発 用 サーバーを起動 Symfony CLI の補完機能もインストール 前提: Symfony CLI がインストール済み symfony completion --help でインストール 方 法を確認可能 5 symfony self:completion zsh \ | sudo tee $fpath[1]/_symfony brew install symfony-cli/tap/symfony-cli Symfony CLI のインストール (macOS の例) Symfony CLI の補完機能のインストール例
  4. Symfony プロジェクトの作成 Symfony CLI を使ってプロジェクトを作成 symfony new でプロジェクトを作成 Symfony CLI

    でシステム要件を満たしているか確認可能 symfony check:requirements で要件を確認 6 # my-first-symfony の部分は # 自分のプロジェクト名を指定 symfony new my-first-symfony Symfony のプロジェクトの作成 symfony check:requirements Symfony のシステム要件のチェック
  5. Symfony の開発 用 サーバーの起動 Symfony CLI で開発 用 サーバーを起動 前提:

    Symfony のプロジェクトディレクトリに移動済み symfony server:start で開発 用 サーバーを起動 -d オプションでバックグラウンドで起動 localhost:8000 でアクセス可能 symfony server:stop でバックグラウンドのサーバを停 止 7 cd my-first-symfony symfony server:start -d 開発 用 サーバーの起動 symfony server:stop 開発 用 サーバーの停 止
  6. MakerBundler のインストール Symfony MakerBundle を使うと boilerplate からコードを 生 成可能 Laravel

    の artisan の make コマンドのように利 用 できる symfony/maker-bundle をインストール 開発 用 ツールなので --dev オプションを追加 8 composer require --dev symfony/maker-bundle MakerBundle のインストール
  7. Controller の作成 Symfony CLI で Controller の boilerplate を作成 symfony

    console make:controller で Controller クラスを作成 src/Controller 以下に Controller クラスの boilerplate を 自 動 生 成 10 symfony console make:controller ProductController Controller の作成
  8. Controller の概要 11 namespace App\Controller; final class ProductController extends AbstractController

    { #[Route(path: '/example', methods: ['GET'])] public function example(): JsonResponse { return $this->json([ 'message' => 'Hello, Symfony World!', ]); } } #[Route] で Controller のメソッドと URL を 対応付け path: URL のパスを指定 methods: HTTP メソッドを指定 API を呼び出された際に実 行 する処理を Controller のメソッド内に記述
  9. 開発 用 データベースの準備 ORM Pack Component をインストール Doctrine ORM がインストールされる

    PostgreSQL の Docker コンテナの起動環境も 一 緒に 用 意される docker compose up -d で PostgreSQL のコンテナを起動 compose.yaml と .env の設定が追加される 15 composer require symfony/orm-pack ORM Pack Component のインストール
  10. Entity の作成 Symfony CLI で Entity を作成 symfony console make:entity

    で Entity と Repository クラスを作成 Entity の名前とフィールドを interactive に 入力 16 symfony console make:entity Entity の作成
  11. Entity の概要 17 namespace App\Entity; #[ORM\Entity(repositoryClass: ProductRepository::class)] class Product {

    #[ORM\Column(length: 255)] private ?string $name = null; public function getName(): ?string { return $this->name; } public function setName(string $name): static { $this->name = $name; return $this; } } Entity のプロパティ #[ORM\Column] でテーブルのカラムと対応 Entity の getter と setter メソッド
  12. データベースへのマイグレーション Symfony CLI でマイグレーションファイルを作成 symfony console make:migration でマイグレーションファイルを 生 成

    migrations ディレクトリ以下に 生 成される Symfony CLI でマイグレーションを実 行 symfony console doctrine:migrations:migrate でマイグレーションを実 行 18 # マイグレーションファイルの作成 symfony console make:entity # マイグレーションの実行 symfony console doctrine:migrations:migrate マイグレーションの実 行
  13. データの登録と取得処理 EntityManagerInterface を利 用 してデータベースとやり取り データの取得系: getRepository() で取得した Repository のメソッドを利

    用 findAll(), find(), findOneBy() など データの登録系: persist() と flush() で登録 persist() の引数には Entity のオブジェクトを設定 flush() で実際にデータベースに保存 19 $products = $entityManager // Repository の取得 ->getRepository(Product::class) ->findAll(); // まだデータベースには保存されていない $entityManager->persist($product); // ここでデータベースに保存される $entityManager->flush(); データベースからの取得処理 データベースへの保存処理
  14. データの取得・登録処理の実装例 20 final class ProductController extends AbstractController { public function

    __construct(private EntityManagerInterface $entityManager) { } #[Route(path: '/api/products', methods: ['GET'])] public function list(): JsonResponse { $products = $this->entityManager->getRepository(Product::class)->findAll(); return $this->json($products); } #[Route(path: '/api/products', methods: ['POST'])] public function create(): JsonResponse { $product = new Product(); $product->setName('hoge'); // まだデータベースには保存されていない $this->entityManager->persist($product); // ここでデータベースに保存される $this->entityManager->flush(); return $this->json($product); } } Repsitory を取得して findAll() で product テーブルを全件取得 persist() で保存したいデータを指定 flush() で実際にデータベースに保存
  15. まとめ Symfony の環境構築 手 順を説明 最 小 限の API のエンドポイントの作成

    方 法を紹介 データベースを利 用 した API の作成 方 法を紹介 21
  16. 宣伝 その1 PHP カンファレンス名古屋2025 開催予定 日 付: 2025/02/22 ( 土

    ) 開催場所: ウインクあいち 11階 一 般参加チケット発売中 詳細は 公式サイト をご確認ください
  17. 宣伝 その2 PHP カンファレンス関 西 2025 開催予定 日 付: 2025/07/19

    ( 土 ) 開催場所: 神 戸 駅前研修センター 公式 X のアカウントのフォローよろしくお願いします!