コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Kaigi on Rails 2021 で『before_actionとのつらくならない付き合い方』という内容で登壇してきました。

Kaigi on Rails 2021 の2日目にリモート登壇してきました。

発表したスライド

speakerdeck.com

伝えたかったこと

  • before_actionインスタンス変数のセットは本当にいいことがないのでやめよう
  • before_action の使い方がわからなくなったら横断的関心事かどうかで考えよう

補遺編

今回プロポーザルを作ろうと思った動機

今回出してみようかなーと思ったのは、大きく2つの動機があった

1つ目は過去の投稿「Railsのbefore_actionで通常のインスタンス変数をセットするのは、本当にそれが最適解か考えてからやってほしい - コード日進月歩」。こちらはもともとコードレビュー時にbefore_actionでインスタンス変数をセットするコードが出てきたときに自分が返した言葉を改めて言語化したものだった。

2つ目はjokerさんの以下のツイート

このようにみんな思うことが多いが、存外に語られていることが少ないので、もし発表できればbefore_actionのセットを盲信的にする人を減らせるのではなかろうかと思いプロポーザルを送った。

before_actionとscaffold

今回発表するにあたり、そもそもなぜscaffoldはbefore_actionインスタンス変数をセットするのかという謎を追いかけた。

ただこちらに関してはbefore_actionの前身であるbefore_filterの内容を漁ってみたが、糸口になる記述がつかめなかった。またscaffoldという概念自体はRails1.x系のときからある機能なので、GitHubのログからもなかなか辿れるものがなく、調査としてはそこで断念しました。。

before_actionと横断的関心事

もともとbefore_actionのサンプルとしてインスタンス変数が位置している側面があったので、もしそれを推奨しない話をするのであれば何に使うのがいいのか、自分なりの考えもセットで喋らないとただの「before_action禁止したいだけの話」にも聞こえかねないので、セットでオススメの思考法を合わせて届けたい思いがあった。

個々人の感覚として、before_actionを使う部分の話は多く合ったがそれを拾いあわせていくとAOPの考えである「横断的関心事」がハマるなと思い資料としてまとめました。

なお、自分が横断的関心事というフレーズにであったのはBEAR.Sundayの設計思想の説明のときで、その説明が自分の思考のパラダイムシフトだったので資料内にも参考資料として盛り込んだ。ご興味のある方はPHPer Kaigi 2018の動画があるのでそちらをご参考のこと。

登壇後記 & Kaigi on Rails2日目感想

  • 実は登場するコードの最終修正版までのコミットをしたリポジトリがひっそりとある(ただ途中で仕様を変えたのでちょっと違うので発表内ではカット)
    • 話の途中でも紹介したんですが、ベースコードはパーフェクト Ruby on Railsを参考にしながら組みました
    • 本当はdiffへのリンクをみてより初学者向けにしたかったんですが仕様を変えてしまった兼ね合いで断念
  • 2日目の登壇直前まで地味に微調整をしていた結果、他の方の発表を気合い入れて見れなかったのでそこがかなり残念。
  • 発表中に割と盛り上がった感じの反応を頂けてよかった
    • 横断的関心事というフレーズ、あんまり知らない人いたみたいで盛り込んでよかった
    • コード的にそもそも…みたいな話もあり、培養されたツラいコードなのでそこらへんは許してほしいというお気持ち
  • 登壇後のQAブースでbefore_actionやコールバック辛いよね談義をしたりしてました。
  • QA終了後READYFORさんのブースで色々とお話をさせてもらった。
    • 最近の仕事はRailsをつかってうまく新規開発させやすく、捨てやすくするかが課題なので色々とお話聞けてよかったです。
    • そのため割と後半の発表も見逃しがちになってしまった…配信に期待。
  • reBakoやSpatialChatの体験はすごくよかったです。懇親会でスタッフの皆様の大変だった話も色々聞くことで感謝の念が強くなりました、本当にお疲れさまでした。
  • 懇親会で「そもそもscaffoldが微妙であればPRを出してみれば?」という話を頂いたので、ちょっとSNSとしてのGitHubに慣れて出してみようかなというのがプチ課題としてできたので無理ない程度にやってみようと思っている。
  • チームの課題系ネタもあるが、日々のコードレビューで出てくるノウハウ的なネタもあるので、来年も何か集積していればCFP出したいなーと思いました。もしくはスタッフ的なお手手伝い。

関連リンク