RubyKaigi Takeout 2021 に『Dive into Encoding』というタイトルで登壇します。
私の登壇は3日目である 2021-09-11 (土) の 11:00 - 11:25 です。
自作文字コードを作ってローカルのRubyにビルドして遊んだ話をします。文字コードの基礎からRubyの文字コードの取り扱い・実装まで潜っていきます。
文字列で比較するとうまく比較できない。
'1.0.9' < '1.0.10' # => false
Gem::Version
を使うと文字列のまま比較できる。
また、 pre
や beta
などの文字が入っていても正しく比較できる。
require 'rubygems' Gem::Version.new('1.0.9') < Gem::Version.new('1.0.10') # => true # pre とか beta とか入ってても比較できる Gem::Version.new('1.0.0pre1') < Gem::Version.new('1.0.0') # => true
私は irb
をよく使うので、せっかくなら常に最新版を使ってバグを見つけたいなと思いました。
irb
と reline
は git clone
しておおむね master
に追従しているので、ファイルパスを指定して irb
を起動することにしました。
ruby -I <path>
Ruby
起動時に -I
オプションをつけると、探索先を追加で指定することができます。
追加された探索先は $:
で確認できます。
i.rb
puts $:
-I
オプションをつけずに実行してみます。
~/sandbox ❯ ruby i.rb /usr/local/Cellar/rbenv/1.1.2/rbenv.d/exec/gem-rehash /Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0/x86_64-darwin18 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby /Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0/x86_64-darwin18 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby /Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-darwin18
-I
オプションをつけて実行してみます。
❯ ruby -I ~/sandbox i.rb /Users/mi/sandbox /usr/local/Cellar/rbenv/1.1.2/rbenv.d/exec/gem-rehash /Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0/x86_64-darwin18 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby /Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0/x86_64-darwin18 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby /Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-darwin18
指定したパスが探索先に増えました!
複数のパスを指定する場合は複数の -I
オプションを付ける必要があるようです。
~/sandbox ❯ ruby -I ~/sandbox ~/sandbox/ruby i.rb ruby: Is a directory -- /Users/mi/sandbox/ruby (LoadError) ~/sandbox ❯ ruby -I ~/sandbox -I ~/sandbox/ruby i.rb /Users/mi/sandbox /Users/mi/sandbox/ruby /usr/local/Cellar/rbenv/1.1.2/rbenv.d/exec/gem-rehash /Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0/x86_64-darwin18 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby /Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0/x86_64-darwin18 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby /Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0 /Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-darwin18
rbenv
のバージョンを指定する環境変数 RBENV_VERSION
でバージョンを指定することができます。
~/sandbox ❯ RBENV_VERSION=2.7.2 ruby -v ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin18] ~/sandbox ❯ RBENV_VERSION=3.0.0 ruby -v ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin18]
irb
をファイルパス指定で起動するirb/exe/irb
から起動できます。
RBENV_VERSION
でバージョンを固定し、-I
オプションで探索先を追加し、irb/exe/irb
で irb
を起動するコマンドです。
$ RBENV_VERSION=3.0.0 ruby -I /Users/mi/ghq/github.com/ruby/reline/lib -I /Users/mi/ghq/github.com/ruby/irb/lib /Users/mi/ghq/github.com/ruby/irb/exe/irb
実際に使ってみました。最新版の irb
と reline
を参照できていることがわかりました。
$ RBENV_VERSION=3.0.0 ruby -I /Users/mi/ghq/github.com/ruby/reline/lib -I /Users/mi/ghq/github.com/ruby/irb/lib /Users/mi/ghq/github.com/ruby/irb/exe/irb irb(main):001:0> irb_info => Ruby version: 3.0.0 IRB version: irb 1.3.1 (2021-01-12) InputMethod: ReidlineInputMethod with Reline 0.2.1 and /Users/mi/.inputrc .irbrc path: /Users/mi/.irbrc irb(main):002:0> Reline::VERSION => "0.2.1" irb(main):003:0> $: => ["/Users/mi/ghq/github.com/ruby/reline/lib", "/Users/mi/ghq/github.com/ruby/irb/lib", "/usr/local/Cellar/rbenv/1.1.2/rbenv.d/exec/gem-rehash", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/byebug-11.1.3/lib", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/extensions/x86_64-darwin-18/3.0.0/byebug-11.1.3", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/coderay-1.1.3/lib", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/method_source-1.0.0/lib", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/pry-0.13.1/lib", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/pry-byebug-3.9.0/lib", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby/3.0.0/x86_64-darwin18", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/site_ruby", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby/3.0.0/x86_64-darwin18", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/vendor_ruby", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0", "/Users/mi/.rbenv/versions/3.0.0/lib/ruby/3.0.0/x86_64-darwin18"]
gemのインストール場所は、$ gem environment
の出力結果の INSTALLATION DIRECTORY
で分かる。
❯ gem environment RubyGems Environment: - RUBYGEMS VERSION: 3.2.3 - RUBY VERSION: 3.0.0 (2020-12-25 patchlevel 0) [x86_64-darwin19] - INSTALLATION DIRECTORY: /Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0 - USER INSTALLATION DIRECTORY: /Users/mi/.gem/ruby/3.0.0 - RUBY EXECUTABLE: /Users/mi/.rbenv/versions/3.0.0/bin/ruby - GIT EXECUTABLE: /usr/local/bin/git - EXECUTABLE DIRECTORY: /Users/mi/.rbenv/versions/3.0.0/bin - SPEC CACHE DIRECTORY: /Users/mi/.gem/specs - SYSTEM CONFIGURATION DIRECTORY: /Users/mi/.rbenv/versions/3.0.0/etc - RUBYGEMS PLATFORMS: - ruby - x86_64-darwin-19 - GEM PATHS: - /Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0 - /Users/mi/.gem/ruby/3.0.0 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - https://rubygems.org/ - SHELL PATH: - /Users/mi/.rbenv/versions/3.0.0/bin - /usr/local/Cellar/rbenv/1.1.2/libexec - /Users/mi/.rbenv/plugins/ruby-build/bin - /usr/local/Cellar/vim/8.2.1600/bin - /Users/mi/.rbenv/shims - /Users/mi/.rbenv/bin - /usr/local/bin - /usr/bin - /bin - /usr/sbin - /sbin
$ gem environment gemdir
でも分かる
/Users/mi/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0
タイトルの通り、 URI.escape
と URI.unescape
は Ruby 3.0.0 から削除されました。長い間非推奨となっていましたが、ついに 3.0.0 で削除されました。
代わりに ERB::Util.#url_encode
, CGI.escape
, URI.encode_www_form
, WEBrick::HTTPUtils.#escape_form
, WEBrick::HTTPUtils.#escape
などの使用を検討してください。
削除のPRはこちら。
URI.encode_www_form
はこちら。
この記事は2020年ふりかえりアドベントカレンダー 15日目です。書いているのは12月18日です。昨日の記事は はじめての自作キーボードを作る(1)情報収集編 - いまブログです。
自作キーボードのさわり心地を確かめることと、meishi2キットを作るために遊舎工房に向かいました。
秋葉原にある自作キーボード専門店です。
自作キーボードグッズがものすごくたくさんあります!!魅力的なキーボードやグッズが多くて店内じっくり見てると時間がすごい勢いで飛んでいきます。
店内の様子はこの動画がとても参考になります。
meishi2 キットを購入するときに、キースイッチとキーキャップを自由に選ぶことが出来ます。
店舗にはキーテスターがあり、様々なキースイッチで好きなだけ試し打ちができます。 また、展示されている自作キーボードキットで打ち心地を試すことも出来ます。
キースイッチについてはこちらの記事がとても参考になりました。
メカニカルキースイッチの好みの話 - 自作キーボード温泉街の歩き方
色々押してみて、これらのスイッチでmeishi2を組んでみることにしました。
というかんじで選びました。
キーキャップはバラ売りしているものを買いました。
meishi2 キーボードを購入し、店員さんに工作机を使いたいことを伝えます。2020年現在は2時間で500円で、はんだなどの消耗品も利用できます。
自作キーボードは作者の方がビルドガイドを作ってくれているため、そちらを見ながら作業します。
meishi2 キットは初心者にも分かりやすいよう丁寧に解説してくれているので大体これを見ながら作業できます。
はんだ付けはなんとかできましたが、ProMicroへの書き込みがうまくいかずハマりました。
原因は2つあり、1つはProMicroが奥までしっかり刺さっていなかったこと、もう1つは書き込みがなぜかうまくいかなかったことでした。リセットボタン何回押してもハンダ温め直してもうまくいかず悩んでいましたが、店員さんにRSTとGNDをピンセットでショートしてもらって書き込みができるようになりました。
QMKファームウェアの書き込みができない – 遊舎工房サポートサイト
出来ました!2時間以内に終わって良かったです。
できあがるとしみじみと眺めてしまいます。これを作ったんだなぁ…と。あと押すのが楽しくて連打してしまいますね。
このあと作った勢いで Corne Cherry と 遊舎工房のはんだ付けセットと、Gateron milky blackと、適当なキーキャップを購入して作成意欲を高めていきました。
つづく
この記事は2020年ふりかえりアドベントカレンダー 14日目です。書いているのは12月18日です。昨日の記事は 2020年買って良かったもの - いまブログ です。
内定したので就職が決まるまでに何をやりたいかな、と思ったときに自作キーボードを作りたいな!!と思い情報収集をはじめることにしました。
(ダウンロード版)自作キーボードカタログ 2020 - 自キ温泉街販売所 - BOOTH
めちゃくちゃ参考になりました。これを見て40%キーボードがどんなものかわかるようになりました。こういうカタログは見ているだけでも楽しいです。
あと付録としてキーボード原寸大シートが付属しているため、大きさのイメージをつけやすくて良かったです。
Corne Cherry こんなに小さいのかー!と思いました。
念願の分割キーボード ErgoDash mini をつくった - kasumi∞blog
フィヨルドブートキャンプの先輩のブログ。フィヨルドブートキャンプのミートアップ(オンライン)で自作キーボードいいですよ!入門してから1ヶ月くらいで作れました!と仰っていたのもあって作りたくなりました。
これから自作キーボードを始め、遊舎工房に行くあなたへ - takkanm’s blog
遊舎工房に行く前に読みました。悩んだら店員さんに聞こうと勇気が出ました。
フィヨルドブートキャンプのメンターのkomagataさんも自作キーボードを作っているので参考にしました。
自作キーボードカタログ、遊舎工房のサイトを眺めて自分の欲しいキーボードを考えました。
割れている物を使いたかったので、
を候補にしました。HHKBからの乗り換えなので40%に慣れられるか不安で60%がいいかなぁとか考えていました。
はんだ付けは中学生以来やったことがなく不安だったので、まずは遊舎工房でmeishi2 キットを組んでみて考えることにしました。
meishi2 キットは4キーのキーボードなので初心者にぴったりです。meishi2 キット | 遊舎工房
遊舎工房には工作室があり、はんだ付けキットを借りたり、困ったときに店員さんに相談することができるので初心者にやさしいです。
つづく
この文章はCorne Cherry で書いています。記号と矢印以外は慣れてきました。