見出し画像

リファクタリング 第3回:『想像を実現するリファクタリング 〜RPGの世界から現実へ〜』

連載企画:AIと学ぶコードの進化論(全3回)

第1回:『想像から始めるコード設計 〜RPGに学ぶ設計思想〜』
第2回:『妄想を形にするクラス設計 〜RPGの世界から実装へ〜』
第3回:『想像を実現するリファクタリング 〜RPGの世界から現実へ〜』

***

「生成AIを使ってGASで在庫管理ツールを作ったはいいものの...」

動くコードは書けるようになった。でも、それって本当に"良い"コードなのか? 非エンジニアの私が、生成AIと二人三脚で作ったコードを、さらに良いものに進化させる物語。

RPGの世界を想像しながら、オブジェクト指向を学び、実践するまでの3部作。 コードの改善って、案外RPGの世界に似ているかもしれない...。

■ 関連する過去記事

  • 在庫会議資料を1クリックで作成!経理マン奮闘記

  • このツールを題材に、コード改善の旅が始まる

プロローグ:

(コーヒーを淹れながら)
RPGから学んだ設計思想、実際のコードに適用した経験。
いよいよ、在庫管理システムの最終的なリファクタリングに挑む時が来た。

『準備はできたかしら?』

「ええ、クラスの設計図も描けました。あとは...」

第一章:リファクタリング、開始

// 改修前:巨大な単一ファンクション
function importInventoryData() {
  // 500行以上の混沌としたコード
}

// 改修後:整理された構造
class InventoryManager {
  constructor() {
    this.dataLoader = new DataLoader();      // データ読み込み担当
    this.statusChecker = new StatusChecker(); // ステータス判定担当
    this.sheetHandler = new SheetHandler();   // シート操作担当
  }

  // 心の声:
  // 「RPGでいう戦士、魔法使い、僧侶みたいに」
  // 「それぞれの役割が明確になった」
}

第二章:継承の力を借りて

// 商品の基本クラス(RPGでいうモンスターの基本クラス)
class InventoryItem {
  constructor(code, name) {
    this.code = code;
    this.name = name;
  }
}

// 冷凍食品クラス(特殊な能力を持つモンスターのように)
class FrozenFood extends InventoryItem {
  checkTemperature() {
    // 温度管理処理
  }
}

// 心の声:
// 「新商品カテゴリが増えても」
// 「基本クラスを継承するだけでOK!」

第三章:変化の結果

『コードはどう変わったかしら?』

  • 機能追加が簡単に

    • 新商品カテゴリは継承で対応

    • 特殊な管理機能はインターフェースで追加

  • バグ修正が容易に

    • エラーの原因が特定しやすい

    • テストも書きやすくなった

  • チーム開発がスムーズに

    • コードの役割が明確

    • 他のメンバーも理解しやすい

// 心の声:
// 「コードが、まるでRPGの世界のように整然と...」

エピローグ:新たな冒険の始まり

(最後のコーヒーを飲みながら)
在庫管理システムは、今や誰でも機能を追加できる、拡張性の高いシステムに生まれ変わった。

『素晴らしい成長ぶりね。でも、これで終わりじゃないでしょう?』

「ええ、経理部の他のシステムも、同じように改善できそうな気がしてきました」

新しい技を身につけた冒険者は、次なる迷宮へと旅立つ準備を始めていた...。

■ コード改善の成果

  • 機能追加の工数が1/3に

  • バグ修正時間が半減

  • チームメンバーからの質問も激減

  • 新機能の提案が活発に

■ RPGから学んだ教訓

  • 基本設計は共通化(モンスターの基本クラス)

  • 特殊能力は個別に(モンスター固有の技)

  • 役割分担を明確に(職業による専門化)

  • 拡張性を重視(新モンスター追加のように)

■ 今後の展望

  • 他システムへの応用

  • チーム全体のコーディング標準化

  • AIとの更なる協業可能性

次なる冒険へ...。

プログラマーとしての私の転機

『さて、この経験から何を学んだかしら?』

(コーヒーを新しく淹れながら)
実は、この一連のリファクタリングで、自分の中の大きな変化に気がついた。

// 昔の私
if (コードが動いたら) {
    それで満足();
    次の開発へ();
}

// 今の私
if (コードが動いたら) {
    いったん完成();
    後で見直す();   // New!
    記事にまとめる(); // Double New!
}

// 心の声:
// 「コードを書くだけが、プログラミングじゃないんだ」
// 「振り返りと改善が、次への成長になる」

AIとRPGの世界から学んだのは、プログラミングの技術だけじゃない。
「動くコード」と「良いコード」の違い、
そして、その架け橋となる「リファクタリング」の大切さ。

これからは、新しいコードを書くだけでなく、
過去のコードを見直し、改善する習慣をつけよう。

その過程で気づいたことをnoteに書き留めていけば、 それはまた新たな学びのネタになる。

『素敵な気づきね。じゃあ、次は何のコードを見直してみる?』

(にやりと笑って)
さあ、次なる リファクタリング クエスト の始まりです!

#技術ブログ #コード品質 #リファクタリング #プログラミング学習 #振り返り大事 #ChatGPT #非エンジニアのコード作成

いいなと思ったら応援しよう!