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

歴史的経緯の説明 as code

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for FUJI Goro FUJI Goro
September 27, 2018

歴史的経緯の説明 as code

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

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

Avatar for FUJI Goro

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