背景
先日gemを作った際に迷ったのがgemの命名。
Rubyを絵文字で書けるようにするGemつくった
もともとは「🤔」にしようと思ってたのですが、gemの名前にマルチバイト文字は使えなかったので、
適当に"emozi"にしてしまいました。
これは"emoji"がすでに使われていたからではなく、
僕が作ったgemのせいで"emoji"というgemの名前が今後rubygems上では使えなくなるというのが憚られたからです。
思いつき
個人的な感覚だとこういう「他の人と競合しそうな名前」は避けたがるとおもうのですが、
そのへんを気にしない厚顔無恥の方が世界にはどのくらいいらっしゃるのか調べてみようと思いました。
調べてみた
Rubygems上の1文字のgem名をスクレイピングしてみました。
mechanizeを使ってざっくりスクレイピング
スクレイピングコード
require 'mechanize'
mechanize = Mechanize.new
search_url = %(https://rubygems.org/search?utf8=%E2%9C%93&query=name%3A+)
('a'..'z').each do |char|
search_page = mechanize.get(search_url + char)
gem_titles = search_page.search('h2.gems__gem__name')
gem_names = gem_titles.map { |title| title.at(:span).remove; title.inner_text.strip }
if !gem_names.include?(char) && !gem_names.include?(char.upcase)
puts "'#{char}'空いてます!!!!!!"
else
puts "'#{char}'空いてません"
end
end
実行結果
'a'空いてません
'b'空いてません
'c'空いてません
'd'空いてません
'e'空いてません
'f'空いてません
'g'空いてません
'h'空いてません
'i'空いてません
'j'空いてません
'k'空いてません
'l'空いてません
'm'空いてません
'n'空いてません
'o'空いてません
'p'空いてません
'q'空いてません
'r'空いてません
's'空いてません
't'空いてません
'u'空いてません
'v'空いてません
'w'空いてません
'x'空いてません
'y'空いてません
'z'空いてません
どの文字も空いてませんでした。
つらい。
ちなみに2文字(aa-zz)だと280パターンぐらいあいてた。
スクレイピングするときは適切な間隔を開けてDDoSしないようにしましょう。
追記
コメントで gem search
を教えていただきました。
$ gem search -r '^.$'
実行結果
*** REMOTE GEMS ***
- (1)
_ (1.4)
a (0.1.1)
b (1.0.3)
c (0.0.3)
d (1.2.0)
e (0.5.1)
f (0.1.0)
g (1.7.2)
h (4.0.0)
i (0.1.0)
j (0.6.11)
k (0.1.1)
l (0.1.0)
m (1.5.1)
n (0.1.0)
o (2.0.4)
p (0.2.1)
Q (0.0.1)
q (0.0.1)
r (0.0.3)
s (0.0.2)
t (3.1.0)
u (1.0.2)
v (0.1.1)
w (0.0.0)
x (0.0.3)
y (0.0.2)
z (0.1.0)
僕はシェル芸できないので抜けてる文字(無い)を探したりはできないですが、こっちのほうがスマートですね。