こんにちは、秋です。
昨日、私が開発しているニコ生コメントビューア「ちえちゃんと秋ちゃん」のv2.7.1をリリースしました。今回のアップデート、実は新機能はほとんどありません。やったことは「リファクタリング」と、それに続けて見つかった小さなバグの修正。それだけです。
それだけ、なのですが。
昨日は私にとって、ちょっと特別な一日になりました。この春から怒涛の勢いで育ってきた19,000行の巨大なファイルに、ようやくメスを入れた日だからです。今日はその話を、「リファクタリングって何?」という基本のところから、丁寧に書いてみたいと思います。プログラミングをしない方にも伝わるように書きますので、よかったらお付き合いください。
この記事のポイント
- リファクタリングとは「動きを変えずに中身を整理する」コードの片付けのこと
- 整理の効果は「修正が速く、安全に、怖くなくなる」という形ですぐ現れる
- 19,000行の巨大ファイルを分割したら、その日のうちにバグ修正で効果を実感
8分14秒でわかるまとめ動画
リファクタリングとは「部屋の片付け」です
リファクタリングという言葉、プログラミングの世界の外ではあまり聞かないですよね。
一言でいうと、「プログラムの動きは一切変えずに、中身だけを整理整頓すること」です。
想像してみてください。引っ越してきたばかりの仕事部屋で、猛烈に忙しい数ヶ月を過ごしたあとの机を。書類も工具も郵便物も、届いた順に全部ひとつの大きな机の上に積んである。不思議なもので、本人は「どこに何があるか」なんとなく分かるんです。だから仕事は回る。でも、探し物にかかる時間は少しずつ増えていって、たまに大事な書類が郵便物の山に紛れて事故が起きる。
私の「ちえちゃんと秋ちゃん」の中心ファイルが、まさにこの机でした。その名も [id].tsx。行数にして19,247行。コメントの受信、読み上げ、画面の表示、Androidネイティブとの連携、その全部がひとつのファイルに同居していました。
このアプリの歴史は、実はまだ浅いんです。前身のブラウザ拡張機能版「ちえちゃんと秋ちゃん」に取り掛かったのが今年の3月1日。Android版を作り始めたのは4月の頭。つまりわずか4ヶ月ほどで、机の上に19,000行が積み上がったことになります。それだけ夢中で走ってきた、ということでもあるのですが。
リファクタリングは、この机の上のものを「書類はこの棚」「工具はこの引き出し」と、あるべき場所に移す作業です。大事なのは、部屋の機能は何も変わらないこと。捨てるわけでも、新しい家具を買うわけでもない。ただ、置き場所を決めてあげるだけなんです。
なぜ「動いているのに」わざわざ触るのか
正直に言うと、怖かったんです。
このアプリは、配信を見ながらリアルタイムでコメントを読み上げるという性質上、この4ヶ月で細かい修正を何百と積み重ねてきました。「バックグラウンドで読み上げが止まる」「ギフトが二重に読まれる」…そのひとつひとつに、実際のログとにらめっこして原因を突き止めた歴史が詰まっています。
動いているコードを触れば、その歴史ごと壊してしまうかもしれない。だから「動いているものは触るな」という格言に甘えて、机の上に積み続けてきました。
でも、限界は静かにやってきます。ひとつの修正をするたびに、19,000行の中から該当箇所を探す時間。関係ないはずの場所を壊していないか確認する時間。それらが積もり積もって、「直したい」と思ってから「直せた」までの距離が、どんどん遠くなっていたんです。たった4ヶ月でこれなのだから、この先1年走り続けたらどうなってしまうんだろう。そう思ったのが、決断のきっかけでした。
昨日やったこと:4つの「引き出し」を作りました
今回の整理で、巨大ファイルからこんな引き出しを切り出しました。
- 画面に注入するスクリプト(約9,400行):コメントを受け取る心臓部
- 読み上げ機能との連絡係:Android側のサービスと話す窓口
- 共有の定数や設定値:アプリ全体で使う「決まりごと」
- 画面のデザイン定義:色や配置のカタログ
ポイントは、中身を1文字も書き換えずに、場所だけを移したことです。移す前と後でコードが完全に一致することを機械的に検証しながら進めました。片付けの最中に書類を書き換えてしまったら、それはもう片付けではなく改造ですからね。
結果、本体ファイルは19,247行から約9,200行へ。半分以下になりました。
効果は、その日のうちにやってきた
ここからが一番書きたかったことです。
リファクタリングを終えた直後の検証で、あるバグが見つかりました。特定の文字数のコメントの先頭に、投稿していないはずの「@」がくっついてしまう、という不思議な現象です。
以前の私なら、19,000行の海に潜って、コメント処理がどこにあるのかを探すところから始めていました。でも昨日は違いました。「コメントの解釈は、あの引き出しの中」と分かっている。調査はまっすぐ核心へ向かい、原因は過去のバグ修正の思わぬ副作用だと特定できて、修正はファイル1個の差し替えで完了しました。
片付けの効果って、派手なものではないんです。探し物が早く見つかる。作業が怖くなくなる。壊す範囲が小さくなる。地味だけど、開発のすべての瞬間に効いてくる。リファクタリングは、機能を何も足さないのに、未来の自分の作業を全部少しずつ速くしてくれるんです。まるで、未来の自分への贈り物みたいだなと思いました。
そしてもうひとつ。整理されたコードは、一緒に開発しているちえちゃんへの説明もぐっと楽にしてくれます。「この機能はこのファイル」と言えるのは、チーム開発では本当に大きいことなんです。
「いつかやろう」と思っている方へ
もしあなたが、散らかった何か(コードでも、部屋でも、仕事の資料でも)を前に「いつか片付けよう」と思い続けているなら、私から言えることはひとつだけです。
片付けは、捨てることでも作り直すことでもありません。今あるものの置き場所を決めてあげるだけ。それだけで、明日のあなたの探し物は確実に速くなります。
私の場合はためこんだ期間わずか4ヶ月でしたが、それでも「もっと早くやればよかった」と思いました。そして効果は、その日のうちに現れました。
最後に
今日は、昨日リリースしたv2.7.1にあわせて、リファクタリングという「コードの片付け」について書いてみました。
新機能ゼロのアップデートは、ユーザーさんから見れば地味かもしれません。でもこの整理のおかげで、これからの「ちえちゃんと秋ちゃん」は、バグ修正も新機能も、今までより速く安全にお届けできるようになります。片付けたその日に見つかった「@」のバグを即日修正できたのが、その何よりの証拠です。
3月に拡張機能版から始まって、まだ5ヶ月足らず。動いているものを触る怖さと、それでも整理する勇気。個人開発は、そんな小さな決断の積み重ねなんだなあと、しみじみ感じた一日でした。
それでは、また次の記事でお会いしましょう。秋でした。
コメント