記事 Hiroshi Sato · 5 hr 前 4m read

Claude CodeでEmbedded Pythonプログラミング

Claude Codeを使うようになってから、創作意欲が爆上がりです。

今までは、何かを作りたいと思っても実際にコーディングをするのが面倒なので、よっぽどのニーズがないとプログラミングまでは至らなかったのですが、仕様をちょこちょこっと書くと後はClaude Codeが勝手にやってくれるので、生産性が雲泥の差です。

私はObjectScriptネイティブ世代なので、これからはPythonと言われても少し躊躇する部分がありましたが、逆にClaude CodeはPythonが大得意なので、新規に開発する際に、ObjectScriptを選ぶ理由がほとんどなくなりました。

とはいえ、Claude CodeがEmbedded Pythonのくせをどの程度理解しているか少し懸念があったのですが、それはかなり取り越し苦労だとわかってきました。

IRISのドキュメントに書かれていることは大体ちゃんと理解してくれています。

そして、自分でPythonコードを書いたら決して書けないような簡潔で洗練されたコードを書いてくれます。

今まであったらいいなと思いつつ、面倒なので、ほとんどやっていない処理としてテーブルのインポート・エクスポートがあります。

実際管理ポータルで、クエリを実行後にcsvに書き出すことは簡単にできますが、csvファイルを編集したり確認する際に、エクセルが便利なのですが、macOSで普通に出力すると、utf-8で出力されます。

ところが、Mac上のエクセルは、csvファイルをSJIS前提で読み込むので、日本語が含まれる場合は、文字化けの嵐となってしまいます。

なので、xlsx形式でそのまま読み書きできればOKなので、

エクセルファイルにエクスポート・インポートするプログラムのコーディングを依頼しました。

内容は、以下のような感じです。

# 経費項目データのエクスポートとインポート

## プログラム名 

expenseitem.py

## 実行方法

### データのインポート

python3 expenseitem.py import expense.xlsx

### データのエクスポート

python3 expenseitem.py export expense.xlsx

## 処理内容

### データのインポート

InterSystems IRISのYNC.ExpenseItemクラスのインスタンスを全て削除する
(YNC.ExpenseItemの%KillExtentメソッドを使用)

指定されたエクセルファイルの先頭行にはYNC.ExpenseItemのカラム名が入っています。

指定されたエクセルファイルを1行づつ読み込み、先頭のヘッダ行のカラムの順番にYNC.ExpenseItemのインスタンスにIRIS Embedded Pythonのsqlインタフェースを使用して、レコードを挿入します。

### データのエクスポート

YNC.ExpenseItemクラスの全インスタンスデータを指定したエクセルファイルに1行づつ書き込みます。
エクセルファイルの先頭行のヘッダ情報に基づき、カラム順を決定します。

Claude Codeの応答は、以下のような感じです。

まずファイルの内容を確認します。コマンドを実行しました, ファイルを表示しましたコマンドを実行しました, 
ファイルを表示しました構造を把握しました。
重要なポイントとして、Description が IdKey(主キー)になっているため、INSERTではなくIDキーを考慮する必要があります。
ファイルを作成しました, ファイルを読み取りましたファイルを作成しました, 
ファイルを読み取りました
実装のポイントを説明します。
インポート処理

%KillExtent() で全データ削除後、Excelを1行ずつ読み込んでINSERT
ヘッダ行のカラム名をそのままSQL文に使用するため、Excelのカラム順が変わっても動作します
ID カラムはIRISが自動管理するため挿入対象から除外
Description が IdKey のため、同じDescriptionが存在するとエラーになりますが、事前に _KillExtent() で全削除しているため問題ありません

エクスポート処理

出力先ファイルが既存の場合、その先頭行のヘッダ順に合わせてSELECT・出力します(カラム順を柔軟に対応)
ファイルが存在しない場合はデフォルト順(expenseitem.xlsx と同じ順)を使用
%ID を ID としてSELECTすることでIRISの内部IDを取得


という感じでかなりIRISの特性を掴んで、コーディングしてくれます。