読者です 読者をやめる 読者になる 読者になる

by shigemk2

当面は技術的なことしか書かない

ActiveRecord issues #tdtech

Treasure Data

ActiveRecord issues #tdtech

  • kamipo
  • activerecordについての話
  • rails issues team

http://blog.steveklabnik.com/posts/2012-07-05-how-can-i-contribute-to-ruby-on-rails-

  • Railsに2016年一番コミットした人なので、お前勝手にやれって言われた
  • Rails 5.0→5.1(Edge Rails)
  • Railsにコミットすごくしてる
  • Railsは3.2のこと − executeしないといけない

  • 綺麗なDSLを書いたら必要な情報が消えてしまう

  • SQL手書きしないとまともに書けない
  • schema dumperが使い物にならない
  • 余裕で直せるのに直せる人がいない
  • 困っている人がいる問題が直るのではなく直す気のある人がいる問題が直る

  • 直すしかない

  • 5.0を自分が使って不便じゃないようにする

  • MySQL対応直した

  • MySQLからいろいろな機能が出ているのにRailsが全く対応していない

  • custom primary key対応
  • テーブルオプション対応
  • date time round problem(保存すると時間がroundされる)対応
  • ストアドプロシージャがろくずっぽ使えない
  • プリペアドステートメントがろくずっぽ使えない
  • ONLY_FULL_GROUP_BY対応
  • sql_mode = amipo TRADITIONAL(厳格なSQL MODEで動かせる)

  • 200コミットくらい

  • MySQLとUnicodeの問題

  • 欧米では全然問題にならないユニコード
  • 寿司ビール問題 ハハパパ問題

    • 他のDBで起きない問題がMySQLでは普通に起こる
  • utf8mb4_general_ui

  • utf8mb4_unicode_ci
  • utf8mb4_unicode_520_ci
  • utf8mb4_bin(オールOK)

  • 欧米の人に分かるように説明するために理論武装

  • collating weight問題
  • MySQL 8.0.1 Release Notesが出ると日本人が死ぬ

  • active recordを直しても問題は終わらない

  • コアには入れづらいやつ
    • create with
    • retryable_find_or_create_by
    • find_or_create_byのcreateがUNIQUE制約に引っかかったらfindしなおす
  • いろいろ直している
    • 5.0には入らなかった
      • クエリのORDER BYが削られてCOUNT飛ばされてスロークエリになる問題を直した
      • 「ORマッパーでクエリを書き換えてほしくない派」
      • masterにはマージされた

Future

  • 実装は出しているのであとは入るかどうか
  • prepared statement

    • SQLモジュールをキーにしてキャッシュしている
  • has_manyを170倍早くする (3から4で100倍遅くなった)

まとめ

  • ActiveRecordの困っているところをひたすら直した
  • 直さないと直らない
    • 困っているって声を挙げても開発者は何もしてくれないことが多い
    • 直す気のあるひとがいる問題が直る