r7kamura / diary

r7kamura's daily working log.
https://r7kamura.github.io/diary/
MIT License
2 stars 0 forks source link

2022-05-12 #5

Open r7kamura opened 2 years ago

r7kamura commented 2 years ago

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

r7kamura commented 2 years ago

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

r7kamura commented 2 years ago

こんな感じで、いま現在その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形式にまとめた方がいいか。

r7kamura commented 2 years ago

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"}
r7kamura commented 2 years ago

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という老舗のやつも調べたけど面倒になってきた。

r7kamura commented 2 years ago

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

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

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

r7kamura commented 2 years ago

.rubocop_todo.ymlを見て勝手にPull Requestを出してくれるやつがあると教えてもらった。

r7kamura commented 2 years ago

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

r7kamura commented 2 years ago

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

r7kamura commented 2 years ago

チャプター情報が上手く書き出されていた。