Phoenix のコントローラでは render(conn, "index.html", foos: foos) のように render/3 を呼ぶことでビューをレンダリングすることができる。もろもろの事情があって、この処理の途中にフックして引数の値を書き換えてみたいと思った。 というわけで、コントローラで render/3 を呼んだら何がどうなって HTML がレンダリングされるのか追いかけてみた。 ネタバレ:この記事を読んで得られること この記事では、生成されたコードで使われているもののどこで定義されているか分からない関数から始まって、マクロで生成された関数定義に辿り着くまでを順を追って書いていきます。マクロを駆使した Elixir のコードにおいて、関数がどこで定義されているかを探す方法や考え方のヒントを得られる……はずです。分かりづらい箇所があればお気軽にコメントをください。 準備