- Ruby / Rails関連
週刊Railsウォッチ(20201013後編)ruby-type-profilerがtypeprofにリネーム、AWS API Gatewayの実行ログは便利、M5Stackほか
こんにちは、hachi8833です。
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
- お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙇
⚓Ruby
⚓ruby-type-profilerがtypeprofにリネームされた
つっつきボイス:「jnchitoさんの以下のツイートを見て自分もこの間ruby-type-profiler周りを触り始めたんですが、READMEに書いてある手順でうまく動かないなと思ったらちょうどリネームの最中だったようです」「名前変わったんですか!」
今日は社内でRuby 3.0のRBSつっつき会をやっておりました。
「おーい、磯野ー。RBS勉強会やろうぜー」で仲間がわらわらと集まってくる職場、プライスレス。— Junichi Ito (伊藤淳一) (@jnchito) October 2, 2020
「そして今日見てみるとリネームが完了してtypeprofという名前になって、しかもgem化されていたのでインストールしやすくなりました」「ruby-type-profiler、そういえば前から名前をどうしようかって議論していましたね」「ついに名前決まった🎉」
参考までに履歴のネーミング候補を貼ってみました(現在は削除されています)。
### Name suggestions
Current candidates:
* typeprof (liked by matz)
* Sugar / Syrup
* Soramame / Sumiso / Sumeshi / Satumaimo / Sushi / Shoyu / Sayu / Sekihan
* Rencon
* Sora
* Solarmame
* Sorame
* Snap Endoh
* Snap pea / Soybean
* Snappy
* Snack
* Soysource
* Katana
* Takana
* Scone
* RBSgen
* Stooby
* Sherlock
* Stanalyzer
* SakeType
⚓Ruby 3.0.0-Preview1のパフォーマンステスト
つっつきボイス:「Noah Gibbsさんの記事で、3.0.0-preview1のパフォーマンステストをやってみたけど、まだ動かないgemがあってちゃんと測定できなかったそうです」「ああなるほど」「まあファーストトライアルですし」「Ruby 3.0は、Rubyが1.8から1.9になったときほどではないにしても、そこそこ大きな変更なのでもう少し時間がかかるでしょうね」
⚓Haml 5.2がリリース(Ruby Weeklyより)
Ruby Weeklyの以下の見出しが気になりました。
v5.2.0 is billed as ‘The Long Goodbye’ but only because it’s the final release “that’s got all the bells and whistles of Haml from the last 10 years.” Coming next is version 6 which will take some leaps forward (including a “StimulusJS-like development pattern”) and not be backwards compatible.
つっつきボイス:「ロンググッドバイ?」「これまでのHamlはこのバージョン5系でいったん締めくくって、次のバージョン6で後方互換性抜きで開発を進めるようです」「Hamlももう10年経つのね」
⚓ HamlとSlim
「ところで今HamlとSlimのどっちがよく使われているのかな?」「BPS社内だとSlim派が多いような気がします」「個人で何かするときはHaml入れてます」「自分はHamlからERbに戻しました」
「印象としては、Hamlが登場した後でSlimがその反省を踏まえて作られたという感じがちょっとありますね: CoffeeScriptの位置づけとちょっとだけ似ているというか」「わかります」「CoffeeScriptもさまざまなAltJSのひとつだったわけですけど、のちのTypeScriptも何らかの形でその反省を踏まえた部分がある気がしています(異論もあると思いますが)」「その意味でHamlは過渡期だったのかも🤔」
「自分はHamlもSlimも好きですけど、Slimの方が修飾が少ない分何となく学びやすいかもしれないと思っています」「新しく学ぶならそうかも: でも個人的にはやっぱりHamlが好き❤️」
⚓ 追いかけボイス: HamlとSlim (by morimorihoge)
HamlとSlimのGitHubのstarとwatchを比較すると、Slimがやや多いようです。
SlimにはPHP composer用のプロジェクトもあって、こちらは圧倒的に人気のようです↓。Railsエンジニア以外も含めるとSlimの人気が高そうですね。
2020/10/22注 by morimorihoge)すみません。こちらのSlimはHTMLトランスパイラのSlimとは全く別のAPIフレームワークの様でした。完全に勘違いでした・・・
⚓ その他Ruby
みんな『Clean Agile』買ってる。買ってないのはお前だけ
— Kakutani Shintaro (@kakutani) October 5, 2020
つっつきボイス:「Clean Agileは@kakutaniさんも翻訳されてたんですね」「著者はボブおじさんことRobert C Martinさんだ!」
参考: Robert C. Martin - Wikipedia
@unclebobmartin @kakutani @kdmsnr Just finished an interview with Uncle Bob, with the two translators of Japanese edition of #CleanAgile book, thanks! pic.twitter.com/DC7pXppBK6
— Kenji Hiranabe (@hiranabe) October 10, 2020
「Clean Agileの紙の本はもう出ているみたい」「Kindle版の発売日は10月16日だからもうすぐ」
参考: Clean Agile 基本に立ち戻れ (アスキードワンゴ) | Robert C.Martin, 角 征典, 角谷 信太郎 | 工学 | Kindleストア | Amazon
参考: Clean Agile 基本に立ち戻れ【委託】 - 達人出版会
⚓リモートワーク
⚓イベント配信
つっつきボイス:「はてブでこの記事を知りました」「動画配信は興味あるんですけど...」
「この間のRubyKaigi Takeout 2020とかもそうですけど、イベント配信が大人数になってくるとだんだんZoomとかだけではうまく回しにくくなってくるでしょうね」「記事に『当日スタッフが交代できない』ってあるのが切実でした」「コロナ禍でオペレーターが1箇所のNOCに集合できなくて誰か一人の自宅環境を配信環境にすると、その環境が落ちたときに配信も全部落ちてしまいますし」「Withコロナ時代になってからこの辺のニーズが高まっているのを感じますね」
参考: ネットワークオペレーションセンター(NOC)とは - IT用語辞典 e-Words
「この記事ではMicrosoft TeamsのNDI®テクノロジというものを活用しているらしい↓」「ざっくり言うと、オペレーターの誰か一人の環境で配信するのではなく、クラウド上のインスタンスでOBSを動かして配信する形」「遅延制御とかはノウハウや経験が必要そうですね」
参考: NDI® – NewTek NDI
参考: ダウンロード | OBS
「見た感じ、NDIはネットワーク越しの動画・音声ストリームや制御コマンドなどを相互にリアルタイム伝送できる技術みたい」「おぉ〜」
「まあこの方面はゲーム実況とかをやっている人たちの方がずっと進んでいると思います」「たしかに知見がたまってそうですね」「ゲーム実況だとプレイヤーや運営はDiscordで、視聴する人たちはTwitchやニコ生とかでというのを割と見かけるかな」「この方面に強い有識者のお話聞いてみたいです」
⚓クラウド/コンテナ/インフラ/Serverless
⚓ API Gatewayの実行ログ
つっつきボイス:「AWS API GatewayのExecution Logsは、初めて見る人には結構学びがあると思いますので、見る環境がある人はいちど見てみることをおすすめします」「おぉ」
参考: Amazon API Gateway(規模に応じた API の作成、維持、保護)| AWS
「このログを見ると、API Gatewayの裏側にあるものをどうやって呼び出しているのかを時系列で具体的に追えますヨ」「マジですか!」
「API Gatewayの裏側でLambdaが動くシステムを作ったことがあるんですけど、LambdaのAWS公式Rubyレイヤがある日マイナーアップデートされて突然動かなくなったときに、Execution Logsを追いかけてリクエストを復元したことがあります」「お〜復旧できたんですね!」「Lambdaレイヤの更新は新しく起動されるコンテナから順次適用されるので、古いバージョンのRubyと新しいバージョンのRubyが同時に実行される期間があったりしていろいろと厄介でした😅」
「AWSがある日突然Rubyレイヤをアップデートするんですか?」「AWSの公式Rubyレイヤはマイナーバージョンを指定できないんですよ: 自分でカスタムレイヤを作ってそれを使えばバージョンを固定できるはずですけど、その代わり自前でRubyレイヤを管理する必要があります」
「そういうわけで、productionのAPI Gatewayでは詳細ログを有効にしておくことをぜひみなさんにおすすめします」「たしかに!」
「あと、API GatewayからLambdaの呼び出しに失敗した場合はLambdaの実行ログに残らないので、API Gatewayの段階でログを有効にしておかないとリクエストの情報が失われる危険があります」「なるほど!」「とにかくAPI GatewayのExecution Logsは見れば、どういう感じでデータが伝搬していくのかとかがだいたいわかります」
「なお元記事にもありますが、リクエストのパラメータが長すぎる場合、すべてのパラメータはログに出力されずに切り落とされてしまうので、常に完全なリクエストが復元できる保証はありません: あくまでいざという時の保険程度に考えましょう」「なるほど!」
⚓JavaScript
⚓Webpack 5のPersistent Caching
つっつきボイス:「persistent cachingというのはWebpackでビルドするときのキャッシュをpersistentにする、つまりファイルとして保存して再利用するということですね」「今までは実装されていなかったけど要望が多くてWebpack 5で入れるようです」「Webpackのビルドは重いので入れたいですよね」
webpackはin-memoryのみで今まで永続的なキャッシュを実装していませんでした。理由としては、パフォーマンスよりも安全性を優先していたためです。
cache-loaderを使ったことがある人はわかるかもしれませんが、確かに速くなる一方、安全性が損なわれているのは事実です。
この機能は、webpackはデフォルトでファイルキャッシュをオンにはしませんがそれでもビルドの速度を上げたい場合に使う機能です。
同記事より
「やっていることは、ファイルキャッシュにあればそっちを読む、構成が変わればフラッシュして作り直すという、 一般的なファイルキャッシュの実装のようですね」「最悪キャッシュフォルダの中身を捨てれば最初からやり直せる感じかな」
「システムが大きくなってくればこうやってキャッシュする方が確実に速くなりますけど、その分複雑になって副作用も増えるとサポートの負荷も高まるので今まで入れなかったのかなとちょっと思いました」「キャッシュ機能で何か想定外の地雷を踏む人がいればWebpackへの問い合わせも増えるでしょうし」「キャッシュのバグは再現も難しいし」「ユーザーがissueを正しく上げるのも大変そうですし」「上の記事を見てもデフォルトではPersistent Cachingを有効にしないとあるので、まずはこの辺りのトラブルシューティングができる人だけに使って欲しいのかなと想像しました」
⚓その他
⚓「使わないと分からない」M5Stackの魅力
つっつきボイス:「使わないとわからないというのが気になったので」「組み込み系をやってきた者からすると、M5Stackはほんとよくできてます💪」「はい同意です😋」「大事なことはこの記事に全部ひととおり書いてありますけど、1回触ってみればM5Stackのどこがありがたいかわかりますヨ」「もう私はラズパイZeroに戻れません😆」
「たとえばどんなところでしょう?」「まずWi-FiやBluetoothが最初から入っていること」「入ってない製品多いですよね」「Wi-FiやBluetoothを後から入れるのって面倒なんですよ」「ESP32というマイコンそのものはともかく、それにWi-FiやBluetoothが入っていることが重要」「へぇ〜」
「Wi-FiやBluetoothは電力食うので、オンにした途端に電圧が下がったりしがちなんですけど、M5Stackはとにかく安定してるんですよ」「シリアル通信ですら化けたりする組み込みの世界だとこの安定性はありがたいです」
「そして記事にもありますけど、バッテリー/LCD/ボタンが最初からあるのもとても嬉しい」「ですよね」
「組み込みの世界では、たとえ数分しか持たなくてもバッテリー内蔵かそうでないかでもう全然違うんですよ」「バッテリーがないと、ちょっと別の場所に移動して動作確認したいだけなのにいちいちUSBバッテリーをつないだりしないといけませんし」「もうバッテリーがあるだけで神⛩」「5分ぐらいしか持ちませんけど、その5分が大事」
「LCDも、標準搭載かつ配線済みなのが重要」「LCDモジュールとソフトウェアの組み合わせっていろいろ面倒で、LCDモジュールのマイナーバージョンが変わるとヘッダファイルも違ったりすることがあるんですけど、M5Stackならそういう心配がありませんし」「フレキシブルケーブルをうっかり切る心配もないし」
「それにボタンが最初から搭載されているおかげで、複数あるADCポートとボタンとソフトウェアの組み合わせが全部確定していてわずわらしくない点も素晴らしい」「なるほど〜」
「ケースも然り」「ラズパイだと別売ケースが本体と同じぐらいの値段だったりしますよね」「でもケースがないと取り回しがとても面倒なんですよ」「ケースが付いてこの値段は安い!」
「実際にこのM5Stackを買って使ったりしてるんですか?」「はい、いろいろと😋」「以下の記事でも使ってます↓」
後編は以上です。
バックナンバー(2020年度第4四半期)
週刊Railsウォッチ(20201012前編)Railsの隠し機能routing visualizer、action_args gem、N+1用goldiloader gemほか
- 20201006後編 Rubyの
defined?
キーワード、Ractorベースのジョブスケジューラ、Caddy Webサーバーほか - 20201005前編 Ruby 2.7.2がリリース、Shopifyのモジュラー化gem「packwerk」、stimulus_reflexほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。