週刊Railsウォッチ(20190409-2/2後編)Ruby 2.3系サポート終了、Thoughtbotのコーディング指南書、PostgreSQLのgenerated column、Chromebrewほか

こんにちは、hachi8833です。自宅でKindle for Macにダウンロードされる画像がちょくちょく欠落する病が治らず困っています😢。

  • 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
  • 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください

今回の後編も、4/8の第9回公開つっつき会の内容を元にしています。ご参加いただいた皆さまありがとうございます!

後出し臨時ニュース: Ruby 2.3系のサポートが終了(Ruby公式ニュースより)

先週の公開つっつき会で取り上げようと思っていたのが漏れていました🙇。Rubyにとって春は別れの季節ですね。

Ruby 2.3以前は今後セキュリティパッチがリリースされませんので、お早めの対応をどうぞ。

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

faastRuby: RubyやCrystal向けのサーバーレスプラットフォーム


faastruby.ioより


つっつきボイス:「faastRubyは例のRuby on Jetsの対抗馬かな?と思って: とりあえずQiitaの記事も貼りました」「ぱっと見にはAWS Lambda上で動くサーバーレスなRubyという感じだけど、Faster than Lambdaとか書いてるし😆」「ホントに?」「Heroku並に簡単でLambdaより速いという謳い文句ということはLambdaじゃないサーバーレスということか」

「faastRubyでデプロイできて、ローカルHTTPサーバーもあって、と、pricingのあたりを見るとやはり別途サーバーが必要ということなのかな?」「あ、有料ありですか」「Self hostedプランもあったりするので、LambdaではないfaastRubyサーバーを立ててそこにデプロイするというもののようです☺️」「Heroku的なサーバーレスサービスを狙ってるのかも🤔」

「いま話に出てきたJetsは、Railsウォッチでも何度か取り上げたんですが、こちらはAWS Lambdaにデプロイするタイプですね」


rubyonjets.comより

不揮発性メモリ(Publickeyより)


つっつきボイス:「そうそう、これも出てましたね😋: こういう↓のをDRAMのところにぶっ刺せる」「最初はもう少し小さめのヤツだった気がしますね」「この製品については今後どうなるかはまだわかりませんが😆: OSやハードウェアのサポートも必要になりそうですし」「マザボとの相性とかありそう😆」

「こういうのを既にやっていそうなのは、やはりクラウドサービスのプロバイダでしょうね(GoogleとかFacebookとか): つかそういうところにこの製品を売りたいでしょうし😆」「最近はあまり追えてないけど、こういう高速デバイス周りはいろいろ論文が出ていそうな気がするので、追ってみると楽しいかも😋」

その他クラウド


つっつきボイス:「Goのバイナリ、そりゃ動くよね🤣」「Goがというより、バイナリもやっぱりLambdaで動かせるんだなと思って😆」「LinuxのELFバイナリなんかは普通に動くでしょうね☺️」

参考: Executable and Linkable Format - Wikipedia


SQL

PostgreSQLに「generated column」が追加(Postgres Weeklyより)

-- 同commitより整形
CREATE TABLE gloc1 (a int, b int);
ALTER TABLE gloc1 set (autovacuum_enabled = 'false');
CREATE FOREIGN TABLE grem1 (
  a int,
  b int GENERATED ALWAYS AS (a * 2) STORED)
  SERVER LOOPBACK OPTIONS(table_name 'gloc1');
INSERT INTO grem1 (a) VALUES (1), (2);
UPDATE grem1 SET a = 22 WHERE a = 2;
SELECT * FROM gloc1;
 a  | b  
----+----
  1 |  2
 22 | 44
(2 rows)

SELECT * FROM grem1;
 a  | b  
----+----
  1 |  2
 22 | 44
(2 rows)

つっつきボイス:「generated column?」「誰か分かる人います〜?」「言葉自体初めてかも😅」「あ〜そういうことか↓、なるほどなるほど」

参考: JSON型にindexも!MySQL 5.7のGenerated Columnsの可能性について探る - UUUM攻殻機動隊(エンジニアブログ)

簡単に言うと、トリガーで特定のカラムにデータを入れるのを簡単に定義する方法みたいなもので、カラム定義時にAS 計算式と書くことで、そのカラムの値が該当の計算結果になります。
この機能はMySQL 5.7.6から追加されました。日本語では「生成列」と呼ぶこともあるようです。
上記事より

-- 上記事より
mysql> CREATE TABLE triangle (
    ->   sidea DOUBLE,
    ->   sideb DOUBLE,
    ->   sidec DOUBLE AS (SQRT(sidea * sidea + sideb * sideb))
    -> );
Query OK, 0 rows affected (0.11 sec)

mysql> INSERT INTO triangle (sidea, sideb) VALUES(1,1),(3,4),(6,8);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

「上のsidecみたいに、他のカラムから計算した結果をカラムの値にできるヤツ」「おぉ?」「言ってみれば、カラムで関数を定義できるような感じ」「標準SQLにあるんだっけか?」

後で調べると、Microsoft SQL Serverでは「computed column(計算列)」と呼ばれているようです。またWikipedia(英)によると、一般にはvirtual columnという名称らしく、標準SQLにはないものだそうです。

参考: 計算列のインデックス - SQL Server | Microsoft Docs
参考: Virtual column - Wikipedia

JavaScript

Visual Studio 2019がリリース(Publickeyより)


つっつきボイス:「おーVS2019!」「ところで、この中でVisual Studio使ってる人います?」「VSCodeなら☺️」「あ、Visual StudioとVSCode(Visual Studio Code)って違うのか😅」「元C#erです😆」「しーしゃーぱー😆」

参考: Microsoft Visual Studio - Wikipedia
参考: Visual Studio Code - Wikipedia

「最近だとJetBrains IDEにもReSharperなどのC#の開発環境もありますけど、C#だとやっぱりVisual Studioが強いのかなーなんて」

「VSはとりあえずMatzもうらやましがってるIntelliCodeが気になります😊」「IntelliCode、名前的にJetBrainsに挑戦してる感🤣」「あは🤣」

参考: ReSharper: The Visual Studio Extension for .NET Developers by JetBrains
参考: Rider: The Cross-Platform .NET IDE from JetBrains
参考: IntelliJ IDEA: The Java IDE for Professional Developers by JetBrains

「IntelliCodeはAI使ってるらしいとか聞いてますが、コードレコメンドとかやってくれるみたい」「そのうちみんなでコピペコードが書ける時代になったりして😆」「😆」

参考: IntelliCode を使ってみて戦慄した - Qiita

ChromeコンソールAPIの新技集


つっつきボイス:「最近はてブで上がってましたね↓」「はい、それの元記事です」「ログを入れ子にする(グルーピング)↓とか、実はChromeコンソールでいろいろできるらしい」

参考: 【2019年4月版】Javascriptのconsoleがすごいことになってた。 - Qiita

// 同記事より(以下同文)
console.group();
console.log("Inside 1st group");
console.group();
console.log("Inside 2nd group");
console.groupEnd();
console.groupEnd();
console.log("Outer scope");

「コンソールログにCSSを当てられる↓ってそれって🤣」「変態や〜🤣」

console.log("Example %cCSS-styled%c %clog!",
    "color: red; font-family: monoscope;",
    "", "color: green; font-size: large; font-weight: bold");

「WarningやErrorのスタイルにできる機能↓とかは実用性あるかも😋」「いつの間に実装されてたんだろ?」「結構前からあったかも☺️」「お〜」

console.warn("This is a warning!");

console.error("This is an error!");

「assertもあるし」

console.assert(true, "This won't be logged!");
console.assert(false, "This will be logged!");

「TimingとかCountingとかは前からあった気がする」

console.timeLog(); // default: [time] ms

console.count(); // default: 1
console.count(); // default: 2
console.count(); // default: 3

「ついでに、この中でJavaScriptを業務でゴリゴリ書いているフロント系の人っています?」「ちょこちょこ触るぐらいかな〜☺️」「お、じゃ結構モダンなJS環境だったりします?」「Reactとか使ってますが、まだjQuery案件多いですね😅」「やはり〜😆」「まだまだjQueryは生き続けると☺️」

「ES2015は使ったりします?」「今徐々に移行しつつある感じで☺️」「よかった〜、みんな未来に向かって進んでるらしいことがわかって😆」

その他JS

CSS/HTML/フロントエンド/テスト

Kururu: GitHub向けテスト管理ツール


同サイトより


つっつきボイス:「社内Slackのtest板に投下されていたので」「CI回すとかではない?」「どちらかというとissueというかチケットの管理っぽいです」「チケット管理側とコード管理側を紐付けるみたいな感じかな🤔」「とりあえずGitHub専用みたいです」「unitテストとかじゃなくてintegrationテストなんかだとシナリオに沿ってやるから、こうやってチケット書いて対応するみたいなのは欲しいのかも🤔」

開発者自身がテストを担当するレベルの小さなチームやプロジェクトを意識してます。 その上でテスト管理とチケット管理を連携しやすいツールを作ろうと考えました。あえてGitHubと連携を必須にしたのはこれが理由です。自分自身の経験から小さなチームであればGitHubのissueでチケット管理するのが一番楽でした。
そのため、Kururuではもしテストが失敗したら速やかにGitHubと連携できるように作りました。 もちろん、現状ではまだまだ機能が少ないので追加や改善をしていこうと考えてます。
同サイトより

「令和の」令が2つ


つっつきボイス:「令和が早くも😆」「令(U+4EE4)と令(U+F9A8)の2つか〜、これはもうしょうがない😇」

正しいと考えられる方:

下のCJK文字はおそらく使われない:

compart.comより

「ところで、令和ってどう発音するのが正しいんだろか?😆」「れいわ↑?」「れ↑いわ↓?」「(フラットに)れーわ?」「あれどれだろう😆」

参考: 「令和」のアクセントは? 放送各社で対応分かれる (1/2) - ITmedia NEWS

一応私のオレオレRailsアプリにも令和の誤りを登録しました↓。


enno.jpより

Chromebrew: Chrome OSで使えるHomebrew


同サイトより

$ crew install vim

つっつきボイス:「Chrome OSで使えるhomebrewみたい」「Chrome OSというかChromebookって使ってる人います?」「一応気にはなってます☺️」

参考: Google Chrome OS - Wikipedia

「Chrome OS、実は結構いいですよ〜❤️: 今自分が授業やってる学校の先生が最近Chromebookのエントリーモデル使っているのを見てると、論文レビューとかに使う分にはまったく問題ない感じですね」「なるほど😍」

参考: Chromebook - Wikipedia

「やったことはないんですが、Chromebookの背面の小さな蓋を開けてDIPスイッチを切り替えると、Chromebookのローカルに書き込めるようになるという噂を見かけたことあります」「それ、やりました✋」「お、どうでした?」「壊れました😇」「やっぱし🤣」「ぶっ壊れですよもう🤣」「ご愁傷様です🙏」

今朝思い出したのですが、私事ながら自分の息子が今年入学した中学では2年生になると全面的にChromebookで授業やるそうです。来年あたりに危うく子どものChromebookのDIPスイッチをドヤ顔で動かして自滅するところでした😅。

参考: ディップスイッチ - Wikipedia

その他フロント


つっつきボイス:「とにかく動画を再生」(ぽちっ)「おおwこれは😆」「面白え〜」「しかも左上のところにスコアが表示されるあたり芸が細かい😋」「アイデアの勝利👍」「絵が描けなくてもできるし」「さすがげえむくりえいたあ」

言語・ツール

Playbook: Thoughtbot謹製の汎用プログラミングガイド


同リポジトリより

例:

  • ベストプラクティス
    • 一般
    • オブジェクト指向設計
    • Ruby
    • RubyGem
    • Rails
    • テスト
    • Bundler
    • RDB
    • PostgreSQL
    • Email
    • Web
    • JavaScript
    • HTML
    • CSS
    • Sass
    • ブラウザ
    • Objective-C
    • Bash
    • Haskell
    • (略)

つっつきボイス:「Thoughtbotが作った、コードはこう書けみたいな心得帳というか格言集というかガイドなんですが、カバー範囲がやけに広いのが面白いと思って」「そういえばThoughtbotって最近どんなgem作ってたかな?」「最近ちょっとおとなしめな印象ありましたね」

「Thoughtbotといえばfactory_bot、さすがに今も動いてる」

「あと何が有名だったかな〜」「DeviseはPlataformatecだから違うし」「んーと、Paperclip!」「それだ!」「Paperclipはもうサポート終了なので😇」「年季の入ったプロジェクトにはまだあるかも?😆」

Paperclipからの移行ガイド↓です。

Rails: PaperclipからActiveStorageへの移行ガイド by thoughtbot(翻訳)

「Thoughtbotの有名なgemって他にもあった気がするけど、リポジトリにたくさんありすぎてわからない😅」「backbone-js-on-railsなんてのを見つけました↓」「お〜歴史⛩」「歴史だ」「一時期はBackbone.jsこそ本命みたいに言われてた時期もありましたね☺️」「あっという間に消えた」「あんなに真っ逆さまに消えるとは思わかなったし」

その他

Desmos: 直感的な数式プロットサービス


desmos.comより

生成したグラフの埋め込みもできます↓。


つっつきボイス:「Desmosは以下のブログの方が愛用しているそうです」(サイトを開く)「おぉ、これは絵から数式を起こすこともできるヤツ?」「そうですね、どっち方向もやれますね」

「ミッキーマウスがドラえもんにモーフィングするとか」「フーリエ展開とか使って」「しかしスポンジボブ😆」

参考: フーリエ級数 - Wikipedia

「ついでに以下も貼ってみました」「ほー、階乗の!記号の由来が印刷の都合で…ってホントか?🤣」「案外4/1だったりして🤣」

「ってこの日付、4/1みたいですけど😆」「あー、ネタだったか〜!😇」「ネタ説濃厚😆」「引っかかった〜😆」「真っ赤な嘘😆」「ワンテンポ遅れで四月の魚になってしまいました😅」

四月の魚: Poisson d’avril〈フランス語〉〔仏ではこの日は魚の紙切れを誰かの背中に黙って貼り付け、皆で笑い者にする。アイルランドも他人に紙を貼り付ける(Taily Day)。〕

英語の「R」を発音しない流行があった


つっつきボイス:「これイギリスのBBCサイトの記事なんですが🇬🇧、予想以上にいい記事でした😍: おまいらRも発音できないのかみたいにマウント取りに行くのかと思ったら全然違ってたという」「イギリスやアメリカですら、Rの発音が時代によって品がないとされたり、Rの発音を弱めてオシャレ感を出したりしてた時期があったんだそうです」「翻訳が極上なのもポイント高いです😋: こんな訳しにくいものよく訳したなと」「RというとR言語↓しか思い浮かばないけどっ🤣」「それ🤣」

参考: R言語 - Wikipedia


r-project.orgより

Fred Astaireの歌う古い英語の歌↓がとても聞き取りやすくて好きだったのですが、言われてみればいわゆるRの音がほとんど強調されてなくて単なる「アー」みたいに聞こえます。もしかするとマイクの性能が低かった時代のステージでの歌い方だったりするのかもしれませんが。

参考: フレッド・アステア - Wikipedia

番外

文明と衰退


つっつきボイス:「政権交代すると学問が衰退するというのはあるある」「逆もあったりしますし」

「これとは少し違うけど『権力者は暦を操りたがる』みたいな傾向ってあったりしますよね」「ありそう〜」「暦とか元号の改定を権力の証とするみたいな」「ピラミッドとかより安上がりに歴史に名前残るからかも😆」

そういえばプーチンは何年か前にサマータイム周りをエイヤっと変更してましたね。

参考: 【続報】新タイムゾーン決定~10月26日から東京・モスクワ間の時差が通年6時間に~ | ロシアぶろぐ(仮)~目指せ1日1ロシアネタ~

ダークマターあやうし?


つっつきボイス:「現時点ではまだ何とも言えないんですが、ここ何年かでダークマター説がじわじわ苦しくなりつつあるような感じだったので」「久々の宇宙ネタ🛰」「この辺好きなの自分だけかも😆」

参考: 暗黒物質 - Wikipedia
参考: エントロピック重力 - Wikipedia


今回は以上です。

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

週刊Railsウォッチ(20190408-1/2前編)RubyKaigiの予習資料、Rails「今年ベストのプルリク」、numbered parametersの議論ほか

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

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

Ruby 公式ニュース

Publickey

publickey_banner_captured

Postgres Weekly

postgres_weekly_banner

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の監修および半分程度を翻訳、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れて更新翻訳中。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好きで、Goで書かれたRubyライクなGoby言語のメンテナーでもある。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

夏のTechRachoフェア2019

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ