メモるブログ

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

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?とか

2018-05-16

記事紹介

Ruby’s New Exception Keyword Arguments

  • 概要
    • Ruby 2.6でKernel.systemとかInteger(xx)とかでexceptionのオプションを入れられる。falseの場合はエラー時にraiseしない
    • rescueすれば今までも何とかなったけどパフォーマンスの問題があった

Google Chrome 68 introduces HTTPS as the new security must-have

  • 概要
    • Google Chrome 68でhttpのサイトはNot Secureと表示される
    • HTTP/2とかの話もあるのでSSL化良い

6 Things to Share Before Outsourcing Your Rails App

  • 概要
    • Railsアプリをアウトソースする前にシェアすべきことを開発・非開発サイドにわけて解説
  • コメント
    • これ、Railsにかぎらずって感じだな。SIではよくアウトソースするのでこういうの大事。

To Sleep, Perchance to Dream: Rails Ruby Bench and Sleepy GC

Deprecating Paperclip

Functional Programming in Ruby — Closures

  • 概要
    • RubyでFPやる話。
  • コメント
    • 関数型馴染みがない…
    • callが[]や.()で呼べるの好き

The biggest Rails code smell you should avoid to keep your app healthy

  • 概要
    • コールバックはちょっと可読性悪いし不具合出しやすいので外に出すのはどうですか?という話
  • コメント
    • わかる。けど小さいうちはコールバックでも良いのでは?という感じもする
    • メール送信系とかは怖いのでフォームやサービスにラップして扱いたい

Domain Events over Active Record Callbacks

  • 概要
    • コールバックは毎回飛ぶので飛ばしたくないケースに出くわしたとき色々大変。
    • あとデータの整合性の話でafter_saveなのかafter_commitなのか、など色々と注意すべき点がある。
    • なのでイベントのpub/subでコールバックを外に出していい感じに分離しつつ柔軟に設定できるのではないか?という話

How To Remove Argument Order Dependency In Ruby

  • 概要
    • 3rd partyライブラリのイニシャライズのインターフェースがいけてなくてハッシュのargumentじゃなかったのでラッパー=Factoryの層を噛ませて良い感じにした話

How to mitigate DDoS using Rack::Attack

  • 概要
    • Rack::Attackの使い方

gem

baweaver/pry-macro

  • pryでマクロ(=コマンド列)をカジュアルに試せるやつ
  • これ良いかも!と思って試してみたけどうまく動かない…?

browserslist/browserslist-useragent-ruby

  • ユーザーエージェントがブラウザーなのか?とかoutdatedじゃないか?とかを調べるgem

RailsEventStore

  • イベントpub/subでActiveRecordのcallbackをなくそう、というモチベーションのgem
  • ドキュメント見てると blockで処理を囲ってlistenerとlistenするイベントを指定してcallするとコールバックする仕組みっぽい。これならserviceじゃなくてcontrollerに入れても良いかも。
  • コールバック忘れ問題はあるんだけど、subscribeしなかったらワーニングとかが出来るのであればより良さそう(仕組みとしてはできそう…?)