SWELL公式サイトへ 詳しくはこちら

Python設計ナビ 第1話

  • URLをコピーしました!
目次

Pythonコードが増えて迷子になったので、整理アドバイザーGUIを作ることにした

気づいたら、フォルダの中に Python ファイルが増えていた。
そんな経験、ありませんか?

Pythonを書き始めたころ、コードはとても素直でした。

ひとつのファイルに、上から順番に処理を書く。
CSVを読み込む。
少し加工する。
Excelに出力する。

それだけなら、特に迷うことはありません。

ところが、実務で使う処理が増えたり、過去に作ったコードを流用したり、AIに相談してコードを増やしたりしていると、Pythonファイルは驚くほどの勢いで増えていきます。

  • CSVを読むコード
  • Excel帳票を作るコード
  • Access(DB)につなぐコード
  • 画像を処理するコード
  • 現場ごとに少しずつルールの違う集計コード

AIのおかげで、「動くコード」は以前よりずっと早く手に入るようになりました。

これは、とてもありがたいことです。
以前なら何時間も調べていた処理が、数分で形になることもあります。

でも、その一方で、別の問題も出てきます。

動くコードは増えた。
でも、どこに何があるのかわからない。

どの処理がどこから使われているのかわからない。
似たような関数が別のファイルにもある。
昔作った便利処理を、どこに置いたか忘れてしまう。

最初は便利だったはずのコードたちが、いつの間にか「どこに何があるかわからない森」になっていきます。

どこかに道はあるはずなのに、木々が多すぎて見えない。
そんな状態です。

修正しようと思ったら、同じようなコピペ処理が3か所にある。
どのファイルが入口で、どのファイルが部品なのかわからない。
消していいファイルなのか、まだどこかで使っているファイルなのかわからない。

こうなると、コードを書く時間よりも、コードを探して迷子になっている時間のほうが長くなってしまいます。


🗺️ コード整理に必要なのは、気合いではなく「地図」

コードが増えて迷子になったとき、最初にやりたくなるのは整理です。

ファイル名を変える。
フォルダを分ける。
似た処理をまとめる。
共通化する。
クラスにする。

どれも大事な作業です。

でも、いきなり整理しようとすると、かなり危険です。

なぜなら、今のコードがどうつながっているのかを把握しないまま動かすと、思わぬところで壊れることがあるからです。

実務コードでは特にそうです。

  • CSVの行数が変わってしまう
  • Excel帳票の列がずれてしまう
  • 集計結果の合計値が微妙に変わる
  • AccessやDBとの連携部分で想定外のエラーが出る

見た目には少しきれいになったように見えても、出力される結果が変わってしまえば実務では使えません。

だから、コード整理で最初に必要なのは、気合いではありません。
まず必要なのは「地図」です。

どこに何があるのか。
どのファイルが何をしているのか。
どの処理がCSVを読んでいるのか。
どの処理がExcelを出力しているのか。
どこにパスや設定値が直接書かれているのか。

これらを見えるようにしてから、少しずつ整理していく。

そのために、この連載では小さなGUIツールを作っていきます。

名前は、Pythonコード整理Advisor GUI
この連載では、親しみを込めて 「整理Advisor」 と呼ぶことにします。


🤖 整理Advisorは、勝手にコードを書き換えない

整理Advisorは、いきなりあなたのコードを書き換えるツールではありません。

勝手にリファクタリングするものでもありません。
勝手にフォルダを移動するものでもありません。
勝手にファイル名を変えるものでもありません。

まずやることは、観測です。

今あるPythonファイルを読み、そこに何が書かれているのかを見えるようにします。

  • どのファイルにimportが多いのか
  • どのファイルに関数が多いのか
  • どのファイルにクラスがあるのか
  • CSV処理、Excel処理、DB連携、画像処理のどれに近いのか
  • ハードコードされたパスや設定値がないか

そうした情報を、GUI上で確認できるようにします。

この連載で大事にするのは、次の4つのサイクルです。

  • 【観測】 コードを読み、まず現在地を知る
  • 【助言】 処理の特徴から、配置や命名の候補を出す
  • 【地図】 ファイルや処理の関係を記録する
  • 【安全】 整理前後の結果を比較し、壊れていないことを確認する

実務コードは、きれいに書き直すためだけに整理するのではありません。
壊さず、見える化し、次に直せる形へ育てるために整理します。

この考え方を、整理Advisorという小さなGUIツールを作りながら身につけていきます。


💻 この連載で育てていく4つのGUI画面

整理Advisorは、最終的に4つのタブを持つ構成へ育てていく予定です。

1. コード解析タブ

まずは、Pythonファイルを読み込んで、その中にどんな要素があるのかを表示します。

たとえば、次のような情報です。

  • import一覧
  • 関数一覧
  • クラス一覧
  • よく使われている処理
  • ハードコード候補
  • ファイルの行数
  • コメント行の目安

最初から完璧な解析は目指しません。

まずは、ファイルを選ぶ。
中身を読む。
気になる単語や命令を数える。
それを画面に表示する。

このくらいの素朴なところから始めます。

いきなり難しいことをする必要はありません。
まずは、自分のコードを「外から眺める」ための画面を作ることが大事です。

2. Advisor診断タブ

次に、読み取った情報をもとに、そのスクリプトがどんな種類の処理なのかを判定していきます。

たとえば、CSVをよく読んでいるならCSV処理系。
Excelに出力しているなら帳票系。
AccessやDBにつないでいるならDB連携系。
画像ファイルを扱っているなら画像処理系。

そうした特徴を見ながら、整理Advisorが次のような提案を出します。

  • このファイルはCSV処理系かもしれません
  • data_processing フォルダに置くとよさそうです
  • 設定値をYAMLに分けられそうです
  • クラス名はこのようにすると役割が伝わりやすそうです
  • このファイルは少し大きくなっているので分割候補です

もちろん、Advisorの提案が絶対に正しいわけではありません。

最終判断は人間がします。

整理Advisorの役割は、答えを押しつけることではなく、判断材料を並べることです。

3. プロジェクト地図タブ

ファイル単体を見ているだけでは、プロジェクト全体の形は見えません。

そこで、プロジェクト地図タブでは、ファイル同士の関係や役割を記録できるようにしていきます。

たとえば、次のような情報です。

  • どのファイルが入口なのか
  • どのファイルが共通処理なのか
  • どのファイルが設定を読むのか
  • どのファイルがCSVを出力するのか
  • どの処理がどの順番で動くのか

最終的には、こうした情報をYAMLファイルとして記録できるようにします。

たとえば、project_map.yaml には、ファイルの役割や配置場所を書きます。
pipeline.yaml には、処理の流れを書きます。

コードだけを見て思い出すのではなく、プロジェクトの地図として残しておく。

これができると、数か月後に自分で見返したときにも、かなり助かります。

未来の自分に対する引き継ぎ資料にもなります。

4. リファクタリング安全確認タブ

コードを整理するとき、一番怖いのは「動いているように見えるけれど、結果が変わっている」ことです。

特に、実務で使うCSVやExcel帳票では、少しのズレが大きな問題になります。

行数が変わっていないか。
列数が変わっていないか。
主要キーの件数が変わっていないか。
金額や数量や回数などの合計値が変わっていないか。

こうした確認を、整理前と整理後で比較できるようにします。

リファクタリング安全確認タブでは、整理前の出力ファイルと整理後の出力ファイルを選び、差分を確認します。

たとえば、CSV同士を比較する。
Excel同士を比較する。
行数、列数、列名、主要キー、数値合計を比べる。

そして、問題がなければ、

安全に移行できそうです

と表示する。

差分があれば、

置き換える前に確認してください

と表示する。

整理Advisorは、コードをきれいにするためだけの道具ではありません。

実務コードを壊さずに育てるための道具です。


📈 整理Advisorの全体イメージ

この連載で作っていく流れを、簡単に図にすると次のようになります。

[対象Pythonファイル]
        ↓
    ( 観測 ) ──> コード解析タブ
        ↓
    ( 助言 ) ──> Advisor診断タブ
        ↓
    ( 地図 ) ──> プロジェクト地図タブ(YAML記録)
        ↓
    ( 安全 ) ──> リファクタリング安全確認タブ
        ↓
[壊さず整理された、未来へ続くPythonプロジェクト]

最初から、ここまで全部を作るわけではありません。

いきなり完成形を目指すと、ツール作り自体が迷子になります。

だから、少しずつ作ります。

まずは、Pythonファイルを選ぶだけ。
次に、画面に中身を表示する。
その次に、ファイル内の特徴を数える。
少しずつ、処理の種類を判定する。
さらに、置き場所や名前の候補を出す。
やがて、プロジェクトの地図を作る。
最後に、整理前後の出力を比較して、安全に移行できるか確認する。

このように、小さく作って、小さく育てます。


🔍 最初は素朴な方法でいい

コードを読む方法にも、いろいろあります。

でも、この連載では最初から難しい方法を使いません。

まずは、文字列検索や簡単な判定で、Pythonファイルの特徴を拾っていきます。

たとえば、ファイルの中に read_csv という文字があれば、CSVを読んでいそうだと考える。
to_excel という文字があれば、Excelに出力していそうだと考える。
connectcursor という文字があれば、DBと関係していそうだと考える。

もちろん、この方法は完璧ではありません。

コメントアウトされた処理まで拾ってしまうかもしれません。
文字列の中に書かれた説明文まで、本物の命令として数えてしまうかもしれません。
似た名前の関数を、同じものとして扱ってしまうかもしれません。

でも、最初から完璧である必要はありません。

まずは素朴に作ってみる。
動かしてみる。
そこで見えてきた限界に合わせて、道具を一段ずつ増やしていく。

この連載では、その順番を大切にします。

あれ?
このやり方だと、実務のコードを解析するときにちょっと危ないぞ……

そんな壁に実際にぶつかったところで、コードをより正確に読むための強力な切り札を登場させます。

最初から正解を知っている前提で進むのではなく、作りながら困り、困ったところで設計を一段上げていく。

整理Advisor自身も、少しずつ設計を学んでいくわけです。


📦 クラス設計は、「役割に名前をつけること」

この連載のもうひとつのテーマは、クラス設計です。

クラスというと、少し難しく感じるかもしれません。

でも、最初はこう考えるとわかりやすくなります。

クラスは、役割に名前をつける道具です。

  • ファイルを選ぶ役
  • ファイルを読む役
  • コードの特徴を数える役
  • 診断結果を作る役
  • 画面に表示する役
  • 安全確認をする役

こうした役割が1つの場所に混ざりすぎると、コードはまた迷子になります。

だから、整理Advisorを作りながら、処理の役割を少しずつ分けていきます。

最初は1つのファイルで作ってもかまいません。

でも、処理が増えてきたら、

これは画面の仕事だろうか?
これは分析の仕事だろうか?
これは診断の仕事だろうか?
これは設定として外に出したほうがよいだろうか?

と考えていきます。

この問いかけこそが、クラス設計の入口です。


🚀 この連載で目指すもの

この連載で目指すのは、ただ便利なGUIツールを作ることだけではありません。

自分のPythonコードを、少し離れたところから観察できるようになること。
処理の役割を分けて考えられるようになること。
どこを共通化し、どこを設定として外に出すか判断できるようになること。
そして、実務コードを壊さずに育てられるようになること。

これが目標です。

AIによって、コードを書く速度は大きく上がりました。

だからこそ、これから大事になるのは、増えすぎたコードをどう整理するかです。

動くコードを増やすだけではなく、あとから読める形にする。
自分だけでなく、未来の自分にも伝わる形にする。
壊さず、見える化し、次に直せる形へ育てる。

いきなり完璧な設計を目指す必要はありません。

最初は、Pythonファイルを選んで画面に表示するだけで十分です。

そこから一歩ずつ、読み取り、分類し、助言し、地図を作り、安全に整理できる形へ育てていきます。

一緒に、少しずつ道を切り開いていきましょう。

次回は、tkinter を使って、Pythonファイルを選んで画面に表示する小さなGUIの入口を作ります。


📅 Part 1:まず動くAnalyzerを作る編のロードマップ

  • 第1話: 迷子になったPythonコードに地図を作る構想(今回)
  • 第2話: tkinterでPythonファイルを選ぶGUIを作る
  • 第3話: 文字列検索でimport・def・classを拾ってみる
  • 第4話: read_csvやto_excelなど、処理の特徴を数えてみる
  • 第5話: コメントアウトまで命令として数えてしまったので、コードの読み方を一段上げる
  • 第6話: Pythonコードをより正確に読む方法へ進み、スクリプトを分類する
よかったらシェアしてね!
  • URLをコピーしました!
目次