- Ruby / Rails関連
週刊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段構えみたい🤔」「まだまだ実験段階っぽいけど面白〜い😍」「使うかどうかわからんけどっ🤣」
「JSのBabel的なヤツですね」「政治的事情とかで新しいRubyが使えないときなんかに使うとか😆」「yield_self
とかtally
を早く使いたいときとか😆」「使おうと思ったらRubyが古かったとかあるある😆」
「さすがEvil Martians、Rabbitのウサギとカメが悪い火星人と逃げる人間になってる🤣」
ruby-nextのリポジトリを見た感じでは、ポリフィルだけならすぐ使えるらしく、トランスパイラの方はインストールが少々面倒そうです。
参考: Polyfillって何? · ECMAScriptとは何か?
後で動画も見つけました。
⚓外部サービスのテストをアダプタ化する(Hacklinesより)
# 同記事より
module SmsAdapters
class InMemory
cattr_accessor :messages
self.messages = []
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等の定義) - 千里霧中
- Test Double Pattern
- Test Stub
- Test Spy
- Mock Object
- Fake Object
- (Dummy Object)
goyoki.hatenablog.comより
これらの定義は以下のXUnitPatterns.comが本家なんですね😳。
⚓その他Ruby
- 元記事: ASCII.jp:「プログラミング教育、強制ダメ」まつもとゆきひろさん (1/4)
- イベント: Ruby Hack Challenge Holiday #9 Ruby 2.7 + 年末LT大会 - connpass -- 空きあります
つっつきボイス:「下はruby-jp Slackで見かけたRubyをハックするイベントです」「ささださんいるから会場はやはりクックパッド🍳」「こういうイベントをずっと継続しているのはエライ!」
⚓クラウド/コンテナ/インフラ/Linux/Serverless
⚓Clund Runが正式リリース(Publickeyより)
つっつきボイス:「あれ今までベータだったんだ😳」「割と大きいニュースかなと思いましたがどうでしょう?」「まあCloud Runは、みんなが欲しかったのはこれなんじゃね?みたいなところはありますよね☺️」「AWS Lambdaとも互換取れるんでしたっけ?」「Cloud Runについては前も扱いましたけど(ウォッチ20190508)、Cloud Runには完全にコンテナベースのものと、ファンクションだけ動かすものと2種類ありますよね」「そうでした!」「こういうふうに料金体系もレスポンス速度も違う↓ので、どっちを使うかは考えどころですね☺️」「なるほど」
「GKEの方はコンテナで割と何でもまるっと動かせる感じで、GKEじゃない方はLambdaに似た感じ」「ruby-jpでもCloud RunはRailsを動かせそうだという書き込みを見かけました」「GKE版の方ならたぶんやれるでしょうね」「まあCloud Runはいいんじゃないでしょうか☺️」
「話変わりますけど、ちょっと前にBigQueryをえらく推してる記事をはてブで見かけたんですが今ちょっと見つからない...」「BigQueryはGCPとか存在しない頃からずっとGoogleにあるサービスですけど🤣」「あ、そうでしたか😅」「なので自分的には今更感ありますね☺️」
後で見つけました↓。
参考: 近年のデータ分析基盤構築における失敗はBigQueryを採用しなかったことに全て起因している - データエンジニアの酩酊日記
「BigQueryはもともと超絶ムキムキなサービスですけど、ただ値段も結構お高いので料金体系をちゃんと気にかけて使わないと一瞬で破産します💸」「そういえばこんな記事もありましたね↓」
参考: BigQueryで150万円溶かした人の顔 - Qiita
⚓Istio使ってみた話
- サイト: Istio
つっつきボイス:「以前のウォッチで盛り上がったIstio(ウォッチ20190212)を運用してみた話のスライドで、あまりIstioの記事を見かけてなかったのでピックアップしてみました」「マイクロサービスやるなら欲しい機能がひととおり入っているものが、Istioとかでやっと出てきたという感じですね☺️」「『便利だが運用負荷は思い』と」「というよりIstioみたいな機能がないと障害対応とかまったく無理😇」「たしかに〜」
「マイクロサービスのインフラを自前で持とうとするともの凄く大変なので、AWSのApp MeshとかGoogleのStackdriverみたいなサービスがもてはやされるわけです😆」「なるほど」「まあどれを使ってもいいんですけど、こういうのを自前でやる意義がどのぐらいあるのかと思いますし🤣」「自前はつらそう😭」「プライベートクラウドを自前でスクラッチから構築するのと変わらないぐらい大変ですよ」
参考: AWS App Mesh(マイクロサービスをモニタリングおよびコントロールする)| AWS
参考: Stackdriver - ハイブリッド モニタリング | Stackdriver | Google Cloud
「ただクラウドにロックインされたくないとか、1社のクラウドだけに依存するわけにいかない事情がある場合は、マルチクラウドにするとかIstioみたいな選択肢も必要になるでしょうね☺️」「相当でかいシステムになりそう...」「でかくなくてもやれますけど、どうしても自前でホスティングしないといけないようなユースケースではそうなりますね」
⚓RIPE NCCのIPv4が底をついた
For context here RIPE is responsible for handing out IP addresses for the regions of the world in yellow. pic.twitter.com/57ExMNC4I5
— ShadySound (@TheShadySound) November 26, 2019
つっつきボイス:「ああIPv4が底をついた話😆」「今回黄色のエリア(RIPE NCC)で空になったそうです」「アジアのAPNICは最初に底ついてるし、今IPv4が残っているのはラテンアメリカとアフリカぐらいなんじゃ?」「お〜」「今年の夏に書いたこの記事↓でもそのあたりを説明していますけど、APNICはとっくに底をついているのでRIPE NCCとかARINからIPv4を割り当ててもらって食いつないでたのが、今回ついにRIPE NCCのもなくなったと「何という綱渡り😳」「まあ以前からそうなので今更感ありますけど😆」
⚓Lambda API: サーバーレスアプリ向け軽量Webフレームワーク
// 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.jsonもdevDependencies:
はさすがに多少あるけど"dependencies": {}
だぜとアピールしてる」「開発中は多少使うけど、ランタイムは依存ゼロなんですね😋」「README長すぎて読みきれないけど😆」
「うんとちょろいものだったらこのlambda-apiでやれそう🤔」「たしかに〜」「実際Node.jsとかのdependencyっていろいろめんどくさいですし😩」「zero dependencyの何がうれしいって、他のライブラリのコードを気にしなくてよくなることですね❤️」「そうそうっ😤」「他のライブラリのコードが更新されて動かなくなるみたいな心配がなくなるのはありがたいっすね😋」
「依存性といえば、Go言語のコアなprivateコードにアクセスできなくなって大変だったという話↓を小耳に挟みましたね」「お気の毒すぎる😭」「Rubyで言えば標準のgemが消えるレベルの話😇」「でもNode.js系だと割とありがちなので、そういう世界から脱出するにはいいかも☺️」
⚓CSS/HTML/フロントエンド/テスト
⚓2019年Web年鑑レポート
- サイト: The 2019 Web Almanac
つっつきボイス:「社内Slackでこちらのサイトを教わりました: 今年のWebの動向を振り返る的なサイトのようです」「お〜なかなか面白そうな読み物😋」「誰が書いてるんだろう?」「一人の著者ではなさそう?」「GoogleとかAkamaiとかスポンサーがついてますね」「非営利団体が運営してるっぽい」
⚓CSSで3D
つっつきボイス:「リンク先で触ると右のダイスがくりっと回ります」「rotate3d
、ちょっと前に受けたマイクロソフトの試験問題に出てたな😆」「ゲームなら使うだろうけど業務コードでこういうの書きたくないし😆」
「コードも書くデザイナーがこういうのを使うかも: エフェクトを作る専門職ってたしかあるんですよ」「おぉ?」「ゲームとかだとエフェクトをデザイナーが考案してエンジニアがそれを実装するみたいな役割分担をしてたりしますけど、そういうところのエンジニアならきっとこういうのを使う😆」
⚓その他フロントエンド
つっつきボイス:「TechRacho的に気になりました」「前は漫画を一コマ使うのもダメだったのが少し緩和されそうな雰囲気」「まあ現実に守ってない人多すぎですけど😆」「元々デジタルデータは劣化しないから規制しないとみたいな話から始まってたところはありますね: 写真ならまだしもスクショだと一切劣化なしに配布できますし」「ですね😆」「十数年前だったらこういう話は前面に出てこなかったかも」「時代は移るというか」「まだ案を出す段階みたいですし反対派もいるから今後どうなるかはわかりませんけど☺️」
「美術品としての絵画なんかだと、結構なお金を払って掲載しているのにデジタルコピーされたら損害が出るから、反対が出そうですし🤔」
はみだし: 「この間読んだ記事↓なんですが、サルバドール・ダリが晩年に絵が描けなくなった頃に贋作家にガンガン贋作を作らせて、それにダリが自分で署名して自作に仕立て上げちゃったんだそうです😇」「本人が署名したら『本物の偽物』になっちゃうし😆」「あかん😆」
参考: 『贋作王ダリ―シュールでスキャンダラスな天才画家の真実』(アスペクト) - 著者:スタン・ラウリセンス 翻訳:楡井 浩一 - 谷川 渥による解説 | 好きな書評家、読ませる書評。ALL REVIEWS
⚓言語・ツール
⚓Vプログラミング言語
- サイト: The V Programming Language
- 日本語ドキュメント: V プログラミング言語 - Qiita
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」が爆誕 | ソフトアンテナブログ
- サイト: Volt | <1 MB desktop client for Slack, Skype, Twitter, Facebook, Gmail and more >
> volt-app.comより
V言語はドキュメントとかサイトとかがっつり作っていてそこが凄いと思いました。自分もGoby言語やっててそういう部分を整備するのが一番大変だなって痛感します😅。
⚓FacebookがVSCodeを採用
つっつきボイス:「リモートベースの開発も含めてVSCodeでやるみたいです」「AWSのCloud9みたいにリモートベースで開発できることの方がおそらく重要じゃないかって思いますね」「おぉ?」「何しろ開発環境の構築ってそれ自体は1円もお金になりませんから🤣」「🤣」「そういうのを抜きにして即開発に参加できるようになるのは大きい」「開発環境構築はエンジニアとしては知見がたまりますし楽しみでもありますけど、ビジネス上はコスト的に無意味💵」「😆」「だからそういう作業はとことん縮小したい」「ゼロが理想」
⚓Pythonの運営体制
つっつきボイス:「Pythonがジェダイっぽく合議制みたいな形に移行するようです」「なぜかMatzに質問してるし😆」「これまでいろんなソフトウェアが現れては消えたりしたのを見てきたんですけど、合議制でうまくいったところもあれば独裁制でうまくいったところもありますし、逆に合議制でつぶれたところもあれば独裁制でつぶれたところもあったりしますね〜☺️」「結局どれもありうるという😆」
⚓その他ツール
- サイト: EditorConfig -- 複数エディタで共有できる設定ファイル
つっつきボイス:「この間出した記事↓でeditorconfig.orgを今頃知りました」「editorconfigは前からあるんですけどね〜、微妙なんですよ😆」「やっぱり大した設定はできないんでしょうか?」「そう😆」「夢の世界を目指したのはわかるけど結局設定足りないし😆」「Rubyとか特に自由度高いからブレブレになるし😆」「最大公約数は無理か〜😆」「ないよりはマシな程度😆」「本来はエディタというよりGitHubとかのリポジトリに入れてチームの設定を共通化するのに使いたいものなんですけど、細かい設定がなさすぎて夢の世界には程遠い😆」
⚓その他
⚓GitHub Actions
GitHub Actionsのaction作成、暗闇の中を手探りしてる感があって「ええか? これでええのか? ええのんか?(不安)」みたいな鶴光フレーズ言いながらじゃないとやってられない。
— masa寿司 (@masa_iwasaki) November 27, 2019
つっつきボイス:「GitHub Actionsは手元で動かせないと手探り感凄そう😅」
以下はつっつき後のツィートです。
そしてそのカスタムactionのリリースブランチとか作るのもかったるすぎる。node_modules 丸々含めるために一時的に .gitignoreから外すとかやるのが正解なのか? .gitignoreがずっと変わらない前提ならひたすらrebaseでいけるかもだが。。
— masa寿司 (@masa_iwasaki) November 28, 2019
⚓ゼロ知識証明
つっつきボイス:「ゼロ知識証明?」「『情報の中身について公開せずに、その情報を自分が知っていることを相手に伝える』のか!」「おほ😋」「こういうのは面白いっすね〜❤️」
「これと少し似た感じでいうと、XORを使ったデータ復元みたいなのも好きですね😍」「おぉ?」「以下の記事↓とかのRAID5のパリティ計算なんかがそうなんですけど、完全な情報がないのにちゃんと復元できる」「あ〜!」「どこが欠けても復元できるというのを初めて見ると、とっても不思議な気持ちになれます😆」
参考: 見習い復旧屋の技術日記 RAID5 のパリティの計算方法
「そういうデータ復元が可能であることを最初に証明したのが情報理論でお馴染みのシャノンでしたっけ?」「ですね☺️: 情報のビット数を冗長にすることでエラーを復元できるんですけど、冗長符号が何ビットあると何ビットまでのエラーに耐えられるかみたいな理論だったと思います」「たぶんだけどこの辺↓だったと思う」「source coding theoremっていう名前が😆」「こういうのをちゃんと学ぶとへぇ〜って思いましたね😋」「ワイ数学科だったけど群論だったし〜😆」
参考: シャノンの情報源符号化定理 --情報源符号化定理の証明 - Wikipedia
⚓その他のその他
「大辞林 第四版」は、編集部で組版まで自動化していて、3,200ページをPDFで入稿しているそうです。
組版用とアプリ用のXMLは全く同じものなので、デジタル化の作業にも無駄がありません。
紙を工夫して以前より薄く軽くしたり、三省堂さんの技術は凄いです。 pic.twitter.com/vcdWBm4SeR
— 物書堂(ものかきどう) (@monokakido) September 7, 2019
つっつきボイス:「辞書づくりにXMLフォーマットを使うのは納得😋」
⚓番外
⚓はじめアルゴリズムより面白そう
【新着NEWS!】
『#重要参考人探偵 』の #絹田村子 氏(@murak0)新作『#数字であそぼ。』1巻発売!#数学 が苦手だからと敬遠することなかれ!
「実数の定義」「微分積分」「線形代数」など数学嫌いの人にとってちんぷんかんぷんな用語も、楽しく理解できること間違いなし!!https://t.co/4LVsSrDliA— 小学館コミック (@ShogakukanComic) December 10, 2018
つっつきボイス:「『動物のお医者さん』の数学版みたいなノリだとruby-jp Slackで見かけて、思わずAmazonでポチっちゃいました😆」(以下漫☆画太郎先生を讃える話などが延々)
あと以下のツイートも言葉での分析が的確だなと思いました😋。
代表作が「ヤクザ漫画」のオッさんが「萌え」を真面目に研究中!笑
無料なので暇つぶしにどうぞ!https://t.co/tuo7ARdOTH pic.twitter.com/Em6I4Rm1xq
— 渡辺 潤 (@Junwatanabe1968) November 25, 2019
後編は以上です。
おたより発掘
Istioのロゴが見えたのでRailsアプリのIstio適用記事!? と覗いたら自分の資料だった。
紹介ありがとうございます。
マイクロサービスのインフラを自前で持とうとするともの凄く大変なので、クラウドを使えるなら使った方が良いというのは完全に同意です。https://t.co/6ef0d1yVFe— id (@ido_kara_deru) December 4, 2019
バックナンバー(2019年度第4四半期)
週刊Railsウォッチ(20191202前編)Rails 6のimplicit_order_columnはカスタマイズ可能、rubocop-rails 2.4.0リリース、Capistrano記事ほか
- 20191119後編 メソッド参照演算子が廃止、GitHub新機能続々、平成Ruby会議、GitHub OAuthバイパスほか
- 20191118前編 ActiveJob引数のログ抑制、RailsガイドProプランお試し、ファイルアップロードのレジュームgemほか
- 20191112後編 invisible gemで可視性を変えずにパッチ当て、スライド:「型なし言語のための型」、自然言語の言語名を推測ほか
- 20191111前編 Active Recordモデルをprivateで封じ込める、心折れないRailsスキーマ管理、Railsセッションをクロスドメイン共有ほか
- 20191106後編 holiday_japan gemで日本の祝日判定、小さい関数が有害になるとき、Gitブランチのファジー検索ほか
- 20191105前編 Rails 6のデフォルト設定解説、DHHも消したいaccepts_nested_attributes_for、スライド『実践Railsアプリケーション設計』ほか
- 20191029後編 Ruby 2.7.0-preview2、tapping_device gemとhumanize gem、平成Ruby会議ほか
- 20191028前編 RailsにSTI用メソッドsti_class_forとpolymorphic_class_forが追加、RuboCopを変更箇所だけにかけるgem、strftime書式生成サイトほか
- 20191021 Rails 6でhas_many関連の修正やSprockets 4.0対応、Shrine 3.0がリリース、Minitestスタイルガイドほか
- 20191015 スライド「Rails Performance issues and Solutions」を見る、dirtyに*_previously_was が追加、Sidekiq 6.0.1ほか
- 20191008後編 Ruby 2.7のInteger#[]でバイナリチェック、rubyzip gemは強力、13KBのJavaScriptゲームほか
- 20191001後編 RedisとRubyをつなぐredis-object gem、Fullstaq Rubyの新バージョン、COUNT(*)とCOUNT(1)の速度ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp Slackなど)です。