内製ツールの製作日記

事務所で使う、開発中の内製ツールでやきもきな最近です。(と言っても2週間ぐらいです)
pythonで作っているもので、設計後の部品の情報を、取引先が用意した部品表に合わせたフォーマットにする物で、と言ってもぶっちゃけテキストな情報をExcelの列の並びに直す程度の話です。


程度の話だったのですが(試作当初の話)、確かに中身の処理はたいしたことのないといえばそ〜なりますが

  • GUIベースでドラッグアンドドロップでやるとか
  • 中身の分解が意外と厄介だったりとか
  • 取引先別で列の並びを変える必要が有るのでパターンを幾つか用意とか
  • 歯抜けの行に、使わない行とする文字を入れるとか

ソフトウェアってのはどんどん欲張りなものになっていきますね。アップデートは大変だけど正しい行い。
とりあえず要件は達成してきているので、あとは正しく動くのかのテストの日々でしょうけど。(結局ここが一番大事)

悩んでる、悩んでいた事をメモ

  • エラー処理で、バラバラにしたモジュールからエラーの情報をどの様にひとつにまとめるか
    • モジュールは実行中ならimportするだけで共有できそう。

Pythonのモジュールインポートのしくみ

    • loggingモジュールを参考にして、モジュール内でクラスをインスタンス化して、モジュールから呼び出す方法で試してる。

16.6. logging — Python 用ロギング機能 — Python v2.6.2 documentation

  • 取引先別に処理をやや変えるための仕組み
    • 共通する処理はスーパークラスとして、サブクラスに個別の方法や必要なデータを入れておく。
    • *:もしかしたら必要な情報だけになりそうなので、そのうちに設定ファイルから読んだりしたい。
  • とあるモジュールに取引先別に定義したクラスのリストを、別の場所で取得する
    • inspectモジュールから、とあるモジュールの中身を取得して、クラスだけにする。あとは必要なクラスだけを取り出す条件とか、取得した情報を整形してとか。
#インポートしてあるモジュールから、そのモジュールないのクラスだけ取り出してリストにする
def get_scenarioclass(module_name):
    return [data for name, data \
                 in inspect.getmembers(module_name , inspect.isclass)]
  • クラスの内部からクラス属性にアクセスする方法
    • selfからアクセスできるそうです。[twitter:@tanB]さんありがとう(涙
    • 思えば、クラス内部ってselfのことですよね・・・(ちなみにスーパークラスへのアクセスはそのオブジェクトです)


悪来週までには完成していないとマズそうなので、今週も部屋にこもる日々です。楽しいからいいけど。