- Ruby / Rails関連
週刊Railsウォッチ(20200428後編)Rubyのバックトレース順序が戻る、KubernetesでRailsをスケール、セキュリティソフト入れますか?ほか
こんにちは、hachi8833です。ついさっき見つけた記事がよかったので貼りました。
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
- 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください
⚓Ruby
⚓Rubyのバックトレース順序が戻る
Wow! I really appreciate that decision, thank you so much matz!!https://t.co/1StfHTdQen
— Ryuta Kamizono (@kamipo) April 21, 2020
つっつきボイス:「@kamipoさんが超喜んでますね」「そう、これこれ!以前バックトレースの表示順序が変更されてからマジでやりづらいと思ってましたし😭」「今回の改定を喜んでいる人は@kamipoさん以外にもきっとたくさんいる😂」
以下は改定直前のツイートです。
僕はプリントデバッグするときにどっちの順序のバックトレースも目にするからいちいちどっちの順序か考えて見なきゃいけないの本当にだるいと思っている https://t.co/qrOAQnBygw pic.twitter.com/SxVHog7ocs
— Ryuta Kamizono (@kamipo) April 19, 2020
「バックトレースの順序が変わることがあったんでしょうか?」「正確にはRubyのバックトレースが変わったけどRailsのバックトレースの順序は変わらなかった」「あ、そういうことでしたか😳」「Ruby 2.5の変更より前はバックトレースの順序は常に同じだったんですが、変わってからわかりにくくて😭」
しかもこれに加えて一般のRubyユーザーが予測困難な条件でなんとバックトレースの順序が反転するという画期的なギミックが搭載されてるのが本当にきつい
— Ryuta Kamizono (@kamipo) April 19, 2020
「『バックトレースの順序が反転するという画期的なギミック』って超ワナですよ😇」「まあちょっと読めば順番が変わっているのはわかるんですけど」「RubyとRailsで順序が違うのが痛い😇」「みんな困ってないんだろうかって不思議だったし😆」
Ruby 2.5 ではバックトレースが変わって、順序が逆になっていたり、太字や下線で装飾されたりします。
デモとして、π と e を行番号とメソッド名で表現してみました。見やすい?
(同じ挙動をするプログラムを書いてみてください。ただし eval は使いません) pic.twitter.com/rJaL0dfBcX
— Yusuke Endoh (@mametter) November 30, 2017
⚓提案: Struct#initialize
でキーワード引数もデフォルトで取れるようにしよう
# 同issueより
Post = Struct.new(:id, :name)
# 以下に加えて
Post.new(1, "hello") #=> #<struct Post id=1, name="hello">
# 以下の初期化もできるようにしよう
Post.new(id: 1, name: "hello") #=> #<struct Post id=1, name="hello">
つっつきボイス:「あ、Struct.new
した後のnew
でということか😳」「まあ名前は付いてますし、使いやすさ的には全然いいかなと思うけど🤔」
後で現行のRuby 2.7で実行すると以下のように引数が全部id:
に入りました。
Post = Struct.new(:id, :name)
Post.new(id: 1, name: "hello")
=> #<struct Post id={:id=>1, :name=>"hello"}, name=nil>
「ちなみに自分はStructもOpenStructもあんまり使わない方で、Value Object作るならちゃんとクラス書きたい派😆」「😆」「今日はいないけどkazzさんが前にStructをちょくちょく使ってるのを見て『大変そうだな〜』って思いましたし😆」
参考: class Struct
(Ruby 2.7.0 リファレンスマニュアル)
参考: class OpenStruct
(Ruby 2.7.0 リファレンスマニュアル)
⚓super_method
メソッドでRubyのDecoratorをテストする(Ruby Weeklyより)
つっつきボイス:「super_method
っていうメソッドがあるって知りませんでした😅」「途中の見出しが『The super super_method
method』😆」「super
で呼ばれるはずのメソッドをMethod
オブジェクトにするみたいです」「Method
オブジェクトにsuper_method
メソッドがあるのは当然でしょうね☺️」「リフレクションするのに必要でしょうし☺️」
self 内で super を実行した際に実行されるメソッドを Method オブジェクトにして返します。
ruby-lang.orgより
「そのsuper_method
でDecoratorをテストするという記事か」「えぇ?、described_class.new.method(:info).super_method.call
みたいなテストって書くかなぁ?😅」「わざわざsupoer_method
してからcall
するって、どういう観点のテストなのかわからん😆」「継承とは何ぞやと😆」
# 同記事より
RSpec.describe Address do
describe '#info' do
subject { described_class.new.info }
it 'adds the phone number to the default address' do
expect(subject).to include(phone_number: '123456789')
expect(subject).to include(
described_class.new.method(:info).super_method.call
)
end
end
end
「呼べるか呼べないかで言えばたしかにsuper_method
は呼べますけど、こういうテストが欲しくなる状況がぱっと思いつかない😅」「記事はspecがシンプルになるということみたいだけど、ちゃんとテストできてるんだろうか🤔」「デバッグツールを作るのでトリッキーなことをしたいとかならともかく、普通のコードでsuper_method
を使うことはないんじゃないかな〜、普通は☺️」
⚓クロージャでRubyコードを読みやすくする(Ruby Weeklyより)
つっつきボイス:「f.call()
のショートハンドがf.()
というのも今頃知りました」「f.()
はカリー化の文脈とかで割とよく見るヤツですね☺️」「そうでしたか😅」「自分も見るたびに?って思いますし、あんまり好きな書式でもありませんけど、call()
よりは短いですし😆」
def bar(f)
f.()
end
bar(method(:foo)) # => hello from foo
「記事にも『f.()
はビジネスロジックではめったに見かけないがオープンソースではよく見かける』ってありますね」「カリー化がビジネスロジックでめったに使われないからでしょう、きっと😆」「まあ😆」「もちろんビジネスロジックでカリー化がふさわしいこともありますし、それなら別にいいんですけど、呼び出しが増えると遅くなりがちなので☺️」
参考: カリー化 - Wikipedia
「ともかく.()
は随分昔からちゃんとしたRuby入門には書いてあると思いますヨ😋」「探します👁」
ありました↓。
.()
は、メソッド名のないメソッド呼び出しのように見える。これは定義できる演算子ではなく、call
メソッドを呼び出すための構文糖である。この記法は、Proc オブジェクトに限らず、call
メソッドを定義するすべてのオブジェクトで使える。
『プログラミング言語Ruby』(オライリー)p202より
⚓Rubyのlambda呼び出し
「...Rubyだとlambdaでインラインメソッド的なものを書くときに何だかキモチヨクナイ気がします😆」「はいわかります😆」「C++でもJavaScriptでもかっこ()
だけつけて関数と同じように呼べるのに、Rubyはこの.()
という書き方のせいで普通の関数とlambdaが区別されるので、一時的な関数を作る気力が削がれそう😇」「それはある😆」「すっごくわかる😆」「普通に()
で呼びたいのに😢」「いろんな互換性に配慮した結果そうなっているのはわかるんですが😅」「言語仕様上しょうがないんですけど😅」
後で自分でもやってみました。Rubyだと.()
ですね。
// JavaScript
let foo = num => { return num * 2 };
foo(7); // 14
// C++
auto foo = [](auto num) { return num * 2; };
printf("%d", foo(7)); // 14
# Ruby
foo = ->(num) { num * 2 }
foo.(7) # 14
⚓RailsのHashWithIndifferentAccess
がRubyにないのはなぜ?
参考: ActiveSupport::HashWithIndifferentAccess`
つっつきボイス:「Redditにあったスレです」「よく持ち上がる話😆」「昔Matzがその辺の理由についてコメントしてたような覚えがあります」「『RubyがPHPみたいになるから』だったりして😆」「文字列とシンボルは全然違うものなのに、そこがRails方面にうまく伝わらなかったとかそんな感じ🧐」「へ〜」
「プログラミング言語全般ではたしかに文字列とシンボルは違いますし、自分もそう思うんですけど、Webの文脈だとその辺が厄介なんですよね😅」「うんうん」「Webだとどんなパラメータもいったん文字列になってしまうので、そういうのが間に挟まってHashWithIndifferentAccess
ができたのかなと思ってます☺️」「元PHPerとしてはHashWithIndifferentAccess
って結構好きなんですけど😆、言語全般として考えたら一貫してないよねというのはワカル」
参考: Smalltalk と Ruby と LISP のシンボル - Smalltalkのtは小文字です
「でも最近のRubyだと文字列をfrozenにする動きがありますけど、それがデフォルトになったらHashWithIndifferentAccess
と同じにしてもいいんじゃね?ってちょっと思いますね」「気持ちわかります」「もちろん文字列とシンボルは違うという主張はわかるんですけど、frozenがデフォルトの世界なら多少同一視してもいいのかなと😋」「探索速度とかを考えたら多少の同一視はありかも😋」
「...さっきのMatzのコメントは、どうやら以下の記事↓の記憶が自分の中で改ざんされてたらしき🤣」「自分で訳してて忘れてた😆」
(Rubyの)シンボルはLispのシンボルを取り入れたもので、Lispのシンボルは文字列とは根本的に異なっていました。(Lispの)シンボルは文字列表現としてはイケてません(し速くもありません)が、Rubyはシンボルに関して独自路線を取ったため、シンボルと文字列の違いは(Rubyの)ユーザーからはそれほど認識されてこなかったのです。
同記事の引用より
「frozenなら事実上一意の値が与えられると考えてもいいんでしょうね」「frozenならそうだと思います☺️」「unfreezeしなければ😆」「シンボルって要は整数の定数だから、frozenなstringのアドレスだと思えばいいっちゃいいかも😆」「シンボルはto_s
できますし」「個人的にはfrozen string literalをオフにできないことを前提にできるのなら文字列とシンボルを同一視してもいいかなと思います: でも今のRubyだとファイルごとにfrozen string literalをオンオフできるから同一視するとマズいのかもしれないけど☺️」「うーむ」
⚓Rubyで線形回帰(Ruby Weeklyより)
つっつきボイス:「ruby-linear-regressionというgemで線形回帰やってみた記事だそうです」「自分ならExcelでやれるところはExcelでやって、ExcelでできないところはPythonとかRでやっちゃうかな😆」「たしかにExcelでもできますね😆」「回数が多すぎなければ☺️」
# 同記事より
require 'csv'
require 'ruby_linear_regression'
x_data = []
y_data = []
csv = CSV.read("top50.csv")
csv.shift
# Load data from CSV file into two arrays -- one for independent variables X (x_data) and one for the dependent variable y (y_data)
# Row[0] = title
# Row[1] = BPM
# Row[2] = Popularity
csv.each do |row|
x_data.push( [row[1].to_i] )
y_data.push( row[2].to_i )
end
# 回帰モデルの作成
linear_regression = RubyLinearRegression.new
# 訓練データの読み込み
linear_regression.load_training_data(x_data, y_data)
# 正規方程式でモデルを訓練
linear_regression.train_normal_equation
# 計算コストを出力
puts "Trained model with the following cost fit #{linear_regression.compute_cost}"
# ある曲の人気を250 BPMで予測
prediction_data = [250]
predicted_popularity = linear_regression.predict(prediction_data)
puts "Predicted popularity: #{predicted_popularity.round}"
参考: 線形回帰 - Wikipedia
⚓その他Ruby
Thank you for becoming my GitHub Sponsors!! Now I have 21 sponsors! Even 2 $200/month ones! Greatly appreciated.https://t.co/MYnKZ6wJrQ
— Yukihiro Matsumoto (@yukihiro_matz) April 23, 2020
つっつきボイス:「MatzのGitHub Sponsorsが今23人ぐらいになったそうです」「お、月10ドル払えばここのバッジに載せてもらえるのか🎫」「こういうのはいいですね〜😋」
その後見てみたらスポンサーが65人に爆増してました🎉。
なおRailsチュートリアルとRailsガイドでお馴染みのYasulabYassLab社も、招待制の法人向けGitHub Sponsorsの審査にパスしました🎉。
#GitHub 社が現在招待制で進めている法人向け GitHub Sponsors の審査に通りました! 🙏💖@YassLab 社では電子書籍や解説動画など、既に有償の商品やサービスも提供していますが、それらとは別のカタチで関わりたい場面などありましたらご活用頂けると幸いです 😌✨
📜詳細: https://t.co/OtbPxHAVh1 pic.twitter.com/ynhTEcJCsd
— 安川要平/Yohei Yasukawa (@yasulab) April 13, 2020
追記(2020/04/29): YassLab社のご指摘を受けて記事を修正いたしました🙇。
⚓DB
⚓PostgreSQL 13のinsert-onlyテーブルautovacuumを改善(Postgres Weeklyより)
つっつきボイス:「insert-onlyテーブルなんてのがあるのか」「ぽすぐれ何でもある😆」「UPDATEしないテーブルという意味でしょうか?」「いわゆるappend-onlyテーブルでしょうね🧐」「昔からあるんですね」
参考: Querying Append-Only Tables | Stitch Documentation
「autovacuum自体はPostgreSQLに昔からあるけど、それをinsert-onlyテーブル向けに賢くチューニングしたということみたい」「おぉ」「そもそも最近のPostgreSQLはvacuumを手動で実行しなくてもそれほど遅くならなくなったはずなので☺️」
autovacuumはテーブルの特定の値が上回ると常に実行される。この値は
“autovacuum_vacuum_insert_threshold
(デフォルトは1000)とautovacuum_vacuum_insert_scale_factor
(デフォルトは0.2)から以下のように算出される。
insert_threshold + insert_scale_factor * reltuples
reltuplesは、pg_classカタログから取得したテーブルの行数の見積もり。
同記事より
見出しより:
- insert-triggeredでautovacuumが動くしくみ
- ユースケース1: insert-onlyテーブルでの「anti-wraparound」vacuum
- insert-onlyテーブルでVACUUMが必要な理由
- insert-onlyテーブルのanti-wraparound vacuumが問題になる可能性がある理由
- 破壊的なanti-wraparound vacuumから身を守る方法
- ユースケース2: insert-onlyテーブルでのindex-onlyスキャン
- PostgreSQLのindex-onlyスキャンのしくみ
- insert-onlyテーブルでのindex-onlyスキャンの問題点
- insert-onlyテーブルでindex-onlyスキャンを取得する方法
- ユースケース3: insert-onlyテーブルでの「hint bit」
- 今後の改良
- まとめ
⚓クラウド/コンテナ/インフラ/Linux/Serverless
⚓KubernetesでRailsをスケールする(Hacklinesより)
つっつきボイス:「要はRailsをPodに押し込めろと😆」「ポッドというと...」「PodはKubernetesのコンテナの単位です🧐」「そういえばKubernetesを勉強中って話してましたね」「合間を見て、くばねて本をちまちまと😆」
「最近BPSのWebチームもDockerやdocker-composeの運用が定着してきたので、そろそろ普通のコンテナオーケストレーションツールで包んじゃおうかなと構想中📈」「お、いよいよですね😋」「AWSのECSやFargateを見てくれているメンバーがいるので、じゃ自分はくばねて方面をやろうかなと思ってます☺️」「なるほど〜」「BPS社内にあるDocker用のホスティングマシンが6個ぐらいできてきてそろそろややこしくなってきましたし😆」「前は4つだった気がしますけどさらに増えてるとは😳」「メモリが足りなくなると足す感じでやってます☺️」
見出しより:
- スケールアップする
- Autopilotでスケールする
- タスクをJobsで実行する
- productionのログファイルをinspectする
- Podにログインする
- その他の便利タスクたち
⚓GitHubとGitLab
- 元記事: Stay on top of your code reviews with scheduled reminders - The GitHub Blog
- 元記事: GitHub Actions: Community momentum, enterprise capabilities, and developer improvements - The GitHub Blog
- 元記事: 18 GitLab features are moving to open source | GitLab
つっつきボイス:「GitHubとGitLabの機能リリースがいくつか出てたので」「GitHubもGitLabも、リポジトリ管理ツールというよりは開発プロジェクトの管理ツール&オーサリングツールに変化してきた感じはありますね🧐」「ところで以下の記事の見出しにGitLabのカンバン表示が書いてありますけど、カンバン表示は前からオープンソース版のGitLabにもあるんですよね😆」「そうですね😆」
参考: GitLab、有償版の機能をオープンソースへ移植すると発表。カンバン表示やカナリーデプロイ、複数のKubernetesクラスタの使い分けなど18機能 - Publickey
「まあGitLabは有料版とオープンソース版で元々そんなに違いはありませんでしたし、逆にオープンソース版にあるけど有償版の下の方にはなかった機能もあったりしましたし、一般に思われているほど差はないかなと思いますね☺️」「へぇ〜😳」
GitLab記事を見ると、以下のそれぞれのissueを足して18個になるようです。
- 「Plan」「Create」「Verify」「Package」「Release」「Configure」「Defend」がオープンソースに移行した
⚓CSS/HTML/フロントエンド/テスト/デザイン
⚓Periodic Background Syncとは
つっつきボイス:「例のjxckさんの記事です」「PWA(Progressive Web Apps)に関連するブラウザとかWebの仕様の話のようで、Service WorkerのBackground Syncとは違うことをやりたいという感じ」
参考: PWAをもっと簡単に初めてみる - Qiita
参考: サービスワーカー API - Web API | MDN
参考: ServiceWorkerのBackground Syncでオンライン復帰時にデータ送信 - Qiita
「お〜、『Webをインストールする』という言い方をしてますね」「Webをインストール?」「おそらくですがローカルで動くものとWebで動くものを区別しないで実行できるというような意味合いだと思います: 以下にあるように、Webアプリは本来インストールなしで実行できるけど、特定の機能が必要なときはインストールしてパーミッションを与えないといけないという感じ」「おぉ〜」
本来 Web は、インストールのような操作なく、 URL にアクセスするだけでページが読み込まれ、スクリプトが実行される。
ここで強力な機能(Powerful Features)がユーザの同意なく実行されると、意図しない問題が発生する可能性がある。
そのため、ここまでの機能は、その API の重要性に応じて User Gesture, Feature Policy, Permission Prompt などを使い分けてきた。
一方、 Native App は、強力な OS 機能の利用を、ユーザによる明示的なインストールという操作(とそこで発生する認証や追加許諾)によって許可してきた。
この考え方に合わせれば、 「Web もユーザが明示的に Install すれば、 Native と同等の機能を許可できるのではないか」という発想に至る。
同記事より
「Webアプリもインストールという明示的な操作を経れば、ブラウザで冒頭のPeriodic Background Syncみたいな動作を許可してもいいのでは、ということですね」「おぉ〜」「Windowsにもアプリのインストールでroot権限取るときにダイアログが出てくる機能があったけど、あれ何て名前だっけ?🤔」「...Windowsでぽーんと出るのはUACですね」「それそれ😋、Webのインストールはそういうのに近い考え方なのかなと思って」「Webをインストールするという言い方は何となくいい感じな気がします👍」「ですね😋」
参考: ユーザーアカウント制御(UAC) - Wikipedia
「ところで『Webをインストールする』って元記事の人独自の言葉なのかな?🤔」「引用されてるissue↓とかにもinstalled web appとかinstallableみたいな言い方があるから、そちらが元みたい」
- リポジトリ: Periodic Background Sync has serious security risks, which are not described or adequately mitigated · Issue #169 · WICG/BackgroundSync
- 元記事: What does it take to be installable?
「つい昔なつかしのActiveXみたいなものを想像してしまったんですが、たぶん違いますよね?😅」「Webをインストールするというのは、ブラウザの権限付与の文脈の中でインストールらしい動作を明示することで特定の操作の許可を得ることだと今のところ理解しているので、ActiveXでOSライブラリの実行を許可するのとは違うでしょうね🧐」「なるほど😅」
「まあPeriodic Background Syncがどのぐらい大事なのかはわかりませんが😆、Webをインストールするという考え方はキャッチーだし、なかなかいいと思いました😋」「はい😋」「今のService Worker周りは正しく使われてない度が高い気はしますけど🤣」「通知許可したことないです🤣」
⚓Webプッシュ通知よもやま話
「最近通知の許可を求めてくる新聞系のサイトが多くて嫌になるじゃないですか😆」「たしかに😆」「あれを自動でオフにするChrome拡張とかもあるぐらいですし、ユーザーが速攻不許可にする感じになってますよね😆」「😆」「なのでインストールという考え方に移行して、もっとtrustedなしくみを導入するのはありなのかなと思いました☺️」「それはそれで悪用されたりして?😆」「まあ先のことはわかりませんが😆」
「...Webブラウザは昔からブラウザを閉じればすべてが終わるという大前提でやっていますけど、Service Workerとプッシュ通知が入ってきたあたりから変わりつつありますね: でもそこで昔からやっている人たちの機嫌を損ねないように、ものすごく慎重にバランスを取りながらやってるという印象あります🧐」「それはある」「それに何がセキュリティホールなのかは最早感触でしかないという側面もあるので、仕様が不評を買わないための落とし所を慎重に探している感じですね☺️」
「あの手の通知許可ダイアログ、あちこちで出くわす😆」「しょっちゅう出てくるあのダイアログは単なる通知の許可だと思います」「あれはService Workerの許可とは別でしたっけ?」「ブラウザのプッシュ通知は専用のAPIがありますね🧐」「つまりService Workerは通知そのものとは別なのか」「オフライン対応で広く裏で使われているとは思います: オフライン対応するならService Workerは必須です☺️」「なるほど」「たしかにそれがないと動かしようがないですし」
「実はあの通知がうざすぎるということでMozillaとGoogleがそれぞれ通知をおとなしくさせる予定になっていて、もうすぐアップデートが来るはずです」「それは大歓迎🎉」「プッシュ通知はフォーカスをダイアログに持っていかれるのが問題」「ほんとそれ!😤」「アンケート取ったらほとんどの人が読まずに通知のNoを押してることがわかったそうです🧐」「でしょうね🤣」「🤣」
「今リンク貼りました↓🩹」「非常に不人気🤣」「やはり🤣」「実装した人たちは乱用されると思わなかったんだろうか🤣」「許可が1%程度で48%は明示的に拒否ということは、残り50%は単に離脱しているということでは🤣」「もう即閉じ🤣」
参考: 非常に不人気な「Web Push通知」、Firefox 72以降ではポップアップを表示せずURLバーのアイコンで通知するのみに | スラド IT
「おとなしめの通知ではURLバーに通知が出るのか: それならまあいいかも☺️」「Webをインストール、覚えとこう😋」
⚓言語・設計・ツール
⚓セキュリティソフト入れますか?
私物のパソコンには有償のアンチウイルスソフトは導入していません。Windows10付属のWindows Defenderを使っています。理由はそれで十分だからです。
仕事で使うPCにはグループ共通のウイルス対策ソフトが入っています。これはセキュリティポ… https://t.co/paEy8B40Bw— 徳丸 浩 (@ockeghem) April 22, 2020
つっつきボイス:「仕事のパソコンはセキュリティポリシー上の理由でウィルスチェッカー入れてるけど私物のパソコンはWindows Defenderで十分って徳丸先生が言ってますけど、そういうものなんでしょうか?」「あ、私もそうですよ: 私物PCはWindows Defenderだけです☺️」「おぉ」
参考: Windows セキュリティによる保護 - Windows Help
「...セキュリティソフトなんてセキュリティホールを増やすためのソフトじゃないですか🧐」「なんと🤣」「🤣」「セキュリティソフトがウィルスソフトって言われるのは、あれ言い間違いじゃないと思ってますから🧐」「そこまで🤣」「🤣」
「だいたいセキュリティソフトってセキュリティ上よくないことしかしないじゃないですか: 特権で勝手に動いてフルスキャンかけるし、SSLを通そうとして証明書のチェックをおざなりにしたりとか、そんなんばっかしです🧐」「お、おう😅」「まあそうですけど😆」
「まあ自分たちが業務用PCにセキュリティソフト入れてるのも徳丸先生と同じで、取引上の理由しかありませんし😆」「はい☺️」「セキュリティソフトに意味があるとすれば、うっかりミスを防ぐ効果でしょうね🧐」「あまり詳しくない人ほど効果が高い☺️」「Webカメラ止めてくれたりするのは実際ありがたいですし😋」
「でもセキュリティにこだわればこだわるほどセキュリティホールの比率は高まると思います😆」「セキュリティソフトがルート証明書入れてくる時点でどうかと思いますし🤣」「Windows Defenderで十分😋」「Macの場合どうしよう...😅」
以下はつっつき後のツイートです。
パソコンを買って最初にすることは試供品のMcAfee等をアンイストールすることですね。これは「無能に」すことではありません。McAfee等で無効化されたWindows Defenderを有効化することでもあります。 https://t.co/TQrMZs3auO
— 徳丸 浩 (@ockeghem) April 24, 2020
⚓ソースコードブランチ管理のパターン
つっつきボイス:「Martin Fowlerさんの記事です」「この辺の図で何となくわかりそう😋」
「ポリシーとしては上図の左のようにブランチを管理したいけど、だいたい右みたいになるという😆」「右が現実😆」「左はGit-flow↓で言えば下の線がmaster、その上がdevelop、その上がfeatureブランチに相当するんですけど、縦の下矢印は必ずmasterに一方向に向かっているのがポイント🧐」「ふむふむ」「本来こうあるべきなんですが、現実には右の下みたいに別のブランチが生えてきて一方向にならなくなってしまう、ということが言いたい図だと思います☺️」「なるほど!」
「どんなプロジェクトでもそうですけど、ブランチ管理はルールを制定することと、それを守らない人をリジェクトする強い心がないと徹底しないでしょうね🧐」「たしかに」
「以下の記事でもMartin Fowlerのfeature toggles(feature flag)を使ってやってるそうです」「feature flagも昔からあるやり方です😆」「ありゃ😅」
⚓Gitブランチ運用よもやま話
「ところで自分たちWebチームはGit-flow使ってますけど、アプリチームでは何を使ってます?」「...完全なGit-flowではないけどそれに近い使い方はよくやってます」「現行バージョンにでかい機能を入れるときは普通にfeatureブランチ切ります?」「メンテナンスブランチを伸ばしたくないので、master/develop/feature/hotfixで極力やりたいです☺️」
「クライアントごとにリポジトリを分けるとかはしませんか?」「極力やらないように努力してます😆」「納得😆」「やっちゃダメなヤツ😆」「そこが分岐してしまうと二度と元に戻れなくなると思うので、ソースは同じままでクライアントごとのソースを生成するビルドオプション作ってます」「なるほど」(以下延々)
⚓その他ツール
- サイト: DevHub | Unified view for GitHub activities -- DevHub: TweetDeck風のGitHubダッシュボード(Redditで知りました)
DevHub、私が求めていたのはこれだ感があって大変良い。
(状態が同期できるGitHubのnotificationやwatchできるアプリ)
" devhubapp/devhub: DevHub: TweetDeck for GitHub - Android, iOS, Web & Desktop https://t.co/du4YCbcxC6— おおた@技術書典でkubectl本出してる (@ota42y) March 8, 2019
つっつきボイス:「TweetDeck風にGitHubリポジトリをブラウズできるツールだそうです」「リポジトリのコミットを表示してるみたい」「そこまで頻繁にコミットされるんでしょうか😅」「オープンソースのコミッターなら使うかな?」
「22ドルだそうです😆」「高っ😆」「オープンソースでこれがないと困る人はむしろ金もらえる立場だったりして😆」
⚓その他
⚓古書通販
【りんてん舎の今だけ古書通販📚】
このままではやばい。というわけで新しい売り方を考えました。①本棚の動画をご覧いただき、欲しい本を見つけたらDMをください。
②その本を「日本の古本屋」に登録し商品URLをDMでお返しします。そちらからご購入ください。では海外文学棚その1から。RT希望! pic.twitter.com/O4T6ED2snz
— 古本 りんてん舎 (@rintensha) April 19, 2020
つっつきボイス:「古書店の人が本棚を動画撮影して、欲しい本を知らせてもらうという企画が評判よさそうなので」「たしかに書籍データを打ち込む手間を考えたら動画の方がラクですね😋」「カメラ移動をゆっくりで願いますという注文もありました😆」
申し訳ありません。次回からもう少しスピードを落として撮影いたします。
— 古本 りんてん舎 (@rintensha) April 19, 2020
「古書の背表紙だと第何版なのかまではわからないか🤔」「あ、たしかに」「初版じゃないとイヤとか😆」「背取らーとかなら版数も気にするでしょうし😆」「うちのK&R本は第200うん十刷までいってたかな😆」「そんなに😆」「今なら300ぐらいまでいってたりして😆」
著者名の頭文字からしばしばK&Rと略される。
ja.wikipedia.orgより
⚓番外
⚓元素周期律表がリニューアル
読売新聞4/22:「すいへーりーべ」の暗記法で知られる元素周期表の新しいパターンを考案し、国際学術誌に論文が掲載されたと22日、京都大の研究チームが発表した。元素は、中心に陽子などからなる原子核があり、外側を電子が回る。現在の周期表は電子によって性質を分類…→https://t.co/Pmiek6HBlL
— 原田 英男 (@hideoharada) April 22, 2020
- 論文PDF: A Nuclear Periodic Table
以前からいろんな周期律表が考案されているようです。
後編は以上です。皆さまよい祝日を。
おたより発掘
えっ、Rubyのバックトレース順序が戻るの!? 基本的に賛成だけど、チェリー本の著者としては説明文への影響が大きいのでこの仕様が何度も変わるのは辛いな〜。
あと、バックトレース順序が安定しないのは、エラーで右往左往しがちな初心者さんをさらに困らせることになるかも😥https://t.co/vi7MvyA40S— Junichi Ito (伊藤淳一) (@jnchito) April 28, 2020
バックナンバー(2020年度第2四半期)
週刊Railsウォッチ(20200421後編)Ruby 2.4サポート終了、Ruby 3の右代入演算子、GitHubコア機能無料化ほか
- 20200420前編 anyway_config gemでRails環境設定、ShopifyのLiquidテンプレートエンジン、書籍『Beyond the Twelve-Factor App』ほか
- 20200414後編: Ruby 3で”endレス”メソッド定義構文が追加、ECMAScript 2020の新機能、紛失防止デバイスほか
- 20200413前編: 最近macOSでRailsが遅い、トランザクションでのreturnやbreakなどが非推奨化、Rails監視ツールリスト2020年度版ほか
- 20200407後編: RubyのTracePointでデバッグ、Rubyとモナド、Gitノウハウ集、リモートワークほか
- 20200406前編: Ruby 2.7.1セキュリティ修正、RailsビューHTMLにテンプレート名を出力、Action Mailboxテスト用フォーム改良ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。