外部勉強会で刺激を得て社内でリファクタリングのライブコーディング会を開催してみた

はじめに

業務としてがっつりリファクタリングをやるタイミングがあって、その内容が割と良くて、部署内で共有できたら面白いなと思っていました。

そのときに思い出したのが、前に参加した 大改修!PHPレガシーコードビフォーアフター という勉強会で、独立したコアレイヤーパターンをよく扱っていて「PHPの現場」でもおなじみの shin1x1 さんによる講演(?)です。
それは、PHPer Kaigiなどで使われている fortee というシステムをライブコーディングで独立したコアレイヤーパターンにリファクタリングしていくという内容でした。
色々な設計に関するアーキテクチャを勉強してもよくわからないという気持ちもあるなかで、実際にリアルタイムでリファクタリングしていく様を見るのはやり方等が良くわかり、とても勉強になりました。
同時に、アーキテクチャに関することだけでなく、PhpStormの使い方やひいてはMacの使い方など、得られるものは多岐に渡りました。

それを思い出し、同じようなことを部署でやって共有すれば面白いのではないかと思い、リファクタリングのライブコーディング会を開催してみました。

過去のツイートの有言実行でもあります。

目的

表立った目的として、

  • リファクタリングのやり方を知る。
  • 設計を知る。
  • PhpStormの操作を知る。(会社では主にPHPを使っています)
  • 良い例を知る。
  • 反面教師を知る。

などを掲げました。

それ以外にも裏目的として、どんどん野次を飛ばしてもらうことで自分自身が書き方やツールの使い方等で知らない部分を知ることができたらと目論んでいました。

内容

どんなコードをどのようにリファクタリングしたかは言えませんが、過去に業務で行ったリファクタリングを再現したライブコーディングを行いました。

まず、会の趣旨とリファクタリングの方針や進め方を会の冒頭で説明しました。
趣旨はもちろんとして、リファクタリングの方針をしっかり理解してもらえないとライブコーディングを理解できないだろうなということで、ここでは丁寧に説明しました。

全員が理解できたら、その後で実際にリファクタリングをライブコーディング形式で行いました。 「まず、ここの処理を丸っと移します」「そして、ここをこう書き換えます」「このとき、こうすると簡単に実現できます」などと喋りながらコーディングしていきました。
こうやっていると、「ここでコミットしたいですね」「そこはこうやったら早いですよ」などと野次(褒め言葉)も飛んでくるので、「わかるわかる」「なるほど」と言いながら思いながら進めます。
一方的な説明にはしたくなかったので、ときどきそういうことがあるのは良かったです。

再現リファクタリングとは言え、圧倒的に時間は足りません。
そこで、2/3ほどの時間が経つとライブコーディングは終え、3分クッキングの「そして完成したのがこちらになります」方式で、実際に再現元となったコードをGitHub上で説明しました。

そうして、ライブコーディングと完成版の説明を全て終えると、質疑応答と参加者によるこういうやり方もあるよといった紹介タイムになり、会は終了となりました。

やってみて

ペアプロやモブプロの経験はあるものの、ライブコーディングは初めてで、ペアプロとモブプロとはまた違った難しさがありました。
多少有意義な野次を入れていただき、モブプロのような感じもありましたが、基本的には1人で喋りながらコーディングするので、とても緊張しました。
特に、通るはずのテストが通らなかったときの公開デバッグは内心ドキドキでした。
また、これほどまでに喋りながらコーディングした経験もなく、無言にならないように注意しながら進めるのも大変でした。
ゲーム実況者ってすごいなとしみじみ感じた瞬間でした。

全体的に、主催としてはとても有意義なものになったと思います。
自分のおすすめのやり方を説明しているときに、「なるほど」や「すごい」といった言葉が出ているのを聞けて、とても満足しました。
逆に、野次などで知らなかった色々な技や手法を聞けて、自分自身も何かを得るという裏目的も達成し、満足でした。

反省点

わかりきってはいましたが、自分が今どこを見ていて何をしようと考えているのかをしっかりと参加者に伝えていかないと、PhpStorm上の激しいスクロールやファイル移動だけだと本当に何もわからないだろうなと思います。
なにかをやったあとに、事後説明で済ませたことも多く反省です。

また、せっかく少人数(そのときは6人ほど)でやっていたので、ただのライブコーディングではなく、途中途中でもう少し議論など見るだけではない何かがあっても良かったと思います。
野次もあったとは言え、それ自体は稀で、基本的にこちらが喋っているだけでした。
次回はもう少しやり方を工夫したいところです。

細かいことで言うと、会議室でプロジェクターで写して開催していて、最初はChromecastで投影していて見づらかったのですが、途中でHDMIに変えて見やすくなりました。
面倒だったのでやらなかったのですが、最初からそうするべきでした。
また、どうしても多少部屋を暗くせざるを得ず、暗いPhpStormと明るいGitHubの行き来が見てる側としては苦痛だった気がします。
そのため、心構えができるように、行き来しようとするたびに「移ります」「戻ります」と言うようにしていました。

とは言え、参加者も喜んでくれた(と信じている)ので、開催して良かったです。

おわりに

外部勉強会での経験を経て自分でもやりたいと思い、しかもちょうど良い題材があったために、開催を決意し上長に相談して開催しました。
初めての経験で多少緊張もしましたが、とても楽しかったです。
また良い題材があればより良い方法で再度開催しようと思います。