メモるブログ

技術メモを書いていく所存

2018-05-27

記事紹介

Do we need dependency injection in Ruby?

  • RubyのテストでDI使うかexpect, allow({expect, allow}_any_instance_of)使うかの話
  • DI使ったほうが依存関係を明示できて良い(カナリア的な意味合いも含めて)
  • Arrange Act Assertパターンで実装できる
  • デバッグしやすい、などなど

4 (of many) awesome additions in Ruby 2.5.1 (and how to install it)

  • Ruby 2.5.1の新機能について
  • Structのキーワード引数は良さそう(だけどあんまりStruct使ったこと無いな…ほとんどクラスにしちゃう

The simple but powerful Ruby Struct

  • Structの使い方、使い所。OpenStructの話とか
  • スタブ用途だとrspecのdouble使っちゃうなー

APISnapshot built using Elm and Ruby on Rails is open source

Capybara inconsistent click behavior and flickering tests

  • CapybaraでJS実行するとJSのイニシャライゼーションが終わる前に処理が走ってしまう可能性があるのでいろいろとワークアラウンドがある
  • Poltergeistの場合はtrigger()
  • Seleniumの場合はexecute_script("document.querySelector('#new-task').click()”)

How to replace jQuery with Vue.js in Ruby on Rails apps

  • vue.js on railsの話
  • 普通にsprockets使っているだけでwebpackは未使用

Zero downtime migration from Enum to Single Table Inheritance

1. 新カラム作成
2. 新カラムへのデータ移行とmodule include + before_saveでnew columnにつっこむ
3. 旧カラムのignored_columns化とロジック移動
4. 旧カラムdrop
  • とても参考になる
  • ignored_columnsいいなー

2018-05-25

記事紹介

Put down that ENV; what you should know about ENV configuration

  • 環境変数は構造化されていないので複雑なデータを置けないしセキュリティ的にもあれなので止めたほうが良いのでは?という記事
  • コメント
    • 結局ファイルやデータストアからのロードが良い的なことが書いてあったような気がするけど、んーどうなんだろ。環境変数も結局ファイルから読み出すよね。あまり意図を理解できず…

Announcing Heroku CLI Autocomplete for Bash and Zsh

A gem for every occasion: 11 great Rails libraries we use on every project

  • favorite gem系の記事
  • コメント
    • 最近は認可系のgemとしてbankenを使っている。今のところ大きな問題ないし、シンプルな作りなのでとてもおすすめ

Faster web application deployments using Mina instead of Capistrano

  • デプロイツールMinaの紹介
  • めっちゃ速いらしい
  • 速い理由はSSHのコネクションを都度貼るのではなく、一回貼って、デプロイスクリプトbashスクリプトを作ってそれを実行しているから
  • 2回目以降のデプロイとかでめっちゃ速くなるっぽい(140sec => 5secとかそのレベル)

Progress bar in Rails

  • プログレスバーをderayed_jobを使って実装するprogress_barというgemの話
  • delayed_jobsにカラムを追加して、Job内でそのカラムを更新。ajaxでdelayed_jobsのステータスを取得できるAPIを叩き、それをもってステータスを更新する、というヤーツ

thoughtbot/suspenders

  • Railsのテンプレートになるアプリをががっと作ってくれるやつ
  • 今はApplication Templateで代替可能…?

2018-05-24

記事紹介

Controllers: the Rails way vs the Hanami way

  • RailsとHanamiの違い。Controller編
  • コメント
    • んーRailsのControllerでもRESTfulやビジネスロジックのモデル・サービスへの帰属をちゃんと考えればThin Controllerにできると思うけどなー。
    • コメントの議論が面白くて「フレームワークにかかわらずDeveloperの知識と経験でpoor codeは出てくるよ」みたいなのがまさにそうだと思った。
    • 大規模開発には確かに向いていない面もあるかもだけど小〜中規模だったり管理画面系であればめちゃくちゃ強みあると思うんだけどなー

A Dive into Ruby CVE-2017-17405: Identifying a Vulnerability in Ruby’s FTP Implementation

  • Ruby脆弱性の話(今は解消済み)
  • FTPでファイル名が”| {command}”だったりするとKernel.open(‘| {command}’)が実行されてクライアント側でコマンドが実行される危険性がある、ということらしい
  • コメント
    • open(‘| {command}’)の書き方を初めて知ったし、これIOクラスが返ってくるのか。readすれば標準出力取得できる。面白い

Dynamically setting Rails default_url_options in Heroku review apps

  • Heroku Review Appのdefault_url_optionsの設定方法について
  • HEROKU_APP_NAMEを使うと良いらしい
  • Review Appだとホスト名動的だから環境変数でやりくりする感じで、そのやりくりする環境変数がHEROKU_APP_NAMEということらしい

Phoenix is better but Rails is more popular

  • PhoenixRailsのいいとこ悪いとこ比較
  • コメント
    • 最後の良いRails, Phoenixエンジニアを探すのは難しい、というのがへぇーという感じだった。日本国内だと良いRailsエンジニアちょいちょい居そうだけどなー
    • Elixir, Phoenixエンジニアは確かに居なそうw

Building APIs with Rails + Protocol Buffers

  • RailsでProtocolBuffersを使う方法
  • protoファイル書く => protocでrubyコードをgenerate => generateされたRubyクラスを使ってprotobufにencode => それをsend_dataする

Timeout::Error "Timeout is Ruby's Most Dangerous API" —Mike Perham

2018-05-23

記事紹介

SHIFT Commerce's Journey: Deconstructing Monolithic Applications into Services

  • Heroku Kafkaを使ってモノリシックアプリをマイクロサービス化した話
  • 非同期でメッセージングして良い感じにするっぽい
  • コメント
    • あんまりマイクロサービスには肯定的ではない(管理がむずそう)んだがこういう段階的移行の話はとても興味がある
    • DataマイグレーションとActionEventが別なのがへぇーって感じだった

Caching in Ruby on Rails 5.2

  • Railsのキャッシュ方法(HTTPレベル、ページレベル、フラグメンテーションキャッシュなど)を色々と説明している記事。とてもよくまとまっている

8 Ruby Gems We're Loving in 2018

  • おすすめRubyGemの紹介
  • コメント
    • Bulletはtravel_toで代替できるのでは…?
    • Ransackとpryは超便利
    • ってかpry、gist integrationあるんだなー

その他

jimweirich/sorcerer

  • RipperスタイルASTからRubyのコードを吐き出すやつ。
  • コメント
    • power-assert関連の話でRubyもASTからコードを吐き出して良い感じに黒魔術的な事できないかなーと思って調べたら出てきた。

Tables Generator

  • 便利すぎた

2018-05-22

記事紹介

Use beautiful binary literals in Ruby

  • Rubyのバイナリリテラルの書き方の話
  • 0bxxxの書き方知らなかった…

29+ Ruby Gems For Building Command Line Programs That Boost Productivity

  • CLIツール書く時のgemをまとめたもの

Bad patterns in Ruby - using private attr_accessor

  • private attr_accessorはあんま良くないよ、という話
  • @xxx をそのまま使えば良い。@xxxはprivateからしかアクセスできないしスコープが明瞭になる。という趣旨

Rails Service Objects: A Comprehensive Guide

  • Railsのサービスクラスの使いどころと実装方法について
  • コメント
    • んーTwitterCreator的な内容であればlib/にTwitterクライアントをラッパーしたビジネスロジックによらないクラスとして実装するかなー
    • ドメインサービスであれば複数オブジェクトの更新とか複雑なフロー制御が必要なときに使いたい気がする
    • 複数オブジェクトの更新とかでも一方から他方においての依存関係が強い依存の場合はアソシエーション使って他方のクラスのメソッド呼び出しとかで何とかする場合もある。それが結構な連鎖になりそうだったらサービスにするし、まぁケースバイケース

2018-05-21

記事紹介

Hosting Static Website on Dokku with Free Cloudflare CDN and SSL

  • dokku使ってjekyllをホスティングする話。
  • Cloudflareを間に噛ませてSSL化しつつCDNでキャッシュして良い感じにホスティング
  • 一番安いVPSのプランでやっても2MB程度しか利用していないとか
  • コメント
    • dokku以前検証したなー。Herokuみたいに簡単にデプロイできるのは超便利

Implementing DSL in Ruby, part 1: CSV importer

  • CSVインポート処理をDSL使って実装する話
  • 実際の実装例が上げられていて、RubyDSLをどうやって実装するかを勉強するにはちょうど良い記事

How to Wrap Arbitrary Java Class in JRuby Gem?

gem紹介

piotrmurach/coinpare

  • 仮想通貨のトレーディングデータをCLIから取得できるgem
  • ttyつかっている。ttyいいなー

igorkasyanchuk/rails_db

  • phpmyadminRailsバージョンみたいな感じ
  • ちょっとした管理画面に使えそうだし設定もほぼ不要なので便利っぽい
  • excelのエクスポートを試すべく axlsx_railsをインストールしたがうまくいかず

2018-05-17

記事紹介

PAGINATING RUBY ON RAILS APPLICATIONS WITH PAGY

  • ページネーションライブラリのPagyの話
  • Kaminariやwill_paginateと比べてメモリ使用量が少ないらしい
  • https://github.com/ddnexus/pagy

Add beautiful code syntax highlighting to your Ruby on Rails app

Hot Module Reloading with Webpacker

How To Dramatically Improve Your Ruby Code With Fundamental OOP Principles

  • 凝集度的な話。同一クラスには同じドメインのメソッドを入れて、かつ他のクラスのことを知りすぎない(疎結合)というやーつ

Heroku Webhooks: Easier Accessibility, More Options

Updated Async Provisioning of Add-ons

Using HTTP Headers to Secure Your Site

  • CSPとかHSTSとかのセキュリティ系のHTTPヘッダの設定に関する記事
  • staticホスティング用のbuildpackがあるのかー
    • heroku/heroku-buildpack-static

Open Sourcing oclif, the CLI Framework that Powers Our CLIs

Open Sourcing oclif, the CLI Framework that Powers Our CLIs

  • タイトル書き間違いだと思ったら上のと全く同じだった
  • 同じくoclifの話で、Nodeを選択した理由は「みんなが使っていてエコシステム的に良い(意訳)」というのだった

Rails 5.2 fixes query caching in MySQL and PostgreSQL adapters

  • Rails 5.2だとキャッシュが効かなかった一部のクエリメソッドが効くようになったっぽい。exists?とか