2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
技術的負債を返し続ける取り組み ~ あなたのPHPのバージョンいくつですか?(全1記事)
リンクをコピー
記事をブックマーク
秋葉誠一氏:よろしくお願いします。「技術的負債を返し続ける取り組み ~ あなたのPHPのバージョンいくつですか? ~」を発表します。
まず簡単に自己紹介です。名前は秋葉といいます。好きな技術はもちろんPHPです。会社は株式会社ROXXっていうところで「back check」というリファレンスチェックのサービスを開発しています。
趣味はスノーボードとかサバイバルゲームなんですが、アロハシャツ集めるのも趣味で、本当は沖縄に行きたかったんですが、行けなかったのでお気に入りのアロハシャツを着て、今日は気分だけでも沖縄で、テンションを上げていこうと思います。
まず「あなたのPHPは?」ということで、みなさんお使いのPHP、バージョンはいくつでしょうか? 弊社の「back check」は、PHP8を使っています。きちんと7.2からバージョンを上げて、現在は8を使っています。
みなさんご存じでしょうか。PHPのサポート期限ですが、7.2に関してはもうすでに終わっています。7.3に関しても、今年で終了です。あと半年ぐらいしかないです。きちんとバージョンアップはできていますか?
ではバージョンアップをする予定はきちんとありますか? PHP以外にも更新されていないライブラリやフレームワークがありませんか? 直したい実装はありませんか? その他もろもろの技術的負債と言われるものに苦しんでいませんか?
技術的負債という言葉を今出しました。『アジャイルサムライ』という本からの引用で、説明を簡単にすると、「手抜き、ハック、重複などなど、開発速度と期日の名の下に、私たちは数々の狼藉をコードベースにコミットしている。技術的負債とは、そうした狼藉が時間と共に積み重なったものだ。
君のコードは、常に何かしらの負債を抱えている。負債がまったくないというのは、新しいことや、これまでとは違うことに取り組もうとしてないってことだ。かつては楽しくて気軽でシンプルだった作業が、辛く困難で複雑なものになって初めて、人は自らが技術的負債を抱えすぎてしまったことに気づくんだ。」
僕は「負債がまったくないというのは新しいことや、これまでとは違うことに取り組もうとしてないってことだ」の部分が個人的にはすごく好きです。技術的負債と言われるものは、さっき述べたほかにもいろいろあると思っています。
例えば更新されない古いバージョンの言語、フレームワーク、ライブラリを使い続ける。サポートされていないものを使い続けてるのも一種の負債かなと思っています。
あと、現実と実装が乖離しているのも負債かなと思います。コードを更新する時に無駄なコストがかかったり、伝えにくい機能ができてしまったり。
ほかにも、非推奨機能を使った実装ですね。言語、フレームワーク、ライブラリの非推奨機能を使うと、バージョンアップの時にすごく苦しみます。あの時は最高だと思った設計、みなさんもあると思います。これがベストだろうと思っても半年経過したら「うーん、ちょっとやめときゃよかったなあ」というのも往々にしてあると思います。
あとですね、過去の自分をしばきたいコード。1年前のコードを見ると「なんで俺こんなコード書いたんだ」みたいなのもけっこうあると思います。僕は非常にあります。いつか直すと思っているあのバグ。いつかは来ません。
技術的負債の説明で、先ほど僕がすごくいいなって思っている一節を紹介しました。「負債がまったくないというのは、新しいことや、これまでとは違うことに取り組もうとしてないってことだ」ということは、プロダクトが生き続ける限りは負債を負い続けるということなんです。負債を負うということは、返済する必要があるということです。我々エンジニアはいつも負債を負いながら、開発を続けるという非常に悲しい職業でございます。
こちらの課題に対して弊社の「back check」の開発チームが行っている技術課題リファインメントを紹介したいと思います。
前提条件ですが、「back check」はスクラム開発で開発を行っていて、継続的な開発であることと、スクラムに則った開発であることです。スプリントベロシティがきちんと計測できているかが、活用できる前提条件です。
これが達成できていなくても、ある程度Tipsは使えると思うので、「スクラムじゃないわ」とか言って「ちょっと聞くのやめる」ではなくて、最後まで聞いてもらえると幸いです。
その前に、簡単にリファインメントの説明をします。長いので全部は読まないんですが、実装に入る前にチームでその実装に対して透明度を上げていったり、不明の部分を洗い出したり、チケットを小さくしてより詳細にしていったり、優先順位をつけてどれを先にやったほうがいいのかを決めていったりという、スプリントのいわゆるセレモニーの中の一環の作業です。
これはスクラムの手法なんですが、これを転用して技術課題を解消していこうという取り組みが技術課題リファインメントです。
まず、技術課題リファインメントの「STEP1」は、課題を見つけましょう。自分たちのコード、課題は良くも悪くもいっぱいあると思います。良くないコードを見つけた時とか、なにかバージョンアップの情報があった時とか、DBを正規化したいなとか思った時に、まず自分で手をつけるのではなく、見つけた課題を技術課題バックログというかたちで起票します。ポイントとしては、新機能のバックログとは別に専用のバックログを作ります。
「STEP2」は、技術課題リファインメントです。リファインメントしましょう。内容の詳細化、分割、優先順位を決めて見積もりをしましょう。この時に、一定の誰か、例えば起票した人とかがやるのではなくて、誰がやってもいいように、きちんとここでみんなにこういう課題がありましたと共有します。
優先順位を決めるのは、個人的にすごく大事だと思っています。チームとして今何を大切にしたいか。言語のバージョンアップを上げることに注力するのか、ほかのことに注力するのか、UIを直すことに注力するのか。チームとして何を大切にするかを、きちんと合意形成して決めていくことが大事だと思います。
「STEP3」は実施ですね。スプリントのプランニングの際に、ベロシティポイントを一定の割合で技術課題に割り当てます。ベロシティポイントを簡単に説明すると、ステアのワンスプリントで行うチームが提供できる価値のポイントです。だいたいこれぐらいはできるよねという要領ですね。その中で、一定の割合で技術課題をこれだけやろうとポイントを割り当てます。
ここで大事なのが、新規開発とは別軸の優先順位です。新規開発は、もちろん事業をやるうえで必ず起こりますし、優先順位は高いものが多いと思います。その中で、技術課題はどうしても優先順位が下がっていくので、別軸で優先順位を決めることが大切です。
先ほども言ったんですが、「起票した人間がやる」ではなくて、やる人は誰でもいいんです。「一定の人がやる」ではなく、技術をチーム内に広めていくために誰でもできる状況になるのが理想です。
弊社の場合、だいたいベロシティの10パーセントを割り当てています。プラス、手が空いたら優先的にやるかたちで技術課題を解消しています。
次ですね、これは大事です。繰り返しましょう。継続して習慣化することが大事です。1回だけでは何も変わりません。何回も何回も繰り返していくことで、やっと成果が見えてくる。そういうものだと思います。プロダクトが開発され続ける限りは、負債は溜まっていきます。継続的に、早い段階での負債の返済を僕はおすすめします。
技術課題リファインメントの利点をいくつかお話しします。新規の開発とは別軸の優先順位をつけることによって、後回しが避けられます。負債を可視化して、誰でも見える状況にして、みんなで優先順位をつけられます。
誰か特定の人がいつもやっている、この人がいつもバージョンアップしてくれている、ライブラリを更新してくれているという状況を避けられます。その人がいなくなっても、きちんとみんなで回していくことが重要です。
「いつかやる」というあいまいなものではなくて、仕組みでカバーするのがエンジニアの本質として最も大事なものだと思います。
時間もそろそろなので、まとめていきたいと思います。
継続的に開発するうえで、技術的負債は必ず発生します。それは受け入れる必要があると個人的には思います。負債は早い段階で返済しないと、どんどんつらくなります。まず、負債を可視化することが重要です。新機能の開発とは別軸の優先順位をつけましょう。負債の返済を開発のサイクルに組み込んで習慣化します。あとは継続あるのみで続けていきましょう。
PHPのバージョンを上げるのは、あなたかもしれません。みなさん、がんばってやっていきましょう。
最後に、弊社はROXX開発メンバーを今すごく募集しています。気になる方がいれば、私にDMでもいいですし、「Speaker Deck」に開発の採用資料があるので検索してみてください。
本当は沖縄に行きたかったんですが行けなかったので、来年はリベンジしたいです。ご清聴ありがとうございました。
関連タグ:
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.12
今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05