Skip to content

Commit 0931a2a

Browse files
author
Ryo Omae
committed
Merge remote-tracking branch 'origin/main' into fix/repository-name
2 parents 3109929 + 9e28baa commit 0931a2a

28 files changed

+1486
-377
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,4 @@ cdk/output.json
6464
oracle-xe-key.pem
6565
agent/exec_sql/*.sql
6666
agent/result/*
67+
cdk/cdk.context.json

README.md

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,9 @@ uv run pg_connect_test.py
164164
## (Option) データベースオブジェクトのロード
165165

166166
以下の手順に従って、データベースオブジェクトをアップロードしてください。
167-
1. `./load-scripts/dumpfile``{name}_METADATAONLY.DMP` をアップロードしてください。
168-
2. `load-scripts` フォルダ配下の各シェルスクリプトについて、コメントの指示に従い、スキーマ名でループしている箇所に、アップロードしたファイルのスキーマ名を列挙してください。
169-
3. `load-scripts` フォルダ配下のシェルスクリプトを番号順に実行してください。権限不足でエラーが出る場合には `chmod +x load-scripts/1pre.sh` のように権限付与してください。
167+
1. `./import-schema/dumpfile``{name}_METADATAONLY.DMP` をアップロードしてください。
168+
2. `import-schema` フォルダ配下の各シェルスクリプトについて、コメントの指示に従い、スキーマ名でループしている箇所に、アップロードしたファイルのスキーマ名を列挙してください。
169+
3. `import-schema` フォルダ配下のシェルスクリプトを番号順に実行してください。権限不足でエラーが出る場合には `chmod +x import-schema/1pre.sh` のように権限付与してください。
170170

171171
`2load.sh` で以下のエラーが出る場合は、Oracle on EC2 インスタンスに oracle ユーザーでログインし、パスが一致するようにディレクトリを作成し、ダンプファイルを移動してください。
172172

@@ -178,7 +178,7 @@ ssh -F ssh-config oracle
178178
sudo su - oracle
179179
```
180180

181-
## 🤖 AI エージェントの使用
181+
## 🤖 AI エージェントを使用したデータベースコードオブジェクトの変換
182182

183183
### 4. エージェントの起動
184184

@@ -190,27 +190,66 @@ uv run main.py
190190

191191
# 使い方 2 ) DB Object を指定する場合
192192
# DB_ONJECT_TYPE[space]SCHEMA_NAME.OBJECT_NAME で指定してください
193-
# 特にオプション指定がない場合は、system_prompt.txt を参照します
194-
uv run main.py --prompt "PROCEDURE SCHEMA_SAMPLE.SCT_0001_CALCULATE_TIME_DIFFERENCE" --system-prompt custom_prompt.txt
193+
uv run main.py --prompt "PROCEDURE SCHEMA_SAMPLE.SCT_0001_CALCULATE_TIME_DIFFERENCE"
195194

196195
# 使い方 3 ) まとめて実行する場合
197-
# 特にオプション指定がない場合は、system_prompt.txt およびobject_list.ini を参照します
198-
./run.sh --system-prompt custom_prompt.txt --file custom_list.ini
196+
./run.sh
199197

200198
```
201199

202-
### 5. カスタム利用例 (変換順序の調整、および分割戦略を取る場合)
200+
### 5. カスタム利用例
201+
コードの行数が長い場合や複雑なプロシージャの場合に、変換順序の調整やコードを分割してから変換することが有効であるため、その実行方法をみていきます。
202+
ポート11521が既に使用されているといったエラーが発生する場合、別ウィンドウでの実施中のSSHポート転送を終了してください
203203

204204
```bash
205205
cd agent
206206

207-
# OracleのDDLをまとめて取得
208-
./batch_getDDL.sh --file object_list.ini
207+
# OracleのDDLをまとめて取得
208+
./getDDL.sh object_list.ini
209209

210210
#並び替え
211-
q chat "custom_prompt_1sortObject.txtに従って処理を実行してください。"
211+
uv run main.py --system-prompt sortObject.txt
212+
(起動後に以下を貼り付けてください。)
213+
./result
214+
215+
prompts/sortObject.txtに従って処理を実行してください。
212216

213217
# 変換実行
214-
./run.sh --system-prompt custom_prompt_2convert.txt --file object_list_sorted.ini
218+
./run.sh --system-prompt custom_prompt.txt --file object_list_sorted.ini
219+
220+
```
221+
222+
223+
## 🤖 AI エージェントを使用したアプリケーションSQLの変換
224+
サンプルとしてOracleデータベースを使用した従業員情報の管理(登録、更新、削除、検索)を行うSpring + MyBatisアプリケーションの基盤となるスクリプト群を変換します。
225+
226+
### 6. サンプルアプリケーションの確認
227+
以下に配置されたサンプルアプリケーションの内容をチェックしてください。
228+
229+
```bash
230+
cd ../application/
231+
```
232+
233+
### 7. エージェントの起動
234+
235+
```bash
236+
cd ../agent
237+
238+
# アプリケーションの変換
239+
# 例) uv run main.py --prompt "<ソースの配置場所> <アプリ名> <テスト名>" --system-prompt "system_prompt_app.txt"
240+
uv run main.py --prompt "../application/employee-mgmt/application employee-mgmt test01" --system-prompt "system_prompt_app.txt"
215241

216242
```
243+
244+
245+
## その他
246+
247+
### Amazon Q Developer のセットアップ方法
248+
249+
インストール方法
250+
https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-installing-ssh-setup-autocomplete.html#command-line-install-q
251+
252+
セットアップ方法(認証設定から「CLI」タブを選択)
253+
https://catalog.workshops.aws/qwords/ja-JP/10-start-workshop/16-builder-id
254+
255+

agent/batch_getDDL.sh

Lines changed: 0 additions & 67 deletions
This file was deleted.

agent/getDDL.sh

Lines changed: 55 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,61 @@
11
#!/bin/bash
22

3-
# 実行方法:
4-
# cd agent
5-
# ./getDDL.sh <OBJECT_TYPE> <SCHEMA_NAME.OBJECT_NAME> [ORACLE_USER] [ORACLE_PASSWORD]
6-
# 例: ./getDDL.sh PROCEDURE MYSCHEMA.MY_PROCEDURE
7-
# 例: ./getDDL.sh PROCEDURE MYSCHEMA.MY_PROCEDURE username password
8-
9-
# 引数チェック
10-
if [ $# -lt 2 ] || [ $# -gt 4 ]; then
11-
echo "Usage: $0 <OBJECT_TYPE> <SCHEMA_NAME.OBJECT_NAME> [ORACLE_USER] [ORACLE_PASSWORD]"
12-
echo "Example: $0 PROCEDURE MYSCHEMA.MY_PROCEDURE"
13-
echo "Example: $0 PROCEDURE MYSCHEMA.MY_PROCEDURE username password"
14-
exit 1
15-
fi
16-
17-
OBJECT_TYPE=$1
18-
FULL_OBJECT_NAME=$2
19-
SCHEMA_NAME=$(echo $FULL_OBJECT_NAME | cut -d'.' -f1)
20-
OBJECT_NAME=$(echo $FULL_OBJECT_NAME | cut -d'.' -f2)
21-
22-
# 認証情報の取得
23-
if [ $# -eq 4 ]; then
24-
# 引数で認証情報が提供された場合
25-
ORACLE_USER=$3
26-
ORACLE_PASSWORD=$4
27-
echo "認証情報を引数から取得しました"
28-
else
29-
# 引数で認証情報が提供されなかった場合、AWS Secrets Managerから取得
30-
echo "AWS Secrets Manager から認証情報を取得中..."
31-
SECRET_JSON=$(aws secretsmanager get-secret-value --secret-id oracle-credentials --query SecretString --output text)
32-
33-
if [ $? -ne 0 ]; then
34-
echo "エラー: AWS Secrets Manager からの認証情報取得に失敗しました"
35-
exit 1
36-
fi
37-
38-
# JSONから認証情報を抽出
39-
ORACLE_USER=$(echo $SECRET_JSON | jq -r '.username')
40-
ORACLE_PASSWORD=$(echo $SECRET_JSON | jq -r '.password')
41-
fi
42-
43-
# ローカルでresultディレクトリ作成
44-
mkdir -p "./result/${OBJECT_NAME}"
45-
46-
# SSH経由でDDL取得し、直接ローカルファイルに出力
47-
ssh -n -F ./../ssh-config -i ./../cdk/oracle-xe-key.pem oracle "sudo su - oracle -c \"
48-
sqlplus -s ${ORACLE_USER}/${ORACLE_PASSWORD}@//localhost:1521/XEPDB1 <<SQL_EOF
3+
# Oracle DDL一括取得スクリプト
4+
# 使用方法: ./batch_getDDL.sh [object_list_file]
5+
# デフォルトファイル: object_list.ini
6+
7+
# 入力ファイルの設定(引数があれば使用、なければデフォルト)
8+
FILE=${1:-object_list.ini}
9+
10+
# ファイル存在チェック
11+
[ ! -f "$FILE" ] && { echo "エラー: $FILE が見つかりません"; exit 1; }
12+
13+
echo "=== DDL一括取得開始 (ファイル: $FILE) ==="
14+
15+
# AWS Secrets Managerから認証情報を取得
16+
SECRET=$(aws secretsmanager get-secret-value --secret-id oracle-credentials --query SecretString --output text)
17+
[ $? -ne 0 ] && { echo "エラー: 認証情報取得に失敗"; exit 1; }
18+
19+
# JSON解析でユーザー名とパスワードを抽出
20+
USER=$(echo $SECRET | jq -r '.username')
21+
PASS=$(echo $SECRET | jq -r '.password')
22+
23+
# オブジェクトリストを1行ずつ処理
24+
while read -r line; do
25+
# コメント行と空行をスキップ
26+
[[ "$line" =~ ^#.*$ ]] || [[ -z "$line" ]] && continue
27+
28+
# オブジェクトタイプと名前を分割
29+
TYPE=$(echo "$line" | awk '{print $1}')
30+
NAME=$(echo "$line" | awk '{print $2}')
31+
32+
# 必須項目チェック
33+
[ -z "$TYPE" ] || [ -z "$NAME" ] && continue
34+
35+
# スキーマ名とオブジェクト名を分離
36+
SCHEMA=$(echo $NAME | cut -d'.' -f1)
37+
OBJ=$(echo $NAME | cut -d'.' -f2)
38+
39+
echo "処理中: $TYPE $NAME"
40+
41+
# 出力ディレクトリ作成
42+
mkdir -p "./result/$OBJ"
43+
44+
# SSH経由でOracleに接続してDDL取得
45+
# ssh -n -F ./../ssh-config -i ./../cdk/oracle-xe-key.pem oracle "sudo su - oracle -c \"
46+
ssh -n -i ./../cdk/oracle-xe-key.pem oracle "sudo su - oracle -c \"
47+
sqlplus -s $USER/$PASS@//localhost:1521/XEPDB1 <<EOF
4948
SET PAGESIZE 0
5049
SET LINESIZE 1000
5150
SET LONG 10000
52-
SELECT DBMS_METADATA.GET_DDL('${OBJECT_TYPE}', '${OBJECT_NAME}', '${SCHEMA_NAME}') FROM DUAL;
51+
SELECT DBMS_METADATA.GET_DDL('$TYPE', '$OBJ', '$SCHEMA') FROM DUAL;
5352
EXIT;
54-
SQL_EOF
55-
\"" > "./result/${OBJECT_NAME}/oracle.sql"
56-
57-
if [ $? -eq 0 ]; then
58-
echo "DDL saved to ./result/${OBJECT_NAME}/oracle.sql"
59-
else
60-
echo "✗ DDL取得に失敗しました"
61-
exit 1
62-
fi
53+
EOF
54+
\"" > "./result/$OBJ/oracle.sql"
55+
56+
# 結果表示
57+
[ $? -eq 0 ] && echo "完了: $OBJ" || echo "✗ 失敗: $OBJ"
58+
59+
done < "$FILE"
60+
61+
echo "=== DDL一括取得完了 ==="

0 commit comments

Comments
 (0)