- Ruby / Rails関連
週刊Railsウォッチ: ruby-gitでGit操作、最近のruby/debug、stdgems.org、Windows 365 Cloud PCほか(20210720後編)
こんにちは、hachi8833です。
🔗Ruby
🔗 ruby-git(Ruby Weeklyより)
つっつきボイス:「RubyからGitを操作できるgemがあるんですね」
# 同リポジトリより
g = Git.open(working_dir, :log => Logger.new(STDOUT))
g.index
g.index.readable?
g.index.writable?
g.repo
g.dir
g.log # returns array of Git::Commit objects
g.log.since('2 weeks ago')
g.log.between('v2.5', 'v2.6')
g.log.each {|l| puts l.sha }
g.gblob('v2.5:Makefile').log.since('2 weeks ago')
g.object('HEAD^').to_s # git show / git rev-parse
g.object('HEAD^').contents
g.object('v2.5:Makefile').size
g.object('v2.5:Makefile').sha
g.gtree(treeish)
g.gblob(treeish)
g.gcommit(treeish)
# (略)
「インストールコマンドがsudo gem install git
なの、わかるけどちょっと面白かった」「内部でGitコマンドを使っているみたい」
「Gitのコマンドはひととおり使えそうかな」「★も1,500超えですね」「たしかにRubyでGitコマンドをシェル経由で呼び出して標準入力を自分で取ったりするより使い勝手はいいでしょうね: こういうGitバインディングがRubyで使えるのはよさそう👍」
🔗 dry-transformer
つっつきボイス:「dry-transformerは、dry-rbシリーズの割と新しいgemだそうです」「新しいといっても2年前ぐらいかな」
- サイト: dry-rb - Home
「こんなふうに変換のパイプラインを記述できるらしい: mapperやreducerを思わせますね」
# dry-rb.orgより
class MyMapper < Dry::Transformer::Pipe
import Dry::Transformer::ArrayTransformations
import Dry::Transformer::HashTransformations
define! do
map_array do
symbolize_keys
rename_keys user_name: :name
nest :address, [:city, :street, :zipcode]
end
end
end
mapper = MyMapper.new
mapper.(
[
{ 'user_name' => 'Jane',
'city' => 'NYC',
'street' => 'Street 1',
'zipcode' => '123'
}
]
)
# => [{:name=>"Jane", :address=>{:city=>"NYC", :street=>"Street 1", :zipcode=>"123"}}]
「dry-transformerは以下の記事で知りました↓」「CSVのエクスポート/インポートやRSSのパース、コードハイライトなどに使えるとある: たしかにパーサーにはいいかも」
「Dry::Transformer::HashTransformations
をインポートするとハッシュを受けるパイプを作れるみたい」
# 同記事より
class HanamiMasteryAdapter < Dry::Transformer::Pipe
import Dry::Transformer::HashTransformations
define! do
deep_symbolize_keys
nest :address, %i[city zip]
rename_keys login: :name
end
end
hash = {
'id' => 1
'login' => 'John',
'city' => 'NY',
'zip' => { 'number' => 1234 }
}
adapter.call(hash)
# => { id: name: 'John', address: { city: 'NY', zip: { number: 1234 } } }
「できればdry-transformerがうまくハマるような、もうちょっと複雑な例をコードで見たいですね: MapReduce的な処理は複数プロセス間でのデータのやりとりがメインになる印象が強いんですが、この記事だと1個のプロセス内でやるシンプルなコード例しか載っていない」「たしかに変換を1個作るだけだとありがたみがわかりにくいかも」「さまざまな変換処理をパイプでつなぎ替えて出力を変えられるとか、そういう実例が欲しい」
🔗 最近のruby/debug
[ruby/debug: Debugging functionality for Ruby](https://t.co/XnnwnAeGCL) Document (https://t.co/VsPWIT5Lhc) is fully rewritten. Please check it.
— _ko1 (@_ko1) July 13, 2021
つっつきボイス:「ruby/debugのドキュメントが全面的にリライトされたそうです🎉」「_ko1さん精力的に活動していてスゴい」
「1.0.0のリリースを目指しているようです↓」「今はv1.0.0.beta8なのね」
https://t.co/XnnwnAeGCL の仕様で悩んでるんですが、どなたか使って試してもらえないですかね。とくに remote debugger
— _ko1 (@_ko1) July 12, 2021
🔗 stdgems.org
- サイト: Standard Gems
同サイトは、以下のブログサイトにあった情報を独自ドメインに切り出したもののようです。
つっつきボイス:「ruby-jp Slackでこのstdgems.orgを見かけました」「おぉ、Rubyバージョンごとのdefault gemsとbundled gemsのリストをここで見られるんですね、これは地味にありがたい!」
「こういうリストはそんなに頻繁に使わないんですけど、たまに探し回るんですよ」「たしかに」「gemのバージョン番号もちゃんと書かれているのがいいですね: Gemfile.lockで競合が発生したときにデフォルトでインストールされるgemのバージョンを調べることがあるんですが、こういう情報があると助かります: いいサイト👍」
🔗 その他Ruby
mruby/c v3
Ruby,mrubyとの互換性向上のため、Fixnumクラスを「廃止」して Integerに変更します。
エイリアス的に残す事も検討しましたが、実装が不自然になりそうなのとメモリ使用量削減第一主義により、廃止と決定されました。— mrubyc-dev-jp (@mrubyc_dev_jp) July 14, 2021
つっつきボイス:「mrubyではなくmruby/cの変更ですね」
「CRubyのFixnumとBignumがIntegerに統合されたのはいつだったかな...Ruby 2.4か↓」「もうだいぶ前なんですね」
参考: Ruby 2.4 unifies Fixnum and Bignum into Integer | BigBinary Blog
後でやってみると、Ruby 2.5.9やRuby 2.6.8では以下のwarningを出してIntegerが返り、Ruby 2.7.4とRuby 3.0.2ではwarningなしでIntegerが返りました。
irb(main):001:0> Fixnum
(irb):1: warning: constant ::Fixnum is deprecated
=> Integer
🔗 セキュリティ
🔗 Open Source Vulnerabilitiesデータベース
つっつきボイス:「Open Source VulnerabilitiesはGoogleがやっているプロジェクトのようですね」「現在の脆弱性交換スキーマ定義はこんな感じらしい↓」
# 同記事より
{
"id": string,
"modified": string,
"published": string,
"withdrawn": string,
"aliases": [ string ],
"related": [ string ],
"package": {
"ecosystem": string,
"name": string,
"purl": string,
},
"summary": string,
"details": string,
"affects": [ {
"ranges": [ {
"type": string,
"repo": string,
"introduced": string,
"fixed": string
} ],
"versions": [ string ]
} ],
"references": [ {
"type": string,
"url": string
} ],
"ecosystem_specific": { see spec },
"database_specific": { see spec },
}
「あるとありがたい情報ですしGoogleがこういうプロジェクトをやるのも理解できるけど、他の企業とかも巻き込んでアライアンス主体の運用になればプロジェクトの継続性についてより安心できるかなと思いました」「CVEはIDの付与と基本情報やリンクの提供にとどまっていますけど、ちゃんと継続的に運用されていますよね」「スキーマも欲しいけど継続的運用の方が欲しい」
参考: CVE - CVE
🔗クラウド/コンテナ/インフラ/Serverless
🔗 大きなGitリポジトリの操作
つっつきボイス:「はてブでバズっていた記事です」「シャロークローンはよく使われていて、パーシャルクローンも見た覚えがあったけど、リファレンスリポジトリ周りの話は初めて見た」
「こうした個別の手法や概念は昔からGitにありますが、ゲームなどのように画像などのアセットが多い大規模なサービスを扱うようになると、この記事で解説されているようなことが関連してくるでしょうね: 通常の開発だとなかなかそこまではいかないかもしれませんが」「なるほど」「GitHubのような大規模リポジトリサービスを構築する場合に必要になりそうですね」
「このgit fetch --unshallow
知らなかった↓: シャロークローンで最初はスキップして取り込まなかったコミットを改めて全部取り直せると記事にもある」「へ〜!」
git fetch --unshallow もっとはよ知りたかった
— Ryuta Kamizono (@kamipo) July 12, 2021
🔗言語/ツール/OS/CPU
🔗 Windows 365 Cloud PC
MSも当然それを想定しているであろうことを考えると、ラストワンマイルならぬラストワン物理マシン向けにChromeOS並の管理容易なシンクライアント構成なWindowsも計画されてそう。
— masa寿司 (@masa_iwasaki) July 15, 2021
まぁみんなそう考えるよねhttps://t.co/2xlHTYDv0a
— masa寿司 (@masa_iwasaki) July 15, 2021
つっつきボイス:「Windows界隈がこれで盛り上がっていますね」「Twitterにも書きましたけど、企業のインターネット接続が果たして持つだろうかと思いましたね」「ああ、そこか!」「今はリモートワーク主体なので企業のネット回線にはそれほど負荷はかかっていませんけど、それが終わって全員出社するようになったときに負荷が一気に高まって詰まりそうな予感」「う〜む」
Windows 365クラウド、在宅リモートワーク主体の今はいいけどワクチン接種回りが一通り落ち着いて全社員出社せよ!と体制戻した企業の対外回線がボトルネックになって仕事にならなくなるところまでは想像した(社員数規模にもよるが、1Gbpsでも普通に足りなくなりそう
— Masato Mori (@morimorihoge) July 15, 2021
「多くの企業のインターネット接続が1Gbpsぐらいだとすると、社員がそこで普通にネット接続をシェアしている分には、社員全員がNetflixを見るみたいな無茶をしない限り問題ないんですが、Windows 365 Cloud PCのような感じで全員がリモートデスクトップ経由でVDIに常時接続すると回線が詰まるんじゃないかな」「それもそうですよね...」
参考: デスクトップ仮想化(VDI)の基本について学ぶ | IT価値創造塾
「逆に、社員同士での巨大ファイルのやりとりが非常に多い場合とかならWindows 365 Cloud PCの方がファイルのやりとりがクラウド内に閉じ込められる分軽くなるかもしれませんね」「なるほど」「シンクライアントの夢ふたたび感ある」「遅延がつらくなりそうなので、自分は使わないかな〜」
🔗 Windowsリモートデスクトップ接続よもやま話
「最近調べたんですが、Windows 10リモートデスクトップのホスト機能はHomeエディションのみ利用不可で、たとえばProエディションとEnterpriseエディションでは同時に1台まで接続可能」「ふむふむ」「同時接続数はレジストリを変更すれば増やせるんですが、デスクトップ画面を表示できるのはあくまで1ユーザーのみで、他の同時接続はその画面をシェアする形になるので、いわゆるUnix系OSのマルチログイン的なことができないんですよ(別ユーザーで接続すると既存ユーザーはログアウトされる)」
「Windows Serverなら同時ログインデスクトップ数が2まで緩和されるので、たとえばAdministratorとoperatorが同時に異なるデスクトップを利用できるそうです」
参考: Windows10 - リモートデスクトップを有効にする方法 | PC設定のカルマ
「個人的にはHomeエディションでリモートデスクトップ接続が許可されて同時ログインデスクトップ数2まで使える方がうれしいかな: それが可能になればリモート接続でゲームができるから」「それはたしかに憧れの機能😆」「リモートPCにゲーム専用のユーザーを作っておけば、手元のPCのフォアグラウンドを落とさずにリモートでゲームを起動できるかなと思ってそのあたりを一生懸命調べたんですけど、どうやらWindows Serverじゃないとできないみたい」「残念」
「その一方で、Azureで動いているWindowsはマルチセッションが使えることが判明しました: このAzure Virtual Desktopがそうです↓」「へ〜!」「Azure環境ならマルチセッションで複数ユーザーが同時接続できるのに、通常のWindowsだと許されてなくて悲しい結論になってしまいました」
参考: Azure Virtual Desktop | リモート デスクトップ | Microsoft Azure
🔗 その他ツール(StatusCode Weeklyより)
つっつきボイス:「rfc.fyiはRFCファイルを爆速検索できるサービスですね」
「slowfil.esは何だろうと思ったら、https://slowfil.es/file?type=js&delay=2500
みたいなURLをscript
タグとかで読み込ませると、遅延をかけたりステータスコードを404や500にしたレスポンスを返してくれるということらしい」「なるほど」「ごくたまに、開発中に遅いWebサイトを読み込ませるとどうなるかを手軽に試すときに使う感じかな」
後編は以上です。
バックナンバー(2021年度第3四半期)
週刊Railsウォッチ: GitHubによるdisable_joins解説、MemoWise gemでメモ化、RailsのDDoS攻撃対策ほか(20210719前編)
- 20210713後編 ruby-spacyで自然言語処理、Ruby製x86-64アセンブラ、『タイムゾーン呪いの書』ほか
- 20210712前編 AR::Relation#destroy_allがバッチ分割に変更、Active Record暗号化解説、sidekiq-unique-jobsほか
- 20210706後編 GitHub CopilotのAI補完、Pure Ruby実装のRuby JIT rhizome、PostgreSQLのPG-Strom拡張ほか
- 20210705前編 DI的な書き方が必要なとき、脆弱性学習用アプリRailsGoat、brakemanは優秀ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)
お知らせ: 今週木金は祝日のため、来週は週刊Railsウォッチの代わりに通常記事を公開します。