SlideShare a Scribd company logo
1 of 18
Download to read offline
Laravelのテンプレートエンジン
Bladeの機能
Who are you?
庄埜 詩織
株式会社chatbox エンジニア
Shono Shiori
まだまだ勉強中
❖ テンプレートとデータモデルの2つでHTMLを生成する
 (デザインとロジックの分離)
❖ 分業しやすい、使い回し◎、セキュリティ◎
テンプレートエンジンとは
Data
(ロジック)
Template
(デザイン)
Document
Templating
Engine
※図は「PHP+MySQLマスターブック P268」を参考にしました。
Bladeの基本
❖ Laravelのテンプレートエンジン
❖ ビューに生のPHPを書いてもOK
❖ 拡張子は.blade.php
❖ resources/views ディレクトリの下に置く
❖ コメントは {{--コメント--}} で書く
 (HTMLには吐き出されない)
データの表示
テンプレートエンジンの
一番のポイント
if文・ループ文
{ } や ( ) は使わず、
@ if といった書き方でOK
さいごに @endif を忘れずに
便利な機能
Stacksで他のビューにpush
クラスのメソッドが使える
Blade間の共通部品も作れる
おしながき
Laravel 5.2
新機能も !!
レイアウトの継承
ヘッダー、フッターなど
レイアウトを部品化して
使いまわせる
1 22 3
4
データの表示
Route::get('greeting', function () {
return view('welcome', ['name' => 'Samantha']);
});
Hello, {{ $name }}.   // 出力結果: Hello, Samantha. ・・・①
The current UNIX timestamp is {{ time() }}. ・・・②
Hello, @{{ name }}. // 「 Bladeの {{}} だ」と認識される ・・・③
blade.php
※XSS(クロスサイトスクリプティング):他人のウェブサイトへ悪意のあるスクリプトを埋め込むこと。
① タグのまま出力されるので XSS 対策になる
② PHP関数もそのまま埋め込める
③ JSフレームワークを使う時は @をつける
route.php
❖ デフォルト値の設定が可能
// 3項演算子
{{ isset($name) ? $name : 'Default' }}
// Blade 特有の書き方
{{ $name or 'Default' }}
変数を出力したいけど値がセットされてるかわからないときに使える
Blade特有の書き方だと or だけで済む
{ !! hoge !! } と書くとエスケープされないので注意
Hello, {!! $name !!}. // 出力結果:Hello, $name.
If 文・ループ文
@if (count($records) === 1)
I have one record!
@elseif (count($records) > 1)
I have multiple records!
@else
I don't have any records!
@endif
❖ @if, @elseif
最後の @endif を忘れないように注意
@unless (Auth::check())
You are not signed in. // ログインしてなければ表示
@endunless
❖ @unless
<title>
@hasSection('title')
@yield('title') - App Name
@else
App Name
@endif
</title>
❖ @hasSection
@for ($i = 0; $i < 10; $i++)
The current value is {{ $i }}
@endfor
@foreach ($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
@forelse ($users as $user)
<li>{{ $user->name }}</li>
@empty
<p>No users</p>
@endforelse
@while (true)
<p>I'm looping forever.</p>
@endwhile
❖ @for, @foreach, @forelse, @while
@foreach ($users as $user)
@if($user->type == 1)
@continue
@endif
<li>{{ $user->name }}</li>
@if($user->number == 5)
@break
@endif
@endforeach
// 一行でも書ける
@foreach ($users as $user)
@continue($user->type == 1)
<li>{{ $user->name }}</li>
@break($user->number == 5)
@endforeach
❖ @continue, @break も使えます
<html>
<head>
<title>App Name - @yield('title')</title>
</head>
<body>
@section('sidebar')
This is the master sidebar.
@show
<div class="container">
@yield('content')
</div>
</body>
</html>
master.blade.php
レイアウトの継承
❖ @yieldで子のブロックを出力する
❖ @sectionは親のブロックを子テンプレートに出力する
❖ @extendsで親ページのビューを継承する
@extends('layouts.master')
@section('title', 'Page Title')
@section('sidebar')
@parent
<p>This is appended to the master sidebar.</p>
@endsection
@section('content')
<p>This is my body content.</p>
@endsection
呼び出すときは子テンプレートのビューを呼び出すだけで OK
Route::get('blade', function () {
return view('child');
});
child.blade.php
<div>
@include('shared.errors')
<form>
<!-- Form Contents -->
</form>
</div>
// データも渡せます
@include('view.name', ['some' => 'data'])
❖ @includeで既存のビューを読み込める
__DIR__ や __FILE__ を使うとキャッシュされたビューを参照するので使わない方がいい
便利な機能
  ビューやレイアウトが pushできる
  子ビューの中身を親ビューでも見失わずに済む、などのメリット
@push('scripts')
<script src="/example.js"></script>
@endpush
❖ @stacks
<head>
<!-- Head Contents -->
@stack('scripts')
</head>
child.blade.php
master.blade.php
❖ @inject:サービスの注入
@inject('metrics', 'AppServicesMetricsService')
<div>
Monthly Revenue: {{ $metrics->monthlyRevenue() }}.
</div>
Laravelのサービスコンテナからサービスを取得して Blade内で使える
最初の引数はそのサービスを取り込む変数名、第2引数が対象となるクラス名
※使用前はphp artisan view:clear でキャッシュを消去
❖ directive の登録
<?php
namespace AppProviders;
use Blade;
use IlluminateSupportServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Blade::directive('datetime', function($expression) {
return "<?php echo with{$expression}->format('m/d/Y H:i'); ?>";
});
}
}
自分でディレクティブを作れる(上のコードだと @datetime($var) で呼び出し)
使用前は php artisan view:clear でキャッシュを消去する
Thanks!
Any questions?
You can find me at:
@username
user@mail.me

More Related Content

Similar to 20160422 laravel.osaka

仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkToshiaki Maki
 
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介sters
 
意図を表現するプログラミング
意図を表現するプログラミング意図を表現するプログラミング
意図を表現するプログラミングAtsuhiro Kubo
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)Rui Hirokawa
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみようKentaro Matsui
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarSotaro Karasawa
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門Hiroaki Murayama
 
Xml builderの紹介
Xml builderの紹介Xml builderの紹介
Xml builderの紹介Hiraku Nakano
 
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜Hideo Kashioka
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012Yusuke Ando
 
CakePHPで開発する時に統一しておきたいコーディング内容(080316)
CakePHPで開発する時に統一しておきたいコーディング内容(080316)CakePHPで開発する時に統一しておきたいコーディング内容(080316)
CakePHPで開発する時に統一しておきたいコーディング内容(080316)柴田 篤志
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12kenjis
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>LaravelハンズオンセミナーTatsuyoshi Mashiko
 
Laravel 5.3 で basic task list を作ろう!
Laravel 5.3 で basic task list を作ろう!Laravel 5.3 で basic task list を作ろう!
Laravel 5.3 で basic task list を作ろう!シオリ ショウノ
 
運用構築技術者の為のPSプログラミング第2回
運用構築技術者の為のPSプログラミング第2回運用構築技術者の為のPSプログラミング第2回
運用構築技術者の為のPSプログラミング第2回Shigeharu Yamaoka
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perlJiro Nishiguchi
 

Similar to 20160422 laravel.osaka (20)

仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
 
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
 
意図を表現するプログラミング
意図を表現するプログラミング意図を表現するプログラミング
意図を表現するプログラミング
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
 
Xml builderの紹介
Xml builderの紹介Xml builderの紹介
Xml builderの紹介
 
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
 
CakePHPで開発する時に統一しておきたいコーディング内容(080316)
CakePHPで開発する時に統一しておきたいコーディング内容(080316)CakePHPで開発する時に統一しておきたいコーディング内容(080316)
CakePHPで開発する時に統一しておきたいコーディング内容(080316)
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
 
Laravel 5.3 で basic task list を作ろう!
Laravel 5.3 で basic task list を作ろう!Laravel 5.3 で basic task list を作ろう!
Laravel 5.3 で basic task list を作ろう!
 
WCO2012「PHP教室」
WCO2012「PHP教室」WCO2012「PHP教室」
WCO2012「PHP教室」
 
運用構築技術者の為のPSプログラミング第2回
運用構築技術者の為のPSプログラミング第2回運用構築技術者の為のPSプログラミング第2回
運用構築技術者の為のPSプログラミング第2回
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 

More from シオリ ショウノ

肌で感じたディレクションとマネジメント
肌で感じたディレクションとマネジメント肌で感じたディレクションとマネジメント
肌で感じたディレクションとマネジメントシオリ ショウノ
 
PHPカンファレンス関西2017 スポンサー募集中!
PHPカンファレンス関西2017 スポンサー募集中!PHPカンファレンス関西2017 スポンサー募集中!
PHPカンファレンス関西2017 スポンサー募集中!シオリ ショウノ
 
Carbonライブラリとちゃんと向き合ってみる
Carbonライブラリとちゃんと向き合ってみるCarbonライブラリとちゃんと向き合ってみる
Carbonライブラリとちゃんと向き合ってみるシオリ ショウノ
 

More from シオリ ショウノ (10)

Notificationsを使ったSlack通知
Notificationsを使ったSlack通知Notificationsを使ったSlack通知
Notificationsを使ったSlack通知
 
肌で感じたディレクションとマネジメント
肌で感じたディレクションとマネジメント肌で感じたディレクションとマネジメント
肌で感じたディレクションとマネジメント
 
Vue.jsで遊んでみよう
Vue.jsで遊んでみようVue.jsで遊んでみよう
Vue.jsで遊んでみよう
 
PHPカンファレンス関西2017 スポンサー募集中!
PHPカンファレンス関西2017 スポンサー募集中!PHPカンファレンス関西2017 スポンサー募集中!
PHPカンファレンス関西2017 スポンサー募集中!
 
Gulpで学ぶSassとPug
Gulpで学ぶSassとPugGulpで学ぶSassとPug
Gulpで学ぶSassとPug
 
ハンズオン入門
ハンズオン入門ハンズオン入門
ハンズオン入門
 
ServiceとRepository
ServiceとRepositoryServiceとRepository
ServiceとRepository
 
Webpackにトライ 基本編
Webpackにトライ 基本編Webpackにトライ 基本編
Webpackにトライ 基本編
 
Carbonライブラリとちゃんと向き合ってみる
Carbonライブラリとちゃんと向き合ってみるCarbonライブラリとちゃんと向き合ってみる
Carbonライブラリとちゃんと向き合ってみる
 
Laravelの5.3の新機能
Laravelの5.3の新機能Laravelの5.3の新機能
Laravelの5.3の新機能
 

Recently uploaded

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Recently uploaded (9)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

20160422 laravel.osaka