- Ruby / Rails関連
週刊Railsウォッチ: Ruby 3.1のエラー表示改善、言語の「プリミティブ」を探る、Amazon Redshift Serverlessほか(20211215後編)
こんにちは、hachi8833です。明日はRubyWorld Conference 2021ですね。
RubyWorld Conference 2021 いよいよ明日開催です! https://t.co/sDklVFyV6h
— 株式会社万葉 (@everyleaf) December 15, 2021
🔗Ruby
🔗 Advent of Code 2021(Ruby Weeklyより)
- 元記事: Advent of Code 2021
つっつきボイス:「Advent of Codeの2021年版が公開されています: Ruby限定ではありませんが、前回は以下の翻訳記事でも取り上げられています」「お、去年もこのサイトを見た覚えある」「CLIっぽい独特のWebレイアウトですね」「2015年から開催されてるのね」
🔗 throw
、catch
、raise
、rescue
で迷った話(Ruby Weeklyより)
つっつきボイス:「複数の言語を扱っているとこのあたりは迷いがち」「Javaをやったことがあるとそうなりそうですね」「Rubyでthrow
とcatch
をこんなふうに書けるとは知らなかった↓」「Rubyだと普段はraise
とrescue
しか使わないかな」
# 同記事より
def show_rank_for(target, query)
rank = catch(:rank) {
each_google_result_page(query, 6) do |page, page_index|
each_google_result(page) do |result, result_index|
if result.text.include?(target)
throw :rank, (page_index * 10) + result_index
end
end
end
"<not found>"
}
puts "#{target} is ranked #{rank} for search '#{query}'"
end
参考: Kernel.#throw
(Ruby 3.0.0 リファレンスマニュアル)
参考: Kernel.#catch
(Ruby 3.0.0 リファレンスマニュアル)
参考: Kernel.#fail
(Ruby 3.0.0 リファレンスマニュアル)(raise
はエイリアス)
参考: 制御構造 (Ruby 3.0.0 リファレンスマニュアル)(rescue
は修飾子)
🔗 言語の「プリミティブ」を探る(Ruby Weeklyより)
つっつきボイス:「『Rubyのしくみ(Ruby Under Microscope)』の著者のPat Shaughnessyさんによる記事です」「RubyとCrystal言語でArrayクラスの動作を掘り下げて詳しく調べている」「CrystalのプリミティブがRubyよりもかなり複雑で著者も驚いてるみたいですね」
参考: Crystal (プログラミング言語) - Wikipedia
参考: The LLVM Compiler Infrastructure Project
「ところで普段からRubyをRubyらしく書くようにしていると、他の言語ではRubyよりコードの行数が増えることに改めて気付かされますね」「普段はまず使いませんけど、Rubyにも他の言語のfor
とかもある」「for
は高速だけど、最適化がどうしても必要な場合以外は使うべきではないとよく言われますよね↓」「そうそう、Rubyのイテレーションはメソッド呼び出しだけど、for
はプリミティブな構文なのでたしかに速い」
「Rubyには想像以上にいろんな文法やメソッドがあるので、それらを余さず使っていたら他の言語にピボットしやすいかも」「Rubyで関数型言語風や別の言語風に書く人もよく見かけますね」
🔗 jnchitoさんの「改訂版・チェリー本発売記念- Advent Calendar 2021」
「ちょうどこの間アドベントカレンダー記事で点字生成プログラムを書きましたけど↓、他の人のコードを見ると想像以上に書き方のバリエーションが大きいんですよ: Rubyってこんなに自由なんだと改めて思った次第です」
「今回やってみて、問題設定がうまいなと思いました: 例外系をほとんど考慮しなくて済むようになっているので、Rubyを書き慣れていれば1〜2時間ぐらいで書ける」「なるほど」「他の方の回答も面白いのでぜひ見てください」
「jnchitoさんのレビュー動画↓はコード以外に記事もレビューしているんですね」「課題に記事の要件も含まれているのでそこをチェックしているということですね」
Qiita記事書きました。アドベントカレンダーに投稿してもらったコードを僕の方で動画でレビューしてみました!今回は1日目から5日目の記事が対象です🍒
点字メーカープログラムのコードレビュー Part 1 - Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-https://t.co/hJIRkqxpzf— Junichi Ito (伊藤淳一) (@jnchito) December 6, 2021
🔗 countries: 国関連の情報をまとめたgem(Ruby Weeklyより)
つっつきボイス:「ISOの標準に沿った国情報をまとめたgemのようですね」
「国の名前も別名や別の言語での名前まで取れる↓」「これもISOで定められている情報かもしれませんね」
# 同リポジトリより
c.name # => "United States"
c.unofficial_names # => ["United States of America", "Vereinigte Staaten von Amerika", "États-Unis", "Estados Unidos"]
# Get the names for a country translated to its local languages
c = Country[:BE]
c.local_names # => ["België", "Belgique", "Belgien"]
c.local_name # => "België"
# Get a specific translation
c.translation('de') # => 'Vereinigte Staaten von Amerika'
c.translations['fr'] # => "États-Unis"
ISO3166::Country.translations # {"DE"=>"Germany",...}
ISO3166::Country.translations('DE') # {"DE"=>"Deutschland",...}
ISO3166::Country.all_translated # ['Germany', ...]
ISO3166::Country.all_translated('DE') # ['Deutschland', ...]
「国のsubdivisions
も取れるとは↓」「そういえば米国にも州を表す2文字のコードがありますね」
# 同リポジトリより
c.subdivisions # => {"CO" => {"name" => "Colorado", "names" => "Colorado"}, ... }
c.states # => {"CO" => {"name" => "Colorado", "names" => "Colorado"}, ... }
参考: アメリカ合衆国各州の略号一覧 - Wikipedia
「緯度経度の情報も取れるのね↓」
# 同リポジトリより
c.latitude # => "38 00 N"
c.longitude # => "97 00 W"
c.latitude_dec # => 39.44325637817383
c.longitude_dec # => -98.95733642578125
c.region # => "Americas"
c.subregion # => "Northern America"
「タイムゾーンはtzinfo
gemが必要なんですね」「ちゃんと配列で取れる↓」「タイムゾーンは1つの国に複数あったりサマータイムも絡んだりしてややこしい(ウォッチ20210713)」
# 同リポジトリより
c.timezones.zone_identifiers # => ["America/New_York", "America/Detroit", "America/Kentucky/Louisville", ...]
c.timezones.zone_info # see [tzinfo docs]( http://www.rubydoc.info/gems/tzinfo/TZInfo/CountryInfo)
c.timezones # see [tzinfo docs]( http://www.rubydoc.info/gems/tzinfo/TZInfo/Country)
「telephone routingとかあまり使わなそうな情報まで取れるんですね↓」
# 同リポジトリより
c.country_code # => "1"
c.national_destination_code_lengths # => 3
c.national_number_lengths # => 10
c.international_prefix # => "011"
c.national_prefix # => "1"
「money
gemを入れると通貨も取れるとあるけど、通貨が複数ある国はどうなるんだろう🤔」
# 同リポジトリより
c = ISO3166::Country['us']
c.currency.iso_code # => 'USD'
c.currency.name # => 'United States Dollar'
c.currency.symbol # => '$'
「このgemをすぐに使うかどうかはわかりませんが、ISOでこんなにいろんな情報が定義されているということが見えてきて面白いですね👍」
🔗 Ruby 3.1のエラー表示改善
Link: Ruby 3.1はエラー表示をちょっと親切にします - クックパッド開発者ブログ https://t.co/DsdaIBs0wj
— Yukihiro Matzmotto (@yukihiro_matz) December 7, 2021
error_highlight普通に神機能だと思う…!Ruby 3.1に入る予定です pic.twitter.com/WcZtnEyq5c
— 成瀬 (@nalsh) December 7, 2021
つっつきボイス:「これはいい👍」「ネステッドハッシュのどこでエラーが起きたかがひと目でわかるのありがたいです」
🔗 その他Ruby
つっつきボイス:「今年のRubyリリースイベントは12/27(月)なのね」「この間申し込みました」「忘れないうちにポチってGoogleカレンダーにも入れようっと」
『研鑽Rubyプログラミング』の翻訳原稿(第2部以降も含めたぜんぶ)のレビュアーを若干名、追加で募集します。興味あるかたはご協力ください!!q 🤗
(β版でお読みいただける第1部へのフィードバックも随時受付中です https://t.co/EXXN7Bh6hP )https://t.co/cEgmP8O4R0— Kakutani Shintaro (@kakutani) December 8, 2021
「『研鑽Rubyプログラミング』、早く日本語読みたい」「レビューに協力すると早まるかもしれませんよ」「おぉ」「Scrapboxにもいろいろ情報が上がっていますね↓」
参考: 『研鑽Rubyプログラミング』をScrapboxする
募集期間
* 12/14(火) 18:00 頃を想定していますが、応募多数の場合は早めに締め切ることもあります。悪しからずご了承ください。
同フォームより
以下で同β版へのフィードバックが行われています↓
🔗クラウド/コンテナ/インフラ/Serverless
🔗 Amazon Redshift Serverless(Serverless Statusより)
- 元記事: Introducing Amazon Redshift Serverless – Run Analytics At Any Scale Without Having to Manage Data Warehouse Infrastructure | AWS News Blog
- 日本語: Amazon Redshift Serverless のご紹介 – データウェアハウスインフラストラクチャを管理することなく、あらゆる規模で分析を実行 | Amazon Web Services ブログ
つっつきボイス:「AWS re:Invent 2021で発表されたAmazon Redshift Serverlessですね」「お〜これですか」「これはなかなかいいところを衝いているサービスだと思いました👍」
参考: 週刊AWS – re:Invent 2021特別号(2021/11/29週) | Amazon Web Services ブログ
「お〜、Webベースのクエリエディタがこんなによくなっている↓」「Redshiftでこんなのが使えるとは」
「Redshift ServerlessがMySQLのサーバーレスと同じスタンスだとしたら、初回の起動だけ少し時間がかかって、後は使っていないときは自動的に落ちるみたいな感じになるんじゃないかな」
参考: Serverless MySQL データベースを設定し、接続する方法 | AWS
「Redshift Processing Unitsで1秒単位の課金ということはクエリを投げなければ課金されないということでしょうね」「お〜、今までだとRedshiftのインスタンスを起動している時間は課金されてたのがServerlessだと変わるんですね❤️」
Amazon Redshift Serverless では、使用するコンピューティングとストレージに対して別途料金を支払います。コンピューティング性能は Redshift Processing Units (RPU) で測定され、ワークロードの料金は RPU 時間で 1 秒単位で請求されます。ストレージについては、Amazon Redshift が管理するストレージに保存されたデータと、スナップショットに使用したストレージに対して課金されます。これは、RA3 インスタンスを使用してプロビジョニングされたクラスターで支払うのと同じです。
aws.amazon.comより
「これまでのRedshiftは、まともなパフォーマンスを出そうとすると結構強力なインスタンスを買う必要があってミニマムコストがかさむので、使い始めるまでの敷居が高かったんですが、Redshift Serverlessが完全従量課金ならコンピューテーションパワーの必要なものに使いやすくなりますね👍」「お〜」「DynamoDBにも定額課金と完全従量課金があるので使い始めやすい↓」
参考: Amazon DynamoDB(マネージド NoSQL データベース)| AWS
🔗CSS/HTML/フロントエンド/テスト/デザイン
🔗 モダンなフロントエンド開発者の学習ロードマップ
つっつきボイス:「マップになっているのが面白いですね」「フロントエンド開発者はこの図にあることを学びなさいという感じですか」
「この種の学習マップは唯一の正解があるものではないので、一度自分で作ってみて可視化する方が学習効果は高いでしょうね」「たしかに」「そのうえでこのマップと比較して自分に足りないものを確認するとはかどりそう」「開発チームがこういうマップを独自に提示して、自分のチームではこういうものが必要だよというのを示すのもよさそうですね」
「GitHubリポジトリがあって、詳細情報はみんなで足していってくれという感じのようです↓」「★18万超えなのか」
「READMEを見ると他にもロードマップあるんですね↓」「ReactやらPythonやら」「Rubyもあればいいのに」
- Backend Developer Roadmap: Learn to become a modern backend developer
- DevOps Roadmap: Learn to become a DevOps Engineer or SRE
- React Developer Roadmap: Learn to become a React developer
- Angular Developer Roadmap: Learn to become a Angular developer
- Android Developer Roadmap: Learn to become an Android developer
- Learn to become a modern Python developer
- Learn to become a Go developer
- Learn to become a modern Java developer
- DBA Roadmap: Learn to become a database administrator with PostgreSQL
RubyとRailsだと以下のようなかわいらしい技術マップもありますね(RubyとRailsの学習ガイド 2021を買うと裏表紙により詳細な技術マップがあります)。
「RubyとRailsの学習ガイド」は裏表紙にあるこの地図のイラストが描けてとても嬉しいです。並べてみると本当にいろんな技術を活用していることが分かりますね。見やすくイラストにしてくれたべこさんGoodJobです!
RubyとRailsの学習ガイドはBOOTHでPDF版を販売中です!https://t.co/r7tOhsFp0T pic.twitter.com/iIkpchscW5
— igaiga (@igaiga555) March 26, 2020
参考: RubyとRailsの学習ガイド 2021 | Techpit
後編は以上です。
バックナンバー(2021年度第4四半期)
週刊Railsウォッチ: RailsでGDPRに対応する、stateful_enum gem、rubyzip 3.0ほか(20211214前編)
- 20211207後編 改訂2版『プロを目指す人のためのRuby入門』、『研鑽Rubyプログラミング β版』ほか
- 20211206前編 sanitize_sql_likeは重要、X-XSS-Protectionヘッダーのデフォルト変更、kredis gemほか
- 20211201後編 Railsで「Read Model」を使う、Ruby Prize 2021受賞者決定、pru gemほか
- 20211129前編 フォームヘルパーの改修、Railsの監査ログgem比較、DHHとimport-mapほか
- 20211116後編 Ruby Struct入門、書籍『進化的アーキテクチャ』、AWS Web問題集ほか
- 20211115前編 Rails 7がRuby 3.1のClass#descendantsに対応、GitHub Issue風ファイルアップローダほか
- 20211110後編 JSON.parseの機能、Opal 1.3、async gem、Linuxコマンドチートシートほか
- 20211102後編 2021年度Rubyアソシエーション開発助成、Rails REST APIレベルで楽観的ロックほか
- 20211101前編 Rails 7アセットパイプライン解説記事、ロジックをapp/operatorsで整理ほか
- 20211026後編 YJITがRuby 3.1向けにマージ、ripperのドキュメント化、crontabの罠ほか
- 20211025前編 insert_allやupsert_allのタイムスタンプ自動更新、rails/contextsにロジックを置くほか
- 20211019後編 ruby/debugをChromeでリモートデバッグ、Rubyアプリの最適化ほか
- 20211018前編 Railsリポジトリで進行中のPropshaft、inverse_ofを自動推論ほか
- 20211012後編 Ruby 3.1にYJITマージのプロポーザル、Rubyのmagic historyメソッド、JSのPartytownほか
- 20211011前編 ServerTimingミドルウェア追加、paramsで数値キーを許可、Railsで多要素認証ほか
- 20211006後編 ruby/debug 1.2.0リリース、Railsにはthorが入っている、tendejitほか
- 20211004前編 Rails 7でbyebugがruby/debugに変更、GitHub Codespacesをサポートほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)