SlideShare a Scribd company logo
1 of 43
Download to read offline
Svelte5でのevent受け渡し
SvelteJapanOfflineMeetup#2
2024/02/21(水)
株式会社Nextbeat
富永孝彦
自己紹介
名前:富永孝彦(とみながたかひこ)
X:@takapi327
Github:https://github.com/takapi327
所属:株式会社Nextbeat
趣味
ScalaでOSS開発やコントリビュート、OSSのコード読む
プログラミングに関する情報収集
ゲーム
今日話すこと
1.Svelte3,4でのevent受け渡し
2.Svelte5ではどう変わるのか
なぜこの議題か?
Svelte3,4を使用したUIライブラリを開発しており、それが割としんどかった
何がしんどい?
UIライブラリは汎用的に作る必要がある
汎用的に作るにはイベント受け渡しをライブラリ側で頑張る必要がある
頑張ると実装コスト、レビューコストが上がってしまう
使ってた機能がSvelte4で非推奨になってしまった
Svelte5
Svelte4で非推奨になってた機能とかがなくなってしまった。
ただ更新しないわけにはいかないので、Svete5の機能で作り直してみる。
あれ、めっちゃ楽じゃね?
まずは、Svelte3,4のイベント受け渡しはどのようなものだったか
Svelte3,4でのevent受け渡し
Svelte3,4では on: ディレクティブを使用してイベントリスナーを要素にアタッチしていまし
た
<button on:click={...}>
クリック
</button>
共通で使用するコンポーネントを作成する場合、
子から親にイベントを伝搬する必要があります。
Svelte3,4では createEventDispatcher などを使用してイベントを伝搬していました。
1. createEventDispatcher で dispatch を作成
2.イベントハンドラに渡す関数を作成
3.関数内で dispatch に伝搬したいイベント名と受け渡したい値を渡す
4.関数を使用したいイベントハンドラに渡す
// Button.svelte
<script lang="ts">
import { createEventDispatcher } from 'svelte'
const dispatch = createEventDispatcher()
function sayHello() {
dispatch('click', {
text: 'こんにちは!'
})
}
</script>
<button on:click={sayHello}>
クリック
</button>
親コンポーネントでは、子コンポーネントの dispatch に渡されたイベント名を使用できる
ので、そのイベントハンドラに関数を渡して dispatch 経由で渡された値を使用するという
使い方になるかと思います。
// App.svelte
<script lang="ts">
import Button from '../lib/component/Button.svelte'
function handleMessage(event) {
alert(event.detail.text)
}
</script>
<Button on:click={handleMessage}/>
Playground
もしくは、関数を渡すという方法を使用することもできます。
// Button.svelte
<script lang="ts">
export let sayHello: (text: string) => void
</script>
<button on:click={() => sayHello('こんにちは!')}>
クリック
</button>
// App.svelte
<script lang="ts">
import Button from '../lib/component/Button.svelte'
function sayHello(text: string) {
alert(text)
}
</script>
<Button {sayHello} />
Playground
もしくは on: ディレクティブに値を渡さず、イベントを転送してもらって親コンポーネント
でイベントをリッスンするという方法もあります。
// Button.svelte
<button on:click>
クリック
</button>
// App.svelte
<script lang="ts">
import Button from './Button.svelte'
function handleMessage(event) {
alert('こんにちは!')
}
</script>
<Button on:click={handleMessage}/>
Playground
運用が大変?
使用したいイベントは全て記載しなければいけない
だたユーザーがどのように使うかはわからないから制限するか全部を有効にする必
要もあったり
コンポーネントが大きくなってくるとイベントのforwardやdispatchなどの処理が複雑に
なってしまう
プロダクトで共通コンポーネントを作成する際などで、デザインなどは同じなのにフォ
ーム送信用のボタン、画面遷移用のボタン、モーダル表示用のボタンという風に用途ご
とにコンポーネントが生まれてしまう可能性がある
条件判定用のフラグを用意して、スーパーコンポーネントを作成すると無闇に改修でき
なくなってしまうなんてことも...
汎用的に作るために
UIライブラリは汎用的に作りたいので、 dispatch や特定の関数で作成したイベントしか使
用できないものになってしまうような実装はなるべく避けたい
ライブラリが頑張って柔軟に対応できるように作らなければならない
じゃあどうするの?
svelte-material-uiなどのライブラリでは、これを解消するために SvelteComponent の $on
をラップして、イベントをいい感じに受け渡せるようにするための処理が複数作られている
forwardEventsBuilder
useActions
etc...
こんな感じで SvelteComponent の $on 関数をオーバーライドして、すべてのバインドされ
たイベントを転送しています。
export function forwardEventsBuilder(component: SvelteComponent) {
...
component.$on = (fullEventType: string, callback: (event: any) => void) => {...}
...
}
弊社のライブラリも同じように作成を行なっていました。
Svelteの内部構造を理解しておかないといけないので大変...
Svelteは簡単に書けるはずなのに難しくなってしまった...
Svelte5では?
まず、Svelte5ではイベントハンドラを渡すときは on: ディレクティブを使用するのではな
く、 onxxx を使用するように変更になりました。
なぜ変更?
「イベントハンドラとpropsを区別するアプローチを取っていたが、それが原因でコンポーネ
ントをまたぐイベントのforwardやpropagate、dispatchやdelegationが複雑になってしまっ
た。」[3]
というのが変更した理由のようです。
以下詳細についてはSvelteSummitFall2023で解説がされていますので、こちらをご覧いた
だければと思います。
https://www.youtube.com/live/pTgIx-ucMsY?si=PZrN6ZKczM-_j8bj&t=14096
注意
Svelte5は本日(2024/02/21)時点ではまだ正規リリースされていません。
今回ご紹介する機能や実装方法は今後変更される可能性があります。
Svelte5では$props機能が追加
Svelte5から追加された $props とは、 export let の代わりとして使用することができる機
能です。
今までSvelte3,4で使用されていた、 $$props や $$restProps といった機能の代わりとなる
ものです。
Svelte3,4
Playground
// Button.svelte
<script lang="ts">
export let label: string
export let type: string
</script>
<button type={type}>
{label}
</button>
// App.svelte
<script lang="ts">
import Button from './Button.svelte'
</script>
<Button label="クリック" type="submit" />
Svelte5
Playground
<script lang="ts">
let { label, type } = $props()
</script>
<button type={type}>
{label}
</button>
// App.svelte
<script lang="ts">
import Button from './Button.svelte'
</script>
<Button label="クリック" type="submit" />
より簡潔に値を受け渡せるようになりましたね!
$propsを使用すればイベントハンドラも渡せる
今までは単純な値か自身で作成した関数しか受け取ることはできませんでした。
しかし、 $props を使用すれば先ほど単純な値を受け渡したような感じで、イベントハンド
ラも渡すことができるようになります。
// Button.svelte
<script lang="ts">
let { onclick } = $props()
</script>
<button onclick={() => onclick({ text: 'こんにちは!' })}>
クリック
</button>
親コンポーネントでは、子コンポーネントに直接イベントハンドラを設定するように使用す
ることができます。
Playground
// +page.svelte
<script lang="ts">
import Button from '../lib/component/Button.svelte'
function handleMessage(event) {
alert(event.text)
}
</script>
<Button onclick={handleMessage}/>
何が嬉しい?
イベントハンドラごとに dispatch や関数を用意する必要がなくなった
予めイベントを設定しておく必要もない
自身でイベントハンドラを使用したい場合も簡単になった
ここが良い
イベントハンドラごとに dispatch や関数を用意する必要がなくなった
Q.今もイベントハンドラを指定しているから3,4の時とあまり変わらないのでは?
A.イベントハンドラは指定する必要はない。コンポーネント内で使いたいものだけ指定すれ
ば良い
どういうこと?
$props は $$prosp や $$restProps 機能の代わりとなるものと言いました。
つまり、受け取る引数を指定するだけでなく、渡された値を全て受け取るという風に書くこ
とも可能ということです。
以下のようにスプレッド構文(SpreadSyntax)を使用すれば Button コンポーネントに渡され
た値を全て button に渡すことができます。
// Button.svelte
<script lang="ts">
let { ...restProps } = $props()
</script>
<button {...restProps}>
クリック
</button>
子コンポーネントでは、スプレッド構文によって受け取った値を全て渡すようにしました。
イベントハンドラに対して何も処理を記載していないはずですが、親コンポーネントでは以
下のようにイベントを自由に使用可能です。
Playground
<script lang="ts">
import Button from '../lib/component/Button.svelte'
function onmouseover(event) {
console.log('マウスが乗った!')
}
function onmouseout(event) {
alert('マウスが離れた')
}
</script>
<Button {onmouseover} {onmouseout} />
Svelte5
用途ごとにコンポーネントを用意する必要も条件分岐を使ったスーパーコンポーネントを作
成する必要もない!
イベントをそのまま渡すことが可能かつ、コンポーネント内で使いたいイベントがあれば自
由に使える
Selte3,4の時みたいにSvelteComponentの $on をゴニョゴニョする必要がなくなった
※ SvelteComponentの $on はSvelte5でなくなった
つまり
実装コストは下がったのに自由度は上がった!
より柔軟なコンポーネントを作成可能に!
しんどかったものが
UIライブラリは汎用的に作る必要がある
=>標準機能だけで実現可能に!
汎用的に作るにはイベント受け渡しをライブラリ側で頑張る必要がある
=>何も頑張ってない!
頑張ると実装コスト、レビューコストが上がってしまう
=>標準機能だから敷居はほとんどなくなった!
使ってた機能がSvelte4で非推奨になってしまった
=>むしろいらない!
うん、めっちゃ楽!
触ってみて
最初はSvelte5で内部のAPIを使用できなくなったり(Svelte4で非推奨)、いろいろな機能が変
わるので大変そうとか複雑なりそうと思っていました。
しかし、実際に触ってみるとむしろ開発は楽になった印象です。
学習コストも少なくなって、今までの処理がより簡単に書けるようになったと思います。
Svelte3,4で書かれたUIライブラリも改修するのは大変だと思いますが、Svelte5の新機能を
使えば標準の機能だけでほとんどのことが解決できると思います!
つまり、Svelteが書ければ誰でも保守できるライブラリになることも可能!?
(むしろライブラリなどいらないのでは?)
他にもいろんな新機能が!
$state
$derived
$effect
$effect.pre
$effect.active
$effect.root
$inspect
Snippets
早く正式版を使いたいので、リリースが楽しみですね!
Svelte5UIライブラリ
以下でSvelte5の新機能を使ってHeadlessUIライブラリを趣味で開発しています。
(まだDialogしかないけどw)
新機能の使い方の参考にしていただければ!
また、もっとこうした使い方の方がいいよなどあれば教えていただけると嬉しいです!
https://github.com/takapi327/svelte-headlessui
Nextbeatでは
Svelte,SvelteKitを採用しており、現在3つ目のプロジェクトを技術移行中です!
こんな感じでSvelteの採用や新バージョンへの追従を積極的に行なっています。
興味がありましたら会社資料説明を見ていただけると嬉しいです。
参考文献
1.https://qiita.com/sho_U/items/2d52590bd7973fbec671
2.https://qiita.com/oekazuma/items/ab617096af10ad94356e
3.https://zenn.dev/tomoam/scraps/375fb71c09fe0f
4.https://www.youtube.com/watch?v=pTgIx-ucMsY
5.https://svelte.jp/blog/runes
ご清聴ありがとうございました!

More Related Content

What's hot

関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門Tadahiro Ishisaka
 
脆弱性ハンドリングと耐える設計 -Vulnerability Response-
脆弱性ハンドリングと耐える設計 -Vulnerability Response-脆弱性ハンドリングと耐える設計 -Vulnerability Response-
脆弱性ハンドリングと耐える設計 -Vulnerability Response-Tomohiro Nakashima
 
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) Satoshi Nagayasu
 
2019.10.24 EC-CUBE関西UG 2系から4系への移行方法
2019.10.24 EC-CUBE関西UG 2系から4系への移行方法2019.10.24 EC-CUBE関西UG 2系から4系への移行方法
2019.10.24 EC-CUBE関西UG 2系から4系への移行方法Chihiro Adachi
 
Amazon S3による静的Webサイトホスティング
Amazon S3による静的WebサイトホスティングAmazon S3による静的Webサイトホスティング
Amazon S3による静的WebサイトホスティングYasuhiro Horiuchi
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 
失敗から学ぶ データ分析グループの チームマネジメント変遷 (デブサミ2016) #devsumi
失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi
失敗から学ぶ データ分析グループの チームマネジメント変遷 (デブサミ2016) #devsumiTokoroten Nakayama
 
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」Recruit Technologies
 
ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介
ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介
ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介NobuyasuNakajima2
 
smarthrを支えるインフラ
smarthrを支えるインフラsmarthrを支えるインフラ
smarthrを支えるインフラtei-k
 
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成西岡 賢一郎
 
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy"Simple Made Easy" Made Easy
"Simple Made Easy" Made EasyKent Ohashi
 
ReactとSeleniumの幸せな関係
ReactとSeleniumの幸せな関係ReactとSeleniumの幸せな関係
ReactとSeleniumの幸せな関係Akira Kuratani
 
NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析
NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析
NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析Tokoroten Nakayama
 
失敗から学ぶ データ分析グループの チームマネジメント変遷
失敗から学ぶデータ分析グループのチームマネジメント変遷失敗から学ぶデータ分析グループのチームマネジメント変遷
失敗から学ぶ データ分析グループの チームマネジメント変遷Tokoroten Nakayama
 
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpnCassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpnhaketa
 
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 Koichiro Matsuoka
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 

What's hot (20)

関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
 
脆弱性ハンドリングと耐える設計 -Vulnerability Response-
脆弱性ハンドリングと耐える設計 -Vulnerability Response-脆弱性ハンドリングと耐える設計 -Vulnerability Response-
脆弱性ハンドリングと耐える設計 -Vulnerability Response-
 
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
 
2019.10.24 EC-CUBE関西UG 2系から4系への移行方法
2019.10.24 EC-CUBE関西UG 2系から4系への移行方法2019.10.24 EC-CUBE関西UG 2系から4系への移行方法
2019.10.24 EC-CUBE関西UG 2系から4系への移行方法
 
Amazon S3による静的Webサイトホスティング
Amazon S3による静的WebサイトホスティングAmazon S3による静的Webサイトホスティング
Amazon S3による静的Webサイトホスティング
 
WordPressのCDN化
WordPressのCDN化WordPressのCDN化
WordPressのCDN化
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
失敗から学ぶ データ分析グループの チームマネジメント変遷 (デブサミ2016) #devsumi
失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi
失敗から学ぶ データ分析グループの チームマネジメント変遷 (デブサミ2016) #devsumi
 
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」
 
ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介
ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介
ネットワークが切れても大丈夫!リアルタイムWebアプリケーションを簡単開発するフレームワーク Winter Cardinalのご紹介
 
smarthrを支えるインフラ
smarthrを支えるインフラsmarthrを支えるインフラ
smarthrを支えるインフラ
 
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
Amazon SageMakerでscikit-learnで作ったモデルのEndpoint作成
 
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
 
ReactとSeleniumの幸せな関係
ReactとSeleniumの幸せな関係ReactとSeleniumの幸せな関係
ReactとSeleniumの幸せな関係
 
NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析
NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析
NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析
 
失敗から学ぶ データ分析グループの チームマネジメント変遷
失敗から学ぶデータ分析グループのチームマネジメント変遷失敗から学ぶデータ分析グループのチームマネジメント変遷
失敗から学ぶ データ分析グループの チームマネジメント変遷
 
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpnCassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
Cassandra導入事例と現場視点での苦労したポイント cassandra summit2014jpn
 
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 

Similar to Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2

式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式Kouji Matsui
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Kota Mizushima
 
PyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめPyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめJun Okazaki
 
メルカリにおける自動化への取り組み (automation-night2 LT)
メルカリにおける自動化への取り組み (automation-night2 LT)メルカリにおける自動化への取り組み (automation-night2 LT)
メルカリにおける自動化への取り組み (automation-night2 LT)Kat 0gm
 
Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Hideki Takase
 
社内LT大会#3 2016-4-28 Vuls
社内LT大会#3 2016-4-28 Vuls社内LT大会#3 2016-4-28 Vuls
社内LT大会#3 2016-4-28 VulsKota Kanbe
 
スッとGoを取り入れる
スッとGoを取り入れるスッとGoを取り入れる
スッとGoを取り入れるYusuke Wada
 
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGJun Okazaki
 
第1回 【初心者向け】Unity+Oculus Riftで次世代の3Dゲームを作って感じるワークショップ
第1回 【初心者向け】Unity+Oculus Riftで次世代の3Dゲームを作って感じるワークショップ第1回 【初心者向け】Unity+Oculus Riftで次世代の3Dゲームを作って感じるワークショップ
第1回 【初心者向け】Unity+Oculus Riftで次世代の3Dゲームを作って感じるワークショップYuichi Ishii
 
受託開発とRubyGems
受託開発とRubyGems受託開発とRubyGems
受託開発とRubyGemsKoichi ITO
 
皆さん!ふくてんが来ましたよ!!
皆さん!ふくてんが来ましたよ!!皆さん!ふくてんが来ましたよ!!
皆さん!ふくてんが来ましたよ!!ru pic
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編Asami Abe
 
Bicep 入門 MySQL編
Bicep 入門 MySQL編Bicep 入門 MySQL編
Bicep 入門 MySQL編Takekazu Omi
 
第2回 -Play部屋- Play 2.0はじめて&もくもく会
第2回 -Play部屋- Play 2.0はじめて&もくもく会第2回 -Play部屋- Play 2.0はじめて&もくもく会
第2回 -Play部屋- Play 2.0はじめて&もくもく会Kazuhiro Hara
 
LibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドするLibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドするTomofumi Yagi
 
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidevSwift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidevTomohiro Kumagai
 
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまでSphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまでStudy Group by SciencePark Corp.
 
React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話Kanako Kobayashi
 

Similar to Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2 (20)

式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
 
実戦Scala
実戦Scala実戦Scala
実戦Scala
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
 
PyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめPyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめ
 
メルカリにおける自動化への取り組み (automation-night2 LT)
メルカリにおける自動化への取り組み (automation-night2 LT)メルカリにおける自動化への取り組み (automation-night2 LT)
メルカリにおける自動化への取り組み (automation-night2 LT)
 
Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
 
社内LT大会#3 2016-4-28 Vuls
社内LT大会#3 2016-4-28 Vuls社内LT大会#3 2016-4-28 Vuls
社内LT大会#3 2016-4-28 Vuls
 
Open modeler
Open modelerOpen modeler
Open modeler
 
スッとGoを取り入れる
スッとGoを取り入れるスッとGoを取り入れる
スッとGoを取り入れる
 
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
 
第1回 【初心者向け】Unity+Oculus Riftで次世代の3Dゲームを作って感じるワークショップ
第1回 【初心者向け】Unity+Oculus Riftで次世代の3Dゲームを作って感じるワークショップ第1回 【初心者向け】Unity+Oculus Riftで次世代の3Dゲームを作って感じるワークショップ
第1回 【初心者向け】Unity+Oculus Riftで次世代の3Dゲームを作って感じるワークショップ
 
受託開発とRubyGems
受託開発とRubyGems受託開発とRubyGems
受託開発とRubyGems
 
皆さん!ふくてんが来ましたよ!!
皆さん!ふくてんが来ましたよ!!皆さん!ふくてんが来ましたよ!!
皆さん!ふくてんが来ましたよ!!
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編
 
Bicep 入門 MySQL編
Bicep 入門 MySQL編Bicep 入門 MySQL編
Bicep 入門 MySQL編
 
第2回 -Play部屋- Play 2.0はじめて&もくもく会
第2回 -Play部屋- Play 2.0はじめて&もくもく会第2回 -Play部屋- Play 2.0はじめて&もくもく会
第2回 -Play部屋- Play 2.0はじめて&もくもく会
 
LibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドするLibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドする
 
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidevSwift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
 
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまでSphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
 
React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話React Nativeの話のその前に… サービスの作り方の話
React Nativeの話のその前に… サービスの作り方の話
 

Svelte5でのevent受け渡し in Svelte Japan Offline Meetup #2