Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

週刊Railsウォッチ(20190225)Rails 6のあまり知られてない新機能、TWAとKotlin/NativeとFlutter、Rubyが26歳の誕生日ほか

こんにちは、hachi8833です。スクショ禁止の分科会決定でひっそりざわついてます。


つっつきボイス:「ちーっす」「お、今日は久しぶりに冒頭から参加😍」「いや〜もう疲れちゃったんで今日はこれで仕事終わりにしようと思って😅」「そういうときはウォッチつっつきで気分転換しましょ🏖」「そのつもりです☺️」「そうそう、疲れたときはRailsウォッチ😆」「今日納品とかじゃなければ全然OK🚛: ちょうど長い実装やっと終わったんですよね」(以下延々)

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

週刊Railsウォッチ「公開つっつき会#8」開催のお知らせ

次回は3/7(木)開催です。皆さまのお気軽なご参加をお待ちしております🙇。

Rails: 先週の改修(Rails公式ニュースより)

コミットリストから見繕いました。@tenderloveさんのテンプレート改修が目立ちます。

PostgreSQLのUUIDキャストのアロケーションを削減

# activerecord/lib/active_record/connection_adapters/postgresql/oid/uuid.rb#L7
        class Uuid < Type::Value # :nodoc:
          ACCEPTABLE_UUID = %r{\A(\{)?([a-fA-F0-9]{4}-?){8}(?(1)\}|)\z}
          alias_method :serialize, :deserialize
          def type
            :uuid
          end

-         def cast(value)
-           value.to_s[ACCEPTABLE_UUID, 0]
-         end
+         private
+
+           def cast_value(value)
+             casted = value.to_s
+             casted if casted.match?(ACCEPTABLE_UUID)
+           end
        end

つっつきボイス:「おぉ〜UUIDをプライマリキーに?」「UUIDをstringで取れるようになったのか」

「どうなんだろうね〜、UUIDをプライマリキーにしようみたいな話はIDが溢れた経験のある人はみんな言ってますけど😆」「😆」「とはいえRailsのURLにあの長ったらしいUUIDが出てくるのもちょっとね〜」「マイクロソフトの7a98c250-6808-11cf-b73b-00aa00b677a7みたいなUUIDとさんざんお付き合いしたことあります😅」

参考: Generating the UUID - Windows applications | Microsoft Docs

ActiveSupportのZeitwerkIntegrationunhook!を追加

# activesupport/lib/active_support/dependencies/zeitwerk_integration.rb#L30

        def verbose=(verbose)
          l = verbose ? (logger || Rails.logger).method(:debug) : nil
          Rails.autoloaders.each { |autoloader| autoloader.logger = l }
        end

+        def unhook!
+         :no_op
+       end

zeitwerkが1.2にアップグレードされたのも07346で取り込まれていました。


つっつきボイス:「zeitwerk、発音なんだっけ」「えっと、ツァイトヴェルクだったかな」「コミットしてるfxnさんがzeitwerkやってる人ですね」

「Zeitwerkのコミット数や規模が思ったより小さくてちょっとびっくりしました」「オートローダーやってるだけだから小さいんでしょうね: Rubyの新しい機能を使っていい感じのオートローダーを作った的な」

レンダラーがstringではなくレンダリング済みテンプレートオブジェクトを返すよう変更

# actionview/lib/action_view/base.rb#L289
-   def in_context(options, locals)
+   def in_rendering_context(options)
      old_view_renderer  = @view_renderer
      old_lookup_context = @lookup_context

      if !lookup_context.html_fallback_for_js && options[:formats]
        formats = Array(options[:formats])
        if formats == [:js]
          formats << :html
        end
        @lookup_context = lookup_context.with_prepended_formats(formats)
        @view_renderer = ActionView::Renderer.new @lookup_context
      end
      yield @view_renderer
    ensure
      @view_renderer = old_view_renderer
      @lookup_context = old_lookup_context
    end
    ActiveSupport.run_load_hooks(:action_view, self)
  end
end

つっつきボイス:「いきなりstringを返すんじゃなくてテンプレートのまま返すようにしたのね」「最近のtenderloveさんはずっとテンプレートレンダラー周りにかかりっきりですね」「Railsの表示を速くしたいからだったりして😆: 主にGitHubの」「tenderloveさんはGitHubの人ですしね」

「実際レンダリング周りって、Rails的に書き進めていくと極限に遅くなるし: 表示完了まで15秒かかったなんてこともあったし🐌」「へ〜」「要するにパーシャルに分ければ分けるほど、どんどん遅くなる」「あ〜そんな話もありますね」「パーシャル化を進めていくと、テーブルのところとかでパーシャルが入れ子になってしまったりするんですが、そういうところで横のループと縦のループが形成されると遅くなって死ねるという🐢」「あんまり遅くなるから今度はパーシャルを結合していったりとか😆」「😆」「Railsでパーシャルを増やしたときの遅さはもう少し何とかしないといけない気がする🤔」

rendered_formatを非推奨化

# actionview/lib/action_view/rendering.rb#L25
  module Rendering
    extend ActiveSupport::Concern
    include ActionView::ViewPaths

+   attr_reader :rendered_format
+
+   def initialize
+     @rendered_format = nil
+     super
+   end
...

-   def rendered_format
-     Template::Types[lookup_context.rendered_format]
-   end

つっつきボイス:「rendered_formatを非推奨...?」「この副作用に依存しなくなったから消すと」「普段触らないところだからよくわからないけど、たま〜にこういうのが必要になったりしますね😆」「たしかに〜」「ごくまれにここのコンテキストのフォーマットを取りたいみたいなのが😆」

参考: rendered_format -- AbstractController::Rendering

「Railsじゃないけど、以前PHPのフレームワークでどうしてもコンテキストを取りたいことがあって、フレームワークのソースをどっさり読んでまで取ったのをちょっと思い出した😭」「わかりみ」「ああいうのはツラいホント😇」

delete_bydestroy_byを追加

#35304でDHHが足そうと決めたようです。

# #35304より
# Before
unreads.find_by(readable: readable)&.destroy
unreads.where(readable: readable).destroy_all
unreads.where(readable: readable).delete_all

# After
unreads.destroy_by(readable: readable)
unreads.destroy_by(readable: readable)
unreads.delete_by(readable: readable)

つっつきボイス:「あ〜これが欲しいのわかる!」「たしかに」「delete_byとかdestroy_by、あっていい😋」

delete_byだとActiveRecordのオブジェクトを作らないことができそう?destroy_byだとフックが動くからActiveRecordのオブジェクトを作らないといけないだろうけど」「どうでしょう?わかんないけど、destroy_byの動作に寄せるんじゃないかな〜🤔: destroyだと削除済みのActiveRecordオブジェクトが返ってきた気がするし、find_byもオブジェクト返すから同じにするのかななんて」「persistedがオフになったオブジェクトを返すみたいな?」「たぶんそんな感じで」

destroyって、うろ覚えだけどsaveみたいな他のメソッドとちょっと動きが違ってて、たしかtrue/falseを返さずに、削除済みのオブジェクトを返してた気がする: でdestroyed?すると削除に成功したかどうかがわかるみたいな作りだったと思うんですよね」「あーそういうのどっかで見たことある」

参考: destroyed? -- ActiveRecord::Persistence

「だから厳密なことを言えば、削除が成功したかどうかをdestroyed?でチェックするのが筋なんですけど、普通みんなそこまでやらないっすよね😆」「destroyしたらもう次にはリダイレクトかけたりとか😆」「trueじゃないかもしれないんだぞと😆」「まあエスケープが別の例外吐くかもしれませんが😆」「いずれにしろdestroyってちょっと変なAPIだった覚えがあるんですよね」

「でも削除したオブジェクトを取れれば『〜を削除しました』みたいなメッセージを作りやすいし」「あ、確かに!」「delete_byとかdestroy_by、たしかにあっていいヤツ👍」

Rails

Rails 6のあまり前面に出ていない新機能


つっつきボイス:「TechRacho読んでればだいたい知ってること多いかな」「そんな気がしますね」


「そうそう、Webpackerが6でデフォルトになるし」


「暗号化credentialで環境をサポート」「つかそれがないと使いものにならないと思うんですけど🤣」「🤣」「環境使い分けられないcredentialを誰が使うのかと🤣」「credential周りも何だかずっとやってる感」「gemがあるからそんなに不自由しないのかもしれないけど」


ActionDispatch::HostAuthorizationってのができたのか、へ〜」「Hostヘッダー攻撃を防ぐためのものですか」

参考: What Is a Host Header Attack? - DZone Security


translationメソッドと_html、これあったな」「あったあった(ウォッチ20180723)」「i18nでこんなふうに↓_html付けると式展開が自動でエスケープされるヤツ」

# en.yml
en:
  hello_html: "Welcome <strong>%{user_name}</strong>!"

Relation#pick?」「あー、pluckの単発バージョンみたいな」「LIMIT 1がつくのね」


update_attributesが非推奨になる件、ちょうどこないだ社内のコードレビューでやりましたね」「ウォッチで取り上げられてたんで、そのリンク(ウォッチ20190218)をそのままレビューに貼って『非推奨になるらしいっすよ』って使いました😆」「やったね😋」「業務で役に立った😋」


「MySQLのデフォルトエンコーディングがutf8mb4になる件」「まだ対応してなかったんだっけ?」「これもウォッチで扱った覚えが(ウォッチ20180925)」「たしかこの対応のためにMySQLのミニマムバージョンが引き上げられた」「そういえばそっちの方が大きい話だったかも」


rails db:system:changeができるようになった話(ウォッチ20190121)😆」 「へぇ〜」「create_table: :if_not_existもあった(ウォッチ20181203)」


「セッションオブジェクトのナビゲーション?」「digというハッシュ的なメソッドでセッションオブジェクトを安全に扱えるようになったのか」


Enumerable#index_withですって(ウォッチ20180608)」「当時の記事で『これは優秀なメソッド』ってありますね😋」


Array#extract!ウォッチ20180827)」「Arrayでやれるのか〜」


rails server -u pumaみたいにサーバーを指定できるようになるし」「ほぉ〜」


「サマリーとしていい記事👍: ダラダラ書いてないのも好感持てるし」「Railsウォッチを毎週読んでない人にはこういう記事もいいかも☺️」「そうですね☺️」

Rails 5.2向け厳選gem 10種(Ruby Weeklyより)

「ちょっと時間が押してるので簡単に」「SidekiqにPryにDalli」「そしてexception_notificationは定番かな」

「プッシュ通知のFCMにWicked PDF」「Chartkickはグラフ生成」「こういうのいっぱいありすぎて😭」

Wicked PDFとChartkickは昔の翻訳記事にありました↓。

Ruby on Railsで使ってうれしい19のgem(翻訳)

Rails tips: Railsアプリに1行書くだけでチャートを作成できるchartkick/chartable gem(翻訳)

「AWS-SDK S3も有名」

「おお、will_pagenateなんてなつかしい👴」「ここだけ急に古いですね」「まだ使ってる人いたんだ〜」「kaminariとwill_pagenateって同じものかと思ってた😅」「will_pagenateってこんなきれいに出ましたっけ↓😆」「さすがにBootstrapとか当ててんじゃね?😆」「最近だとPagyが速いらしいけど」


同記事より

Rails: Pagy gemでRailsアプリを高速ページネーション(翻訳)

「active_model_serializersも定番」「これはある意味難しいgemだけど、ちょろいAPIとかだったらこれでいけたりしそうではある」「少なくともjbuilderで全部やろうとするよりは全然いい」「おや、active_model_serializers、長いこと更新されてないっぽいな」「ちょい悩ましい」「active_model_serializersのリポジトリってrails-apiっていうんですね」「何だか公式っぽい雰囲気?」「微妙にイラッとする😆」「あ、そうじゃなくてactive_model_serializersってRailsにマージされてるのか!」「しかしこの更新のされなさはちょっとためらいを感じる😆」「完成され尽くしてるのかも😆」「いやいや😆」「モデルに対するDecoratorみたいなgemだし」「JSONにするためのgemというか」「何となれば自分たちでメンテできそうなささやかな規模感ではあるけど」「あり方はビューっぽいけど、それをとてもモデルっぽく書けるgemですよね☺️」

「active_model_serializers、リポジトリにソースが見当たらない...?」「他のどっかに置いてあるとか?」「もしかしてRSpecみたいな感じだったりして: RSpecって本体にはほとんど中身がなくて、実際の中身はrspec-coreとかそういうところに置かれてたりするし」「active_model_serializersのソースの場所やっぱりよくわからん😅」「RubyMineとかだったら何も考えずにジャンプできるからソース探し回らなくていいんだけどな〜」

「active_model_serializersみたいなgemはソース読まないとわからない感じですよね」「このgemを使ってきれいに書いたサンプルコードとかないと使いにくい感じありますね」「root要素を指定できるオプションなんかもあって確かに欲しいヤツなんだけどデフォルトの挙動がよくわかんないし😅」「undocumentedとまではいかないにしても情報がちと少ない感」「触ってみないとわからない感じなんですね」「このgemは入れてすぐ使えると思わないほうがいいかも😆: 1日ぐらいああでもないこうでもないとかやってみないと(実際やったし)」「自分もやりましたよ😅」

rubanok: params周りをすっきりさせるgem(Ruby Weeklyより)

久しぶりにEvil Martiansがスポンサーのgemです。Rails以外でも使えるそうです。

# 同リポジトリより
class CourseSessionController < ApplicationController
  def index
    @sessions = CourseSession.
                  search(params[:q]).
                  by_course_type(params[:course_type_id]).
                  by_role(params[:role_id]).
                  paginate(page_params).
                  order(ordering_params)
  end
end

# 上を下のように書ける
class CourseSessionController < ApplicationController
  def index
    @sessions = planish(
      # pass input
      CourseSession.all,
      # pass params
      params,
      # provide a plane to use
      with: CourseSessionsPlane
    )
  end
end

# 全部推測させたりも
class CourseSessionController < ApplicationController
  def index
    @sessions = planish(CourseSession.all)
  end
end

つっつきボイス:「これは嬉しいヤツでしょうか?」「ははーん、paramsを直で渡してよしなに解釈してくれる感じかな」「Ransackみたいな?」「Query Objectに近い感じ」「このgemをいきなり使われたら意味わかんなくてびっくりしそうではある😆」「上みたいにbefore/afterで示されてればわかるけど、afterだけ見せられたらヘ(゚д゚)ノ ナニコレ?みたいな😆」「😆」「こういうのを柔軟にやるのはなかなか大変そう...」「やりたいことはわかるけど、それが他の開発者に伝わるかどうかが心配だな〜: その意味でこういうやり方はちょっと😅」

VelocityとGitPrimeをチェックした


つっつきボイス:「Code Climateさんの記事です」「VelocityとGitPrimeって何だろうと思ったらプロダクトみたい」「VelocityはCode Climateの自社製品なんですね」


codeclimate.comより


gitprime.comより

「Velocity、ちゃんと見てないけどNewRelicとかDatadogとかみたいな感じに見える」「アプリケーションメトリクスを収集してビジュアル表示するみたいな感じ?」「Datadogが近いのかも🤔」「ということはGitPrimeはVelocityのライバルさんかしら」

「ところで、Code Climateの自動レビューみたいなエンジニアのコミュニケーションを自動化するみたいなツールって、CIとかを除けばなぜか日本であまり定着しないんですが、その理由はもしかすると日本では結局日本語でやりとりしてるからじゃないかなという気がしてます」「あ〜」「ほら、海外だとプライマリ言語が英語じゃない同士が英語でやりとりしてたりするじゃないですか: そういう日常会話レベルでいろいろ大変な人たち同士だとコミュニケーション自動化ツールっていろいろありがたいと思うんですが」「それあるかも」「日本だと結局口頭でやりとりする方が早いみたいな感じになったりとか」

「そういえば最近Siderってツール↓使ってるんですけど、『Siderで指摘された内容は全部直してください』ってレビューで書いてあって😆、なるほどそういう使い方なんだなって思ったりしましたね」「へー、サイダー🥤」「あ、CiderじゃなくてSiderです」「もう日本語化されてる?」「Siderって元々日本発のサービスだった気がします(ウォッチ20180910)」「あ、そうなんだ!」「とにかくこういうのに任せるのもひとつの手だなと思って」

「おいくら万円?」「ユーザー単位か」「フリーもあるけどっ」「日本語で自動レビューされるならいいかな: 別に英語でもいいけどっ😆」「スタンダードが月1500円でリポジトリ数制限ないんなら、ちょっとチームで使ってみようかなという気になってきた😋」「もしGitHubでしか使えないとかだったら残念だけど」「GitHubで、と書いてあるからどうもそれっぽいし」「BPSはGitLabだからGitLabで使えたらいいんだけどな〜🥺」「GitHubとGitLabを同期するプラグインとかでできそうな気もするけど、(GitLabの)マージリクエストをプルリクエストとしてGitHubで同期してくれないとだめだし」「そっか〜」「既に方法がありそうな気もするし、1か月ぐらいやってみたいな」「Siderにしとけば『Siderの言う通り直してください』で済むから楽そうだし😆」「レビューされなくて止まっちゃうより自動レビューされる方がきっといいし😋」

その他Rails


つっつきボイス:「そういえばHerokuも昔といろいろ変わって、Dockerコンテナも動くようになってるし、できることも増えてたりするし」「へ〜!」


Ruby

rescueをちょっとカッコよくリファクタリング(Ruby Weeklyより)

短い記事なので、コードは最後のだけ引用します。

class SomeAPIService
  def self.call
    perform_action
  rescue SomeAPIAccountExpired
    send_email_with_notification_about_expired_account
  rescue SomeAPIInvalidAPIKey
    send_email_with_notification_about_invalid_api_key
  rescue SomeAPIUnauthorizedAction
    Rollbar.error('log some useful info')
  end
end

つっつきボイス:「あーなるほど、Rubyのトリプルイコール===def self.===(exception)みたいにオーバーライドするのか」「すると上のようにrescueできると」「ほーほー!これは中々😋」「トリプルイコールはクラスの一致を取れたと思うので、それを例外クラスの一致チェックに使ってると」「そこに使うのね: 言われてみればたしかに〜」「PHPとかJavaScriptやってる人からすれば、===って完全な型一致という印象だし😆」「Rubyはそこが特殊😆」

RubyのTracePointを探る(Ruby Weeklyより)

# 同記事より
trace = TracePoint.new(:raise) do |tp|
  p [tp.lineno, tp.event, tp.raised_exception]
end
#=> #<TracePoint:disabled>

trace.enable
#=> false

0 / 0
#=> [5, :raise, #<ZeroDivisionError: divided by 0>]

つっつきボイス:「TracePointだ」「Brandon Weaverさんはこれでしばらくシリーズ記事を書くみたいです」「TracePoint、知っておくと便利だけど使う機会が年に1度あるかないか🤣」「🤣」

RubyのBEGIN/ENDがブロックを取れる

「Goby言語のst0012さんが、RubyでBEGINENDでブロック取れるって知らなかった〜と言ってたので」「おぉ、Rubyのこういう大文字定数にはときどきあまり知られてない機能がありますヨ🤓」

「たとえばRubyにDATAってのがあるんですけど」「えっナニソレ?」「コードの中でDATAという定数を書いて、そのファイルの末尾に__END__って書くと、__END__から下にある文字列を丸ごとDATAで読み取れる↓」「それスゴい😳」「この間ちょろっと書いたNagios用のスクリプトで少し長めのERBでNagios configを書かないといけなかったんですが、そのときにこの方法でERBコードを読み込みました😎」「ヒアドキュメントよりよさそう😋」「ファイルの末尾にまとめて書けるから散らからないし🧹」「書くときに『たしかこんな機能があったはず』と思って探して見つけたし😆」

# ruby-lang.orgより
sum = 0
DATA.each_line do |line|
  sum += line.to_i
end

DATA.rewind
p DATA.gets    # => "sum = 0¥n"

__END__
17
19
23
29
31

参考: constant Object::DATA (Ruby 2.6.0)

「これはRuby Gold級の技っぽいですね」「Rubyマニアじゃないとあまり知らないかも😆」「これはもっと知られてもいい機能」「Ruby Gold持ってませんでしたっけ?」「いやその、BEGINENDがブロック取れるというのは何とな〜く思い出したけどDATAは知らなかったマジで😅」

Goby: Rubyライクな言語(2)Goby言語の全貌を一発で理解できる解説スライドを公開しました!

追記(2019/02/27)

DATA__END__についての記事を以前翻訳していたのに忘れていました↓。

Ruby: 巨大ヒアドキュメントを`DATA`定数と`__END__`で扱う(翻訳)

その他Ruby




つっつきボイス:「LSPはランゲージサーバー」「ランゲージサーバーは流行って欲しい🙏」


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

お誕生日おめでとうございます🎊!人間ならそろそろ結婚して家庭を持ってそうな年頃ですね💒。

Ruby trunkより

Ruby 2.7にEnumerable#tallyが入るお(Ruby Weeklyより)

#11076で元々count_byという名前で提案されたのがtallyに変わったそうです。

tally: {他動-1} : 〜を勘定する、計算する、数え上げる、集計する


つっつきボイス:「タリーって?」「何でも元々count_byって名前だったらしいんですけどtallyに変わったそうです」「はは〜、どの種類の要素がいくつあるかを数えてハッシュの形で返してくれるのか!」「こういうことたまにしますもんね😆」「するする😆」「自力で書くとそこそこ面倒なヤツ」「後はこのメソッドの存在を忘れなければ😆」「Ruby 2.7から入るそうです」「文章のアルファベットでeが一番多いみたいな、ある種の『黄金虫』的な問題を解くのが劇的にラクになりそうですね😋」「名前もcount_byよりいいかも」「count_byだと引数渡して数えるみたいに思えるし」

# 同記事より
%w(foo foo bar foo baz foo).tally
=> {"foo"=>4, "bar"=>1, "baz"=>1}

参考: 黄金虫 - Wikipedia

「これって先週のウォッチにあった、期待する値を渡すとそれを返せるメソッドを返すgemにちょっと通じるところがあるような(ウォッチ)」「そういえば先週あの後amatsudaさんからツッコミもらいました↓😅: MethodFinderっていうのがあるそうです」「😆」

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

AWS Lambdaの最適なタイムアウト(Serverless Statusより)


同記事より


つっつきボイス:「Lambdaは最近タイムアウトが伸びて長く実行できるようになってるんですよね」「知らなかった〜」「Lambdaの登場直後は30秒ぐらいしかなかった覚えあります🕢」

「なので最近のLambdaだと確か15分ぐらいまで伸びて...ん?記事を見ると最大実行時間/リクエストが5分↑?」「ちょ😆この記事昨年夏なんですけど」「ホントだ🥺」「まあAWSのこうした制限はかなり頻繁に更新されるんですよ: ↓やっぱり今は15分」「そうだったんですね😳」

参考: AWS Lambda の制限 - AWS Lambda


aws.amazon.comより

「Lambdaもこうした制限が何度も変わっています: Lambdaの場合、タイムアウトが30秒しかないとたとえばクローラのように時間がかかる処理を回せない」「あ〜」「当時そういうものを動かしたければLambda関数を分解しないといけなかったんですが、それが5分になり、そして最近になって15分になったおかげで、ある程度のバッチ的な処理でもLambdaで回せるようになってきた」「なるほど!」「まあLambdaでそういう処理を動かすのはどうかと思いますが😆: あくまでたとえとして」

「とにかく、AWSのこうした制限変更というか緩和は前提条件が変わるレベルと言ってもいいくらい♟」「たしかに」「30秒が15分になればユースケースがとても広がりますし💪」

「たしかAWSのELB(Elastic Load Balancing)↓なんかもそうですね: 最初の頃はやはり30秒かそこらだったんですが、それだとデカいファイルをダウンロードしたときにぶった切られるという⚔️」「でしょうね〜」「それが今のALBでは、おや、タイムアウトが制限事項に入ってないか↓: デフォルト60秒で自分で1 ~ 4000秒に調整できるらしい」「ちなみに以前のはClassic Load Balancer」

参考: Elastic Load Balancing(クラウドネットワークのロードバランサー - ELB) | AWS
参考: Application Load Balancer - Elastic Load Balancing

「EC2の課金が秒単位に変わったなんてのもそうで、前はできなかったユースケースも使えるようになったりする」「たとえばどんなユースケースでしょう?」「秒単位になれば、ささやかなバッチぐらいならEC2で動かしてもやっていけますね🧐: 昔EC2が時間単位だったときは、1秒動かそうが1時間動かそうが料金同じだったので」

参考: EC2 インスタンスと EBS ボリュームで 1 秒あたりによる請求が可能に | Amazon Web Services ブログ

「制約が変わると運用のプラクティスそのものが変わるので、押さえておかないといけないヤツ」「改定があったらRSSで更新情報取れたりするんでしょうか?」「制約の改定はだいたいAWS Summitとかre:Inventのタイミングで出ますね」「あ〜なるほど、イベントのたびに更新が入る感じですか」「そう!だからAWSのイベントのたびにこの辺を追いかけておくと改定をキャッチできたりしますね😋」

「ただ制約の緩和はそれ以外のタイミングでしれっと行われることもありますが😅」「AWSの制限事項ってその都度調べないと見落としそうですね」「まあはてブで追ってればだいたい見えてくるので、見逃さないようにしておけばだいたい大丈夫👍」

参考: AWS Summit Tokyo 2019 | 2019 年 6 月 12 (水) 〜14 (金) | 幕張メッセで開催
参考: AWS re:Invent 2018 | アマゾン ウェブ サービス

「ちなみに元の記事はタイムアウトの話してるけどもうタイムアウト変わってるから😆」「😆」「まあ5分と15分ならそんなに大きな違いじゃないかな: 30秒と5分は大違いだけど」「いずれにしろLambdaはこの記事でチェックしているようなところは見ておきたいですね: 考え方は通用する☺️」

.devドメイン


つっつきボイス:「そうそう、devドメイン売り始まった🍌」「github.devとか取ってるのか」「大手の会社はとりあえす取っとかないと😆」「後でそいつから高値で売りつけられる😆」「早いもの勝ち」

「bpsで.dev取れるかな?」「bpsincなら普通取れそうだけど、3文字ドメイン取れるなら」「今取っちまおうか😆」(しばしチェック)

「やったavailable」「ほあっ初期費用40万!💰」「さすがにポケットマネーの範疇越えるわ😇」「bpsincみたいに長いと安くなったりしないかな?」「課金は安くなったけど初期費用変わらない...😇」「短いドメイン名は価値高い🗼」

「まあ初期費用が高いのにはドメインハイエナ防止の意味合いもあるんでしょうね」「ハイエナでなくても面白半分でドメイン買われるかもしれないし」

「お、twitter.devがavailableですって」「取れば?😆」「いやいやそんな😆」「まあ今どきは明らかに本人でないドメインをたとえ取れたとしてもレジストラ側で拒否されるだろうし」「悪質なのはアカンと😈」「google.devは...使用不可」「でしょうね〜」

「40万は無理だからbabaさんにbpsのdevドメインおねだりしちゃおうかな🤣」「40万あったら一番いいMacbookをフル装備で買えちゃうし」「でもたとえドメイン買っても悪質とみなされたら取り上げられちゃうんですよね🤣」「何かのはずみでそれ食らったらキツイ😇」「まあ返金ぐらいしてくれるんでしょうけど」「ドメイン購入先の規約次第だけど返金は基本ダメなんじゃないかな〜」

その後ドメイン買うかどうしようか話がSlackで進行しました。

「もし取れたらAWSのRoute 53で管理したい」「そうすっといろいろと便利そう😋」「今使ってるドメイン管理会社の画面がイケてないし反映遅いし😅」

Amazon Route 53(クラウド DNS - ドメインネームサーバー) | AWS

バークレイのサーバーレスコンピューティング総括論文(Serverless Statusより)


つっつきボイス:「Serverless Statusでトップ記事だったのがこの論文でした」

  • サーバーレスコンピューティングとは
  • 黎明期
  • 今日のサーバーレスプラットフォームの制約
  • サーバーレスコンピューティングは今後どうあるべきか
  • サーバーレスの落とし穴
  • まとめと今後の予測

「ざっとアブストだけ読んでみるとサーベイ論文らしい: サーバーレスの歴史と現状をアットアグランスでひととおり見渡せる感じ」「この間のEnvoy(ウォッチ20190212)もあるかな〜そこまで新しくはないかな?: お、論文は今年2月だからめちゃ新しい」

「こういうカテゴライズいいわ〜↓」「サーバーレスコンピューティングでは通常のプログラミングと違うさまざまなリソース制約とかがあるみたいな話」「そのあたりを知るのにいい論文👍」「これはやる気ある人が集まって輪読とかやってもいいんじゃね?」「章単位ならそんなに大変じゃないかも」「じゃ社内の英語強い勢を巻き込みますか😆」「技術論文だけに専門用語の嵐だから英語力よりコンピュータサイエンスの基礎用語を押さえてる人が欲しい感じ😆」


同論文より

Docker創業者のお別れブログ記事


つっつきボイス:「最後はDockerの創業者がおさらばしたというブログ記事です」「割と言葉のキツイ人だったような気が😆: DockerがrunCになったときにも放言してTwitterとかからツッコまれまくったような覚えが」「runC?」「まあDockerのコアがオープンソースになってみたいなヤツ」

参考: はじめてのrunC - Qiita

「今ってDockerのお株が他にどんどん奪われてる感じじゃないですか」「今のDockerはどちらかというと設計全体をDocker化するという位置付けですが、元々は単にコンテナを動かすランタイムだったんですよね: そこをrunCに取られたらもう何も残らないという😆」「Docker社自体もマネタイズの機会を逃しつつあったりするし創業者としてはツラいでしょうね」「といってrunCの流れに逆らっていたらDockerはこんなに流行らなかっただろうし」「オープンソース界隈とうまくやりとりできる人じゃなかったのかななんて😆」「Redisのマネタイズの件もざわついてましたね」「この辺はいろいろ難しいな〜」

「今Docker Hubを有料で使ってる人ってほぼいないっしょ?」「Docker SwarmもKubernetesにお株奪われてる感あるし、どこで儲けを出したらいいんだみたいな」


hub.docker.comより


docker/swarmより

「Docker EEはDocker社がメンテしてると思ったけど、通常のDockerとの違いよくわからない😆」「改めて見てみると↓、認定されたインフラ/プラグイン/ISVコンテナが使えるとかか」「他のソフトウェアでもできるものが多い感😆」

参考: Dockerが商用版Dockerとして「Docker Enterprise Edition」発表、認証済みイメージやプラグインなど提供。無償版は「Community Edition」に - Publickey

「ちなみに上の記事はFacebookで見かけたんですが、そこで話題になってたのが『このヨットの絵、おかしいだろ』↓の方でした」「すごくどうでもいい話😆」「私ヨットのこと全然知らなくてどこが変なのかわかりませんでした😅」「これじゃ前に進まないだろみたいな😆」


同ブログより

その他クラウド



つっつきボイス:「卜部さんのツイートが目に止まったので」「黙ってマイク内蔵でしかもOTAで有効、そりゃエグすぎる😇」「OTAって?」「On The AirOver The Airなので要はネット越しに音取り放題🧐」「ひょえ〜😭」「それを隠し機能とかもう何というか」

参考: OTA: 用語解説辞典|【公式】NTTPC

SQL

PostgreSQLのfsyncバグ


つっつきボイス:「あーこれ見た見た!」「ファイルシステムごとの挙動の違いを見落としてたとかそんな話」「FreeBSDとzfsなら大丈夫っぽい」「まあfsyncが失敗するようなユースケースはオンプレミスではほぼありませんけどね: その代りNFSみたいなネット越しだと普通に失敗しますが😇」

参考: Network File System - Wikipedia

Rails開発者にとってSQLを学ぶのが重要な理由7つ


つっつきボイス:「Everyday Railsの記事です」「SQLが重要なのはもうあったりまえの話☺️」「そういえばこの間のSQLQL話(ウォッチ20190212)の『Railsエンジニアはもっとデータベースを大事にすべき』で、はてブで誰かが『ごめんなさい』とコメントしてました」

「実際、Railsがどれだけ進化しようとデータがRDBに入っている限りRailsとRDBの間の通信はSQLになるんだから当然大事😤」「Railsがいくら速くてもSQLが遅かったら遅くなるし😆」「開発が極まってくればいずれ生SQLを書くことになるんだし😆」「そうそう、SQLを書ける能力はいざというときにとっても必要」

その他SQL


つっつきボイス:「これは久しぶりに私には翻訳不可能と思った記事でした: データベースを無理やりバレエの用語になぞらえてみたそうですが、バレエの用語や素養が私にまったくないので面白みを理解できないという😅」「これは英語が読めてもわけわかんない🤣」「SQLの構文をバレエに絡めてるっぽい: これの次はこれみたいに順序が決まってるとか」「これはもうネタ記事☺️」


同記事より

だいぶ以前ですが、教育テレビでたまたま見かけたジュリアーノ・ペパリーニという男性バレリーナ(男性だからバレリーノ?)に思わず見入ってしまったのを思い出しました。バレエもダンスもわかりませんが、彼がくるくる回りながら登場しただけで、まるで星屑を振りまいてるような錯覚すら感じました。今は舞台演出家として大成功しているらしいのですが、彼自身のバレエ動画がネットにさっぱり見当たりません😢。

GIULIANO PEPARINI - SHOWREEL from giuliano peparini on Vimeo.

参考: Giuliano Peparini - Wikipedia -- イタリア語🇮🇹ですが

JavaScript

Trusted Web Activities(TWA)とKotlin/NativeとFlutter

今日行われたBPS社内勉強会での「DroidKaigi 2019」報告会でFlutterやKotlinなどとともにTWAの話題もあったので。

参考: DroidKaigi 2019
参考: PWA+TWAでウェブサイトを完全アプリ化、PWAサイトのGoogle Play登録も可能に | 海外SEO情報ブログ


つっつきボイス:「今日の勉強会所要で出席できなかったけどTWAの話題とか聞きたかったんですよね😅」「勉強会ではkazzさんがとても的確な質問をしてくれてましたよ: morimorihogeさんもTWAが気になってたって: DroidKaigiに行った人はぶっちゃけTWAはあんまりマークしてなかったそうですが😆」「だ、誰か書き起こしを😆」「今回YAMAHAのいいスピーカーフォンを録画に使ったので音声クリアだと思います😋」

「うぅ、この色合い↓、Windowsノートだと目がおかしくなりそう😵」「Macだともうちょっとオレンジっぽいような?」(覗き込んで)「あ〜これはかなり目に滲みる」「一応Adobe RGBに設定してるんだけど😅」「どことなくメルカリっぽい色合い?」「あ、スポンサーにいるし」


droidkaigi.jpより

「AndroidでJavaとか特にKotlin書いてる人たちにとっては、そこにWebエンジニアが入ってきて作業を分担できるのは結構エポックメイキングというか」「TWAやるのは主にJavaScripを書く人たちということになりますね」

「Kotlin勢としては、どちらかというとKotlin/Nativeの話題の方が気になってたようです」

参考: Kotlin/Native を Android/iOS アプリ開発に導入しよう - Qiita

「で社内のiOS勢が気にしてるのはマルチプラットフォームなGUIで、中でもFlutter」「勉強会の質疑応答では、TWAとKotlin/NativeとFlutterがさながら三すくみ的な様相を呈してました🤣」「そうそうそんな感じ🤣」「Kotlin勢はDartで書きたくない、とか🤣」「Dartは自分もちょっとね〜🤣」

Flutter: 標準ウィジェットをコピーして改造する

参考: Dart - Wikipedia
参考: Dart 2 | Dart -- 昨年2が出てたんですね


dartlang.orgより

「Kotlin/Nativeってだいぶ前からやってたはずだけど、今どのぐらい進んでるんだろう?」「勉強会の報告ではいろいろ策定中という話だったので、まだproductionで使うほどではないのかなとも思ったり」「ライブラリもまだ足りないらしいですね」

「まあWeb開発チームとしては、ガワネイティブで食えるようになったらそれはそれでデカいんじゃね?と思ったりして😆」「かもですね😆: 見た感じですが、TWAに乗るよりFlutterの方がよさそうなのかなとちょっと思ったり」「FlutterはReactとほぼ同じ感じで書けるからって強調してましたね」「Flutter勢からの勧誘😆」「でもFlutterはDartですよね😆」「Dart自体がJavaScriptの置き換えを目指してる言語だし、まあどうにかなるかななんて😆」

「この場合ガワネイティブってどう理解したらいいでしょうか?」「要するにWebViewが入ってるだけのアプリ」「ガワだけネイティブ🍩」「WebViewが立ち上がると後はWebViewの中でWebアプリケーションを動かすイメージ」「ちょっとElectron的な」「AndroidアプリなりiOSアプリの形になってないとアプリストアで配信できませんしね」

参考: WebViewとは - IT用語辞典


electronjs.orgより

「まあガワネイティブがReact Nativeと同じなの違うの?って聞かれたら違うんだけど😆: React NativeはJavaScriptでReact書いたらそれがネイティブアプリになるというヤツだし」「でもガワネイティブの方が歴史は古いという🕋」「ですよね😆」「今日の勉強会で途中からネイティブの意味がだんだんよくわからなくなってきました😆」「アプリケーションそのものはWebなんだけど、というか」「ガワネイティブでも、たとえばカメラ機能の部分だけ自分でちょこっと書いたりとかはするけど、他の部分はすべてWebViewにお任せしちゃう」


facebook.github.io/react-nativeより

「TWAだけど、ちょろいAndroidアプリみたいなのをささっと書けたらアプリの単価も取れたりして😆」「いいかも😆」「ほら、Webをアプリの形にできるとたとえばHomeボタンを無効にするとかできるし」「Backボタンとかもですね」「iOSアプリにもそういうモードがあって、それで業務用アプリとして使えるようにしたり」「その意味で、形だけでもネイティブアプリにできるのは大きいっすね😋」「それもあってガワネイティブには結構期待してる😘」

「TWAとPWAって同じじゃないけど割と一緒に出てくることが増えてるっぽいですね」「PWAはAndroidとかに限らない話ですが、TWAはGoogleがやってるストアで扱うための仕組みの方ですね🧐」

WebサイトをPWA(Progressive Web App)に変える簡単な手順(翻訳)

「PWAとかに投資するよりは...という気がちょっとしましたけど」「まあPWAに投資したいというより、RailsでもVue.jsでもいいのでちょろいアプリをささっとPWA化できたらいいよね、ぐらいの感じで」「ぶっちゃけそれ用のヘッダーをつければ基本的にPWAにできるし: それだけだとUIというかUXまでは最適化されないにしても」「あ〜なるほど、オフラインでは使えないにしても、アプリらしい体裁でホーム画面にボタン置くぐらいのことはヘッダというかマニフェストつけるだけでできると」「そうそう、それだけでやれるならうちらもアプリ作れますって言えるし😋」「そこまでラクにできるなら夢ありますね〜✨」「どってことないといえばそうなんだけど、PWAでWebアプリの単価上げるのやってみたい😍」「1.5倍ぐらいになったりして」

「ところで今回のDroidKaigi会場はBPSから近いのか」「発表者は2軒目のもうやんの隣とか言ってましたけど」「それって😆」「方向感覚がすべて食べ物屋ベース😆」

その他JavaScript


つっつきボイス:「mizchiさんのインタビューです」「mizchiさんがインタビューされてるのかと思ったらインタビューする側なのか」「フリーランスになったからこういう仕事もやってるのかな」

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

WebAuthnとFIDO


同サイトより


つっつきボイス:「はてブからです」「生体認証をWebブラウザでやるみたいな感じだった」「そういえばこういうのあったあった: 認証機器の種類を問わずこのフレームワークでやれるとかそういうの」

参考: 生体認証 - Wikipedia

「いつも思うけど、認証は難しいというか、どこまでやるべきか感が半端ない」「たしかに〜」「もちろん、これが漏れたら会社潰れるみたいなのはちゃんと守らないといけないけど、それ以前にリスクの分散も必要になってくるし」

「ところで何でWebAuthnのnが最後に?」「ググって見つかりやすいようにとか?」「mattnさんみたい😆」

追記(2019/02/27)

情報ありがとうございます🙇。

最新HTML/CSSコードスニペット


つっつきボイス:「管理画面ぐらいならこういうのでも別にいいかなと☺️」「社内だとデザインチーム向けの記事ですかね」「ランディングページ(LP)ぐらいだったらこういうのをふんだんに使ってもいいんじゃないかと😆」

「これとかもうスゴいな〜↓」「CSSアニメーションでやるとかスゴすぎ😳」「もう発想一発の世界😆」「これCSSだから文字を選択できるし、文字を移動しているのか書き換えているのかも一発でわかるし」

See the Pen
Flipping Out
by Jon Kantner (@jkantner)
on CodePen.

「思いつきですけど、近い将来にテキストはこんなふうに動的にするのが普通になったりするかなと: 重要な部分がプルプル震えて視認性をアップするとか」「まーなくもないかも?」「今の絵文字は色まで含んでるし、文字とはグリフとは何ぞやみたいなのもぶっ飛ばしつつあるというか☺️」

その他フロントエンド



charlesproxy.comより


つっつきボイス:「これも今日のDroidKaigi報告会で触れられてました」「BPSのアプリチームの人が言うには、Charlesは有料だけどできがいいので使ってるそうです」「ほうほう、普通にプロキシでデバッグできるサービス: この種のツールは昔からいろいろありますが、使いやすいのが一番😋」

「ちなみにこの種のツールはカスタム証明書が入れられるかどうかがポイント: それができないと話にならない」「あー」「でないとHTTPS通信をキャプチャしても暗号化を戻せないから読めない😆」

「モバイルアプリはWebみたいにブラウザのデバッガーが見えないからこういうのが必要なのかなと思ったのですが」「Webでも必要なときはありますね: ここまでしなければならないほどの状況はめったにありませんが」「おー」「HTTPレベルの通信であればブラウザのdevツールで見えます: たとえば(API触ったことはないけど)WebSocketなんかで、TCPで言うurgentフラグみたいなのを使って今バッファにあるものを吐き出させるなんてときに、それが正しく動作しているかどうかを確認するにはHTTPレベルのキャプチャでは無理で、パケットレベルでのキャプチャが必要になるでしょうね」「なるほど」

言語

最近のPython環境構築


つっつきボイス:「Rubyでrbenvやらbundlerやらでやってるのと同じようなことをPythonでもやってるんだなと思って」「まあpyenvとかanyenvあたりでやれそう」

[Rails 5] rbenvでRubyをインストールして新規Rails開発環境を準備する

「記事ではこのツールがいいとかAnacondaは古いとか書いてあってコメントでツッコミがあったりしてますね」「Anacondaというと自分はRed Hatのインストーラの方を思い出すし↓」「自分もそれ聞いたことあったし」「リンク先はGUIだけど、CUIのcurses的なAnacondaもあった気がする」「PythonのAnacondaは機械学習で入れがちなライブラリだったと思うんですが、jupyter notebookあたりと一緒にインストールしたときに入ってきた覚えがあります」

参考: 第13章 Anaconda を使用したインストール - Red Hat Customer Portal
参考: curses - Wikipedia

「ところで採用面接なんかでも最近Pythonかじってる人がだんだん増えてきた感」「自分も最近触るはめになってます😅」「流行りの言語でもあるし」「業務でどこまで使うかだけど🤔」

「Pythonでビジネスロジック書いてるって話はなぜかあまり聞かない」「そういえば」「機械学習とかAIは基本Pythonだろうけど、WebアプリとかになるとDjangoとかやってる話とか見聞きしてもそっちはあまり聞かないし」

「以前雑談してたときに聞いた話なんですが、以前Pythonを死ぬほど書いてた人が今はRubyがいいと言ってて、その理由がPythonは彼にとっては走らせてみないと挙動がわからないからということでした: Rubyは見ればだいたい挙動がわかるし、うんと小さいコードなら書いていきなりpushとかすることもたまにやったりするとも言ってました」「一般にはPythonの方がコードのブレが少ないって聞きますけど、意外ですね」「そうそう、Pythonの方が誰が書いても同じようなコードになるとか聞くし」

「自分の印象だと、Pythonはあんまりクラスのこととかうるさく言わない感じがしました」「オブジェクト指向という意味ではRubyの方が読みやすいとかそういうところがあるのかしら?」「自分のPythonの使い方がシェルスクリプトに毛の生えたようなものなので😅」

「何となくだけど、PythonはAtCoderみたいなプロコン的なところには向いてる気がちょっとした: 解くべき問題がはっきりしてて、かつ制限時間内に解くみたいな状況」「あー、一人でできる規模で、設計とかあまり関係ないところとか」

参考: AtCoder

「まあ今どきは大きいものについてはオブジェクト指向設計でやるのが当たり前ですが、オブジェクト指向設計の何がいいかというと、忘れられるところ🤣」「🤣」「自分が使ってるものの内部を特に気にせず使えるのがいいところ😋」

その他言語


https://twitter.com/zetamatta/status/1098230924024532993


つっつきボイス:「Matzから若い人へのアドバイス的な」「自分のやってきたことは再現性がないのであまり参考にならないけどみたいな」「上のツイートの前には以下がありました↓」「4番目は笑い取ろうとしてますね😆」「きっとそう😆」

「Rubyについては、たしかにタイミングの要素はとっても大きかったと思うし: みんながPHPで辟易してて、かつフレームワーク戦争の終息が見えなかった、まさにちょうどそのときにRailsが出現したので」「あの当時3つぐらいフレームワークが乱立してましたよね」「自分も3つぐらいしょうがなく使ってたし: 何でDAOをいくつも使わなきゃいけないんだとか😅」

「それがRails出現後はいっせいにRailsっぽいフレームワークに落ち着きましたし😆」「そうそう!何だよ結局Laravelかよって😆」「Railsが出現したことで仲の悪いPHPフレームワーク同士の結束が急に強まったというか😆」「今のPHPフレームワークならちょっと触ってみてもいいかな〜なんて😆」

「今のPHPは型ヒント付けられるし、PHPをstrictモードで使うなら割と頑張れる気がする」「お〜」「Rubyと違って引数の型を書ける」

参考: PHP: 関数の引数 - Manual -- 型宣言(タイプヒンティング)
参考: PHP: 新機能 - Manual -- strictモード

「D言語ちょっぴりやったことある😆」「言語の登場の早い遅いとかちょっとしたタイミングで運命が変わるってたしかにあるな〜: WebObjectsも早すぎる登場だった感あるし」「JavaScriptも一度滅びかけたのが完全に甦ったし、あのObjective-Cなんてのも当時滅びるしかないと思ってたらNeXTで全面採用されて今やiOSまでObjective-Cだったりするし😆」「ほんと先のことはわからん😆」「ジョブズがあのときその選択を取らなかったら今絶対残ってなかったろうし、その意味では彼がObjective-Cを復興させたといっても過言ではないし」

参考: WebObjects - Wikipedia
参考: Objective-C - Wikipedia

「そういえばObjective-Cの本って、すごく古い本とすごく新しい本のどっちかしかない🤣」「間がごっそり抜けてる🤣」「NeXTの時代とiOSの時代」「Objective-Cで最大にキモいのはCと完全コンパチなところ」「そうだった!」「Objective-CはC言語のプリプロセッサだから、実際にはCのコードを出力するし」「知らんかった〜」「Objective-Cの構文キモチワルイ🤢」「(指で角かっこ[ ]作って)これですよね?」「それそれ😆」「名前付き引数あるのに順序が決まってるとか」「なに〜😆」「それ名前付き引数なんでしょうか😆」「Cとの互換性を保つためなのでしょうがない🧐」

// Wikipediaより
val = [obj1 msg: [obj2 msg]];

その他

ATMも顔認識で


つっつきボイス:「そういえばセブン銀行も最近ATMの利用率が下がってるせいで手数料収入減ってツラいらしいし😆」「たしかに現金利用する機会減ってますし」

MacでEXE


つっつきボイス:「MacだとたまにEXEがzipに入ってても安心しきっちゃってたし」「してた〜」「いや安心はしないけどっ😆」

その他のその他

参考: 誰でも簡単に「縫合が必要なレベルの切り傷」に応急処置を施せる「ZipStitch」 - GIGAZINE


つっつきボイス:「この傷本物なんでしょうね(イタソー)」「プロレスラーが接着剤で応急処置してから病院に行くみたいなのよりはまともそう?」「これってインシュロック(結束バンド)みたいだし」「インシュロックだ!」「アウトドアで欲しいヤツでしょうね」

参考: よくあるインシュロックの誤使用例 |ヘラマンタイトン株式会社


参考: 実在しない人の顔写真を無限に生成できるWebサイトが公開。ディープラーニング技術を応用 - Engadget 日本版


つっつきボイス:「実在しないっていうのは統計的にそうだろうと言ってるだけなんでしょうね」「混ぜてるから実在しないとかそういう感じかと」「実在しないことを直接バリデーションできたらスゴいし😆」「悪魔の証明😈」

参考: 悪魔の証明 - Wikipedia

番外

ウミヘビ

宇宙2題


同サイトより


同サイトより


つっつきボイス:「1つめは大学のときの知り合いが趣味で作ってるはやぶさの軌道を追いかけるサイトなんですが、何年も前にNASAから(別のアプリですが)『これ使わせてくれ』って言われたという何だかスゴい人です」「ほぇ〜」

「2つ目はページのナビゲーションが見事だったので: とにかくページを下にスクロールしてみてください」「ほっほ〜☺️」


今回は以上です。

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

週刊Railsウォッチ(20190212)EnvoyとIstioに大注目、SQLQLとは、buildkite.comのCI、さよならItanium、PWA vs Androidほか

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

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

Rails公式ニュース

Ruby Weekly

Hacklines

Hacklines

WebOps Weekly

webops_weekly_banner

Publickey

publickey_banner_captured

DB Weekly

db_weekly_banner

Serverless Status

serverless_status_banner


CONTACT

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