Ruby Weekly #368: 日本語サマリー
職場の Slack の #ruby 窓で Ruby Weekly メルマガが毎週配信されます。その中から面白そうなものをピックアップして、日本語で簡単なあらすじを書くようにしています。そのあらすじをここでまとまさせていただきます。くだけた日本語で失礼いたします。
Highlights
Aaron Patterson 先生が Ruby ヒープを可視化した話。ObjectSpace
でヒープを JSON で取得し、ChunkyPNG
で PNG 画像に落とした。
Ruby 2.5 の Object#yield_self
登場。Elixir の |>
演算子相当。筆者見解では、コードのフロー的には読みやすくなるが、ボイラープレートが多い。
@schneems 先生の外国人として RubyKaigi に参加する豆知識。
- 内容はテクニカルもの重視。スライドはコード大量。
- 日本語トークはイヤホンで同時通訳あり。
- トーク後の質疑応答は、司会が頑張って通訳。
- 英語トークよりも日本語トーク聞いたほうがいい。あとからアップロードされる動画には字幕・吹替がないから。
- 英語圏のいわゆる hallway track (参加者同士の交流)は基本ない。日本人は真っ赤の他人に話しかけたり質問したりするのに抵抗があるから。
- 日本のレストランが狭くて大人数で食事するのが難しい。10 人座れるのは居酒屋ぐらい。そして居酒屋はあまり美味くない。
- 食事の相手は日本語が喋れる人がいれば非常に助かる。美味い店は英語のできない店が多いから。
- Yelp はあるが、tabelog 使いましょう。
- コンビニ飯は意外と美味い。
日本人参加者へのお願い:外国人参加者に積極的に話しかけてください!
Thoughtbot 社員がテスト高速化のためにデバッグした話。
- spec_helper.rb 部分的コメントアウトで下記犯人が判明:
- 全テスト用の
config.before(:each)
に feature テストのセットアップが入ってた。type: :feature
などのメタタグで用途別に分けた。 - 全テスト
DatabaseCleaner.strategy = :truncation
になってた。メタタグで:truncation
:transaction
適用した。
- 全テスト用の
- FactoryGirl 部分的コメントアウトで
after(:create)
のレコード大量作成が判明。trait
に移し、再発防止として ActiveSupport Instrumentation でレコード作成数を見える化した。
Ruby 3x3 ベンチマークとして作られた NES エミュレーター OptCarrot の紹介。
Using Python's scikit-learn Machine Learning Library via PyCall
PyCall gem 経由で Python の scikit-learn 機械学習ライブラリーを Ruby から呼ぶ手順。
News
サポート終了済みの Rails 4.2 は、デグレ対応のため 4.2.10 リリース。
macOS High Sierra の fork 挙動が変わったため、Puma ワーカーが失敗する現象発覚。
未解消!
Tutorial
#eql?
#hash
のモンキーパッチで
- 異なるキーで同一値のハッシュ
- 同一キーで異なる値のハッシュ
- 時間限定キーのハッシュ
をインスタンス化した話。Fixnum
、String
、Symbol
は C レベルで塞がれているが、それ以外のオブジェクトはモンキーパッチできた。
良い子は真似しないでね。
Object#try
が有害だという主張。オブジェクトがヌルな場合でも、メソッドが定義されていない場合でも、エラー投げずにヌルを返し、正当なエラーまで隠滅してしまうから。
代替案:
- ヌルチェックを明示的な
if
文で。 - デメテル法則厳守。
- DB レベル
NOT NULL
でヌルを防ぐ。 - 暗黙の
to_s
などに頼らず、明示的に該当データ型に変換。 - ダックタイピング。
- ヌルオブジェクトパターン。
&.
は OK。ヌル以外のオブジェクトでメソッドが定義されていない場合はNoMethodError
を投げるから。
crontab + whenever gem で Sidekiq ジョブを定期的に起動する手順。
graphql gem で Rails アプリの GraphQL API を実装した話。
How To GraphQL チュートリアルも参考に。
Rails 5.1 で React のアイデア付箋 CRUD アプリの実装手順。
- Rails API 実装。
- Facebook 社の Create React App で新規 React アプリ生成。
IdeasContainer
IdeaForm
などコンポーネント実装。- NPM の axios ライブラリで API を叩く。
- rack-cors gem で CORS 制限解消。
- NPM の immutability-helper ライブラリで React 上データのイミュタブル性を保証しながら更新。
- React Developer Tools ブラウザー拡張で状態監視。
link_to
などにパスを指定する方法いろいろ。
edit_admin_exercise_path
edit_admin_exercise_path
ヘルパー[:edit, :admin, exercise]
配列{action: :edit, controller: "admin/exercises", id: exercise.id }
ハッシュ/admin/exercise/5/edit
文字列ハードコード
PDF 非同期生成の生成完了通知を ActionCable で実装した話。Michael Hartl 先生の Learn Enough Action Cable to Be Dangerous を参考にしていた。
Ruby 感情分析ツールまとめ。
- sentimental gem: 辞書ベース
- sentimentalizer gem: 機械学習ベース
- Ankusa gem: ベイズ分類器ベース
- Hoatzin gem: SVM 分類器ベース
- Classifier gem: SVM 分類器ベース
- Eluka gem: SVM 分類器ベース
- Tensorflow Ruby API