Tech Racho エンジニアの「?」を「!」に。
  • 勉強会
  • 開発

週刊Railsウォッチ(20191204後編)Rubyコードをトランスパイルするruby-next、Cloud Run正式リリース、2019年Web年鑑レポート、V言語ほか

こんにちは、hachi8833です。1日遅れの後編です?。

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

お知らせ: 週刊Railsウォッチ「第17回公開つっつき会」(無料)

第16回目公開つっつき会は、明日12月05日(木)19:30〜にBPS会議スペースにて開催されます。参加者が増えましたので参加枠を少し増やしました。

週刊Railsウォッチの記事やここだけの話にいち早く触れられるチャンス!発言・質問も自由です。引き続き皆さまのお気軽なご参加をお待ちしております?。

Ruby

ruby-next: Rubyコードを古いバージョンや別実装にトランスパイル(Ruby Weeklyより)


つっつきボイス:「11月にナッシュビルで行われたRubyConf 2019でEvil Martiansが発表したスライドです」「Ruby 2.7で入る機能も紹介されてるっぽい」「ruby-nextはgem」「あ〜こうやって変換する↓ということか?」「ポリフィルとトランスパイルの2段構えみたい?」「まだまだ実験段階っぽいけど面白〜い?」「使うかどうかわからんけどっ?」


babeljs.ioより

「JSのBabel的なヤツですね」「政治的事情とかで新しいRubyが使えないときなんかに使うとか?」「yield_selfとかtallyを早く使いたいときとか?」「使おうと思ったらRubyが古かったとかあるある?」

「さすがEvil Martians、Rabbitのウサギとカメが悪い火星人と逃げる人間になってる?」

Rails 6のDocker開発環境構築をEvil Martians流にやってみた

ruby-nextのリポジトリを見た感じでは、ポリフィルだけならすぐ使えるらしく、トランスパイラの方はインストールが少々面倒そうです。

参考: Polyfillって何? · ECMAScriptとは何か?

後で動画も見つけました。

外部サービスのテストをアダプタ化する(Hacklinesより)

# 同記事より
module SmsAdapters
class InMemory
cattr_accessor :messages
self.messages = []
+
+ def self.clear_messages
+ self.messages = []
+ end

def send_message(message)
self.class.messages << OpenStruct.new(message) end end end ``` ---------- つっつきボイス:「こちらもThoughtbotの記事ですが新しいです」「この記事でやってるのは、いわゆる...何だっけ?」「モックでもスタブでもなくって、ええと?」「たしか名前があるはず」「思い出した、fakeだ↓」「なんてググりづらい用語?」「Fake Objectなんて言ったりしますね☺️」 参考: [xUnit Test PatternsのTest Doubleパターン\(Mock、Stub、Fake、Dummy等の定義\) \- 千里霧中](http://goyoki.hatenablog.com/entry/20120301/1330608789) &gt; * Test Double Pattern
* Test Stub
* Test Spy
* Mock Object
* Fake Object
* (Dummy Object)
> <cite>goyoki.hatenablog.comより</cite>

これらの定義は以下のXUnitPatterns.comが本家なんですね?。

* サイト: [index at XUnitPatterns\.com](http://xunitpatterns.com/index.html)

> <a href="http://xunitpatterns.com/index.html"><img class="aligncenter size-full wp-image-84191" src="https://techracho.bpsinc.jp/wp-content/uploads/2019/12/xunitpaterns.com_head_captured.png" alt="" width="200" /></a>
> <cite>xunitpatterns.comより</cite>

### <a id="3-3" href="#3-3">⚓</a>その他Ruby

* 元記事: [ASCII\.jp:「プログラミング教育、強制ダメ」まつもとゆきひろさん \(1/4\)](https://ascii.jp/elem/000/001/977/1977774/)
* イベント: [Ruby Hack Challenge Holiday \#9 Ruby 2\.7 \+ 年末LT大会 \- connpass](https://rhc.connpass.com/event/155899/) -- 空きあります

----------

つっつきボイス:「下はruby-jp Slackで見かけたRubyをハックするイベントです」「ささださんいるから会場はやはりクックパッド?」「こういうイベントをずっと継続しているのはエライ!」

## <a id="7" href="#7">⚓</a>クラウド/コンテナ/インフラ/Linux/Serverless

### <a id="7-1" href="#7-1">⚓</a>Clund Runが正式リリース([Publickey](#publickey)より)

* 元記事: [Googleの「Cloud Run」が正式サービスに。KnativeベースでDockerコンテナをサーバレスとして実行 - Publickey](https://www.publickey1.jp/blog/19/googlecloud_runknativedocker.html)

----------

つっつきボイス:「あれ今までベータだったんだ?」「割と大きいニュースかなと思いましたがどうでしょう?」「まあCloud Runは、みんなが欲しかったのはこれなんじゃね?みたいなところはありますよね☺️」「AWS Lambdaとも互換取れるんでしたっけ?」「Cloud Runについては前も扱いましたけど([ウォッチ20190508](/hachi8833/2019_05_08/74011#5-2))、Cloud Runには完全にコンテナベースのものと、ファンクションだけ動かすものと2種類ありますよね」「そうでした!」「こういうふうに料金体系もレスポンス速度も違う↓ので、どっちを使うかは考えどころですね☺️」「なるほど」

> <a href="https://techracho.bpsinc.jp/wp-content/uploads/2019/12/cloud_run_comparison_captured.png"><img class="aligncenter size-full wp-image-84198" src="https://techracho.bpsinc.jp/wp-content/uploads/2019/12/cloud_run_comparison_captured.png" alt="" width="625" /></a>
> <cite>[cloud.google.com](https://cloud.google.com/run/?hl=ja)より</cite>

「GKEの方はコンテナで割と何でもまるっと動かせる感じで、GKEじゃない方はLambdaに似た感じ」「ruby-jpでもCloud RunはRailsを動かせそうだという書き込みを見かけました」「GKE版の方ならたぶんやれるでしょうね」「まあCloud Runはいいんじゃないでしょうか☺️」

----------

「話変わりますけど、ちょっと前にBigQueryをえらく推してる記事をはてブで見かけたんですが今ちょっと見つからない...」「BigQueryはGCPとか存在しない頃からずっとGoogleにあるサービスですけど?」「あ、そうでしたか?」「なので自分的には今更感ありますね☺️」

後で見つけました↓。

参考: [近年のデータ分析基盤構築における失敗はBigQueryを採用しなかったことに全て起因している \- データエンジニアの酩酊日記](http://uma66.hateblo.jp/entry/2019/10/17/012049)

「BigQueryはもともと超絶ムキムキなサービスですけど、ただ値段も結構お高いので料金体系をちゃんと気にかけて使わないと一瞬で破産します?」「そういえばこんな記事もありましたね↓」

参考: [BigQueryで150万円溶かした人の顔 \- Qiita](https://qiita.com/itkr/items/745d54c781badc148bb9)

### <a id="7-2" href="#7-2">⚓</a>Istio使ってみた話

<script async class="speakerdeck-embed" data-id="61968c966bf34e90bb62d36d1b689ea0" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>

* サイト: [Istio](https://istio.io/)

> <a href="https://istio.io/"><img class="aligncenter size-full wp-image-70014" src="https://techracho.bpsinc.jp/wp-content/uploads/2019/02/istio.io_head_captured.png" alt="" width="400" /></a>
> <cite>istio.ioより</cite>

----------

つっつきボイス:「以前のウォッチで盛り上がったIstio([ウォッチ20190212](/hachi8833/2019_02_12/69865#7-1-2))を運用してみた話のスライドで、あまりIstioの記事を見かけてなかったのでピックアップしてみました」「マイクロサービスやるなら欲しい機能がひととおり入っているものが、Istioとかでやっと出てきたという感じですね☺️」「『便利だが運用負荷は思い』と」「というよりIstioみたいな機能がないと障害対応とかまったく無理?」「たしかに〜」

「マイクロサービスのインフラを自前で持とうとするともの凄く大変なので、AWSのApp MeshとかGoogleのStackdriverみたいなサービスがもてはやされるわけです?」「なるほど」「まあどれを使ってもいいんですけど、こういうのを自前でやる意義がどのぐらいあるのかと思いますし?」「自前はつらそう?」「プライベートクラウドを自前でスクラッチから構築するのと変わらないぐらい大変ですよ」

参考: [AWS App Mesh(マイクロサービスをモニタリングおよびコントロールする)\| AWS](https://aws.amazon.com/jp/app-mesh/)
参考: [Stackdriver \- ハイブリッド モニタリング  \|  Stackdriver  \|  Google Cloud](https://cloud.google.com/stackdriver/?hl=ja)

「ただクラウドにロックインされたくないとか、1社のクラウドだけに依存するわけにいかない事情がある場合は、マルチクラウドにするとかIstioみたいな選択肢も必要になるでしょうね☺️」「相当でかいシステムになりそう...」「でかくなくてもやれますけど、どうしても自前でホスティングしないといけないようなユースケースではそうなりますね」

### <a id="7-3" href="#7-3">⚓</a>RIPE NCCのIPv4が底をついた



----------

つっつきボイス:「ああIPv4が底をついた話?」「今回黄色のエリア(RIPE NCC)で空になったそうです」「アジアのAPNICは最初に底ついてるし、今IPv4が残っているのはラテンアメリカとアフリカぐらいなんじゃ?」「お〜」「今年の夏に書いたこの記事↓でもそのあたりを説明していますけど、APNICはとっくに底をついているのでRIPE NCCとかARINからIPv4を割り当ててもらって食いつないでたのが、今回ついにRIPE NCCのもなくなったと「何という綱渡り?」「まあ以前からそうなので今更感ありますけど?」

IPアドレスから地域特定するGeoIP系技術について調べてみた(追記あり)
参考: [RIPE NCC \- Wikipedia](https://ja.wikipedia.org/wiki/RIPE_NCC) ### <a id="7-4" href="#7-4">⚓</a>Lambda API: サーバーレスアプリ向け軽量Webフレームワーク * リポジトリ: [jeremydaly/lambda\-api: Lightweight web framework for your serverless applications](https://github.com/jeremydaly/lambda-api) > <a href="https://github.com/jeremydaly/lambda-api"><img class="aligncenter size-full wp-image-84205" src="https://techracho.bpsinc.jp/wp-content/uploads/2019/12/lambda_api_logo_captured.png" alt="" width="300" /></a> > <cite>同リポジトリより</cite> ```js // Require the framework and instantiate it const api = require('lambda-api')() // Define a route api.get('/status', async (req,res) => { return { status: 'ok' } }) // Declare your Lambda handler exports.handler = async (event, context) => { // Run the request return await api.run(event, context) }

つっつきボイス:「まだ中見てませんがzero dependencyを謳ってるみたいです」「普通にJSでルーティング書いて動かしてる感だけど、zero dependencyはどうやらライブラリに依存しないということのようだ」「おぉ」「普通にやってるとNode.jsのモジュールとかにめちゃめちゃ依存するから、そういうのをなしで文字どおりライトウェイトでやりたいということでしょうね☺️」「なるほど!」

「Express.jsだと依存が30個もあるけどこれなら依存ゼロでやれると: package.jsondevDependencies:はさすがに多少あるけど"dependencies": {}だぜとアピールしてる」「開発中は多少使うけど、ランタイムは依存ゼロなんですね?」「README長すぎて読みきれないけど?」

「うんとちょろいものだったらこのlambda-apiでやれそう?」「たしかに〜」「実際Node.jsとかのdependencyっていろいろめんどくさいですし?」「zero dependencyの何がうれしいって、他のライブラリのコードを気にしなくてよくなることですね❤️」「そうそうっ?」「他のライブラリのコードが更新されて動かなくなるみたいな心配がなくなるのはありがたいっすね?」

「依存性といえば、Go言語のコアなprivateコードにアクセスできなくなって大変だったという話↓を小耳に挟みましたね」「お気の毒すぎる?」「Rubyで言えば標準のgemが消えるレベルの話?」「でもNode.js系だと割とありがちなので、そういう世界から脱出するにはいいかも☺️」

参考: Today I Learned — Fix: go get private repository return error reading sum.golang.org/lookup … 410 gone

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

2019年Web年鑑レポート


almanac.httparchive.orgより


つっつきボイス:「社内Slackでこちらのサイトを教わりました: 今年のWebの動向を振り返る的なサイトのようです」「お〜なかなか面白そうな読み物?」「誰が書いてるんだろう?」「一人の著者ではなさそう?」「GoogleとかAkamaiとかスポンサーがついてますね」「非営利団体が運営してるっぽい」

CSSで3D


developer.mozilla.orgより


つっつきボイス:「リンク先で触ると右のダイスがくりっと回ります」「rotate3d、ちょっと前に受けたマイクロソフトの試験問題に出てたな?」「ゲームなら使うだろうけど業務コードでこういうの書きたくないし?」

「コードも書くデザイナーがこういうのを使うかも: エフェクトを作る専門職ってたしかあるんですよ」「おぉ?」「ゲームとかだとエフェクトをデザイナーが考案してエンジニアがそれを実装するみたいな役割分担をしてたりしますけど、そういうところのエンジニアならきっとこういうのを使う?」

その他フロントエンド


つっつきボイス:「TechRacho的に気になりました」「前は漫画を一コマ使うのもダメだったのが少し緩和されそうな雰囲気」「まあ現実に守ってない人多すぎですけど?」「元々デジタルデータは劣化しないから規制しないとみたいな話から始まってたところはありますね: 写真ならまだしもスクショだと一切劣化なしに配布できますし」「ですね?」「十数年前だったらこういう話は前面に出てこなかったかも」「時代は移るというか」「まだ案を出す段階みたいですし反対派もいるから今後どうなるかはわかりませんけど☺️」

「美術品としての絵画なんかだと、結構なお金を払って掲載しているのにデジタルコピーされたら損害が出るから、反対が出そうですし?」


はみだし: 「この間読んだ記事↓なんですが、サルバドール・ダリが晩年に絵が描けなくなった頃に贋作家にガンガン贋作を作らせて、それにダリが自分で署名して自作に仕立て上げちゃったんだそうです?」「本人が署名したら『本物の偽物』になっちゃうし?」「あかん?」

参考: 『贋作王ダリ―シュールでスキャンダラスな天才画家の真実』(アスペクト) - 著者:スタン・ラウリセンス 翻訳:楡井 浩一 - 谷川 渥による解説 | 好きな書評家、読ませる書評。ALL REVIEWS

言語・ツール

Vプログラミング言語


vlang.ioより

Go言語をさらに改良してRustやSwift(知らないけど)の風味も加えた塩梅です。今年8月頃にバズってたのに気づきませんでした?。


つっつきボイス:「V言語?」「最近になってやっと知ったんですが、エラー処理とかのデフォルトでイミュータブルというあたりの言語設計が個人的に突き刺さって、つい自分用にV言語のスライドとか作っちゃいましたのでそのうち社内で発表すると思います?」「?」「一見Goっぽい感じ」「GCやらずにRustっぽくやってるらしくてバイナリがめちゃ小さくてコンパイルが速いとかで、C++勢がチラ見してるようです」

「まだWIPだけどCのコードをVに変換できるようにするらしい?」「DoomというゲームをCからV言語に変換できたようです」「ほんまかいな?」「プリミティブなものを書くのにはいいのかも☺️」「たしかに設計言語は目指してないっぽいです?」

「V言語でびっくりしたのは、ソースコードに[live]と書いて↓ソースを更新するとコンパイル済みバイナリにその場で反映されるというホットコードリロード↓でした」「あ〜実行中のバイナリを更新できるのね」「ちょっと不気味?」「その技術自体は以前から存在してますけど、それを安全にやるのはかなり難しいでしょうね〜☺️」「セキュリティとか」「というよりクラッシュしかねない?」

module main

import time
import os

[live]
fn print_message() {
println('Hello! Modify this message while the program is running.')
}

fn main() {
for {
print_message()
time.sleep_ms(500)
}
}

「V言語、もうGUIライブラリまであるとは?」「もともとVoltというデスクトップアプリ↓を作る過程でできた言語みたいです(Voltのソースは非公開)」「JSにもVoltとかあるし紛らわしいな〜?」「いろいろ頑張ってる感」

「きっとGo言語に疲れたから作ったんでしょう?」「Goも10歳になってだんだん後方互換性で身動き取れなくなりつつありますね?」「Goはもっと小さいライブラリとかサービスを書く感じなのに、でかいものを作る人が当初の予想よりずっと多かった感?」「それはあります?」「あんなにモジュールをたくさん使う想定とかなかったのではと?」

参考: シンプルで高速な「The V Programming Language」が爆誕 | ソフトアンテナブログ

V言語はドキュメントとかサイトとかがっつり作っていてそこが凄いと思いました。自分もGoby言語やっててそういう部分を整備するのが一番大変だなって痛感します?。

Goby: Rubyライクな言語(7)Ripperライブラリを追加した

FacebookがVSCodeを採用

つっつきボイス:「リモートベースの開発も含めてVSCodeでやるみたいです」「AWSのCloud9みたいにリモートベースで開発できることの方がおそらく重要じゃないかって思いますね」「おぉ?」「何しろ開発環境の構築ってそれ自体は1円もお金になりませんから?」「?」「そういうのを抜きにして即開発に参加できるようになるのは大きい」「開発環境構築はエンジニアとしては知見がたまりますし楽しみでもありますけど、ビジネス上はコスト的に無意味?」「?」「だからそういう作業はとことん縮小したい」「ゼロが理想」

Pythonの運営体制


つっつきボイス:「Pythonがジェダイっぽく合議制みたいな形に移行するようです」「なぜかMatzに質問してるし?」「これまでいろんなソフトウェアが現れては消えたりしたのを見てきたんですけど、合議制でうまくいったところもあれば独裁制でうまくいったところもありますし、逆に合議制でつぶれたところもあれば独裁制でつぶれたところもあったりしますね〜☺️」「結局どれもありうるという?」

その他ツール

  • サイト: EditorConfig — 複数エディタで共有できる設定ファイル


editorconfig.orgより


つっつきボイス:「この間出した記事↓でeditorconfig.orgを今頃知りました」「editorconfigは前からあるんですけどね〜、微妙なんですよ?」「やっぱり大した設定はできないんでしょうか?」「そう?」「夢の世界を目指したのはわかるけど結局設定足りないし?」「Rubyとか特に自由度高いからブレブレになるし?」「最大公約数は無理か〜?」「ないよりはマシな程度?」「本来はエディタというよりGitHubとかのリポジトリに入れてチームの設定を共通化するのに使いたいものなんですけど、細かい設定がなさすぎて夢の世界には程遠い?」

Rails 6+Webpacker開発環境をJS強者ががっつりセットアップしてみた(翻訳)

その他

GitHub Actions

つっつきボイス:「GitHub Actionsは手元で動かせないと手探り感凄そう?」

以下はつっつき後のツィートです。

ゼロ知識証明


つっつきボイス:「ゼロ知識証明?」「『情報の中身について公開せずに、その情報を自分が知っていることを相手に伝える』のか!」「おほ?」「こういうのは面白いっすね〜❤️」

参考: ゼロ知識証明 - Wikipedia

「これと少し似た感じでいうと、XORを使ったデータ復元みたいなのも好きですね?」「おぉ?」「以下の記事↓とかのRAID5のパリティ計算なんかがそうなんですけど、完全な情報がないのにちゃんと復元できる」「あ〜!」「どこが欠けても復元できるというのを初めて見ると、とっても不思議な気持ちになれます?」
参考: 見習い復旧屋の技術日記 RAID5 のパリティの計算方法


3309masa.blog130.fc2.comより

「そういうデータ復元が可能であることを最初に証明したのが情報理論でお馴染みのシャノンでしたっけ?」「ですね☺️: 情報のビット数を冗長にすることでエラーを復元できるんですけど、冗長符号が何ビットあると何ビットまでのエラーに耐えられるかみたいな理論だったと思います」「たぶんだけどこの辺↓だったと思う」「source coding theoremっていう名前が?」「こういうのをちゃんと学ぶとへぇ〜って思いましたね?」「ワイ数学科だったけど群論だったし〜?」

参考: シャノンの情報源符号化定理 –情報源符号化定理の証明 - Wikipedia

その他のその他

つっつきボイス:「辞書づくりにXMLフォーマットを使うのは納得?」

番外

はじめアルゴリズムより面白そう


つっつきボイス:「『動物のお医者さん』の数学版みたいなノリだとruby-jp Slackで見かけて、思わずAmazonでポチっちゃいました?」(以下漫☆画太郎先生を讃える話などが延々)

あと以下のツイートも言葉での分析が的確だなと思いました?。


後編は以上です。

おたより発掘

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

週刊Railsウォッチ(20191202前編)Rails 6のimplicit_order_columnはカスタマイズ可能、rubocop-rails 2.4.0リリース、Capistrano記事ほか

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

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

Ruby Weekly

Hacklines

Hacklines

Publickey

publickey_banner_captured

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。