Tech Racho エンジニアの「?」を「!」に。
  • 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@松本の受付が始まりましたね。


rubykaigi.doorkeeper.jpより


つっつきボイス:「そうそう、Super Early Birdのうちに申し込まなきゃ」「残り600人切った😳」「今年は東京から電車でも車でもバスでも行けるから選択肢増えましたし😍」「宿の空きが結構厳しいらしいので自分は昨年から押さえてあります😆」

取りました😋。

Falconとは


同リポジトリより


つっつきボイス:「今日の社内勉強会でFalconの話題が出てたので」「去年のRubyKaigiにも登場してたのに見落としてた😅」「FalconはRubyのFiberを使ったWebサーバーで、Pumaより速いらしいという評判ですけど、この間の銀座Rails#17の発表↓でFalconのマルチファイバーについて軽く触れたら、親睦会の後でjoker1007さんからその部分にツッコミもらったので、Falconでマルチファイバーをどう使ってるかもっと調べとこうと思ってたところ😆」 「そうでしたか😳」「なおAuto Fiberはまだ作業中ですね(ウォッチ20191225)」

銀座Rails#17で「出張Railsウォッチ」発表させていただきました

参考: class Fiber (Ruby 2.7.0 リファレンスマニュアル)
参考: 【Ruby】Fiber(ファイバー)を理解する - Qiita

「今のところPumaの評判がいいですし」「PumaはRailsのデフォルトWebサーバーなのでそのまま使えるのがいいですね😋」


puma.ioより

テストできないコードをテストするには(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と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へのロードマップ

参考: 銀座Rails#17まとめ - Togetter

Rubyのオブジェクトを3行でデコレート(Hacklinesより)

# 同記事より
object.singleton_class.instance_eval do
  attr_accessor :label
end

つっつきボイス:「とても短い記事です」「普通にinstance_eval使ってるだけなので特に新しさはないかな☺️」「『迷惑かけないよう注意』だそうです」「新たに生成されるオブジェクトにはlabelが作られるけど、既存のオブジェクトでは作られないということか」「それ地獄感ある😆」「さらにマルチプロセスマルチスレッドになるともっと地獄を呼ぶ😆」「productionコードで使ったらダメ⛔️」

その他Ruby

つっつきボイス:「そういえば一昨年ぐらいだったかな?Rubyで博士号取った人いましたね」「へぇ〜!😳」

後で探しましたがうまく見つけられませんでした😢。



同リポジトリより

# 同リポジトリより
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


つっつきボイス:「jnchitoさんからのアンサー記事がみっちりまとまってます」「懇親会でグルーピングしやすくするとか、いろいろ参考になる😋」「イベントやったことない人は一度見ておくといいですね☺️」

「ぼっち対策は気合入れないと結構大変😅」「アンチハラスメントポリシーも大事」「方法論は昔からいろいろありますし自分もやったことありますけど、継続するのが大変😭」「人数増えたらサポート要員も増えますし」「一人でやったら死にそう😅」「セッションの中でも折に触れて説明するとか、懇親会前の雰囲気作りも重要」「ちゃんとやれればコミュ障の人にとって大きな助けになりますけど、すべての人を満足させられるかどうかはまた別なので😅」(以下延々)


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のツールなんですね」

「でもその後になってJSONを吐き出せるAWSのData Pipelineテンプレート↓ができたので今ならこれがベスト❤️: DynamoDBのデータサイズがでかくなってもよしなに最後まで吐き出してくれます😋」「おぉ〜」「ただしJSONは分割されるので自分で結合しないといけませんけど😅」

参考: AWS Data Pipeline を使用した DynamoDB データのインポートとエクスポート - AWS Data Pipeline

その他DB


つっつきボイス:「XAトランザクションは異種RDBMS間のトランザクションの仕組みで、銀座Rails#17でもちょっと話が出たんですけど、ツワモノたちの結論は『XAトランザクションはやめとけ』でした😆」「😆」

「元々MySQL同士ならデータベースサーバーが分かれていても普通にトランザクション張れるんですけど、XAトランザクションはOracleとPostgreSQLみたいに種類が違うデータベースサーバー同士のトランザクションなので別物」「聞くからにヤバそう😅」

クラウド/コンテナ/インフラ/Linux/Serverless

Microsoft Teams vs Slack


つっつきボイス:「Slackのdaily active user数がMicrosoft Teamsに抜かれたそうです」「まあOffice 365ユーザーはとっても多いですから😆」「Office買えばもれなく使えるならTeams使いますよね😆」

Mutagen: ファイル同期ツール


同サイトより

mutagen: {名} : 突然変異原


つっつきボイス:「ruby-jpでmrknさんがMutagenについてちらっと書いてて返信していて知りました」「ほほう?」「記事をざっと見た感じ、rsyncのようなファイル同期じゃなくて、このツールをバックグラウンドプロセスとして常駐させておくとずっと双方向同期してくれるのか: もしや...これは今の自分が欲しかったツールかも?!」「やった🎉」

参考: rsync - Wikipedia

「自分の場合移動が多くて、しかも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の他に以下のサイトのデータも使われてるようです。

「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

マジですか

2020/01/15 14:44

その他

祝日注意


つっつきボイス:「今年の祝日はいろいろイレギュラーになるみたいです」「そうだった!😳」「オリンピックのあおりで体育の日が今年だけ7月に移動したり」「オリンピックめ〜😅」

つっつき後に調べてみると、holiday_jp-rubyもholiday_japanも既に対応済みですね↓。

番外

裏垢


つっつきボイス:「これは面白かった😆」「そんなにコワいかな〜🤔」「まあ裏垢作るなら相当慎重にやらないと😆」


今回は以上です。

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

週刊Railsウォッチ(20200120前編)福岡でも公開つっつき会、Railsのconnection_specification_nameでprimaryという名前が非推奨に、structure.sqlとschema.rbほか

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

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

Ruby Weekly

Hacklines

Hacklines

DB Weekly

db_weekly_banner


CONTACT

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