- Ruby / Rails関連
週刊Railsウォッチ(20200121後編)RubyKaigi 2020受付開始、RubyGemsとBundlerの今後、ファイル同期ツールMutagenほか
こんにちは、hachi8833です。
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
- 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください
⚓お知らせ: 公開つっつき会2本立て
⚓その1: 週刊Railsウォッチ「第19回公開つっつき会」(無料)
いよいよ第19回を迎えた公開つっつき会は、来月2月6日(木)19:30〜よりBPS株式会社Pubスペースにて開催いたします。
週刊Railsウォッチの記事やここだけの話にいち早く触れられるチャンス!発言・質問も自由です。皆さまのお気軽なご参加をお待ちしております。
⚓その2: 福岡でのリモート公開つっつき会開催のお知らせ(Wingdoor@福岡) -- 延期
追記(2020/01/27): 今週1/30に開催予定だった福岡でのリモート公開つっつき会は、新型コロナウイルス対策のため延期となりました。🙇
上に先んじて、来週1月30日(木)19:30〜に福岡の株式会社ウイングドアにて、TechRachoでお馴染みのmorimorihogeが現地入りして第2回公開つっつき会を行います。通常の公開つっつき会と基本的に同じ要領で開催いたします。福岡近郊の皆さまのお気軽なご参加をお待ちしております。
- 会場: 株式会社ウイングドア(〒810-0001 福岡県福岡市中央区天神4丁目1−28 天神リベラ 3F)
- 日時: 1月30日(木)19:30〜21:00(終了後は21:20頃まで懇親会もございます)
- 費用: 無料
- 持ち物: 必要なものは特にありませんが、手元でのドラフト参照・検索用にノートPCなどがあると便利です。
⚓Ruby
RubyKaigi 2020@松本の受付が始まりましたね。
つっつきボイス:「そうそう、Super Early Birdのうちに申し込まなきゃ」「残り600人切った😳」「今年は東京から電車でも車でもバスでも行けるから選択肢増えましたし😍」「宿の空きが結構厳しいらしいので自分は昨年から押さえてあります😆」
取りました😋。
⚓Falconとは
つっつきボイス:「今日の社内勉強会でFalconの話題が出てたので」「去年のRubyKaigiにも登場してたのに見落としてた😅」「FalconはRubyのFiberを使ったWebサーバーで、Pumaより速いらしいという評判ですけど、この間の銀座Rails#17の発表↓でFalconのマルチファイバーについて軽く触れたら、親睦会の後でjoker1007さんからその部分にツッコミもらったので、Falconでマルチファイバーをどう使ってるかもっと調べとこうと思ってたところ😆」 「そうでしたか😳」「なおAuto Fiberはまだ作業中ですね(ウォッチ20191225)」
参考: class Fiber (Ruby 2.7.0 リファレンスマニュアル)
参考: 【Ruby】Fiber(ファイバー)を理解する - Qiita
「今のところPumaの評判がいいですし」「PumaはRailsのデフォルトWebサーバーなのでそのまま使えるのがいいですね😋」
⚓テストできないコードをテストするには(Hacklinesより)
つっつきボイス:「untestable!😳」「以下は『ずっとループしてる』『APIとしての入出力がない』『そもそもどう動かすか』みたいにテストがしんどくなるコードの例↓」「untestableなものは基本的にテスト無理なので、要素を分解してアプローチするぐらいしかないでしょ😭」「記事もそういう結論みたいです😢」「記事のコード例はまだ単純な方で、現実にはもっと巨大なコードだったりするし」「2000行とかもう無理😇」
# 同記事より
#### 3秒おきに乱数を1つ出力 ####
while sleep(3) do
puts rand(10)
end
⚓BundlerとRubyGems
つっつきボイス:「自分はHerokuでRails動かしてるので、Bundler周りが気になって拾いました」「Bundlerか〜」「そういえば銀座Rails#17で@hsbtさんがちょうどBundler周りの話してましたよ↓」「あ〜やっぱり行けばよかった😭」「ではそっちを中心に話しましょ☺️」
RubyGems 3.1では、Ruby1.8、1.9に関連するコードが削除された! #ginzarails pic.twitter.com/3Kr4GbmiDW
— シロ (@shiroemons) January 16, 2020
「思い出せる範囲で言うと、今はRubyGemsとBundlerって分かれてますけど、両者がかなり結合しているので、一方だけを更新しようとしてもだめで両方のテストを通さないといけないという二度手間が発生しているらしいです」「あ〜それはつらそう😢」「しかも今はBundlerがRuby本体に入ったので、RubyGemsとBundlerを同じリポジトリ配下に置いて管理しようみたいな話もあるそうです」「それも大変そう...」
「で確かBundler 3がbreaking changeになります」「ありゃ😅」「たとえば今はbundle
だけ実行するとbundle install
が走りますけど、そこをヘルプを表示するように変えるとか、そんな話もしていましたね☺️」「bundle
だけでインストールが走ったら焦りそう😅」「やったことない😆」
「もうひとつは、HerokuでRuby 2.7が使えるかどうか調べていてHerokuの最近の記事↑を見つけたんですけど、Gemfile.lockの末尾にあるBUNDLED WITH
というBundlerバージョンが刻まれた行をHeroku側で削除することにしたんだそうです」「あ〜BUNDLED WITH
は嬉しくないヤツ😆」「これが原因でBundlerが止まることよくありましたし😆」
「そういえば最近のHerokuはDockerコンテナでデプロイできますヨ↓」「気づいてなかった😅」「最近はそっちの方が推奨になってた気もするけどどうだったかな...🤔」「Dockerデプロイ調べてみます😋」
参考: Building Docker Images with heroku.yml | Heroku Dev Center
つっつき後に@hsbtさんのスライドを見つけました↓。
アジェンダ:
- Ruby言語でライブラリを使う方法
- RubyGemsとBundlerについて
- Gemificationプロジェクトについて
- Bundler統合の困難な点
- RubyGems 4.0とBundler 2.1の将来計画
- Ruby 3.0へのロードマップ
⚓Rubyのオブジェクトを3行でデコレート(Hacklinesより)
# 同記事より
object.singleton_class.instance_eval do
attr_accessor :label
end
つっつきボイス:「とても短い記事です」「普通にinstance_eval
使ってるだけなので特に新しさはないかな☺️」「『迷惑かけないよう注意』だそうです」「新たに生成されるオブジェクトにはlabel
が作られるけど、既存のオブジェクトでは作られないということか」「それ地獄感ある😆」「さらにマルチプロセスマルチスレッドになるともっと地獄を呼ぶ😆」「productionコードで使ったらダメ⛔️」
⚓その他Ruby
- 元記事: The Ruby Bibliography -- Rubyの論文集めてみた(Ruby Weeklyより)
つっつきボイス:「そういえば一昨年ぐらいだったかな?Rubyで博士号取った人いましたね」「へぇ〜!😳」
後で探しましたがうまく見つけられませんでした😢。
- リポジトリ: mame/green-square-quine
# 同リポジトリより
eval s=%q~n=t=5;s[200..-1].bytes{n=n*72+(_1+10)%94};"eval s=%q\37#{s}\37".bytes{|c|24.times{t+=2<<0**(_1%6);n[(c+11)%95*24+_1]<1||`git commit -m q --allow-empty --date=#{Time.at(t*43200).strftime"%\106T%T"}`}}#Ud*{X'a<TY`3paY(*qvk$6w\%.e_|0dmldWu)pZv+|gWZ',f:uT9V4p5<w=#Yy#h3ihUro".%/<h%n<\wp8[8rq$5+'u^(a6x#-nn:$j9xxh;;8\7Y.Z{(9:m%*c;\,qz*zk2xxt0(mky'g"nc)1t[.gX/a<e,r5,"(tW6_#tbvU3u{UgzioV0bc[ ;\/z-x}hmT8!a4&0\9{{=] zTrsgks`0qt<f[dp!pt$$o5!d95){//Z;`2.!n!;h}o=mg'rm1VU+b,qkn<a[[()#m}m./=7yre~
つっつきボイス:「GitHubの草でクワインやったみたいです」「mameさんだ」「やべ〜😆」「発想がスゴい💪」「1970年というUnixタイムでお馴染みの年から始めるあたりも😆」
参考: クワイン (プログラミング) - Wikipedia
* サイト: UNIX時間 - Wikipedia
TechRachoに「ぼっち対策ってどんな感じで行われたのか気になります。私もぼっちなので」とあったので、アンサーブログを書きました!(これ本当)
みんなが安心して参加できる勉強会・懇親会のために主催者ができること - give IT a try https://t.co/8d1k0k5gvy https://t.co/jixSXSPp6o
— Junichi Ito (伊藤淳一) (@jnchito) January 17, 2020
つっつきボイス:「jnchitoさんからのアンサー記事がみっちりまとまってます」「懇親会でグルーピングしやすくするとか、いろいろ参考になる😋」「イベントやったことない人は一度見ておくといいですね☺️」
「ぼっち対策は気合入れないと結構大変😅」「アンチハラスメントポリシーも大事」「方法論は昔からいろいろありますし自分もやったことありますけど、継続するのが大変😭」「人数増えたらサポート要員も増えますし」「一人でやったら死にそう😅」「セッションの中でも折に触れて説明するとか、懇親会前の雰囲気作りも重要」「ちゃんとやれればコミュ障の人にとって大きな助けになりますけど、すべての人を満足させられるかどうかはまた別なので😅」(以下延々)
ちょっと事情が。
— Yukihiro Matsumoto (@yukihiro_matz) January 15, 2020
⚓DB
⚓RDSとEC2の単価(DB Weeklyより)
つっつきボイス:「何の話かなと思ったら、EC2とRDSで同じことやってるのにRDSの方が単価高いってぼやいてるみたい😆」「😆」「自分でEC2にデータベース立てればそりゃ安いけど、マネージドのRDSをやめてまでマルチAZのEC2データベースを自力で立てる気にはなれませんね〜☺️」「そもそもEC2もRDSも長期的には値段下がってますし、ただ差が開いているというだけで😆」(以下延々)
⚓DynamoDBのCSVエクスポート/インポート(DB Weeklyより)
つっつきボイス:「Canonical(Ubuntuの会社)が作ったツールみたいです」「dynocsvってHerokuかと思ったらDynamoDBじゃないですか😆」「紛らわしい😅」
「昔DynamoDBからCSVにエクスポートするツールを調べたことがあって、当時一番マシだったのが以下のDynamoDBtoCSVというツール↓だったんですけど、デフォルトのprovisioned capacityモードだとデータ量が増大して単位時間あたりのクエリ数上限を超えたときにAPIがエラーを返してやり直しになったりとか、苦労しました😭」「Node.jsのツールなんですね」
- リポジトリ: edasque/DynamoDBtoCSV: Dump DynamoDB data into a CSV file
参考: プロビジョニング済みキャパシティーの料金 - Amazon DynamoDB | AWS
「でもその後になってJSONを吐き出せるAWSのData Pipelineテンプレート↓ができたので今ならこれがベスト❤️: DynamoDBのデータサイズがでかくなってもよしなに最後まで吐き出してくれます😋」「おぉ〜」「ただしJSONは分割されるので自分で結合しないといけませんけど😅」
参考: AWS Data Pipeline を使用した DynamoDB データのインポートとエクスポート - AWS Data Pipeline
⚓その他DB
- 元記事: What broke the bank – Increment: Testing -- テストが不十分で英国の銀行が顧客データを吹っ飛ばした(DB Weeklyより)
- 元記事: MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.3.7 XA トランザクション
つっつきボイス:「XAトランザクションは異種RDBMS間のトランザクションの仕組みで、銀座Rails#17でもちょっと話が出たんですけど、ツワモノたちの結論は『XAトランザクションはやめとけ』でした😆」「😆」
「元々MySQL同士ならデータベースサーバーが分かれていても普通にトランザクション張れるんですけど、XAトランザクションはOracleとPostgreSQLみたいに種類が違うデータベースサーバー同士のトランザクションなので別物」「聞くからにヤバそう😅」
⚓クラウド/コンテナ/インフラ/Linux/Serverless
⚓Microsoft Teams vs Slack
- 元記事: Microsoft TeamsとSlackは舌戦で火花を散らす (1/2) - ITmedia PC USER
- サイト: Microsoft Teams - グループ チャット ソフトウェア
つっつきボイス:「Slackのdaily active user数がMicrosoft Teamsに抜かれたそうです」「まあOffice 365ユーザーはとっても多いですから😆」「Office買えばもれなく使えるならTeams使いますよね😆」
⚓Mutagen: ファイル同期ツール
- 元記事: Mutagenでファイル同期が簡単に出来た話 - ウェブエンジニア珍道中
- サイト: Mutagen | Cloud-based development using your local tools
- リポジトリ: mutagen-io/mutagen: Make remote development work with your local tools
mutagen: {名} : 突然変異原
つっつきボイス:「ruby-jpでmrknさんがMutagenについてちらっと書いてて返信していて知りました」「ほほう?」「記事をざっと見た感じ、rsyncのようなファイル同期じゃなくて、このツールをバックグラウンドプロセスとして常駐させておくとずっと双方向同期してくれるのか: もしや...これは今の自分が欲しかったツールかも?!」「やった🎉」
「自分の場合移動が多くて、しかもThinkPad X1 Streamがまともに動かなくなって別のWindowsマシンで作業せざるを得なくなったんですけど、WindowsのDocker環境がホント使いにくくて😭: しょうがないのでJetBrains IDEのディレクトリ同期機能を使って裏でrsyncディレクトリ同期するという地獄味あふれる使い方になっちゃってるんですよ😇」「ありゃ〜😅」「もしかするとそのあたりをMutagenでうまくやれるかも?と期待しちゃいます😋」
「このツールは相互に同期してくれるところがよさそうなんですよ: たとえば手元にRailsのソースコードがあってリモートがLinux環境だとすると、JetBrainsの同期機能ではリモートに同期はできても、サーバーでないとできない作業(rails generate
とか)はローカルでできない😇」「あ〜たしかに😳」「無理やりローカルでrails generate
しても、リモートと完全に同じにはならない😢」「うーむ😅」「JetBrains IDEはローカルをリモートに自動同期する機能はあるんですけど、リモートをローカルに同期するのはメニューからの手動になってしかも遅い🐢」
「リモートをボリュームマウントじゃだめですか?」「それがなぜかDockerボリュームをどうしてもマウントできなくて😭、時間もないのでrsyncで凌いでるんですけど何とかしたいと思ってた😤」(以下延々)
⚓JavaScript
⚓2019年に人気上昇したのは
つっつきボイス:「ここの集計ではVue.jsが伸び率総合1位でした」「そんなにVue伸びてたっけ?🤔」「Reactは全世界レベルだけどVueは日本とかアジア止まりみたいな話も聞きますけど😆」「React疲れしてる人をよく見かけるような😆」「ReactじゃなくてもいいものをReactで作るから疲れるんでは?😆」「ところでこの集計で月をJとかFって表すの略しすぎ😆」(以下延々)
集計にはGitHubの他に以下のサイトのデータも使われてるようです。
- サイト: Best of JavaScript
「GitHubの数字はスター数を元にしているみたいだけど、もし仮にGitHubのクローン数を取れるAPIを使ったら数値のほとんどをCIが稼いだりして🤣」「🤣」
⚓CSS/HTML/フロントエンド/テスト
⚓Googleとサードパーティcookie
つっつきボイス:「これはマジでいろんなものが動かなくなるから勘弁して欲しい😭」「サードパーティcookieの禁止ってよくわかってないんですけど🤔」「ん〜、CORS(Cross Origin Resource Sharing)をfalseにできなくするというか、cookieの可視性をオープンにできなくなるというか」「他のサイト由来のcookieを読めなくなる?」「そんな感じ: 今はoriginの指定がないcookieを読めるんだけど、読めなくなるのがデフォルトになるということだと思います☺️」「だから広告とかに影響が出るんですね😳」
参考: サードパーティ Cookie を禁止する | Firefox ヘルプ
参考: サードパーティクッキーって何だっけ? 今さら聞けないHTTP Cookieのキホン | 初代編集長ブログ―安田英久 | Web担当者Forum
徳丸先生もびっくりしてますね。
Google、サードパーティー製CookieのChromeでのサポートを2年以内に終了へ - ITmedia NEWS
マジですか
⚓その他
⚓祝日注意
つっつきボイス:「今年の祝日はいろいろイレギュラーになるみたいです」「そうだった!😳」「オリンピックのあおりで体育の日が今年だけ7月に移動したり」「オリンピックめ〜😅」
つっつき後に調べてみると、holiday_jp-rubyもholiday_japanも既に対応済みですね↓。
- リポジトリ: holiday_jp-ruby/holidays.yml at master · holiday-jp/holiday_jp-ruby
- リポジトリ: holiday_japan/holiday_japan.rb at master · masa16/holiday_japan
⚓番外
⚓裏垢
裏垢回めちゃめちゃ面白い(怖い)
中間管理録トネガワ - 福本伸行/萩原天晴/三好智樹/橋本智広 / 第70話 裏垢 | コミックDAYS https://t.co/ZWuc6jDDzJ— ポン太 (@tahipo921) January 14, 2020
つっつきボイス:「これは面白かった😆」「そんなにコワいかな〜🤔」「まあ裏垢作るなら相当慎重にやらないと😆」
今回は以上です。
バックナンバー(2020年度第1四半期)
- 20200115後編 Ruby 2.7関連情報、Bootstrap 5は今年前半リリースか、PostgreSQLでやってはいけないリストほか
- 20200114前編 config_forのbreaking change、Active Storage variantをDBでトラッキング、SprocketsとWebpackの違いほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp Slackなど)です。