- Ruby / Rails関連
週刊Railsウォッチ: RailsとPostgreSQLで列挙型を作成する6つの方法、Ubuntu Proほか(20221012後編)
こんにちは、hachi8833です。
🔗Ruby
🔗 RailsとPostgreSQLで列挙型を作成する6つの方法(Ruby Weeklyより)
つっつきボイス:「enumのさまざまな書き方は定期的に記事が出ますね」「Rails 7の前後でPostgreSQLのENUM型を使えるようになっていましたね」
- 手作りする
- Railsの
enum
でInteger値を指定する - Railsの
enum
でString値を指定する - Railsの
enum
でPostgreSQLのENUM型を指定する(Rails 7より前) - Railsの
enum
でPostgreSQLのENUM型を指定する(Rails 7以後) - 列挙型用のテーブルを使う
参考: 8.7. 列挙型 -- PostgreSQL 14.5ドキュメント
「ちなみに1〜6の中では、SQLクエリの結果が読みやすい3.が個人的に好きです↓」「enumが数字のままだとクエリ結果が読みづらくなると以前もお話していましたね」「データベースビューでenumを変換したりすれば回避できるので好みの範疇だと思いますけどね」
# 同記事より: その3
class Order < ApplicationRecord
enum :status, {
initializing: "initializing",
open: "open",
closed: "closed",
canceled: "canceled"
}
end
「3.は一見ストレージを余分に食いそうに見えるけど、Google並の巨大データセットを使うのでもない限りまず影響はないだろうと記事にも書かれていますね」「Google並はそうそうないでしょうね😆」
「ところでRailsのデフォルトは2ですけど、2だとenum要素のソート順序も定まるというメリットはありますね」「そうそう」「後で要素を追加削除するときに困らないよう10,20,30...みたいに間を開けたりしますよね」
「そういうわけで自分は3が好みで、4や5にはあまりしたくない方なんですが、もうひとつの理由は、4や5だと型を追加・削除するときにALTER TABLEしないといけないからなんですよ」「あ〜」「本番データベースのレコード数が多いテーブルでALTER TABLEすると長時間ロックされるリスクがあります」「たしかに!」「4や5はPostgreSQLの機能を使うので、おそらくPostgreSQL的には推奨される方法だろうとは思うんですが、一見大丈夫そうに見えてもそういう怖さがあることを実際に体験しました」
「6のように専用のテーブルを作って外部キーを設定するのは業務システムで見かけますね: ステータスを取るだけでもJOINが必要なのはどうかなという気持ちはありますが」
「全般によくまとまった記事👍」
🔗 Rubyオブジェクトのソート条件指定方法を改良してみた(Ruby Weeklyより)
つっつきボイス:「Rubyのソート方法を拡張するputというgemを作ってみたそうです」「お、以下のようにsort_by
に複数の条件をフィルタ的にブロック内の配列に書くということのようですね↓」「putという名前はちょっと気になるかな〜」
# 同リポジトリより
people.sort_by { |person|
[
(Put.first if person.rubyist?),
Put.desc(person.age),
Put.asc(person.name)
]
} # => Zoe, Qin, Axe, Zak, Tam
「nils_first
やnils_last
があるんですね↓」
# 同リポジトリより
[:fun, :stuff, nil, :here].sort_by { |val|
[Put.nils_first(val)]
} # => [nil, :fun, :stuff, :here]
「このgemがなくてもsort_by
で複数条件を書く方法は記事の方法↓も含めていろいろあります」「nilの可能性がある場合はnilチェックが必要なのか」
# 同記事より
people.sort_by { |person|
[
person.age.nil? ? 0 : -1 * person.age,
person.name || "zzz"
]
}
「ソート条件を複数渡したいことはたしかにありますね」「gemを入れて使おうとまでは思わないけど、Rubyにこの機能が標準で入ったら使ってみてもいいかも」
参考: Enumerable#sort_by
(Ruby 3.1 リファレンスマニュアル)
参考: 複数キーのソート Enumerable#sort (昇順・降順のみ、昇順・降順混在) - 別館 子子子子子子(ねこのここねこ)はてブロ部
🔗 RBSでRubyの型を書いてみた感想
#rubykaigi に行って美味いもの食べてただけじゃなくて、ちゃんと刺激を受けて活動に繋げているぞってアピールしていくために、rbsで型書ける環境を整えて実際にガッツリ書いてみたという記事。 / 今日からneovimでRubyの型(RBS)を書き始める方法 + 実際に書いてみた感想
今…https://t.co/cqTMYLx726— joker1007 (アルフォートおじさん) (@joker1007) September 29, 2022
つっつきボイス:「joker1007さんの記事です」「neovimにプラグインを入れてRBSを書く、なるほど」「steepでLanguage Serverプロトコルが実装されているって知りませんでした」「RBSを積極的に使う機会がなかなかなかったけど、RBSはもう使っていい時期になったと思います👍」
🔗 その他Ruby
以下はつっつき後に見つけたツイートです。Fukuoka mruby Kaigi、10周年おめでとうございます🎉
mrubykaigiのタイムスケジュールが若干変更になりました。登録お済みの方はお目当てのトークの時間をご確認ください!
登録まだの方、mrubyを使う楽しさ満杯のトークの数々を御覧ください。すべてオススメですが見たいとこだけでもOKです!https://t.co/6aiGJK1Ujq— hiromasa ishii (@Hir0_IC) October 2, 2022
🔗DB
🔗 WebAssemblyでPostgreSQLが動く(Publickeyより)
つっつきボイス:「Wasmでx86仮想マシンを動かして、その上でぽすぐれを動かすんですね、その方が動かしやすそう」「サイズは30MBぐらいですって」「ブラウザ環境がリッチになってメモリやストレージも豊富になってきたことを考えると、現代はWasmの形にするのがポータビリティが高いのかも🤔」
🔗 設計・セキュリティ
🔗 レガシーシステムをDockerコンテナ化する場合に直面した4つの壁
📝ブログ公開📝
『レガシーシステムをDockerコンテナ化する場合に直面した4つの壁』
WEBアプリケーションの #Docker #コンテナ 移行にまつわる検証を進めているプロジェクトの中間報告を共有します🏋️
是非ご一読ください☺️#テックブログ #はてなブログ https://t.co/rmXwv8mnzN— 株式会社ラクス 開発部 (@DevRakus) October 4, 2022
つっつきボイス:「"OSコマンドを利用している部分がある"」「素のコンテナだと欲しいコマンドが入っていないことはよくあるけど、自分なら普通にコンテナにインストールするかな」「自分もそうですね」「Docker的には余分なものを極力入れない方が望ましいというのはよく言われるし、基本的にその通りですが、どこまでやるかは程度の問題かなと思います」
「"ミドルウェアとの密結合"」「smrshコマンドなどでメール受信トリガーにしてスクリプトを実行する、みたいな状況が考えられそうだけど、ミドルウェアをどうしても分離しなければならない事情がなければ自分はそこまで気にしないかも」
参考: smrsh - システム管理コマンドの説明 - Linux コマンド集 一覧表
「"オンライン系とバッチ系の密結合"」「これはRailsもそうなっているし、ある程度の密結合は仕方がないとは思いますね」「オンライン系のソースを修正するとバッチ用のコンテナイメージも更新が必要になる、たしかに」
「プロジェクトの規模や状況にもよるけど、これらの問題を解決しないとコンテナ化ができないというものでもなさそうですね」「いい意味で諦めがあってもいいかも」「むしろ、たとえばCapistranoに依存しているプロジェクトの方がコンテナ化を阻まれそうですよね」「この記事のように徹底的に分離するかどうかは別として、理想のコンテナセットアップとの差を意識しておくというのはいいと思います👍」
🔗クラウド/コンテナ/インフラ/Serverless
🔗 Ubuntu Pro(Publickeyより)
つっつきボイス:「Ubuntu Proがどこまで本腰を入れてサポートするのか知りたいところ」「10年サポートって大変そうですよね」「たとえばRed Hat Enterprise Linuxはパッケージで脆弱性が見つかったらRed Hat Enterpriseのチームが中心になって作ったパッチを当ててリリースしたりするんですよ」「お〜」「Ubuntu Proがそれに匹敵するレベルのサービスを提供するのかどうかは今の時点ではわからないけど、そこまでやるとしたらかなり大掛かりになりそう🤔」
参考: Red Hat Enterprise Linux オペレーティングシステム
「元記事を見るとパッケージを限定した形でサポートするんですね↓: サポート対象を絞り込むのはわかる」
Ubuntu Proはサーバ向けとデスクトップ向けを含むすべてのUbuntuのディストリビューションに対応するのに加えて、Apache Tomcat, Apache Zookeeper, Docker, Drupal, Nagios, Node.js, phpMyAdmin, Puppet, WordPressなどの主要なLinuxアプリケーションもメンテナンスの対象として含まれています。
Ubuntuが10年間のメンテナンスを約束「Ubuntu Pro」を発表。個人には5台まで無料提供 - Publickeyより
「お?公式サイトを見るとRailsもサポートパッケージに入ってる!」「ホントだ」「調べてみたらUbuntuにRailsパッケージがありますね」「使ったことなかった〜」「18.04LTS用のRailsのバージョンが4.2.10!」「逆に言えは公式のサポートが終了した古いRailsを使いたいときはUbuntu Proにする手があるかも」「Railsを10年サポートするとしたらスゴい」「リストに載っていないgemまではサポートされないと思いますけどね」
参考: Ruby on Rails | endoflife.date
🔗CSS/HTML/フロントエンド/テスト/デザイン
🔗 XMLHttpRequest
Jxckさん安定のベスト解説
XMLHttpRequest とはなんだったのかhttps://t.co/HEOCP9wCp0
XMLHttpRequest, fetchの歴史。勉強になります。時系列順に並んでるんすが、その議論や実装がいつ頃はじまったものか書いてあったらうれしい。Cloudflare WorkersとNode使うもんでfetchの有り難みを痛感する
— kjur セキュリティ IT 開発の私的情報収集用+少しつぶやき (@kjur) October 2, 2022
つっつきボイス:「これはとてもいい記事👍: XMLHttpRequestやAjaxについての歴史をみっちり網羅している」「これ面白い〜」「XMLに限った話ではないのにXMLHttpRequestという名前になった経緯もありますね」「Ajaxが洗剤の名前から命名されたとは知りませんでした↓」「Ajaxというアーケードゲームもありましたね」「し、知らなかった」
参考: Dish Soap & Powder Kitchen Cleaning Products | Ajax®
「SOAP、JSONP、Fetch API、いろいろ懐かしい」「こういう歴史を他の人が記事にするとまた少し視点が変わるかもしれないと思いました」「ありそうですね」「Winter CGって何だろうと思ったらW3C傘下の団体なんですね↓」
参考: WinterCG
参考: Web-interoperable Runtimes Community Group
🔗 CSS コンテナクエリ
つっつきボイス:「コンテナクエリ?」「記事によると、直近の親要素を指定して子要素のスタイルを定義できる機能のようですね」
参考: CSS Container Queries - CSS: Cascading Style Sheets | MDN
「CSSのセレクタは基本的にグローバルですが、コンテナクエリはそのコンテナがどこに置かれているか、つまりどの要素の子要素であるかによってスタイルを変えられるということですね」「お〜!」「コンテナクエリを"理想的に"使えれば、CSSのコンポーネント化がやりやすくなるはずだと思います」「コンポーネント化は今だとReactでやる人が多いですよね」「コンテナクエリが普及すれば真の意味でCSSが現代化されるだろうという感触はありました」
「コンテナクエリすごいじゃないですか: この機能が5年早く登場していればという気持ちにしかならない」「同じく」「もしもの世界ですけど、ReactやTailwindが普及する前にコンテナクエリが登場していたら主流になっていたかもしれませんね」
🔗言語/ツール/OS/CPU
🔗 AI Programmer
最近はAIで画像生成が流行ってるみたいですがAI ProgrammerでC#コードを生成→unityに導入して遊んでいます、楽しいです😊
画像のコードを参考に
public Transform position;
public void hoge()
{
Instantiate(gameObject, position);
}
アタッチしたオブジェクトの複製が出来ました。
続く(動画) pic.twitter.com/JGdxO2r0sT— カピバラVR@unityゲーム制作 (@haribote0073) October 4, 2022
つっつきボイス:「最近バズっているAI Programmerです」「コードの量より入力する日本語の方が多くなったりして」「似たような試みは以前からいろいろあったと思うけど、手軽に使えて精度が向上したならよさそう」
「この種のコード生成って、生成されたコードをユーザーが正しく評価できないと結局使えなかったりしますよね」「おっしゃるとおり」「機械翻訳なんかもそうですよね」「ちょっとした使い捨てのコードなら気軽に使えそう」「"君ならどう書く?"みたいにセカンドオピニオンを尋ねてもいいかも」
後編は以上です。
バックナンバー(2022年度第4四半期)
週刊Railsウォッチ: Turbo 7.2.0リリース、GitLabのDevSecOpsサーベイ結果ほか(20221011前編)
- 20221004後編 ヒアドキュメント拡張の提案、『組織に自動テストを根付かせる戦略』ほか
- 20221003前編 Kaigi on Rails 2022のタイムテーブル発表、書籍『Practicing Rails』ほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)