rabbit-slide-unasuke-kagoshima-rubykaigi02 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 73371e2b5f29f3d41fc5b02fcbff1b5fa0b68c96de3e33114b299bbeee4347b0
4
+ data.tar.gz: d119f648c43c47cfd97332b0b0dc00ceae74106976f2e25670e8f93bf6c2ccf2
5
+ SHA512:
6
+ metadata.gz: 35b9d6e87da277770cc5d4eeff2bf4ee09a4bc2f24cdc468cfc615a6574cb1947644ea08d490cec76d7ec4db945d9254aeb4fa0bd3649056e124d0f793bab8ad
7
+ data.tar.gz: b0567bf7ddc0ef74635fa60eec7fa840615b0a55c5479411a3f176baa3090728a33015ea3f4f3be71404c1cc446bc8e7f773b4adcc0612b0de0f8149e9698b16
data/.rabbit ADDED
@@ -0,0 +1,2 @@
1
+ --size 1200,675
2
+ slide.rab
data/README.rd ADDED
@@ -0,0 +1,24 @@
1
+ = kagoshima-rubykaigi02
2
+
3
+ https://k-ruby.com/kagoshima-rubykaigi02/
4
+
5
+ == 作者向け
6
+
7
+ === 表示
8
+
9
+ rake
10
+
11
+ === 公開
12
+
13
+ rake publish
14
+
15
+ == 閲覧者向け
16
+
17
+ === インストール
18
+
19
+ gem install rabbit-slide-unasuke-kagoshima-rubykaigi02
20
+
21
+ === 表示
22
+
23
+ rabbit rabbit-slide-unasuke-kagoshima-rubykaigi02.gem
24
+
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ # spec.add_runtime_dependency("rabbit-theme-YOUR-THEME")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
data/config.yaml ADDED
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: kagoshima-rubykaigi02
3
+ base_name: slide
4
+ tags: ['ruby', 'python', 'quic']
5
+ presentation_date: '2023-03-04'
6
+ presentation_start_time:
7
+ presentation_end_time:
8
+ version: 1.0.0
9
+ licenses: ['MIT']
10
+ slideshare_id:
11
+ speaker_deck_id:
12
+ vimeo_id:
13
+ youtube_id:
14
+ width: 1200
15
+ height: 675
16
+ author:
17
+ markup_language: :rd
18
+ name: unasuke
19
+ email: yusuke1994525@gmail.com
20
+ rubygems_user: unasuke
21
+ slideshare_user:
22
+ speaker_deck_user:
23
+ source_code_url: https://github.com/unasuke/kagoshima-rubykaigi02
Binary file
Binary file
Binary file
Binary file
data/img/icon.jpg ADDED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/slide.rab ADDED
@@ -0,0 +1,344 @@
1
+ = QUICをRubyの世界に持ってくる活動をしています
2
+
3
+ : author
4
+ unasuke
5
+ : content-source
6
+ 鹿児島Ruby会議02
7
+ : date
8
+ 2023-03-04
9
+ : theme
10
+ theme
11
+
12
+ = 自己紹介
13
+
14
+ * Name: うなすけ
15
+ * Work: フリーランス
16
+ * Ruby歴: 8年くらい
17
+ * Kaigi on Rails オーガナイザー
18
+ * (('tag:x-small')) GitHub ((<URL:https://github.com/unasuke>))
19
+ * (('tag:x-small')) Mastodon ((<URL:https://mstdn.unasuke.com/@unasuke>))
20
+ * (('tag:x-small')) Twitter ((<URL:https://twitter.com/yu_suke1994>))
21
+
22
+ # image
23
+ # src = img/icon.jpg
24
+ # relative_width = 24
25
+ # align = right
26
+ # relative_margin_right = -8
27
+ # relative_margin_top = 20
28
+
29
+ = 今日話すこと
30
+
31
+ * QUICとは何か
32
+ * 具体的にやっていること
33
+ * 今後の展望
34
+
35
+ = QUICとは何か
36
+
37
+ # image
38
+ # src = img/QUIC-Badge-Dark-RGB-Horiz.png
39
+ # relative_width = 100
40
+ # align = center
41
+
42
+ (('tag:x-small'))(('tag:center')) image from ((<URL:https://github.com/quicwg/wg-materials>))
43
+
44
+ = QUICとは何か
45
+
46
+ * 2021年にRFC 9000を含むいつくかのRFCにより標準化
47
+ * TCPではなくUDPによって通信をするプロトコル
48
+ * これまでのTCP(HTTP)より高速 ← ?
49
+ * HTTP/3はQUICを使用する
50
+
51
+ = 「これまでのTCP(HTTP)より高速」とは?
52
+
53
+ ざっくりと……
54
+
55
+ * HTTP/2はTCPを使う
56
+ * TCP: "Transmission Control Protocol"
57
+ * 信頼性が高いがオーバーヘッドが大きい
58
+ * 途中のパケットが欠損すると、再送されるまで処理が止まる
59
+ * HTTP/3はUDP(QUIC)を使う
60
+ * UDP: "User Datagram Protocol"
61
+ * オーベーヘッドがないぶん高速だが信頼性は落ちる
62
+ * 途中のパケットが欠損しても、影響がない範囲で処理を継続する
63
+
64
+
65
+ ref: ((<URL:https://eng-blog.iij.ad.jp/archives/11166>))
66
+
67
+ = TCPとUDP
68
+
69
+ * TCPは信頼性が高いがオーバーヘッドが大きい
70
+ * HTMLとかJavaScriptとかCSSとか
71
+ * 欠損したら困る
72
+ * UDPはオーベーヘッドがないぶん高速だが信頼性は落ちる
73
+ * VoIP、RTPなどの音声、ビデオ通話とか
74
+ * 完全性よりリアルタイム性
75
+
76
+ しかしHTTP/3はQUICを使うし、QUICはUDP。これはどういうことか?
77
+
78
+ = QUICがやっていること
79
+
80
+ # image
81
+ # src = img/protocol-stack-h2-h3-improved-readability.png
82
+ # relative_width = 45
83
+ # align = center
84
+
85
+ (('tag:x-small'))(('tag:center')) image from ((<URL:https://github.com/rmarx/h3-protocol-stack>))
86
+
87
+
88
+ = QUICとは何か、詳しくは……
89
+
90
+
91
+ ((<(('QUICをゆっくり解説 – 新しいインターネット通信規格 | IIJ Engineers Blog'))|URL:https://eng-blog.iij.ad.jp/quic>))
92
+
93
+ = 今日話すこと
94
+
95
+ * QUICとは何か
96
+ * 具体的にやっていること ((*←*))
97
+ * 今後の展望
98
+
99
+ = 具体的にやっていること
100
+
101
+ 2022年までのぼく
102
+
103
+ 「よ〜し、RFC読んでQUICの実装するぞ〜!」
104
+
105
+ = 具体的にやっていること
106
+
107
+ 2022年までのぼく
108
+
109
+ 「よ〜し、RFC読んでQUICの実装するぞ〜!」
110
+
111
+ (('tag:xx-large'))大挫折
112
+
113
+ = 大挫折2022
114
+ * 例えば「よ〜しオレオレpuma作るぞ〜」がうまくいくのか?
115
+ * 「オレオレRails」でも可
116
+ * → 無理
117
+
118
+ やったことがないことをやるのは大変
119
+
120
+ = 大挫折2022
121
+ * 例えば「よ〜しオレオレpuma作るぞ〜」がうまくいくのか?
122
+ * 「オレオレRails」でも可
123
+ * → 無理
124
+
125
+ やったことがないことをやるのは大変
126
+
127
+ → じゃあ「やったことあること」をする、のはどうだろう
128
+
129
+ = 大挫折2022
130
+ * 例えば「よ〜しオレオレpuma作るぞ〜」がうまくいくのか?
131
+ * 「オレオレRails」でも可
132
+ * → 無理
133
+
134
+ やったことがないことをやるのは大変
135
+
136
+ → じゃあ「やったことあること」をする、のはどうだろう
137
+
138
+ → じゃあ「QUICの実装」を「やったことある」状態にするにはどうしたら?
139
+
140
+ = この世界にあるQUICの実装
141
+
142
+ * lsquic (C言語)
143
+ * quicly (C言語)
144
+ * quiche (Rust)
145
+ * quic-go (Go)
146
+ * aioquic (Python)
147
+
148
+ (('tag:x-small'))Ref: ((<URL:https://github.com/quicwg/base-drafts/wiki/Implementations>))
149
+
150
+ = この世界にあるQUICの実装
151
+
152
+ * lsquic (C言語)
153
+ * quicly (C言語)
154
+ * quiche (Rust)
155
+ * quic-go (Go)
156
+ * aioquic (Python) ←
157
+
158
+ (('tag:x-small'))Ref: ((<URL:https://github.com/quicwg/base-drafts/wiki/Implementations>))
159
+
160
+ \n
161
+ PythonはRubyに似てるらしい……
162
+
163
+ = この世界にあるQUICの実装、にRubyを加える
164
+
165
+ \n
166
+ (('tag:center'))QUICのPython実装であるaioquicをRubyに移植しよう!
167
+
168
+ = 採択
169
+ # image
170
+ # src = img/ruby-or-jp-grant-2022-unasuke.png
171
+ # relative_width = 90
172
+ # align = center
173
+
174
+ (('tag:center'))(('tag:x-small'))((<URL:https://www.ruby.or.jp/ja/news/20220823>))
175
+
176
+ = ねらい
177
+ * 締切
178
+ * 1/16 中間報告書提出締切
179
+ * 3/20 最終報告書提出締切
180
+ * メンター
181
+
182
+ = やっていること
183
+ ここまでが「やっている」までの経緯
184
+
185
+ = aioquicを移植する
186
+ # image
187
+ # src = img/aioquic-og.png
188
+ # relative_width = 90
189
+ # align = center
190
+
191
+ (('tag:center'))(('tag:x-small'))((<URL:https://github.com/aiortc/aioquic>))
192
+
193
+ = aioquicを移植する、その規模感
194
+ # image
195
+ # src = img/aioquic-loc.png
196
+ # relative_width = 90
197
+ # align = center
198
+
199
+ = aioquicの構造
200
+
201
+ * Buffer
202
+ * Crypto
203
+ * TLS
204
+ * QUIC
205
+ * Packet
206
+ * PacketBuilder
207
+ * Rangeset
208
+ * Configuration
209
+ * Retry
210
+ * Crypto
211
+ * Stream, Connection...
212
+
213
+ = aioquicの構造
214
+
215
+ * Buffer ← まあ……
216
+ * Crypto ← やばい
217
+ * TLS ← やばすぎ
218
+ * QUIC
219
+ * Packet ← まあ……
220
+ * PacketBuilder ← まあ……
221
+ * Rangeset ← easy
222
+ * Configuration ← easy
223
+ * Retry ← まあ……
224
+ * Crypto ← やばい
225
+ * Stream, Connection... ← やばすぎ
226
+
227
+ = "やばすぎ" mean...
228
+
229
+ * 行数?
230
+ * tls.py (1445行、テスト1163行)
231
+ * connection.py (2774行、テスト2171行)
232
+ * 行数は真のやばさではない
233
+
234
+ = QUICがやっていること(再)
235
+
236
+ # image
237
+ # src = img/protocol-stack-h2-h3-improved-readability.png
238
+ # relative_width = 45
239
+ # align = center
240
+
241
+ (('tag:x-small'))(('tag:center')) image from ((<URL:https://github.com/rmarx/h3-protocol-stack>))
242
+
243
+ = "やばすぎ" mean...
244
+
245
+ * QUICは暗号化も受け持つ
246
+ * つまり、TLSを実装する
247
+ * 鍵交換
248
+ * 認証
249
+ * etc
250
+ * 扱うデータの中身も暗号化されている
251
+ * OpenSSL「こんにちは〜」
252
+ * PythonとRubyでOpenSSLのAPIの抽象度合いが異なる
253
+
254
+
255
+ = で、どこまでできてるの?
256
+ * connection.py の移植の真っ最中
257
+ * Rubyishにするにはどうすればいいかの設計
258
+
259
+ = デモ
260
+ * curlから送信されたQUICのPacketを解析する
261
+
262
+ = 今日話すこと
263
+
264
+ * QUICとは何か
265
+ * 具体的にやっていること
266
+ * 今後の展望 ((*←*))
267
+
268
+ = 今後の展望
269
+
270
+ * QUIC自体
271
+ * 移植プロジェクト
272
+
273
+ = 今後の展望 - QUIC
274
+ * QUICは様々な場所で使われつつある
275
+ * Media over QUIC
276
+ * Warp (Twitch)
277
+ * WebTransport
278
+ * QUIC v2が策定中
279
+ * ((<URL:https://datatracker.ietf.org/doc/draft-ietf-quic-v2/>))
280
+ * 3月末 IETF 116 Yokohama
281
+ * ((<URL:https://datatracker.ietf.org/wg/quic/about/>))
282
+
283
+ = 今後の展望 - 移植プロジェクト
284
+ * aioquicの移植を終わらせる
285
+ * 3/20 最終報告書提出期限
286
+ * "Rubyishとは何か?"
287
+ * 設計、API、etc...
288
+
289
+ = 今後の展望、そもそもなぜこんなことを?
290
+ # image
291
+ # src = img/quic-impl-grep-ruby.png
292
+ # relative_width = 80
293
+ # align = center
294
+
295
+ = 現実問題
296
+
297
+ * お客様の中にpumaでHTTPSの通信をされている方は
298
+ * TLSを終端するのは誰なのか
299
+
300
+ = 現実問題
301
+ * AWS CloudFront
302
+ * ((<URL:https://aws.amazon.com/about-aws/whats-new/2022/08/amazon-cloudfront-supports-http-3-quic/>))
303
+ * Google Cloud Load Balancing
304
+ * ((<URL:https://cloud.google.com/load-balancing/docs/https#QUIC>))
305
+ * NGINX
306
+ * ((<URL:https://www.nginx.com/blog/binary-packages-for-preview-nginx-quic-http3-implementation/>))
307
+ * H2O
308
+ * Apache
309
+
310
+ = 現実問題への回答、RubyがQUICを喋る理由
311
+ * Just for Fun
312
+ * そこにRubyがないから
313
+ * 副産物
314
+ * OpenSSL gemの修正
315
+ * ((<URL:https://github.com/ruby/openssl/pulls?q=is%3Apr+author%3Aunasuke>)) (現在3つ)
316
+ * OpenSSL gemのドキュメント(るりま)が古い
317
+ * 思案中
318
+ * RDoc内の回遊を楽にしたい
319
+ * ((<URL:https://github.com/ruby/rdoc/pull/973>))
320
+
321
+ = まとめ
322
+ * QUICをRubyの世界に持ってくる活動をしています
323
+
324
+ # image
325
+ # src = img/raioquic-loc.png
326
+ # relative_width = 90
327
+ # align = center
328
+
329
+
330
+ = 参考資料
331
+ * ((<URL:https://quicwg.org>))
332
+ * ((<URL:https://www.rfc-editor.org/rfc/rfc9000.html>))
333
+ * ((<QUIC、RFC 9000 として正式に公開 - Fastly blog|URL:https://www.fastly.com/jp/blog/quic-is-now-rfc-9000>))
334
+ * ((<(('QUICをゆっくり解説 – 新しいインターネット通信規格 | IIJ Engineers Blog'))|URL:https://eng-blog.iij.ad.jp/quic>))
335
+ * ((<(('HTTP/3の解説を書いた (2020/06/01) - ASnoKaze blog'))|URL:https://asnokaze.hatenablog.com/entry/2020/06/01/005625>))
336
+ * ((<(('2021年 HTTPやQUICの最新動向振り返り - ASnoKaze blog'))|URL:https://asnokaze.hatenablog.com/entry/2021/12/31/011558>))
337
+ * ((<(('『プロフェッショナルSSL/TLS』 – 技術書出版と販売のラムダノート'))|URL:https://www.lambdanote.com/collections/ssl-tls>))
338
+ * ((<(('徹底解剖 TLS 1.3(古城 隆 松尾 卓幸 宮崎 秀樹 須賀 葉子)|翔泳社の本'))|URL:https://www.shoeisha.co.jp/book/detail/9784798171418>))
339
+ * ((<URL:https://quic.xargs.org>))
340
+
341
+ = 参考資料2
342
+ * ((<URL:https://github.com/aiortc/aioquic>))
343
+ * ((<URL:https://github.com/thekuwayama/tttls1.3>))
344
+ * ((<URL:https://datatracker.ietf.org/wg/quic/about/>))
data/theme.rb ADDED
@@ -0,0 +1,113 @@
1
+ @default_foreground ||= @foreground
2
+ @default_background ||= @background
3
+ @default_shadow_color ||= @shadow_color
4
+
5
+ # pp font_families
6
+ font_color = '#333'
7
+ @default_font = 'BIZ UDPGothic'
8
+ @font_family = find_font_family(@default_font)
9
+ @bold_font = @default_font
10
+ @bold_font_family = find_font_family(@bold_font)
11
+ @monospace_font = 'Cica'
12
+ @monospace_font_family = find_font_family(@monospace_font)
13
+
14
+ @xxxx_large_font_size = screen_size(10 * Pango::SCALE)
15
+ @xxx_large_font_size = screen_size(8 * Pango::SCALE)
16
+ @xx_large_font_size = screen_size(6 * Pango::SCALE)
17
+ @x_large_font_size = screen_size(4.5 * Pango::SCALE)
18
+ @large_font_size = screen_size(4 * Pango::SCALE)
19
+ @normal_font_size = screen_size(3.5 * Pango::SCALE)
20
+ @small_font_size = screen_size(3.2 * Pango::SCALE)
21
+ @x_small_font_size = screen_size(3 * Pango::SCALE)
22
+ @xx_small_font_size = screen_size(2.8 * Pango::SCALE)
23
+ @xxx_small_font_size = screen_size(2.5 * Pango::SCALE)
24
+ @script_font_size = @x_small_font_size
25
+ @large_script_font_size = @small_font_size
26
+ @x_large_script_font_size = @large_font_size
27
+ @title_slide_title_font_size = @xxx_large_font_size
28
+
29
+ @block_quote_fill_color = "#f8f8f8"
30
+ @preformatted_fill_color = "#f8f8f8"
31
+ @default_headline_line_color = font_color
32
+
33
+ @title_slide_background_image = 'img/kagoshima-rubykaigi02-bg.png'
34
+ # @slide_background_image = 'img/bg.png'
35
+
36
+ # set_foreground(@default_foreground)
37
+ # set_background(@default_background)
38
+
39
+ add_image_path("ruby-images")
40
+ include_theme("default-icon")
41
+ # include_theme("default-title-text")
42
+ include_theme("default-text")
43
+ include_theme("default-title-slide")
44
+ include_theme("default-slide")
45
+ include_theme("default-item-mark")
46
+ include_theme("default-method-list")
47
+ include_theme("default-preformatted")
48
+ include_theme("default-block-quote")
49
+ include_theme("default-foot-text")
50
+ include_theme("default-description")
51
+ include_theme("image")
52
+ include_theme("table")
53
+ include_theme("newline-in-slides")
54
+ include_theme("per-slide-background-color")
55
+ include_theme("background-image-toolkit")
56
+ include_theme("per-slide-background-image")
57
+ include_theme("body-background-image")
58
+ include_theme("tag")
59
+ include_theme("syntax-highlighting")
60
+ include_theme("default-comment")
61
+
62
+ include_theme("title-slide-background-image")
63
+ include_theme("slide-background-image")
64
+
65
+ match(TitleSlide, "*") do |elems|
66
+ elems.horizontal_centering = true
67
+ elems.prop_set("size", @large_font_size)
68
+ set_font_family(elems)
69
+ end
70
+
71
+ match(TitleSlide, Title) do |titles|
72
+ titles.prop_set("size", @title_slide_title_font_size)
73
+ titles.padding_bottom = @space * 2
74
+ titles.prop_set("weight", "SemiBold")
75
+ end
76
+
77
+ match(Slide, HeadLine) do |heads|
78
+ heads.prop_set("size", @large_font_size)
79
+ heads.prop_set("weight", "bold")
80
+ end
81
+
82
+ match(TitleSlide) do |slides|
83
+ # slides.margin_left = 900
84
+ slides.vertical_centering = true
85
+ slides.prop_set "foreground", font_color
86
+ slides.prop_set("weight", "bold")
87
+ end
88
+ match(TitleSlide, Subtitle) do |subtitle|
89
+ subtitle.margin_top = -20
90
+ subtitle.prop_set("size", @large_font_size)
91
+ end
92
+ match(TitleSlide, Author) do |author|
93
+ author.margin_top = 50
94
+ author.prop_set("size", @large_font_size)
95
+ author.prop_set("weight", "normal")
96
+ end
97
+ match(TitleSlide, Place) do |place|
98
+ place.prop_set("size", @small_font_size)
99
+ end
100
+ match(TitleSlide, "*") do |elems|
101
+ elems.horizontal_centering = true
102
+ end
103
+
104
+ match(TitleSlide, Date) do |dates|
105
+ dates.prop_set("size", @small_font_size)
106
+ # dates.prop_set("style", "italic")
107
+ end
108
+
109
+ match(TitleSlide, ContentSource) do |sources|
110
+ sources.prop_set("size", @small_font_size)
111
+ sources.margin_bottom = @space
112
+ # sources.prop_set("style", "italic")
113
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-unasuke-kagoshima-rubykaigi02
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - unasuke
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-03-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: https://k-ruby.com/kagoshima-rubykaigi02/
28
+ email:
29
+ - yusuke1994525@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - README.rd
36
+ - Rakefile
37
+ - config.yaml
38
+ - img/QUIC-Badge-Dark-RGB-Horiz.png
39
+ - img/aioquic-loc.png
40
+ - img/aioquic-og.png
41
+ - img/bulletproof-ssl-tls.jpg
42
+ - img/icon.jpg
43
+ - img/kagoshima-rubykaigi02-bg.png
44
+ - img/protocol-stack-h2-h3-improved-readability.png
45
+ - img/quic-impl-grep-ruby.png
46
+ - img/raioquic-loc.png
47
+ - img/ruby-or-jp-grant-2022-unasuke.png
48
+ - img/wolfssl-tls13.jpg
49
+ - pdf/kagoshima-rubykaigi02-slide.pdf
50
+ - slide.rab
51
+ - theme.rb
52
+ homepage: https://slide.rabbit-shocker.org/authors/unasuke/kagoshima-rubykaigi02/
53
+ licenses:
54
+ - MIT
55
+ metadata: {}
56
+ post_install_message:
57
+ rdoc_options: []
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ requirements: []
71
+ rubygems_version: 3.4.6
72
+ signing_key:
73
+ specification_version: 4
74
+ summary: kagoshima-rubykaigi02
75
+ test_files: []