rabbit-slide-kou-rubykaigi-takeout-2020 2020.9.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9da16a4af5a1ce2c7b40e5963c808a8254912476ca15def8d0818d1f4ff6d7f1
4
+ data.tar.gz: be585e5949b30692365df74c4fa05e972eaf3d5b54f8068200db550f2f453fda
5
+ SHA512:
6
+ metadata.gz: 8dbf2cf0b2aa2bc6ace03cdc5e9aa9c95a74e630dff4d62fc043abf40338cb44285f3b885127d57db834de70aa0ce3b7b0aa426b53d58b67307849fe8688b2d8
7
+ data.tar.gz: 93f2ea937eb744bbc030f1143529f0f76873bf056b3f7862158d0e329322e313888aa7077d74ccc9e4aa797bca3a2bc216e737112a312286c3ddd94494fb7be8
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ --size=800,450 goodbye-fat-gem.rab
@@ -0,0 +1,48 @@
1
+ = Goodbye fat gem
2
+
3
+ Fat gem mechanism is useful to install extension library without any
4
+ compiler. Fat gem mechanism is especially helpful for Windows rubyists
5
+ because Windows rubyists don't have compiler. But there are some
6
+ downsides. For example, fat gem users can't use Ruby 2.7 (the latest
7
+ Ruby) until fat gem developers release a new gem for Ruby 2.7. As of
8
+ 2020, pros of fat gem mechanism is decreasing and cons of it is
9
+ increasing. This talk describes the details of pros and cons of it then
10
+ says thanks and goodbye to fat gem.
11
+
12
+ == License
13
+
14
+ === Slide
15
+
16
+ CC BY-SA 4.0
17
+
18
+ Use the followings for notation of the author:
19
+
20
+ * Sutou Kouhei
21
+
22
+ ==== ClearCode Inc. logo
23
+
24
+ CC BY-SA 4.0
25
+
26
+ Author: ClearCode Inc.
27
+
28
+ It is used in page header and some pages in the slide.
29
+
30
+ == For author
31
+
32
+ === Show
33
+
34
+ rake
35
+
36
+ === Publish
37
+
38
+ rake publish
39
+
40
+ == For viewers
41
+
42
+ === Install
43
+
44
+ gem install rabbit-slide-kou-rubykaigi-takeout-2020
45
+
46
+ === Show
47
+
48
+ rabbit rabbit-slide-kou-rubykaigi-takeout-2020.gem
@@ -0,0 +1,18 @@
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("images/**/*.*")
10
+ # spec.files -= Dir.glob("private/**/*.*")
11
+ spec.add_runtime_dependency("rabbit-theme-clear-code")
12
+ end
13
+
14
+ desc "Tag #{spec.version}"
15
+ task :tag do
16
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
17
+ sh("git", "push", "--tags")
18
+ end
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: rubykaigi-takeout-2020
3
+ base_name: goodbye-fat-gem
4
+ tags:
5
+ - rabbit
6
+ - rubykaigi
7
+ - fatgem
8
+ presentation_date: 2020-09-04
9
+ version: 2020.9.4.0
10
+ licenses:
11
+ - CC-BY-SA-4.0
12
+ slideshare_id:
13
+ speaker_deck_id:
14
+ ustream_id:
15
+ vimeo_id:
16
+ youtube_id:
17
+ author:
18
+ markup_language: :rd
19
+ name: Sutou Kouhei
20
+ email: kou@clear-code.com
21
+ rubygems_user: kou
22
+ slideshare_user: kou
23
+ speaker_deck_user:
@@ -0,0 +1,532 @@
1
+ = Goodbye fat gem
2
+
3
+ : author
4
+ Sutou Kouhei
5
+ : institution
6
+ ClearCode Inc.
7
+ : content-source
8
+ RubyKaigi Takeout 2020
9
+ : date
10
+ 2020-09-04
11
+ : start-time
12
+ 2020-09-04T10:00:00+09:00
13
+ : end-time
14
+ 2020-09-04T10:25:00+09:00
15
+ : theme
16
+ .
17
+
18
+ = Sutou Kouhei
19
+
20
+ The president of ClearCode Inc.\n
21
+ (('note:クリアコードの社長'))
22
+
23
+ # img
24
+ # src = images/clear-code-rubykaigi-2020-silver-sponsor.png
25
+ # relative_height = 100
26
+ # reflect_ratio = 0.1
27
+
28
+ = Sutou Kouhei
29
+
30
+ * The maintainer of (({rake-compiler}))\n
31
+ (('note:(({rake-compiler}))のメンテナー'))
32
+ * A gem for generating fat gem\n
33
+ (('note:fat gemを作るためのgem'))
34
+ * The maintainer of (({Ruby-GNOME}))\n
35
+ (('note:(({Ruby-GNOME}))のメンテナー'))
36
+ * A project that used fat gem\n
37
+ (('note:fat gemを使っていたプロジェクト'))
38
+
39
+ = Fat gem
40
+
41
+ Gem that includes pre-built binaries\n
42
+ (('note:ビルド済みバイナリー入りのgem'))
43
+
44
+ = Why is fat gem needed?\n(('note:どうしてfat gemが必要なのか'))
45
+
46
+ * Difficult to build extension library\n
47
+ (('note:拡張ライブラリーのビルドが難しい'))
48
+ * Extension library:\n
49
+ A Ruby library implemented with C API\n
50
+ (('note:拡張ライブラリー:C APIを使って実装されたRubyライブラリー'))
51
+ * Fat gem just copies pre-built binaries\n
52
+ (('note:fat gemは単にビルド済みバイナリーをコピーするだけ(ビルドしない)'))
53
+
54
+ = Why is building it difficult?\n(('note:どうして拡張ライブラリーのビルドは難しいのか'))
55
+
56
+ * Users need build environment\n
57
+ (('note:ユーザーはビルド環境を用意しないといけない'))
58
+ * e.g.: C compiler, (({make})) and so on\n
59
+ (('note:例:Cコンパイラーや(({make}))など'))
60
+ * Users need build dependencies\n
61
+ (('note:ユーザーが依存するライブラリーを用意しないといけない'))
62
+ * e.g.: GTK+ 3 for gtk3 gem\n
63
+ (('note:例:gtk3 gemはGTK+ 3が必要'))
64
+
65
+ = With fat gem\n(('note:fat gemを使うと'))
66
+
67
+ * Users don't need build environment!\n
68
+ (('note:ユーザーはビルド環境を用意しなくてもよい'))
69
+ * No C compiler\n
70
+ (('note:ユーザーはビルド環境がなくてもよい'))
71
+ * Users don't fail installation!\n
72
+ (('note:ユーザーはインストールに失敗しない'))
73
+ * Fat gem just copies pre-built binaries\n
74
+ (('note:fat gemは単にビルド済みバイナリーをコピーするだけ'))
75
+
76
+ = With fat gem\n(('note:fat gemを使うと'))
77
+
78
+ (('tag:center'))
79
+ (('tag:xx-large'))
80
+ Happy!\n
81
+ 🙌
82
+
83
+ (('tag:right'))
84
+ (('wait'))...Really?\n
85
+ (('note:…ほんとに?'))
86
+
87
+ = A fat gem maintainer says...\n(('note:あるfat gemメンテナー曰く…'))
88
+
89
+ Thanks fat gem!\n
90
+ Goodbye fat gem!\n
91
+ (('note:ありがとうfat gem!'))\n
92
+ (('note:さよならfat gem!'))
93
+
94
+ = Fat gem problem 1\n(('note:fat gemの問題1'))
95
+
96
+ Can't use\n
97
+ the latest Ruby\n
98
+ immediately\n
99
+ (('note:いち早く最新のRubyを使えない'))
100
+
101
+ = Details\n(('note:詳細'))
102
+
103
+ * Ruby is released every Christmas\n
104
+ (('note:Rubyは毎年クリスマスにリリースされる'))
105
+ * To use fat gems with the latest Ruby:\n
106
+ (('note:最新のRubyでfat gemを使うには'))
107
+ * Need to release fat gems for it\n
108
+ (('note:最新のRuby用のfat gemがリリースされていないといけない'))
109
+ * Users can't use the latest Ruby while:\n
110
+ (('note:ユーザーは↓の間は最新のRubyを使えないまま'))
111
+ * Any of fat gems doesn't support it\n
112
+ (('note:使っているfat gemのどれか1つでも最新のRubyをサポートしていない'))
113
+
114
+ = From fat gem maintainer view\n(('note:fat gemメンテナー視点'))
115
+
116
+ Not all fat gem maintainers\n
117
+ can do it\n
118
+ ((*immediately*))\n
119
+ (('note:すべてのfat gemメンテナーが((*すぐに*))対応できるわけじゃない'))
120
+
121
+ = Fat gem problem 2\n(('note:fat gemの問題2'))
122
+
123
+ Vulnerability response\n
124
+ may get delayed\n
125
+ (('note:脆弱性対応が遅れがち'))
126
+
127
+ = Details\n(('note:詳細'))
128
+
129
+ * Only bindings fat gem case\n
130
+ (('note:バインディングのfat gemだけのケース'))
131
+ * (('note:Bindings: A extension library to use an external library'))\n
132
+ (('note:バインディング:外部のライブラリーを使う拡張ライブラリー'))
133
+ * Includes the external library binary\n
134
+ (('note:fat gem内に外部ライブラリーのバイナリーも含む'))
135
+ * When a vulnerability of the external library is found:\n
136
+ (('note:外部らリブラリーに脆弱性が見つかった場合:'))
137
+ * Should be released immediately with fix\n
138
+ (('note:すぐに修正を含んだバージョンをリリースするべき'))
139
+
140
+ = From fat gem maintainer view\n(('note:fat gemメンテナー視点'))
141
+
142
+ Not all fat gem maintainers\n
143
+ can do it\n
144
+ ((*immediately*))\n
145
+ (('note:すべてのfat gemメンテナーが((*すぐに*))対応できるわけじゃない'))
146
+
147
+ = Fat gem problem 3\n(('note:fat gemの問題3'))
148
+
149
+ Can't control\n
150
+ the external library version\n
151
+ (('note:外部ライブラリーのバージョンをコントロールできない'))
152
+
153
+ = Details\n(('note:詳細'))
154
+
155
+ * Only bindings fat gem case\n
156
+ (('note:バインディングのfat gemだけのケース'))
157
+ * Maintainers choose one external library version\n
158
+ (('note:メンテナーが外部ライブラリーのどのバージョンを使うかを選ぶ'))
159
+ * If old external library is chosen, users can't use the latest version\n
160
+ (('note:古い外部ライブラリーを選んだら、ユーザーは最新バージョンを使えない'))
161
+
162
+ = Fat gem problem 4\n(('note:fat gemの問題4'))
163
+
164
+ (({require})) is slower\n
165
+ (('note:(({require}))が遅くなる'))
166
+
167
+ = (({require})) for fat gem\n(('note:fat gem用の(({require}))'))
168
+
169
+ Fat gem needs the following code:\n
170
+ (('note:fat gemでは次のようなコードが必要:'))
171
+
172
+ # rouge ruby
173
+ begin
174
+ # Try the bundled binary in fat gem
175
+ require "#{RUBY_VERSION[/\d+\.\d+/]}/io/console.so"
176
+ rescue LoadError
177
+ # Use the local built binary
178
+ require 'io/console.so'
179
+ end
180
+
181
+ = Why slower?\n(('note:なぜ遅くなるか'))
182
+
183
+ * For not fat gem install:\n
184
+ (('note:fat gemを使わない環境:'))
185
+ * Such as on GNU/Linux and macOS\n
186
+ (('note:たとえばGNU/LinuxやmacOS'))
187
+ * (({require})) for fat gem is always failed\n
188
+ (('note:fat gem用の(({require}))は必ず失敗'))
189
+ * Can't ignore with large (({$LOAD_PATH})):\n
190
+ (('note:(({$LOAD_PATH}))が大きい場合は無視できない'))
191
+ * e.g.: +0.1s with Ruby on Rails application\n
192
+ (('note:例:Ruby on Railsアプリケーションでは0.1秒遅くなる'))\n
193
+ (('note:((<URL:https://github.com/ruby/io-console/pull/4>))'))
194
+
195
+ = Fat gem problem 5\n(('note:fat gemの問題5'))
196
+
197
+ Fat gem release\n
198
+ may be forgotten\n
199
+ (('note:fat gemのリリースを忘れられる'))
200
+
201
+ = Details\n(('note:詳細'))
202
+
203
+ * Normal release is easy\n
204
+ (('note:通常のリリースは簡単'))
205
+ * (({rake release})) is done in a few seconds\n
206
+ (('note:(({rake release}))は数秒で終わる'))
207
+ * Fat gem release isn't easy\n
208
+ (('note:fat gemのリリースは簡単じゃない'))
209
+ * rake-compiler-dock help maintainers but...\n
210
+ (('note:rake-compiler-dockを使えばマシになるけど…'))
211
+ * It will take at least a few minutes...\n
212
+ (('note:少なくとも数分かかる…'))
213
+
214
+ = From fat gem maintainer view\n(('note:fat gemメンテナー視点'))
215
+
216
+ * Don't want to release a new version...\n
217
+ (('note:新しいバージョンをリリースしたくないな…'))
218
+ * Ruby-GNOME case: 10+ related gems\n
219
+ (('note:Ruby-GNOMEの場合:10以上の関連gemがある'))
220
+ * It takes at least 30 minutes\n
221
+ (('note:順調にいった場合でも少なくとも30分はかかる'))
222
+ * Forget to release a fat gem\n
223
+ (('note:fat gemをリリースするのを忘れる'))
224
+ * io-console 0.4.8 case\n
225
+ (('note:((<URL:https://github.com/ruby/bigdecimal/pull/148#issuecomment-512075494>))'))
226
+
227
+ = Fat gem problem 6\n(('note:fat gemの問題6'))
228
+
229
+ High\n
230
+ maintenance\n
231
+ cost\n
232
+ (('note:メンテナンスが大変'))
233
+
234
+ = Details\n(('note:詳細'))
235
+
236
+ * Especially binding fat gem case\n
237
+ (('note:特にバインディングのfat gemのケース'))
238
+ * Normally, cross-compiling is used\n
239
+ (('note:通常、クロスコンパイルしてfat gemを作る'))
240
+ * Most external libraries don't do it\n
241
+ (('note:多くの外部ライブラリーはクロスコンパイルなんてしない'))
242
+ * There are some problems on upgrading\n
243
+ (('note:外部ライブラリーのバージョンをあげるたびになにかしら問題が見つかる'))
244
+ * Ruby-GNOME has 10+ related external libraries\n
245
+ (('note:Ruby-GNOMEは10以上の関連外部ライブラリーがあって大変だった'))
246
+
247
+ = How to solve these problems?\n(('note:これらの問題を解決するには?'))
248
+
249
+ Thanks fat gem!\n
250
+ Goodbye fat gem!\n
251
+ (('note:ありがとうfat gem!'))\n
252
+ (('note:さよならfat gem!'))
253
+
254
+ = Why is fat gem needed\n(('note:fat gemが必要だった理由'))
255
+
256
+ * Users don't have build environment\n
257
+ (('note:ユーザーがビルド環境を持っていない'))
258
+ * Especially, Windows users\n
259
+ (('note:特にWindowsユーザー'))
260
+
261
+ = Windows users and build env\n(('note:Windowsユーザーとビルド環境'))
262
+
263
+ * ((<RubyInstaller for Windows|URL:https://rubyinstaller.org/>)) provides build env by default since 2.4\n
264
+ (('note:RubyInstaller for Windows 2.4以降はデフォルトでビルド環境を提供'))
265
+ * Ruby 2.3 reached EOL\n
266
+ (('note:Ruby 2.3はEOLになっている'))
267
+ * Most Windows users must use 2.4 or later\n
268
+ (('note:I know some Windows users don't use RubyInstaller for Windows'))\n
269
+ (('note:ほとんどのWindowsユーザーは2.4以降を使っているはず'))
270
+ * Most Ruby users have build env now!\n
271
+ (('note:ほとんどのユーザーはビルド環境を持っている!'))
272
+
273
+ = Ruby-GNOME said goodbye fat gem!\n(('note:Ruby-GNOMEはfat gemにさようならをした!'))
274
+
275
+ * Since 2018-10-31\n
276
+ (('note:2018-10-31から'))
277
+ * Install related issues isn't increased\n
278
+ (('note:インストール関連のissueは増えていない'))
279
+
280
+ = Resolve fat gem problem 1\n(('note:fat gem関連の問題の解決1'))
281
+
282
+ Can use\n
283
+ the latest Ruby\n
284
+ immediately\n
285
+ (('note:いち早く最新のRubyを使える'))
286
+
287
+ = Details\n(('note:詳細'))
288
+
289
+ * Don't need a new release for new Ruby\n
290
+ (('note:新しいRuby用にgemをリリースする必要がない'))
291
+ * Until new Ruby doesn't change C API\n
292
+ (('note:新しいRubyでC APIが変わっていない限り'))
293
+ * Can release a new version\n
294
+ before new Ruby release\n
295
+ (('note:新しいRubyがリリースされる前に新しいバージョンのgemをリリースできる'))
296
+ * Can test with preview release Ruby on CI\n
297
+ (('note:CIでpreviewリリースのRubyをテストできる'))
298
+
299
+ = Resolve fat gem problem 2\n(('note:fat gem関連の問題の解決2'))
300
+
301
+ Vulnerability response\n
302
+ can be done by\n
303
+ each system\n
304
+ (('note:脆弱性は各システムが対応してくれる'))
305
+
306
+ = Details\n(('note:詳細'))
307
+
308
+ * Especially, binding fat gem case\n
309
+ (('note:特にバインディングfat gemの場合'))
310
+ * Packaging system will update soon than binding fat gem maintainers\n
311
+ (('note:バインディングfat gemのメンテナーよりもパッケージングシステムの方がすぐに更新することが多い'))
312
+ * The # of packaging system maintainers\n
313
+ is larger than\n
314
+ the # of maintainers of each fat gem\n
315
+ (('note:各fat gemのメンテナーの数よりもパッケージングシステムのメンテナーの数の方が多いから'))
316
+
317
+ = Resolve fat gem problem 3\n(('note:fat gem関連の問題の解決3'))
318
+
319
+ Can control\n
320
+ the external library version\n
321
+ (('note:外部ライブラリーのバージョンをコントロールできる'))
322
+
323
+ = Details\n(('note:詳細'))
324
+
325
+ * Packaging system may provide the latest external library\n
326
+ (('note:パッケージングシステムは最新の外部ライブラリーを提供してくれるかもしれない'))
327
+ * Users can build suitable version of the external library\n
328
+ (('note:ユーザーは適切なバージョンの外部ライブラリーをビルドできる'))
329
+
330
+ = Resolve fat gem problem 4\n(('note:fat gem関連の問題の解決4'))
331
+
332
+ (({require})) isn't slower\n
333
+ (('note:(({require}))が遅くならない'))
334
+
335
+ = Details\n(('note:詳細'))
336
+
337
+ No fallback (({require})):\n
338
+ (('note:フォールバック用の(({require}))がいらない'))
339
+
340
+ # rouge ruby
341
+
342
+ # Always use the local built binary
343
+ require 'io/console.so'
344
+
345
+ = bigdecimal said goodbye fat gem!\n(('note:bigedimalはfat gemにさようならをした!'))
346
+
347
+ * Because of this\n
348
+ (('note:これが理由'))
349
+ * ((<"ruby/bigdecimal#149"|URL:https://github.com/ruby/bigdecimal/pull/149>))
350
+
351
+
352
+ = Resolve fat gem problem 5, 6\n(('note:fat gem関連の問題の解決5,6'))
353
+
354
+ Easy to maintain\n
355
+ (('note:メンテナンスしやすくなる'))
356
+
357
+ = Details\n(('note:詳細'))
358
+
359
+ * No fat gem release process\n
360
+ (('note:fat gemをリリースする作業がなくなる'))
361
+ * Don't forget fat gem release😀\n
362
+ (('note:fat gemのリリースも忘れない😀'))
363
+ * No cross compiling\n
364
+ (('note:クロスコンパイルしなくてもよい'))
365
+ * No rake-compiler\n
366
+ (('note:rake-compilerもいらない'))
367
+ * Maintainers can use their time for others\n
368
+ (('note:メンテナーは別のことに時間を使える'))
369
+
370
+ = Stop fat gem\n(('note:fat gemをやめると'))
371
+
372
+ * All problems can be solved!\n
373
+ (('note:すべての問題を解決できる!'))
374
+ * Additional good points\n
375
+ (('note:さらにいいことも'))
376
+ * Enable optimization for each user's env\n
377
+ (('note:各ユーザーの環境ごとに最適化できる'))
378
+ * e.g.: (({-O3 -march=native})) GCC options\n
379
+ (('note:例:GCCの(({-O3 -march=native}))オプションを使う'))
380
+
381
+ = Stop fat gem\n(('note:fat gemをやめると'))
382
+
383
+ (('tag:center'))
384
+ (('tag:xx-large'))
385
+ Happy!\n
386
+ 🙌
387
+
388
+ (('tag:right'))
389
+ (('wait'))...Really?\n
390
+ (('note:…ほんとに?'))
391
+
392
+ = Stop fat gem problem 1\n(('note:fat gemをやめたときの問題1'))
393
+
394
+ Long install time\n
395
+ (('note:インストール時間が長くなる'))
396
+
397
+ = Details\n(('note:詳細'))
398
+
399
+ * Fat gem:
400
+ * Just copy pre-built binaries\n
401
+ (('note:単にビルド済みバイナリーをコピー'))
402
+ * Gem:
403
+ * Build and install binaries\n
404
+ (('note:バイナリーをビルドしてインストール'))
405
+
406
+ = How to resolve this?\n(('note:解決法は?'))
407
+
408
+ No idea...\n
409
+ (('note:なんかある?'))
410
+
411
+ = Stop fat gem problem 2\n(('note:fat gemをやめたときの問題2'))
412
+
413
+ Fail to install\n
414
+ (('note:インストールに失敗する'))
415
+
416
+ = Details\n(('note:詳細'))
417
+
418
+ * Only bindings gem case\n
419
+ (('note:バインディングのgemだけのケース'))
420
+ * Needs the external library to build\n
421
+ (('note:ビルドするために外部ライブラリーが必要'))
422
+ * If it doesn't exist, (({gem install})) is failed\n
423
+ (('note:外部ライブラリーがないと(({gem install}))が失敗'))
424
+ * e.g.: (({gem install rmagick})) is failed without ImageMagick\n
425
+ (('note:例:ImageMagickがないと(({gem install rmagick}))が失敗'))
426
+
427
+ = How to resolve this?\n(('note:解決法は?'))
428
+
429
+ Install\n
430
+ the external library\n
431
+ automatically\n
432
+ (('note:自動で外部ライブラリーをインストール'))
433
+
434
+ = RubyInstaller for Windows
435
+
436
+ Put the external library package name to the gem's metadata:\n
437
+ (('note:gemのメタデータに外部ライブラリーのパッケージ名を設定'))
438
+
439
+ # rouge ruby
440
+
441
+ gemspec.metadata["msys2_mingw_dependencies"] = "cairo"
442
+
443
+ (('note:((<"MSYS2 library dependencies - For gem developers - onclick/rubyinstaller2 Wiki"|URL:https://github.com/oneclick/rubyinstaller2/wiki/For-gem-developers#-msys2-library-dependency>))'))
444
+
445
+ = native-package-installer
446
+
447
+ rcairo case:
448
+
449
+ # rouge ruby
450
+
451
+ require "pkg-config"
452
+ require "native-package-installer"
453
+ unless PKGConfig.have_package("cairo")
454
+ # Install cairo from packaging system automatically
455
+ unless NativePackageInstaller.install(:arch_linux => "cairo",
456
+ :debian => "libcairo2-dev",
457
+ :homebrew => "cairo",
458
+ :macports => "cairo",
459
+ :redhat => "cairo-devel")
460
+ exit(false)
461
+ end
462
+ exit(false) unless PKGConfig.have_package("cairo")
463
+ end
464
+
465
+ = Stop fat gem problem 3\n(('note:fat gemをやめたときの問題3'))
466
+
467
+ Bundler's\n
468
+ dependency resolution\n
469
+ may fail\n
470
+ (('note:Bundlerの依存関係解決が失敗するかもしれない'))
471
+
472
+ = Bundler may use wrong dependency\n(('note:Bundlerは間違った依存情報を使ってしまうかもしれない'))
473
+
474
+ # rouge bash
475
+
476
+ git clone https://github.com/rails/rails.git
477
+ cd rails
478
+ bundle install
479
+ bundle update # Error
480
+
481
+ (('note:((<"Bundle Update Fails for Rails 6.1 if Ruby >= 2.6 · Issue #37224 · rails/rails"|URL:https://github.com/rails/rails/issues/37224>))'))
482
+
483
+ = Actual
484
+
485
+ Bundler could not find compatible versions for gem "ruby":
486
+ In Gemfile:
487
+ ruby
488
+
489
+ mysql2 (~> 0.5) was resolved to 0.5.2, which depends on
490
+ ruby (< 2.6) x64-mingw32
491
+
492
+ mysql2 (~> 0.5) was resolved to 0.5.2, which depends on
493
+ ruby (< 2.6) x86-mingw32
494
+
495
+ nokogiri (>= 1.8.1) was resolved to 1.10.4, which depends on
496
+ ruby (>= 2.3) x64-mingw32
497
+
498
+ nokogiri (>= 1.8.1) was resolved to 1.10.4, which depends on
499
+ ruby (>= 2.3) x86-mingw32
500
+
501
+ rails was resolved to 6.1.0.alpha, which depends on
502
+ ruby (>= 2.5.0)
503
+
504
+ = Details\n(('note:詳細'))
505
+
506
+ Omit\n
507
+ (('note:省略'))
508
+
509
+ = How to resolve this?\n(('note:解決法は?'))
510
+
511
+ * I've been fixed this\n
512
+ (('note:直しておいた'))
513
+ * ((<"rubygems/bundler#7522"|URL:https://github.com/rubygems/bundler/pull/7522>))
514
+ * If you're interested in fixing problems in upstream, ClearCode is a good corporation:\n
515
+ (('note:問題をアップストリームで直すことが好きな人はクリアコードといういい会社があるよ!'))\n
516
+ ((<URL:https://www.clear-code.com/recruitment/>))
517
+ * Use Bundler 2.2.0 or later(('note:(not released yet)'))\n
518
+ (('note:未リリースだけどBundler 2.2.0以降を使えば解決する'))
519
+
520
+ = Wrap up\n(('note:まとめ'))
521
+
522
+ * Fat gem was useful until Ruby 2.3\n
523
+ (('note:Ruby 2.3まではfat gemは有用だった'))
524
+ * We can stop using fat gem now!\n
525
+ (('note:今はfat gemをやめられる!'))
526
+
527
+ = Wrap up\n(('note:まとめ'))
528
+
529
+ Thanks fat gem!\n
530
+ Goodbye fat gem!\n
531
+ (('note:ありがとうfat gem!'))\n
532
+ (('note:さよならfat gem!'))
@@ -0,0 +1 @@
1
+ include_theme("clear-code")
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-kou-rubykaigi-takeout-2020
3
+ version: !ruby/object:Gem::Version
4
+ version: 2020.9.4.0
5
+ platform: ruby
6
+ authors:
7
+ - Sutou Kouhei
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-08-13 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
+ - !ruby/object:Gem::Dependency
28
+ name: rabbit-theme-clear-code
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: |-
42
+ Fat gem mechanism is useful to install extension library without any
43
+ compiler. Fat gem mechanism is especially helpful for Windows rubyists
44
+ because Windows rubyists don't have compiler. But there are some
45
+ downsides. For example, fat gem users can't use Ruby 2.7 (the latest
46
+ Ruby) until fat gem developers release a new gem for Ruby 2.7. As of
47
+ 2020, pros of fat gem mechanism is decreasing and cons of it is
48
+ increasing. This talk describes the details of pros and cons of it then
49
+ says thanks and goodbye to fat gem.
50
+ email:
51
+ - kou@clear-code.com
52
+ executables: []
53
+ extensions: []
54
+ extra_rdoc_files: []
55
+ files:
56
+ - ".rabbit"
57
+ - README.rd
58
+ - Rakefile
59
+ - config.yaml
60
+ - goodbye-fat-gem.rab
61
+ - images/clear-code-rubykaigi-2020-silver-sponsor.png
62
+ - pdf/rubykaigi-takeout-2020-goodbye-fat-gem.pdf
63
+ - theme.rb
64
+ homepage: https://slide.rabbit-shocker.org/authors/kou/rubykaigi-takeout-2020/
65
+ licenses:
66
+ - CC-BY-SA-4.0
67
+ metadata: {}
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubygems_version: 3.2.0.rc.1
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Goodbye fat gem
87
+ test_files: []