Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

週刊Railsウォッチ(20200825後編)Rubyクラスライブラリをgem化、Rubyテストフレームワークrr、ChromebookでWindowsが動くほか

こんにちは、hachi8833です。jnchitoさんのブログで週刊Railsウォッチをおすすめいただきました。ありがとうございます!

  • 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄

Ruby

Rubyのキーワード引数でdouble splat **を使う(Hacklinesより)

# 同記事より
class Action::AnalyseDiff
  def initialize(before: nil, after:, repository:, **kwargs)
    @before = before
    @after = after
    @repository = repository
  end

  def call
    # git_diffで何か解析する
  end

  private

  def git_diff
    @git_diff ||= if single_commit?
      # コミットを1件取得
    else
      # beforeとafterの間のコミットを取得
    end
  end

  def single_commit?
    @before.present?
  end
end

event_1 = {
  action: 'push',
  after: 'a-sha-of-a-git-commit',
  repository: 'MikeRogers0/SampleRepo',
  # ..
}

event_2 = {
  action: 'pull_request',
  before: 'a-sha-of-a-git-commit',
  after: 'a-sha-of-a-git-commit',
  repository: 'MikeRogers0/SampleRepo',
  # ..
}

Action::AnalyseDiff.new(**event_1.to_h).call
Action::AnalyseDiff.new(**event_2.to_h).call

つっつきボイス:「ハッシュを渡すときはdouble splat(**)を付けないと互換性を取れないというのはこれまでもさんざん指摘されてましたね↓」「最近になってRubyを2.7にアップグレードした人が慌ててこの辺の記事を見に来てたりして」

参考: Separation of positional and keyword arguments in Ruby 3.0

Ruby 3.0のキーワード引数変更のスケジュールが変更に

rr: Rubyのテストダブルフレームワーク

rr/rr - GitHub

以下のツイートで知りました。


つっつきボイス:「rrっていうテストダブルフレームワークを初めて知ったので」「使ったことはないかもだけど見たことはあるかも」「モックとかスタブとかはひととおり持ってるみたい」

# メソッドにexpectationを1つ作成
mock(object).foo
mock(MyClass).foo

# メソッドにexpectationを1つ作成し、常に値を返すようスタブ化
mock(object).foo { 'bar' }
mock(MyClass).foo { 'bar' }

# メソッドにexpectationを特定の引数付きで1つ作成し、それで呼ばれたときに常に値を返すようスタブ化
mock(object).foo(1, 2) { 'bar' }
mock(MyClass).foo(1, 2) { 'bar' }

「どこで使われているんでしょう?」「Wikiを見ると、RubyGems.orgとかKaminariとかCanCanとかで使われてるということはそれなりにメジャーなのかも?」「お〜」「Wikiの日付が2014年なので今はもっとあるかもしれませんけど」「使わなくなったものもあったりして」

「上のツイート↑がrrがAMDで動かなかった理由だそうです」「あ〜なるほどCPUのパフォーマンスカウンタね!」

「パフォーマンス測定のときに通常の時分秒を使うと粒度が荒すぎて正確に測定できないので、インテルCPUのパフォーマンスカウンタのレジスタから値を取ってきて実行の命令数を調べるというのはよく行われるんですよ」「そうそう」「インテルCPUのレジスタから値を取ってきているので、当然インテルCPUじゃないと動かないでしょうし」「rrにはまだこのissueが上がってないみたい👀」

「こうやってCPUのレジスタから値を取るというのは一種のベストプラクティスとして広く行われているので、AMDで動かない問題は他のところでも影響出るかもしれませんね」

「回答者はこのネタでRubyKaigiで話すんですって」


追記(2020/08/25): 以下のご指摘をいただきました。冒頭のrrとrr-projectは別物でした。訂正いたします。

Rubyの変数


つっつきボイス:「ああ、この質問は定期的に話題になりますね」「それにMatzが自ら答えているのがスゴい」「いきなり天からのお告げを受けたみたいな⛩」「未定義のローカル変数を呼ぶとエラーだけど未定義のインスタンス変数だとnilになるというのは、もう『Rubyではそうなっているから』としか言いようがない」「今さら変えられなさそうな仕様ですね…」

A: Ruby開発開始時からの基本的な原則として、宣言されるもの(定数、ローカル変数、メソッド)は未定義アクセスはエラー、宣言されないもの(グローバル変数、インスタンス変数、HashやArrayの要素)の未定義アクセスはnilという風に決めました。すごく深い理由があったわけではなくて、Perlを参考にしただけですが。
今思えば、ここをnilでなく、エラーにしておけば間違いが見つけやすかったかもしれませんね。でも、initializeで毎回すべてのインスタンス変数の初期化が強制されるのは、やっぱりRuby的ではなかったかもしれません。
「ローカル変数の宣言?」と思った人もいるかもしれませんが、Rubyの文法上、そのスコープでの最初の代入がローカル変数の宣言になります。
Quoraより

Rubyのクラスライブラリをgem化しよう(Hacklinesより)


つっつきボイス:「libの下とかに置いているクラスライブラリをgem化しようぜという記事ね」「可能ならgemにするのはいいでしょうね👍」「kazzさんもRailsでこうやってgemに切り出すのが好きですね」「プライベートgemにするとアクセス権限の扱いとかがちょい面倒になったりはしますけど、それでもgemにする方が美しいし、Railsアプリのコードがひたすらファットになるよりはgem化する方がいいでしょうね」

その他Ruby

つっつきボイス:「おっと、ノベルティまだ買ってなかった」「ピザグッズ買うとRubyKaigiに貢献できるんですよね」

「Tシャツの周りにアイコンが飛び交ってる↓けど、買うと出るのかな?それとも何か押すと出るのかな?」「どっちだろう?」「ちりばめられたい方はご購入よろしく〜」


suzuri.jpより

言語/ツール/OS/CPU

書籍『作ろう!CPU』(予約受付中)


つっつきボイス:「まだ発売されてないんですけど、サポートページがえらく充実してたので買う気になっちゃいました」「FPGAのキットを買えば自分もCPUを組めるようになるという感じの本みたい」「老眼なので本当はKindleで欲しいんですけど」「みんなKindleでいいと思われると紙の本が出版できなくなったりして」「私は紙の本がいいです(キリッ」

参考: FPGA - Wikipedia

「そういえば同人誌でCPU自作する人たちがいましたけど、もしかすると彼ら…?」「それこそ東大にはガチでCPUを作る授業があったりしますね↓」「『ほんとうの』が付いてるのがスゴい😳」

参考: 東大 理学部情報科学科/大学院情報理工学系研究科|情報科学科NAVIgation
参考: CPU実験 — ほんとうのコンピュータ自作(PDF)

「通称『CPU実験』、CPU作るだけじゃなくてコンパイラまで作ったりするという東大の名物授業」「ハードもソフトも全部作るって、クレイのスパコンみたいなことやってるんですね」「最後はチームごとに速度を競ってるし🏎」「いいな〜楽しそうだな〜」

参考: Cray-1 - Wikipedia

その他

ChromebookでWindows


つっつきボイス:「ChromebookでWindowsが動くというのは、要するにParallels DesktopがChromebookで動くようになるということね」

Mac: Parallels Desktop for MacでUbuntu Server LTS環境を構築する

Chromebookよもやま話

「ところでChromebook Enterpriseって、Chromebookでここまでやるか?みたいなスペックですよね」「高いんでしょうか?」「メモリ32GBとか、スペックがもうノートPC並ですし」「32ですか〜?!」「Chromebookの安かろう遅かろうみたいなイメージを吹っ飛ばしてくるところはありますね」「インテルCPUだけかと思ったらx64のAMDもあるのね」「値段が気になります〜」

参考: ビジネス向け Chrome 搭載デバイス  |  Chrome Enterprise  |  Google Cloud
参考: x64 - Wikipedia

「社内でも話題にしたんですけど、Chromebookって通常のノートPCと比べてキッティングがすごくやりやすいじゃないですか: ノートPCを作業者に渡すとできることが多すぎるので、アプリのほかにセキュリティソフトやらシステム管理ソフトやらを1台ずつセットアップしてからじゃないと渡せなくて管理が面倒なんですけど、ChromebookならG-Suiteかストアを使ってもっと楽にキッティングできるんでしょう、きっと」

参考: キッティングとは - 意味の解説|ITトレンドのIT用語集
参考: Chromebooks for Business — 管理された Chromebook を使う(PDF)

「社員がChromebookで十分作業できるなら、大きな企業や組織のシステム管理部門は確実に今までより楽できるでしょうね」「特に昨今のようにコロナでリモートワーク化した企業で大変そうに思えたのはそういうキッティング部門ですし」「物理PCをキッティングしてからユーザーに配布するとなると担当者はどうしても出社しないといけなくなりますし」「ですよね」「しかもリモートワーク前なら社内で使うからよかったけど、今だと社員の自宅に発送する業務まで乗っかってきますし」「キッティングでノートPCに機密データを入れてたら、それの管理やらトラッキングやらでさらに大変そう…」

「Chromebook、企業のキッティング担当者が泣いて喜びそうですよね」「Chromebookなら紛失や盗難のときもOSの標準機能で管理者がリモートでロックしたりデータを消去したりできるでしょうし」「Chrome OSはOSレベルでそういう機能があるからいいですよね: Windowsでもそれ用のソフトを入れればやれますけど」

参考: 紛失したスマートフォンまたはパソコンをロックする、データを消去する - Google Chrome ヘルプ
参考: Google Chrome OS - Wikipedia

番外

数学市民化プロジェクト


つっつきボイス:「数学系の動画チャンネルって思ったよりあるんだなと思って、あとでサブスクしようかなと」「数学系YouTuberとは一体😆」「そこ気になります😆」「数学市民化プロジェクトという企画の一環みたいですね」

参考: 数学市民化プロジェクト – はじまりはKan拡張

「数学の市民化って想像がつきませんけど」「いわゆる『リベラルアーツ』の一科目としての数学ならありそうですけどね」「それならありかも」「リベラルアーツでは、隷属しない自由な市民になるための必要な科目をリストアップしてますけど、そのなかに数学もあったはず」「Wikipediaを見ると文法学・修辞学・論理学の3学、算術・幾何・天文学・音楽、の自由七科ですって」「音楽も入ってるとは」「物理とか化学みたいな科目はリベラルアーツを修めてからだったという」「話はそれからだ、みたいな」「やべ〜何の話だかわからない〜😆」(以下リベラルアーツで延々)

参考: リベラル・アーツ - Wikipedia


後編は以上です。

バックナンバー(2020年度第3四半期)

週刊Railsウォッチ(20200824前編)「Active Jobスタイルガイド」は有用、SiderがGitLabに対応、eager loading時のselectを修正ほか

今週の主なニュースソース

ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。

Rails公式ニュース

Ruby Weekly

Hacklines

Hacklines


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。