Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Symfony でサクッと作る REST API サーバー
Search
SAW
February 07, 2025
Programming
290
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Symfony でサクッと作る REST API サーバー
OSAKA ENGINEER NIGHT Vol.5 の発表資料です。
SAW
February 07, 2025
More Decks by SAW
See All by SAW
Makefile 入門
azuki
0
87
Effortless API Documentation with Scribe
azuki
0
85
Laravelで手軽にAPIドキュメントを生成する ― Scribe活用術
azuki
0
56
🪝 便利な Property Hooks を 使ってみよう 🪝
azuki
0
93
決済システム超初心者が Stripe に入門している話
azuki
0
140
React Hook Form と Zod によるフォームバリデーション
azuki
0
77
PHP で form-data を POST 以外のメソッドで受け取るには?
azuki
0
90
PHP で学ぶ OAuth 入門
azuki
2
1.4k
EditorConfig を使ってみよう
azuki
1
130
Other Decks in Programming
See All in Programming
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
240
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
530
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.7k
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.9k
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
200
Building a Meta Ray-Ban display app
akkeylab
0
170
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
250
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
130
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
520
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
210
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
480
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
320
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
500
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Being A Developer After 40
akosma
91
590k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
480
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Abbi's Birthday
coloredviolet
3
9.4k
Raft: Consensus for Rubyists
vanstee
141
7.6k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
390
Embracing the Ebb and Flow
colly
88
5.1k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
490
Become a Pro
speakerdeck
PRO
31
6.2k
Transcript
Symfony でサクッと作る REST API サーバー OSAKA ENGINEER NIGHT Vol.5 2025/02/07
SAW
$(whoami) 氏 名: 加藤 宗 一 郎 (30歳) ハンドルネーム: SAW
X (旧 Twitter): @azuki_eater 関 西 の IT エンジニア コミュニティの賑やかし担当 ( 自 称) 大 阪在住・愛知出 身 得意分野: Web アプリケーション開発 Laravel, Vue 2 「覚えるのが苦 手 」ではなく 「忘れるのが得意」と 言 い換えては どうだろうか? 今 日 の迷 言
Symfony とは PHP 製の Web アプリケーションフレームワーク OSS で開発されている Symofny 自
体をコンポーネントとして再利 用 も可能 Laravel は内部に Symfony を利 用 している 3
Symfony で開発するための準備
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 の補完機能のインストール例
Symfony プロジェクトの作成 Symfony CLI を使ってプロジェクトを作成 symfony new でプロジェクトを作成 Symfony CLI
でシステム要件を満たしているか確認可能 symfony check:requirements で要件を確認 6 # my-first-symfony の部分は # 自分のプロジェクト名を指定 symfony new my-first-symfony Symfony のプロジェクトの作成 symfony check:requirements Symfony のシステム要件のチェック
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 開発 用 サーバーの停 止
MakerBundler のインストール Symfony MakerBundle を使うと boilerplate からコードを 生 成可能 Laravel
の artisan の make コマンドのように利 用 できる symfony/maker-bundle をインストール 開発 用 ツールなので --dev オプションを追加 8 composer require --dev symfony/maker-bundle MakerBundle のインストール
小 さな API エンドポイントを作成
Controller の作成 Symfony CLI で Controller の boilerplate を作成 symfony
console make:controller で Controller クラスを作成 src/Controller 以下に Controller クラスの boilerplate を 自 動 生 成 10 symfony console make:controller ProductController Controller の作成
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 のメソッド内に記述
API の動作確認 localhost:8000/example にアクセス $this->json() の引数に渡した連想配列が JSON 形式で返却される 12 localhost:8000/example
に GET メソッドでアクセス レスポンスが JSON で返却されている
ね? 簡単でしょ?
データベースを利 用 した API の作成
開発 用 データベースの準備 ORM Pack Component をインストール Doctrine ORM がインストールされる
PostgreSQL の Docker コンテナの起動環境も 一 緒に 用 意される docker compose up -d で PostgreSQL のコンテナを起動 compose.yaml と .env の設定が追加される 15 composer require symfony/orm-pack ORM Pack Component のインストール
Entity の作成 Symfony CLI で Entity を作成 symfony console make:entity
で Entity と Repository クラスを作成 Entity の名前とフィールドを interactive に 入力 16 symfony console make:entity Entity の作成
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 メソッド
データベースへのマイグレーション Symfony CLI でマイグレーションファイルを作成 symfony console make:migration でマイグレーションファイルを 生 成
migrations ディレクトリ以下に 生 成される Symfony CLI でマイグレーションを実 行 symfony console doctrine:migrations:migrate でマイグレーションを実 行 18 # マイグレーションファイルの作成 symfony console make:entity # マイグレーションの実行 symfony console doctrine:migrations:migrate マイグレーションの実 行
データの登録と取得処理 EntityManagerInterface を利 用 してデータベースとやり取り データの取得系: getRepository() で取得した Repository のメソッドを利
用 findAll(), find(), findOneBy() など データの登録系: persist() と flush() で登録 persist() の引数には Entity のオブジェクトを設定 flush() で実際にデータベースに保存 19 $products = $entityManager // Repository の取得 ->getRepository(Product::class) ->findAll(); // まだデータベースには保存されていない $entityManager->persist($product); // ここでデータベースに保存される $entityManager->flush(); データベースからの取得処理 データベースへの保存処理
データの取得・登録処理の実装例 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() で実際にデータベースに保存
まとめ Symfony の環境構築 手 順を説明 最 小 限の API のエンドポイントの作成
方 法を紹介 データベースを利 用 した API の作成 方 法を紹介 21
ご清聴ありがとうございました
宣伝 その1 PHP カンファレンス名古屋2025 開催予定 日 付: 2025/02/22 ( 土
) 開催場所: ウインクあいち 11階 一 般参加チケット発売中 詳細は 公式サイト をご確認ください
宣伝 その2 PHP カンファレンス関 西 2025 開催予定 日 付: 2025/07/19
( 土 ) 開催場所: 神 戸 駅前研修センター 公式 X のアカウントのフォローよろしくお願いします!