rabbit-slide-unasuke-kagoshima-rubykaigi02 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []