- 開発
週刊Railsウォッチ(20190416-2/2後編)最近のRDBMS市場、Flutterがデスクトップにも向かう、書籍『失敗から学ぶRDBの正しい歩き方』ほか
こんにちは、hachi8833です。明日博多入りいたします🍜。唯一の心残りはクラフトワークの来日がRubyKaigi 2019の会期ともろにぶつかったので泣く泣く諦めたことです。
- サイト: RubyKaigi 2019
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
- 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください
お知らせ🛎
来週の週刊RailsウォッチはRubyKaigiでつっつき会が開催されないためお休みいたします🙇。
⚓はみだしRuby/Rails
つっつきの後で見つけたツイートなどをいくつか貼ります。
Rails 6 MySQLのutf8mb4対応とは何であって何ではないのか #rejectkaigi https://t.co/wva2TCAtKx
— Yasuo Honda (@yahonda) April 15, 2019
先週開催されたRejectKaigiのスライドが他にも続々上がっています↓。
あちこちのカンファレンスにいるので会うのはそんなに難しくないと思います。直近だと RubyKaigi ですが、その後もいろいろ。
— Yukihiro Matsumoto (@yukihiro_matz) April 14, 2019
昨日Rails6さわさわしてたけど、今までは「nodejs?使いたければどうぞ」だったのが「nodejsとyarnが入ってないとmigrationもやらせねえ」になってた
— すろっくさん (@srockstyle) April 15, 2019
⚓クラウド/コンテナ/インフラ/Linux/Serverless
⚓Googleが続々サービスを発表
- 元記事: [速報]Google、Active Directoryのマネージドサービス、SQL Serverのマネージドサービス提供を発表。Google Cloud Next '19 - Publickey
つっつきボイス:「クラウド方面の速報はもうPublickeyの方にお任せします: Railsウォッチのペースだと到底かなわないので😆」「😆」
「DockerコンテナをGoogleのクラウドで実行できるようになったのかー」「コンテナになっていれば何でも実行できるってことですよね、しかもサーバーレスで」「そういう時代か👴」「コンテナがでかくならないようにしないと」「public betaらしいので今のうちに遊んでみようかな😋」「容量どのぐらいまで置けるのかな😎」
「もうひとつのニュースもちょっとびっくりですね😳」「Active Directoryを?Googleが?マネージドで?」「Microsoft SQL ServerならまだわかるけどActive Directoryもやるとは!」「しかもLDAPじゃなくて」
参考: Active Directory - Wikipedia
参考: Lightweight Directory Access Protocol - Wikipedia
参考: 第1回 誰も教えてくれないActive DirectoryとLDAPの「本当の関係」[前編]:知られざるActive Directory技術の「舞台裏」|gihyo.jp … 技術評論社
「LDAPって今もあるのかな?😆」「最近あまり聞かないけど、まだまだあるはずですよね🤔」「終わってはいないハズ」「使おうとしたというより、既に使われちゃってることの方がありそう😆」「LDAPって込み入っててわけわからなくなりがちなので触りたくない気持ち😭」「いつだったか、Railsの認証にLDAPが絡んでたのを見たことがあります😇」
参考: RubyからLDAPのデータを扱うgem net-ldap | 酒と涙とRubyとRailsと
⚓AWS Innovateオンラインカンファレンスが開催中
つっつきボイス:「実はこのAWS Innovate Online Conferenceは既に開催が始まっていて、通常のセッション以外にも、期間中はAWS認定の有料トレーニングコース(「ソリューションアーキテクト - アソシエイト」)を無料で受けられるそうです」「へぇ〜」「メインのセッションは4/26(火)で営業時間中ですが😆、5/7(火)までやってるのでゴールデンウイークにもやれそうですね」「修了すれば証明書を発行とな」「ちょうど春の研修のタイミングだし、やってみようかな😋」
参考: AWS資格勉強を始めようと思っている方!今がチャンスですよー 〜AWS Innovate試験対策セッションのご紹介〜 | DevelopersIO
「AWS Innovate、日本の昼間の時間帯にやるんですね」「あ、以前のAWS Innovateは海外で開催でしたっけ」「2018年からオンラインカンファレンスになってるのか」
⚓補足: AWS Summit Tokyo 2019
AWS Summit Tokyo 2019(6/12〜6/14)も募集開始されました。今年はRubyKaigiと会期がぶつかっていないのがうれしいですね😋。
AWS Summit Tokyo 2019 が開催されます
こちらからご登録ください!
なお、毎年セッションが早い段階から埋まっていく(特にハンズオン系)ので、本当に早めのご登録をおすすめいたします!https://t.co/YokPMB9SWH— よだれいぬ (@pabroff_freeze) April 15, 2019
⚓Nuclio: オープンソースのサーバーレスプラットフォーム(Serverless Statusより)
つっつきボイス:「NuclioというオープンソースのサーバーレスプラットフォームをAWS Lambdaと比較する記事です」「今日のつっつきは惜しくもmorimorihogeさんが都合で出られないので、この辺りはあんまり深い話はできないと思います🙇」「Lambdaだと関数を書くときにいくつか制約があったりするという話が以前もありましたが(ウォッチ20190225)、Nuclioならできるみたいなものもあるようです」「今ならラムダって何だろうみたいな人も多いだろうから、今Nuclioがサーバーレスに参入するならチャンスあるのかも🤔」
同記事の中から、両者の比較部分のごく一部を抜粋しました。同記事の結論ではNuclioを持ち上げていますが、セカンドオピニオンが欲しいです😅。
- Lambdaのコンカレンシーモデルではアプリ開発が楽で呼び出しベースの課金がやりやすいが、関数がIO待ちのときにCPUサイクルをidleにできず、スケールするにはコールドスタートが必要。
- Nuclioの「関数プロセッサ」(=コンテナに似ている)は関数ワーカーを複数保持でき、各ワーカーが1度に1つのメッセージを処理できる。同じ関数プロセッサ内でのコンカレンシーをサポートし、負荷に応じて関数プロセッサのレプリカ数を自動的にスケールする。
同記事より抜粋・再構成
「ところでNuclioはどこに置いたらいいんでしょう😆」
リポジトリを見ると、以下の4つのセットアップ例がありました。ラズパイでも動かせるようにする予定のようです。
- Getting Started with Nuclio on Minikube
- Getting Started with Nuclio on Kubernetes
- Getting Started with Nuclio on Azure Kubernetes Service (AKS)
- Getting Started with Nuclio on Google Kubernetes Engine (GKE)
⚓モバイル
⚓Flutterがデスクトップも目指している
- Support 'flutter build' for desktop targets · Issue #30706 · flutter/flutter
- Support 'flutter run' for desktop targets · Issue #30707 · flutter/flutter
つっつきボイス:「BPS社内のFlutter部の方がSlackに投下してたので」
以下はFlutter部からの追伸を再構成したものです。
「FlutterでデスクトップOSアプリ、は実は以前より粛々と開発が続いていました↓」
- リポジトリ: google/flutter-desktop-embedding
- 元記事: Flutter Desktop Embeddingを実行してFlutterでデスクトップアプリを動かしてみる - Qiita
- 元記事: Flutter desktop embedding を Windows で試す - Qiita
「今は自分のアプリを試そうと思ったら例えば『exampleディレクトリのサンプルを自分のコードに入れ替える』ような形でやれます↓」
「冒頭のissueは、これをflutter開発のメインのコマンドであるflutter
コマンド経由で
プロジェクトを作成、ビルド、実行できるように整備していく事に本腰入れはじめたissueのようです」
「なお、追加プロジェクト作成のissue達はこちらです↓」
参考: Support flutter create
for macOS targets · Issue #30703 · flutter/flutter
参考: Support flutter create
for Windows targets · Issue #30704 · flutter/flutter
参考: Support flutter create
for Linux targets · Issue #30705 · flutter/flutter
⚓SQL
⚓書籍『失敗から学ぶRDBの正しい歩き方』
予約できるぞッ!! / 曽根 壮大 の 失敗から学ぶRDBの正しい歩き方 を Amazon でチェック! https://t.co/aEoGIKpWvH @さんから
— そーだい@初代ALF (@soudai1025) February 8, 2019
つっつきボイス:「この間のPHPerKaigiを見に行ったメンバーが以下のスライドでこの本を知って、今日のWebチーム内発表で触れていたのでチェックしました」「そうそう☺️」
#phperkaigi の登壇資料です。玄人はうずらさんのSessionに行くと良いと思うけどRDBMSで失敗したことがある人はぜひ聴いてくれ!!
アンチパターンから学ぶ RDBの正しい設計 / learn-from-failure-2 https://t.co/P7xSJ7rwgC— そーだい@初代ALF (@soudai1025) March 24, 2019
第1章 データベースの迷宮
第2章 失われた事実
第3章 やり過ぎたJOIN
第4章 効かないINDEX
第5章 フラグの闇
第6章 ソートの依存
第7章 隠された状態
第8章 JSONの甘い罠
第9章 強過ぎる制約
第10章 転んだ後のバックアップ
第11章 見られないエラーログ
第12章 監視されないデータベース
第13章 知らないロック
第14章 ロックの功罪
第15章 簡単過ぎる不整合
第16章 キャッシュ中毒
第17章 複雑なクエリ
第18章 ノーチェンジ・コンフィグ
第19章 塩漬けのバージョン
第20章 フレームワーク依存症
amazon.co.jpより
「タイトルひとつひとつがとっても読んでみたい欲をそそります😋」「『効かないINDEX』🤣」「キャッチコピーとしてもいい感じ🤣」「『転んだ後のバックアップ』このままかるたになりそう🎴」「転ばないとバックアップしないとかあるある〜🤣」「『監視されないデータベース』に『知らないロック』とか、噛めば噛むほど味が出る感」「キャッシュ、中毒になるんですよこれが😅」「『ノーチェンジ・コンフィグ』って、素のままの設定で本番にぶちこんじゃうとか?」「『塩漬けのバージョン』もいろいろ思い出すし」
「この本、翻訳とかじゃなくて日本語で書かれてるし」「こういうのは翻訳だとガタピシしてしまいがちなので、これだけキマったタイトルにするのは至難の業です😭」「翻訳臭がないのはうれしいですね😋」「内容期待できそう😍」
参考: そーだいなるらくがき帳 -- 曽根さんのブログ
⚓PostgreSQLのcount(*)
を高速化(Postgres Weeklyより)
-- 同記事より
SELECT count(*) FROM large_table;
つっつきボイス:「ぽすぐれのcount(*)
を高速化する話だそうです」「うろ覚えですが、Oracleだとこういう書き方するとめちゃ遅くなるから何らかのカラム名を書けって言われたことあったな〜: 他のRDBMSではどうなのか知りませんが😆」
「まずPostgreSQLはvisibility mapを使ってindex onlyスキャンを高速に行えるから、VACUUMしようみたいな話」「それから集約テーブル(aggregate table)」「集約テーブルって何でしたっけ😅」
参考: 第3回 テーブル設計のグレーゾーン~毒と薬は紙一重 (2)列持ちテーブル :SQLアタマアカデミー|gihyo.jp … 技術評論社
このように出力の形に合わせたテーブルをフロントに持つ方法は,古くから利用されています。データを集計した結果を保持する集約テーブル(サマリーテーブル)も,このタイプのひとつに位置付けられるでしょう。
同記事より
「count(*)
は結局どこかのタイミングで数えるしかないんですが、WHEREみたいな条件がないとどこにインデックスをかけたらいいのか判定できなくてフルスキャンされたりすることがあるし」「あ〜」
「元記事には『count(*)
がそもそも要るのか?』という話もありますね」「count(*)
的なものが欲しいことはたくさんあるんですが、count(*)
でなくても取れればそれでいいんだし😋」「かといって*
使わないと、SELECTしてないidを数えるかどうかみたいなときにidが主キーじゃないととても面倒とか、とにかくいろいろ大変になるわけです」「ふむ〜」「なのでとりあえずcount(*)
にしとけば文法的にも正しいし、という感じでやることもあるといえばある」「あとはRDBMSの実装次第かな、さすがに毎回フルスキャンはしないと思いたいけどっ😆」
「あと元記事に『MySQLのMyISAMには"magical row count"があるけどPostgreSQLにはない』みたいな話もありますね」「あ〜、どのRDBMSだったか、行に勝手にidを振るやつがあるけどMySQLでしたか」「そこを見れば一発でカウント取れるという感じですね」「思いっきりRDBMS依存のコードになりますが😆」
参考: MySQLでテーブルの行数を数える | b.l0g.jp
⚓最近のRDBMS市場(DB Weeklyより)
つっつきボイス:「最近のRDBMS市場のサーベイPDFです: 割と長いので目ぼしいグラフをちょっと覗いてみます👀」「Oracleは何位かな〜☺️」
「Oracleは安定のトップ」「MySQLって2位なんだ!」「3位がMicrosoft SQL Server」「ぽすぐれが意外にも4位でMongoDBとどっこいどっこいとは😳」「PostgreSQLの今年3月のスコアはMySQLの1/3ぐらい...」「ぽすぐれもっと評価されてるかと思ってた」
「自分も今の会社に来て初めてPostgreSQL触っていい子😍だってわかったけど、それがなかったらMySQL選んでたかも」「Microsoft Accessが7位につけてるのも何というか😆」「FileMakerもいらっしゃるし」「ここに入れていいんだろうか😆」「SQLite(10位)がAccessより下だし😳」「SQLiteもっと強いかと思ってた😅」「自分も〜」「クラウド系のDynamoDBもまだ下の方ですね」「きりがないのでとりあえず次へ👉」
⚓その他SQL
- イベント: 酔いどれ設計ナイト2019 - connpass
⚓JavaScript
⚓WebAssemblyを20倍速にした話(JavaScript Weeklyより)
つっつきボイス:「JSアプリをWebAssemblyにしてさらにチューニングして20倍速くしたそうです」「WebAssemblyがまだよくわかってないけどっ😆」「minifyしたとかじゃなくて?😆」「WebAssembly(wasm)は、すごく大雑把に言うとブラウザで実行できるバイナリですね」
- サイト: WebAssembly
「バイナリにしてどうするんだろ」「えっと、ちっちゃくなって速くなる: 自分が試しに以下の記事でmrubyで動かしてみたときはJavaScriptからwasmを起動してました」「Cのライブラリを呼べるとかそういうのとはまた違うのかな」「CやC++の他にRustやGoでもwasmバイナリを吐けるようになってますね: でもまだ新しいから最適化とかはこれからという感じで」「へぇ〜」
「ブラウザ上で動くVMみたいなもの?」「wasmはスタックマシンだそうです」
# 同記事より
# Compile to WebAssembly
$ emcc seqtk.c \
-o seqtk.js \
-O2 \
-lm \
-s USE_ZLIB=1 \
-s FORCE_FILESYSTEM=1
「記事の方はいろいろ工夫して、最終的にJSの21倍に高速化したそうです↓」「『いつもこううまくいくとは限らない』ってありますが😆」「そりゃそうだ😆」
⚓「shotgun surgery」とReactコンポーネント(React Statusより)
つっつきボイス:「記事は割と長いのでタイトルだけ見ると、shotgun surgeryで『できちゃった婚』を指すshotgun marriageを思い出しちゃいます😆: 『うちの娘と結婚するか今ここで死ぬか』をショットガンで迫るという」
参考: shotgun marriageの意味・使い方・読み方 | Weblio英和辞書
【由来】 妊娠させられた娘の父親が相手の男に shotgun をつきつけて結婚を強制したことから》
weblio.jpより
「と思ったら、このshotgun surgeryはどうやらアンチパターンの名前みたい😅: 1箇所変えると他のあちこちも変えないといけなくなることだそうです」「やっぱり銀の弾丸はないっ🔫」
参考: Shotgun surgery - Wikipedia
参考: Shotgun Surgery
「できちゃった婚になぞらえてshotgun surgeryを深読みすると、『全部作り直すか死ぬか2つに1つだ』みたいな意味にもなるかな、なんて🤣」「仕事でも実際に迫られるヤツだ🤣」「作り直すには工数が足りないんだけど、このままメンテするのもつらいような状況🤣」「作り直す方が早いことも多いのに😢」「よく起きる問題ですよね☺️」
⚓is-online: オンラインかどうかを確かめるライブラリ(JavaScript Weeklyより)
- リポジトリ: sindresorhus/is-online
// 同リポジトリより
const isOnline = require('is-online');
(async () => {
console.log(await isOnline());
//=> true
})();
READMEを見ると、ブラウザ環境ならNavigator.onLine
で確認できるけど、それができないブラウザ以外のJS環境で使うそうです。
参考: Navigator.onLine
- Web APIs | MDN
⚓その他JS
- リポジトリ: 0xfe/vexchords -- ギターのタブ譜を生成するJSライブラリ(JavaScript Weeklyより)
- デモサイト: The Little Chord Chart
つっつきボイス:「ギターのタブ譜を生成するJSなんですが、タブ譜(tablature)ってご存知です?」「うんにゃ😆」「ギターを始めて間もない人が割とよく使うギター専用の譜面の記法で、ギターのどこを押さえるかをこんなふうにビジュアル表示します: 私は楽器が違うんでタブ譜に用はないんですが🤣」「🤣」
「ギターの人で、普通の五線譜は読めないけどタブ譜なら読める、という人を割と見かけることがあって、ちょっと不思議だなと思ってました」「押さえる位置が物理的に示されているからわかりやすいのかも?」「ギター、音楽の授業でちょっとやったけど指痛くてやんなった😆」「最初痛いっすよねホント😆」
⚓CSS/HTML/フロントエンド/テスト
⚓GSMArena.com: さまざまなスマホのスペックを同じフォーマットで見られるサイト
BPSのテスティングチームの人がこのサイトに喜びの声を上げていました🥰。
つっつきボイス:「サイトを開いて、スマホのメーカーと機種をクリックすると、そのスマホのスペックが表示されるんですが、その表示が以下のようにどのメーカー/機種でも同じフォーマットに揃えられています↓」「そこ重要!」「これは欲しいヤツ❤️」「よくぞ作ったと思います👍」
「いいっすね〜(しみじみ)、ノートパソコンでもこういうサイトが欲しいです💻」「ノートPCはさらに大変そうだけど😆」「この間ノートパソコンの液晶のサイズを調べたんですけど、メーカーごとにいろんな表記方法があってつらいことつらいこと😭」「公式サイトにもちゃんと載ってなかったりしますし😆」
⚓その他フロント
- 元記事: W3Cで現在公開されているHTMLとDOM仕様は将来廃止されます - 水底の血
- 元記事: Microsoft Edge preview builds: The next step in our OSS journey | Windows Experience Blog
つっつきボイス:「Edgeのpreview buildがChromiumエンジンを採用するという記事です」「それをEdgeと呼んでいいものかどうか😆」「エンジンがChromiumならコスメティックな部分は各社好きにやってくれていい気がします☺️」「Edgeほとんど使ってませんけど😆」
⚓言語・ツール
⚓謎のV言語
- サイト: The V Programming Language
- リポジトリ: vlang/v
- 元記事: V プログラミング言語 - Qiita
// 同サイトより
fn main() {
types := ['game', 'web', 'tools', 'GUI']
for typ in types {
println('Hello, $typ developers!')
}
}
つっつきボイス:「この間社内で教えてもらったV言語という新言語なんですが、登場して数日で★が2000超えてました」「バイナリが小さいらしくて、一説にはRustやGoのライバルと言われているみたいです」「ほ〜」「ただ、私の探し方が悪いのか、まだコンパイラが見当たらないんですよね😅」「リポジトリにあるのはV言語のサンプルのようですね☺️」「サイトにはplaygroundがあって動くし、soon availableとか書いてあるのでそのうち出るのかもしれませんが🤔」「また一文字言語が現れたか😆」「CとかRみたいな😆」
⚓Goはどうしてデカい?(Golang Weeklyより)
- リポジトリ: jondot/goweight -- Goバイナリサイズの分析ツール
つっつきボイス:「Goのバイナリがデカい理由を探る記事です」「ワンバイナリでやってるからしゃーない気が😆」「goweightは記事とは別に、バイナリが何で太ってるのかを分析するツールです」
# 同リポジトリより
$ ./goweight
3.0 MB runtime
1.6 MB net
1.4 MB reflect
1.3 MB gopkg.in/alecthomas/kingpin.v2
870 kB math/big
668 kB github.com/alecthomas/template
628 kB syscall
626 kB text/template
550 kB go/ast
546 kB encoding/json
509 kB text/template/parse
495 kB github.com/alecthomas/template/parse
424 kB time
402 kB regexp/syntax
395 kB golang_org/x/net/dns/dnsmessage
388 kB fmt
⚓その他言語
- 元記事: Announcing Rust 1.34.0 | Rust Blog 🎉
- サイト: Vugu: A modern UI library for Go+WebAssembly(Golang Weeklyより)
おおおお、これはすごい…
作った方がすごいのはもちろんだけど、こうも分かりやすく解説できるのもすごい… https://t.co/1kbI8zRJZu— yasuhiroki (@duck_yasuhiroki) April 9, 2019
つっつきボイス:「gistに詳しく書かれてますが、こんな姿でもシェルスクリプト↓で、しかもフィボナッチ数列を生成するんだそうです」「ちょ😆」「ヤメテー😆」「まさに難読化」「まるでbrainf*ck」
# 同gistより
! : "`/???/???/???${#?}???<<<_.`";_____=${_::-~$?}
____='__+=___,___=__-___,__<_[$($_____<<<$___>&$[-~${##}])]||____'
((__=-~$?,____))|&$_____#シェル芸
— yamaya (@yamaya) April 6, 2019
⚓その他
⚓その他のその他
- 元記事: 小型の最新AIコンピュータ「NVIDIA Jetson Nano」レビュー(2) ベンチマーク編 AIエッジコンピューティングの新定番となるか? | ロボスタ
- 元記事: 「機械学習はデータ集めるのが一番大変・・・」⇛Googleが大量の機械学習用データベースを無料公開してた - Qiita
- リポジトリ: MariaLetta/free-gophers-pack -- Gopherくん無料イラスト詰め合わせ(Golang Weeklyより)
つっつきボイス:「無料で使えるGopherくんイラストなんですけど、オリジナルの目の焦点が合ってないっぽいGopherくんよりカワイイ成分多めだったので🥰」「かわゆい〜🐹」
今回は以上です。RubyKaigiでお会いしましょう!
福岡空港駅の下りエスカレーターんとこあったばい! #rubukaigi pic.twitter.com/ztptWnuIsU
— sue445 (@sue445) April 16, 2019
おたより発掘
書籍を紹介していただき、圧倒的感謝 / 2件のコメント https://t.co/xAFKs481U3 “週刊Railsウォッチ(20190415-2/2後編)最近のRDBMS市場、Flutterがデスクトップにも向かう、書籍『失敗から学ぶRDBの正しい歩き方』ほか” (4 users) https://t.co/oezeqEIses
— そーだい@初代ALF (@soudai1025) April 17, 2019
バックナンバー(2019年度第2四半期)
週刊Railsウォッチ(20190415-1/2前編)Railsバージョンアップに便利なstill_life gem、Zeitwerkの改修進む、named_capture追加ほか
- 20190409-2/2後編 Ruby 2.3系サポート終了、Thoughtbotのコーディング指南書、PostgreSQLのgenerated column、Chromebrewほか
- 20190408-1/2前編 RubyKaigiの予習資料、Rails「今年ベストのプルリク」、numbered parametersの議論ほか
- 20190402-2/2後編 Apache Arrowとは何か、prop drillingはアンチパターン、Node-REDほか
- 20190401-1/2前編 Rails 5.2.3/5.1.7がリリース、Railsdmの「Railsの正体」、Ruby 2.7のnumbered parameter、新元号「令和」ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSなど)です。