- Ruby / Rails関連
週刊Railsウォッチ: Crystal言語作者がRubyを愛する理由、TypeScript 4.6リリースほか(20220309後編)
こんにちは、hachi8833です。
🔗Ruby
🔗 strings-truncation: 長い文字列を...
で省略(Ruby Weeklyより)
つっつきボイス:「エンコーディングにUTF-8のほかにEUC-JPも使えるというのは今どき珍しいかも」「Rubyのtr
みたいなものかと思ったら、長い文字列の後半を省略記号...
にするんですね」「truncationの機能にはいくつかありますけど、これはRailsのtruncate
メソッドに近いかな」
- Rails API:
truncate
--ActionView::Helpers::TextHelper
「しかも日本語などの全角文字も1文字が半角文字2つ分という形で指定できるらしい↓」「なるほど、これがやりたかったのかも」
# 同リポジトリより
strings.truncate("おはようございます", 8)
# => "おはよ…"
🔗 Crystal言語の作者のひとりがRubyを愛する理由(Ruby Weeklyより)
つっつきボイス:「記事を書いたAry BorenszweigさんはCrystal言語の作者のひとりだそうです」「この記事はequalityがお題ですね: Rubyの==
のデフォルトが常識的で使いやすいなど」「Crystal言語でRubyと同じにしたかった部分を解説してますね、読みやすくてよさそう👍」「この記事も翻訳したいです」
「この記事はシリーズものみたい」「全部で7回なんですね↓」「これも翻訳したいです」
- Why I love Ruby: string representation - DEV Community 👩💻👨💻
- Why I love Ruby: almost everything is a call - DEV Community 👩💻👨💻
- Why I love Ruby: powerful calls - DEV Community 👩💻👨💻
- Why I love Ruby: a great standard library - DEV Community 👩💻👨💻
- Why I love Ruby: blocks - DEV Community 👩💻👨💻
- Why I love Ruby: the secret algorithms - DEV Community 👩💻👨💻
「シリーズ記事にもありますけど、改めてRubyのブロックは設計がいいなと思います」「構文としてのブロックは1個までという制限をつけたのがうまいですよね」「もしブロックを複数渡せるようにしていたらカオスになる未来しか今となっては想像できない」
別人ですが、Aryさんの記事を見ていて、RubyistからElixirの人になったDave Thomasさんをちょっと連想しました↓。
参考: Dave Thomas (programmer) - Wikipedia
🔗 システム内のRubyをモジュラーパッケージでインストールする(Ruby Weeklyより)
つっつきボイス:「システムのRubyを、コンパイルとかせずにパッケージでインストールしようという記事のようですね」「dnf
って何だろうと思ったらCentOSのパッケージマネージャ(yum
の後継の)でした↓」「へ〜こんなの出てるんですね」「Red Had系のLinuxを使わなくなって久しい」「Debian系のapt
か、せいぜいAlpineのapk
ぐらいしか使ってないかも」「Amazon Linuxを使っているのでyum
は使う」「使う使う」
参考: 【dnf】コマンド(基礎編)――ソフトウェア(パッケージ)をインストールする:Linux基本コマンドTips(368) - @IT
参考: 【yum】コマンド(基礎編)――ソフトウェア(パッケージ)をインストールする/アンインストールする:Linux基本コマンドTips(42) - @IT
「Amazon Linuxのyum
はいつdnf
に変わるんでしょうね?」「Amazon Linuxは今v2だから、次のv3の安定版あたりかな〜」
🔗 Amazon Linux Extras
「ところで、Amazon Linux Extrasに用意されているパッケージは何気に進化を繰り返していて優秀: Dockerも常に新しくなっているし、Emacsも入ってるし」
参考: Amazon Linux - Amazon Elastic Compute Cloud -- Amazon Linux Extras
参考: Emacs - Wikipedia
「たまにAmazon Linux Extrasのパッケージをチェックすると、ちょくちょく増えたり入れ替わったりしているので楽しい↓」「ちゃんと管理されているんですね」「tomcatという文字見えた😆」「GIMPやSquidまで入ってる」「MATEやfirecracker、nginxやPostgreSQLやGo言語なんかも入っていていろいろ助かります👍」「Rubyのバージョンはもっと新しくして欲しいけど」「リストの連番に空きがあるのはパッケージが削除された部分」「なるほど歯抜けの部分がありますね」
参考: Apache Tomcat - Wikipedia
参考: GIMP - Wikipedia
参考: Squid (ソフトウェア) - Wikipedia
参考: MATE (デスクトップ環境) - Wikipedia
🔗 RubyやRailsでお気に入りのツールは?(Ruby Weeklyより)
What are your favorite tools for working in #Ruby or @Rails?
— Shopify Engineering (@ShopifyEng) February 15, 2022
つっつきボイス:「Shopifyのツイッターで"RubyやRailsを使うときにどんなツールが好き?"という問いかけにいっぱいレスがついていました」「いきなりruby/debug来ましたね」「よくみたら@st0012さんだ」「ruby/debugは触り心地最高👍」
- NeoVim
- Solargraph
- irb
- Ruby's new debuggerhttps://t.co/oMqpg1HtQP— Stan Lo (@_st0012) February 15, 2022
「自分はbrakemanかな〜」「brakemanも優秀かつちゃんとメンテされていますね👍」
🔗DB
🔗 trigramによるPostgreSQL全文検索を最適化する(Ruby Weeklyより)
つっつきボイス:「この記事で紹介されているtrigramという手法は、全文検索の分野でよく使われますね: 記事では"hello"
を{" h"," he","hel","ell","llo","lo "}
のように分解していますが、何文字ずつに分解するかも含めていくつか戦略があります」「3文字だからtrigramなんですね」
参考: PostgreSQL 13.1文書 F.31. pg_trgm
F.31.1. トライグラム(またはトリグラフ)の概念
トライグラムは文字列から3つの連続する文字を取り出したグループです。 共有するトライグラムの個数を数えることで、2つの文字列の類似度を測定することができます。 この単純な考えが、多くの自然言語における単語の類似度を測定する際に非常に効率的であることが判明しています。
注記
pg_trgmは、文字列からトライグラムを抽出する時に単語以外の文字(英数字以外)を無視します。 文字列内に含まれるトライグラム集合を決める際、文字列の前に2つの空白、後に1つの空白が付いているものとみなされます。 例えば、「cat」という文字列のトライグラム集合は、「c」、「ca」、「cat」、「at」です。 「foo|bar」という文字列のトライグラム集合は、「f」、「fo」、「foo」、「oo」、「b」、「ba」、「bar」、「ar」です。
F.31. pg_trgmより
2文字のはbigramと言うそうです↓。汎用的にはn-gramなんですね。
参考: bigramとは バイグラム: - IT用語辞典バイナリ
「trigramの特徴は言語を選ばないこと」「この原理ならたしかに漢字でも何でも使えそうですね」「MeCabのような品詞分解や単語分かち書きが不要になります」「英語や韓国語はスペース区切りだけど、日本語のような言語は単語を区切るところから始めないといけなくなる」「もちろんtrigramの戦略が要件や言語に合ってこそですね」
「記事を見ていて、昔にMySQLでSennaとかをコンパイルしたことを思い出しました」「そうそう、ありましたねSenna」「これも昔にNamazuという全文検索エンジンを使ったことがあります(trigramかどうかはわかりませんが)」
参考: MySQLを通じた全文検索エンジンSenna/groongaの利用について
参考: Namazu - Wikipedia
🔗クラウド/コンテナ/インフラ/Serverless
🔗 OAuth2とOpenID Connect
元記事: Why you probably don't need OAuth2 / OpenID Connect!
つっつきボイス:「OAuth2とOpenID Connectがおそらく不要な理由か🤔」「OAuth2とOpenID Connectは違うものなんでしょうか?」「同じではなかったと思います: OAuth2の上にOpenID Connectが追加されたんだったかな」「こんなことも書かれている↓」「OAuth2は認証ではありません、アクセストークンはセッションではありません、たしかに」「OAuth2をファーストパーティなアカウント登録&ログイン手段として使うとつらくなるともあるけど、OAuth2プロバイダを立ち上げるのでもなければ通常は外部サービスを使いますね」
OAuth2 is not Authentication. Access tokens are not sessions.
同記事より
「記事長いですね」「眺めた感じでは、IDの管理方法は事前によく考えておこうということでしょうね: たとえばOAuth2にすればユーザー管理は不要になるけど、その代わり将来自分たちでアカウントを管理しようとしたときにOAuth2だけでできないことが増えて困ったりすることは考えられる」「なるほど」「今はメールアドレスとパスワードによる認証に加えてOAuth2での認証も選べるようにすることも可能です」「たしかによく見かけますね」
「認証周りでつらいことがあって書いた記事なのかも: ちゃんと読んでみるとよさそう👍」
🔗 その他インフラ
つっつきボイス:「今まで無制限じゃなかったのかと驚いた人も社内でいましたね」「さすが太っ腹」「無制限っていい響き」
🔗JavaScript
🔗 TypeScript 4.6がリリース
つっつきボイス:「社内でも喜びの声が聞こえてきました」「TypeScript 4.6で何がよくなったんだろう?」
「お〜、super()
より前にコードを書けるようになったらしい↓」「今までできなかったんですか」「super()
の前にコードを書けない言語はそこそこありますね: たしかJavaではメソッドの先頭にしか書けなかった覚えがあります」「たしかそうですね: 自分はsuper()
の前に何か書いた記憶がまったくないです」「普通は継承してから何か書きますよね」
// 同記事より
class Base {
// ...
}
class Derived extends Base {
someProperty = true;
constructor() {
// error!
// have to call 'super()' first because it needs to initialize 'someProperty'.
doSomeStuff();
super();
}
}
参考: java - コンストラクタの this() super()はなぜ先頭にしか記述出来ないか - スタック・オーバーフロー
「Javaでsuper()
を先頭でしか呼べないのは、初期化やデータ構造やメモリアロケーションで不都合があるからなのかも」「Javaのsuper()
はオブジェクトを生成するし、最終的にJavaのバイトコードにまで遡るから厄介そうですよね」「super()
に対応するバイトコード命令があるんですか?」「そうそう、コンストラクタを呼び出すとか何かをしてたと思います」「とにかくTypeScriptではそうした制約を回避できるようにしたようですね」「TypeScriptはJavaScriptへのトランスパイラだから、JSの世界でやりようがあるのかも🤔」
「へ〜、TypeScriptってこういうunion型も書けるのね↓」「GraphQLにもありますし、最近union型が流行っている感ありますね」
// 同記事より
type Action =
| { kind: "NumberContents", payload: number }
| { kind: "StringContents", payload: string };
function processAction(action: Action) {
if (action.kind === "NumberContents") {
// `action.payload` is a number here.
let num = action.payload * 2
// ...
}
else if (action.kind === "StringContents") {
// `action.payload` is a string here.
const str = action.payload.trim();
// ...
}
}
参考: Unions - The Rust Reference
参考: union - Kotlin Programming Language
参考: PHP 8の正式版が登場、JITやunion型を実装 - Computerworldニュース:Computerworld
「unionというとついC言語伝統のunion
(共用体)を思い出す」「そうそう、今もunionと聞いて一瞬脳が止まっちゃいました😆」「わかる」「SQLのUNIONを思い浮かべる人もいるでしょうね」「そして最近は上のようなunion型もあると」「3つのうちどれを思い浮かべるか人によって違いそう」「SQLかな(きっぱり)」
参考: 共用体 - Wikipedia
参考: SELECT文を統合する「UNION」:SQL実践講座(9) - @IT
「話がそれますけど、最近TailwindやDart Sassのバイナリ版が出てRailsでも採用されているみたいに↓、TypeScriptもバイナリ版のトランスパイラを出してtypescript-railsみたいなgemがリリースされたらいいなとちょっとだけ思いました」「それあったら使いたいかも」
「TypeScriptの単体バイナリ版トランスパイラは原理的には可能だと思いますけど、TypeScriptが動くところには必ずJavaScriptの実行環境がありますし、TypeScriptのコードはwebpackみたいなバンドラーで他のライブラリと一緒に使うことが多いので、TypeScriptのバイナリ版を作るモチベーションとしては弱いかもしれませんね」「それもそうなんですよね...StimulusのライブラリがTypeScriptで書かれているのをGitHubでちょくちょく見かけるので、RailsでもNode.jsなしでStimulusのコードをTypeScriptで書けたらいいなと思ったのでした😅」「素のTypeScriptを書きたい人がどのぐらいいるかでしょうね」
🔗言語/ツール/OS/CPU
🔗 Make(旧Integromat): ZapierやIFTTTのオルタナツール
- サイト: Integromat - Achieve more in less time with fewer people
- サイト: Make | Work the way you imagine -- つい最近IntegramatがMakeに改名したそうです
IntegromatがMakeにブランドを変更!触ってみた感覚を話してもらいます。 #linedc pic.twitter.com/8GfHCGhb2c
— LINE Developers Community(JP) (@linedc_jp) March 7, 2022
参考: Integromat(インテグロマット)とは?使い方・料金を徹底解説! | ノーコードデータベース|NoCode DB
つっつきボイス:「ZapierやIFTTTのオルタナだそうです」「コードを書かずにサービスを連携して自動化できる感じですか」「Zapierはちょっと使ってた」「Makeはオペレーション1000個/月までユーザー数制限なしだけどステップ数は2までか...」「Zapierの無料プランはステップ数無制限なので相当作り込める」「Makeはノンエンジニアをターゲットにしていそうな感じですね」「プログラマーはIFTTTを使っていて、Zapierはノンエンジニアが使っていることが多い印象あるかな」
参考: Zapier | The easiest way to automate your work
参考: IFTTT | Every thing works better together
「どのツールでもいいんですが、この種の自動化ツールは使ってみるといろいろ便利👍」「ですね」「使ったことがない人は一度触ってみるといいと思います」
後編は以上です。
バックナンバー(2022年度第1四半期)
週刊Railsウォッチ: 英国政府サイトで使われるRailsアプリ、pg-oscとPercona Toolkitほか(20220308前編)
- 20220301後編 Ruby標準のCSVライブラリは優秀、if代入のコーディングスタイル、rambulanceほか
- 20220228前編 dartsass-railsがリリース、webpack-mergeツール、Rubyが29歳にほか
- 20220222後編: 端末文字幅とRubyのreline、SQLのプリペアドステートメント、Terraformほか
- 20220221前編 orderでコレーション指定をサポート、awesome_nested_set、GitHub Copilotほか
- 20220216後編 Bundler自身のバージョンロック機能、gem署名メカニズムの提案ほか
- 20220214前編 Rails 7.0.2の改修内容、receipts gemでレシートを作成ほか
- 20220209後編 Rubygems.orgのAPIキーに権限スコープが追加、RailsのDBパフォーマンス改善ほか
- 20220208前編 Rails 6.1を7.0にアップグレードしてみた、PostgreSQLでジョブキューほか
- 20220201後編 Rubygems Adoptionフォームが開設、JetBrains Gateway、NGINX Unitほか
- 20220131前編 Sidekiqが10歳に、BuildKiteのテストを高速化、フィーチャーフラグほか
- 20220126後編 Rubyコンパイラの歴史動画、RubyのWebAssembly対応進む、ぼっち演算子の注意点ほか
- 20220124前編 Webpackerが公式に引退宣言、『Everyday Rails』日本語版がRails 7に対応ほか
- 20220118後編 Ruby 2.5〜3.1ベンチマーク、Opal 1.4、JRubyが20歳に、2022年のCSSほか
- 20220117前編 rails-ujs->Turboアップグレードガイド、RubyとWeb Componentsほか
- 20220112 Rails 7をRuby 3.1で動かす、クックパッドのRuby 3.1解説記事、Rails 6->7更新ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)