この記事は、GMOペパボエンジニア Advent Calendar 2020 Adventarの18日目の記事です!昨日は はやぴさんの記事でRails Girls Kagoshimaでした!
鹿児島勢いあって良いですね..!!
Rails Girls Kagoshimaに興味ある方は開催の情報がSNSでも共有されると思うので、是非Twitterアカウントをフォローしてください~!
Rails Girls Kagoshima (@railsgirls_kago) | Twitter
はじめに
GMOペパボ株式会社で ソフトウェア エンジニアをしています! enduです。
はてなのidはkikuchi1201ですが、本名はenduです!よろしくお願いしますっ!!
ペパボでは普段「グーペ」というHPを簡単に作成できるサービスのサーバーサイドを担当しています!
今回は社内でリファクタリング読書会を始めてみた経緯や、進め方、学んだ事についてご紹介しようと思います。
社内でリファクタリング読書会を始めた経緯について
去年、社内で「Laravel読書会」という「PHPフレームワーク Laravel Webアプリケーション開発」を元に読書会を開催していました。
ペパボはオフィスが東京、福岡、鹿児島と3拠点あります。
読書会を開く際は昼休みにGoogleMeetをつないで福岡拠点のエンジニアさんとオンラインで繋いで読書会を進めていました。
この読書会ではLaravelの関心がある方や、普段PHPを書いている方が参加されてました。参加メンバー同士で議論をして行く内に「既存サービスでコードが複雑になっている箇所をどのようにリファクタリングしていくか?」について関心が高いという事に気づいて、今年の1月から「リファクタリング 既存のコードを安全に改善する(第2版)」を元に読書会を始めました。
「関心が高い」と書いたのですがペパボでは10年以上稼働しているサービスが多くあり、グーペもその内の1つの含まれています。
またLaravel読書会に参加されているメンバーの中にも同じように10年以上稼働してるサービスの保守運用を担当している方が参加されており、リファクタリングを行う知識の方が業務でプログラミング言語問わず、広範囲的に有用であると思い今年からはリファクタリング読書会を始める経緯となりました。
また僕自身も去年頃から「現場で役立つシステム設計の原則」を読んで設計やリファクタリングについて関心があったのも始めようと思ったきっかけの1つです。
リファクタリング読書会の進め方について
読書会は昼休みの時間内で行っています。
当初のリファクタリング読書会の進め方は以下の3つのステップで進めていました。
- (1)事前にページ範囲を決めて予習してくる(予習パート)
- (2)読んできた範囲について各自で社内ドキュメント(scrapbox)にメモをする
- (3)当日はそのメモなどを元に参加メンバーで議論し内容の理解を深める (議論パート)
この方法で進めていたのですが、これだと事前の予習をしてくる負担が大きい場合、議論に入ってこれず読書会に参加しずらい課題がありました。
この課題については、読書会のメンバーだった @mao_sumさん、@mochi5o_maki さん に相談し、「予習は行わずその場で参加して対象範囲のページを決めて読んで、その後に議論を行う」進め方に変更しました。
なので、進め方として以下のステップの変更になります。
- (1)当日に読む範囲を決める
- (2)時間を決めてその時間までに各自読む(読書パート)
- (3)読んだ範囲を議論する(議論パート)
今振り返ってみるとオンライン出社に変わって時間ができると思いきや、出勤状況も変わり予習時間の確保が難しかったのでこの変更は凄い良かったと思います!
読書会を継続していく中で一番大事なのが、参加者のハードルをいかに下げるかが重要だと思っています。よって予習が必要なくなった事でハードルが下がり参加しやすくなったと思います。
リファクタリング読書会を通じて学んだ事
去年の今頃でしたらリファクタリングの知識が曖昧で「複雑になっているコードを綺麗にする」程度の理解だったと思います...。
それがこの本の中では「リファクタリングとは何か?」からの定義が始まり、「なぜ重複しているコードが変更し辛いのか?」をしっかり言語化されています。
後半なると具体的な手法について紹介されるのですが
リファクタリングとは外部の振る舞いを保ったままで、内部の構造を改善していく作業を指します。非常に統制された方法ではコードを洗練していくため、バグの入りこむ余地は最小化されます。リファクタリングを行えば、以前に書いたコードの設計が向上することになります。
このリファクタリング読書会の読み方としては1章の「リファクタリングー最初の例」で、この本で学ぶ具体的なリファクタリングの手法を使って、JavaScriptを使ってサンプルコードで解説をしています。
いきなり完成形を紹介されるので最初は「ん...?」みたいに置いてきぼりをくらうのですが、2章「リファクタリング原則」からなぜリファクタリングを行うかの背景について説明が始まります。
最初は抽象度が高い話になってくるのですが、3章「コードの不吉な臭い」からより具体的な話になり、6章「リファクタリングはじめの一歩」からより一歩踏み込んだ「関数/クラスの抽象」、「変数のカプセル化」など事例を紹介しながら話が進んでいます。
(本当はもっといっぱいあるのですが、割愛しますっ..!気になる方は是非読んでください)
ここまでは本の内容を読んで学んでいるフェーズです。
社内のリファクタリング読書会では議論パートになると、本で学んだ内容を自分の担当業務と照らし合わせて事例を紹介したり、「このパターンではないけど、別の方法で対応しているよ!」といった話が聞けます。
これが個人的に素晴らしく良いなと思っています。
本のサンプルコードだとそれを業務で利用した場合のイメージがしずらい問題があるのですが、読書会に参加されているメンバーが実際にあった事例を紹介する事でイメージが湧きやすく理解が深まります。
また普段業務で働いていると自分が担当しているサービスの方と話す機会が中々ないので、こういった読書会で話を聞くと他のサービスの運用事例が聞けて情報共有にもなり良いと思いました。
まとめ
社内でリファクタリング読書会を始めた経緯や進め方について紹介しました!
リファクタリングに関してどこから手をつけた方が良いのか?具体的に何をすれば良いのか?について悩んでいる方については是非読んで欲しい一冊となっています。
サンプルコードはJavaScriptで紹介してますが、言語問わずリファクタリングの手法については有効だと思うので、気になったら読んで見てください!
今日はそんな感じです!
2020年も残り数日ですが健康に気をつけて頑張って行こうと思います!
明日の GMOペパボエンジニア Advent Calendar 2020の担当は harasho さんです!