LLM活用法:コードを指定のプログラミング言語で書き換え
LLMの活用法について話す場面がちらほらあるので、自分なりの活用法をカタログ的に見返せるように少しずつまとめていく。
事例:不慣れな言語でのよさそうな書き方を探す
場面
自分はPythonを使い慣れているが、TypeScriptには不慣れである。
そのためPythonでは内包表記を使うであろう場面で、TypeScriptではどのような書き方がスマートなのか、分からない。
プロンプト
このような場面では、実コードを添えて書き直してもらうのが効果的。
自然言語で表現しづらいことは、プログラミング言語の実コードを例示すればよい。
ChatGPT SharLink: https://chat.openai.com/share/f60ae0dd-4ecb-43ae-933e-19ea86cb904b
効果
不慣れな言語であっても、スマート・効果的な書き方を短時間で発見することができる。
不慣れな言語においてスマートな書き方を見つけるのは、Google検索ではなかなか非効率で、効果も限定的だった。
これまではペアプログラミングが最も効果的な方法だったが、今後はLLMを活用するという選択肢が加わった。
事例:CloudFormationからTerraformに書き換える
場面
以下のようなGitHub ActionsからOIDC連携でAWSを操作するためのリソースを定義したCloudFormationがある。
チームではTerraformだけでIaCを実現しているため、これをTerraformに書き直したい。
Resources:
OidcProviderGitHub:
Type: AWS::IAM::OIDCProvider
Properties:
Url: https://token.actions.githubusercontent.com
ClientIdList: [ sts.amazonaws.com ]
ThumbprintList: [ 6938fd4d98bab03faadb97b34396831e3780aea1, 1c58a3a8518e8759bf075b76b750d4f2df264fcd ]
RoleGitHubActions:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Action: sts:AssumeRoleWithWebIdentity
Principal:
Federated: !Ref OidcProviderGitHub
Condition:
StringLike:
token.actions.githubusercontent.com:sub: !Sub repo:tosi29/*
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
Outputs:
RoleArnGitHubActions:
Value: !GetAtt RoleGitHubActions.Arn
プロンプト
実コードを貼り付けつつ、変換後の言語を指定すればOK。
ChatGPT ShareLink: https://chat.openai.com/share/196f0e4e-a757-4553-adbd-242ff344ee97
プロンプトは以下。
そして得られたコードが以下。
resource "aws_iam_openid_connect_provider" "OidcProviderGitHub" {
url = "https://token.actions.githubusercontent.com"
client_id_list = ["sts.amazonaws.com"]
thumbprint_list = ["6938fd4d98bab03faadb97b34396831e3780aea1", "1c58a3a8518e8759bf075b76b750d4f2df264fcd"]
}
resource "aws_iam_role" "RoleGitHubActions" {
assume_role_policy = jsonencode({
Statement = [
{
Effect = "Allow"
Action = "sts:AssumeRoleWithWebIdentity"
Principal = {
Federated = aws_iam_openid_connect_provider.OidcProviderGitHub.arn
}
Condition = {
StringLike = {
"token.actions.githubusercontent.com:sub" = "repo:tosi29/*"
}
}
}
]
})
managed_policy_arns = [
"arn:aws:iam::aws:policy/AdministratorAccess"
]
}
output "RoleArnGitHubActions" {
value = aws_iam_role.RoleGitHubActions.arn
}
効果
自身はCloudFormationは不慣れであるため、Terraformに書き換えようと思うと元のコードを理解するのに時間を要する。
しかし「実現したいこと」と「出力コードの妥当性」が担保できれば、元のコードやCloudFormationを理解する必要はない。
この程度であれば、出力したコードはそのまま動作することが多い。ざっくり計算で30分~2時間程度、効率化できる。