LLM活用法:コードを指定のプログラミング言語で書き換え

LLMの活用法について話す場面がちらほらあるので、自分なりの活用法をカタログ的に見返せるように少しずつまとめていく。

事例:不慣れな言語でのよさそうな書き方を探す

場面

自分はPythonを使い慣れているが、TypeScriptには不慣れである。
そのためPythonでは内包表記を使うであろう場面で、TypeScriptではどのような書き方がスマートなのか、分からない。

プロンプト

このような場面では、実コードを添えて書き直してもらうのが効果的。 alt text

自然言語で表現しづらいことは、プログラミング言語の実コードを例示すればよい。

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時間程度、効率化できる。

関連記事


  1. Google検索とChatAIにみる、エンタープライズサーチとRAGの未来
  2. VuetifyのData Tableでソート順をカスタマイズする
  3. Sequence Decomposingをザ・ゲームに置き換えて考えてみた
  4. Pythonにおける2の整数乗は、ビット演算のほうが高速
  5. アノテーションを活用した影響調査にトライしてみた
  6. Groovyの == 演算子と equals() は厳密に同じではない
  7. ネットワークが落ちていたらWindowsを自動で再起動する

comments powered by Disqus