Upgrade to Pro — share decks privately, control downloads, hide ads and more …

歴史的経緯の説明 as code

FUJI Goro
September 27, 2018

歴史的経緯の説明 as code

"歴史的経緯の説明 as code" であるところの querly の紹介です。

Code Review Meetup #4 (#codereview4) の発表資料です。

FUJI Goro

September 27, 2018
Tweet

More Decks by FUJI Goro

Other Decks in Technology

Transcript

  1. ࣗݾ঺հ • id:gfx • Bit JouruneyͰKibelaΛ։ൃ͍ͯ͠Δ • Kibela: ίϥϘϨʔγϣϯπʔϧ •

    ࣾ಺ϒϩά & wiki ͱ͍͏SaaS • ࠷ۙͷؔ৺ࣄ͸ DX: Developer Experience
  2. KibelaͱQuerlyͷ෇͖߹͍ • querly.ymlͷinitial commit͸ 2016೥9݄ • ࠷ॳ͸࢖͍ॴ͕͍·͍ͪཧղͰ͖ͳ͔ͬͨ • ·͡Ίʹӡ༻͠͸͡Ίͨͷ͸ 2017೥6݄

    • Querly meetup ʹग़ͯΑ͏΍͘ཧղ͠͸͡ΊΔ • 2018೥ʹͳ͔ͬͯΒසൟʹϧʔϧΛߋ৽͢ΔΑ͏ʹ • 2೥ோΊͯ “ྺ࢙త(ry as code” ͱ͍͏ཧղʹ౸ୡͨ͠
  3. QuerlyͷϫʔΫϑϩʔ • `querly console [path…]` ͰconsoleΛ։͘ • `find $pattern` ͰύλʔϯϚον

    • querly.yml ʹύλʔϯͱܯࠂจΛ௥Ճ • bad pattern͕ͳ͍৔߹͸ɺ࣮ࡍʹιʔεʹॻ ͍ͯ֬ೝ͢Δ
  4. Querly DSL example (1) • foo • “foo” ͱ͍͏ϝιουݺͼग़͠ •

    Ҿ਺͸೚ҙ • ม਺΍จࣈྻɺγϯϘϧ͸ؚ·ͳ͍
  5. Querly DSL example (2) • _ • ೚ҙͷࣜʹϚον • foo(_)

    ͩͱʮ೚ҙͷҾ਺Λ1͚ͭͩ༩͑Δϝ ιουݺͼग़͠ʯͱ͍͏ҙຯ
  6. Querly DSL example (3) • … • ೚ҙͷҾ਺ϦετʹϚον • foo(…)

    ͸ foo ͱಉ͡ɺͨͩ͠ෳࡶͳύλʔ ϯΛॻ͘ͱ͖͸…ͷ໌͕ࣔඞཁͳ͜ͱ͕͋ Δ
  7. Querly DSL example (4) • foo(…){} • blockΛͱΔfooͷݺͼग़͠ʹϚον • …͸ඞਢ

    • foo(…)!{} • blockΛͱΒͳ͍fooͷݺͼग़͠ʹϚον • …͸ඞਢ
  8. Querly DSL examples (5) • [conditional], [!conditional] • `save [conditiona]`

    Ͱʮ#save Λ৚݅ࣜͰධ Ձ͍ͯ͠Δͱ͖ʯʹϚον • `save [!conditional]` Ͱʮ#save Λ৚݅ࣜͰ ධՁ͍ͯ͠ͳ͍ͱ͖ʯʹϚον
  9. ϝλϓϩͷ཈੍ - id: sample.metaprogramming_abuse pattern: - classify - constantize -

    eval - instance_values - safe_constantize message: "本当にメタプログラミングが必要か3回 考えてください。" ※ 3ճߟ͑ͯ΋୅Ҋ͕ͳ͍ͳΒ࢖ͬͯ΋Α͍ɻͦ͏͍͑͹ send ܥ΋͜͜ʹՃ͍͑ͨɻ
  10. migration ࣌ͷΧϥϜͷ࡟আ - id: kibela.remove_column pattern: - "remove_column" - "remove_reference"

    message: | カラムを削除する前に、該当カラムを使わないよう にした上で `ignore_colums` で無視するようにしてく ださい。 参考文献: Rails アプリでオンラインでカラムの削 除やリネームを行うには - eagletmt's blog http:// eagletmt.hateblo.jp/entry/2017/09/24/004709
  11. ARͷenumͷ࢖͍ํ - id: kibela.user_roles pattern: "User.roles[:symbol:]" message: "User.roles[:member] は多くの場合で必要 ありません。たとえばupdateやwhereではenum

    symbolを 使えます。" ※ ੲ͸ARͷenumͷ࢖͍ํ͕Θ͔ͬͯͳ͔ͬͨͷͰɻ࢖༻Օ ॴ͕ଟ͍͏͑ʹࣗಈͰஔ͖׵͑ΒΕΔ΄ͲͰ΋ͳ͍ͷͰա౉ ظ͸஫ҙשى͚ͩʹ͢Δ
  12. Raw SQL΁ͷ஫ҙשى - id: kibela.order_by_string pattern: - "order(:dstr:)" - "where(:dstr:)"

    - "find(:dstr:)" - "exists?(:dstr:)" message: "文字列によるSQL構築は本当に必要です か? SQL Injection を引き起こさないように気をつけ てください。"
  13. developmentͰͷΈଘࡏ͢Δ ϝιου΁ͷ஫ҙשى - id: kibela.yard_class_name pattern: "class_name()" message: "Class#class_name は

    yard gem による拡 張なのでproductionでは使えません。必要なのはビルト インメソッドの Class#name ではないですか。"
  14. graphql-ruby ͷϕετϓϥΫ ςΟε - id: kibela.connection_type_without_resolver pattern: "field(:symbol:, _.connection_type, ...,

    !resolve: _, ...)" message: "Relay connection に resolver が設定さ れていません。 AR::Relation に対するconnectionは resolver でソートを指定すべきです。” ※ʮ field(:notes, Note.connection_type) Ͱ resolver option ͕ͳ ͍ύλʔϯʯͱಡΉɻසൃ͢Δϛεͳ͕Β΋ͱ΋ͱsortͯ͋͠Δ ͜ͱ΋͋ΔͷͰgraphql-rubyຊମͰαϙʔτ͢΂͖Ͱ΋ͳ͍
  15. چػೳΛ࢒ͭͭ͠ҠߦΛଅ͢ - id: kibela.accessible_for pattern: "accessible_for(_)" message: "accessible_for(user) は古いメソッドで す。

    readable_by(user) または manageable_by(user) を使ってください" justification: “互換性の確認のためtestでは一部 残っています。余裕があれば新しいメソッドに書き換え てください" ※ Kibela ACL v1 ͔Β ACL v2 ʹҠߦ͢Δʹ͋ͨͬͯΞΫη εݖݶܥΛΨόͬͱม͑Δʹ͋ͨΓɺʮچϝιου͸ҰԠ࢒ ͕͢৽نίʔυͰ͸࢖༻ېࢭʯͱ͍͏͜ͱʹ͔ͨͬͨ͠
  16. FAQ