調べたら、うちのマイクアームが3/8オスのネジ、ウェブカメラのマウントパーツが1/4メスのネジ穴を持っているようだった。そこで、1/4オスと3/8メスを持つ変換パーツをAmazonで注文した。

Gemfile.lockの差分をJSONで表示するライブラリと、それを利用して差分が無いことを検知するGitHub Actionsが欲しい。

こんな感じで、いま現在そのGemfile.lockで指定されているGemについて、バージョンと名前をまとめたやつをJSONとして出力してくれるやつをとりあえず用意すれば良いかな。

require 'bundler'
require 'json'

content = File.read('Gemfile.lock')
parser = Bundler::LockfileParser.new(content)
array = parser.specs.map do |specification|
  {
    name: specification.name,
    version: specification.version
  }
end
puts JSON.pretty_generate(array)

こういう感じになる

[
  {
    "name": "zache",
    "version": "0.12.0"
  },
  {
    "name": "zeitwerk",
    "version": "2.5.3"
  },
  {
    "name": "zip_tricks",
    "version": "5.6.0"
  }
]

require 'bundler'
require 'json'

content = File.read('Gemfile.lock')
parser = Bundler::LockfileParser.new(content)
result = parser.specs.each_with_object({}) do |specification, hash|
  hash[specification.name] = specification.version
end
puts JSON.pretty_generate(result)
{
  "zache": "0.12.0",
  "zeitwerk": "2.5.3",
  "zip_tricks": "5.6.0"
}

Object形式にまとめた方がいいか。

GitHub Actionsのcustom actionのinputsに、allow_listのような Array<String> を渡したいが、これは String しか受け付けていない。

YAMLのヒアドキュメント記法は指示子を指定しなければスペース区切りにできたはずなので、スペース区切りで指定するという制約でいこうかな。

irb(main):067:0" YAML.load <<-EOS
irb(main):068:0" foo:
irb(main):069:0"   bar
irb(main):070:0"   baz
irb(main):071:0> EOS
=> {"foo"=>"bar baz"}

Rubyでカラー表示するの、diffy gemが楽そうだったのでこれ使おうかな。

https://github.com/samg/diffy

$ irb -rdiffy
irb(main):002:0" a = <<EOS
irb(main):003:0" 1
irb(main):004:0" 2
irb(main):005:0" 3
irb(main):006:0> EOS
=> "1\n2\n3\n"
irb(main):007:0" b = <<EOS
irb(main):008:0" 2
irb(main):009:0" 2
irb(main):010:0" 4
irb(main):011:0> EOS
=> "2\n2\n4\n"
irb(main):012:0> puts Diffy::Diff.new(a, b)
-1
 2                                                           
-3                                                           
+2                                                           
+4                                                           
=> nil                                                       
irb(main):014:0> puts Diffy::Diff.new(a, b).to_s(:color)
-1
 2                                                                                                    
-3                                                                                                    
+2                                                                                                    
+4                                                                                                    
=> nil

diff-lcsという老舗のやつも調べたけど面倒になってきた。

2つのGemfile.lockの差分を検査して、差分があればエラーにしてdiffをANSIカラー付きで表示するCustom actionを書いた。

実際プロダクションで動かしてみたら不具合が5件ぐらい見つかった (酷い) が、修正したら意図通り動くようになったのでOKだろう。

質とスピードの話で、およそ4回手動でテストした辺りで自動テストを書いた方が効率が良くなってくるという話があった気がする。今回は書かなかったが、テストを簡単に書けるような実装にはしておいたので、書いてみても良かったかもしれない。

配信のカメラの角度を変えて、PCの画面が完全に映らないようにした。お互い気が散るため。

rubocop_challengerはコードを読んでみたものの、怪しい箇所が多く、自作した方が良いような気もしてきた。