ChatGPTでコード生成、GitHub Copilotで修正でやりたいことの99%はできてしまう衝撃

2023年春アニメも始まるのでAnime API及び、アニメ作品のTwitterフォローランキングバッチを春アニメに切り替えました。

クールごとのアニメデータはわりと目視でチェックしていたり各アニメのTwitterフォローアカウントをブラウザで開いて正しいアカウントかを調べたり、ハッシュタグをプロフィール情報から手で抜き取ったり実はしています。この作業が面倒だったので今回はChatGPT(4.0)でTwitterのプロフィール情報からハッシュタグを抽出する作業を自動化するコードを生成してみたら驚くほど簡単だったのでまとめておきます。

まずは導入 「あなたはPythonエンジニアです」

お約束の文言ではじめてまずは元データとなるマスターデータのCSVを読み込むプログラムを書いてもらいます

PythonからTwitterAPIを呼び出すコードを生成

私はTwiterAPIプログラムをよく書きますがPythonのコードは月1回書くかかかないかぐらいなので、一からぐぐってかくと吐き気がするぐらい面倒なのでやってきませんでした。それが瞬時にできるようになるので驚きです。
pipでライブラリのインストールまで指示してくれます。これは特定のプログラミング言語をできる人が他の苦手な言語でコードを書かないといけなくなったときに得にパフォーマンスを発揮すると感じました。

.envファイル使いたい!というワガママも聞いてくれる


後指示で「実は.envファイルに対応してほしいんだよね」という要求にも嫌な顔をせずに答えてくれます。これは部下に指示してたり、発注先にお願いする感覚を覚えました。となりにプログラマーがいてその人に言えばなんでも書いてくれる感じです。ただし.envなんて発想はプログラマーでないと出てこないはずなので上流エンジニアが一般エンジニアに指示している感覚でしょうか。

ファイルからTwitterアカウント情報を読み込みTwitterAPIを実行する

上記2つのコードを組み合わせてコードを完成させることができます。ここまで自分で一切コードをかかずにここまでこれています(呆然)

できたコード

import csv
import os
import tweepy
from dotenv import load_dotenv

# .envファイルから環境変数を読み込む
load_dotenv()

# 環境変数からTwitter API認証情報を取得
consumer_key = os.getenv("TWITTER_CONSUMER_KEY")
consumer_secret = os.getenv("TWITTER_CONSUMER_SECRET")
access_token = os.getenv("TWITTER_ACCESS_TOKEN")
access_token_secret = os.getenv("TWITTER_ACCESS_TOKEN_SECRET")

# TweepyによるTwitter API認証
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

def generate_dict_array_from_csv(file_path):
    headers = ['id', 'title', 'public_url', 'twitter_account', 'twitter_hash_tag', 'facebook', 'cours_id', 'created_at', 'updated_at', 'sex', 'sequel', 'product_companies']
    dict_array = []

    with open(file_path, mode='r', encoding='utf-8') as csvfile:
        reader = csv.DictReader(csvfile, fieldnames=headers)

        # ヘッダー行をスキップ
        next(reader)

        for row in reader:
            dict_array.append(row)

    return dict_array

def get_twitter_profile_info(twitter_account):
    try:
        user = api.get_user(screen_name=twitter_account)
        profile_info = {
            'id': user.id,
            'name': user.name,
            'screen_name': user.screen_name,
            'description': user.description,
            'followers_count': user.followers_count,
            'friends_count': user.friends_count,
            'statuses_count': user.statuses_count,
            'profile_image_url': user.profile_image_url_https,
        }
        return profile_info

    except tweepy.TweepError as e:
        print(f"Error: {e}")
        return None

def save_profiles_to_csv(profiles, output_file_path):
    headers = ['twitter_account', 'screen_name', 'description']

    with open(output_file_path, mode='w', encoding='utf-8', newline='') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=headers)
        writer.writeheader()

        for profile in profiles:
            writer.writerow({
                'twitter_account': profile['twitter_account'],
                'screen_name': profile['screen_name'],
                'description': profile['description']
            })

# CSVファイルのパスを指定して、関数を呼び出す
input_file_path = "your_input_file.csv"
result = generate_dict_array_from_csv(input_file_path)

# 各Twitterアカウントのプロフィール情報を取得
all_profiles = []

for entry in result:
    twitter_account = entry['twitter_account']
    profile_info = get_twitter_profile_info(twitter_account)
    
    if profile_info is not None:
        profile_info['twitter_account'] = twitter_account
        all_profiles.append(profile_info)

# プロフィール情報を別のCSVファイルに出力
output_file_path

なぜか最後力つきてコードが止まっていますがここまで書いてくれるのであれば満足です。最後の1行だけ修正すればやりたいことは実行できました。

Twitterプロフィール情報がはいったCSVの完成


上記のファイルからアニメ作品のハッシュタグを抽出するプログラムを作ってほしい


丁寧に正規表現のことまで教えてくれます。

こんな感じで大体はChatGPTにコードを出力してもらいVS Codeにコピペ。直したい部分はcopilotを使う

copilotはコメントを書いたあとtabボタンを押すとコードをガイドしてくれるのでガシガシコメントを書いてコードを作ってもらいます。

# basesテーブルからtwitter_accountが一致するレコードを取得
with connection.cursor() as cursor:
    sequel = 0
    twitter_hash = ""
    sex = 0
    sql = "SELECT * FROM bases WHERE twitter_account = %s order by id desc"
    cursor.execute(sql, (twitter_account,))
    result = cursor.fetchone()
    # resultが空でない場合に処理を実行
    if result:

上記のコードは自身で書いたコメント以外は全部GitHub copilotが出力してくれます。定型的なコードであればまじでなにも自分でコード書かなくてよいです。

まとめ

ChatGPTとGitHub copilotを使った感想としては

  • なれてない言語のコードを書くのはまじで楽、やっていないがRustとかで出力してもらうといい勉強になるかもしれない。

  • プログラムの構造や、やりたいアルゴリズムは文章化しないといけないので非エンジニアだと厳しい部分はある。それでも非エンジニアがプログラムをガシガシ生成する時代はすぐそこまで来ていると感じた

  • 関数名の英語をいちいち考えないといけない手間も省けるのでChatGPT先生かcopilot先生にコード書いてもらったほうが良い

  • ChatGPTとGitHub copilotを使いこなすのは今後のエンジニアの必須スキルになると思いました。


この記事が気に入ったらサポートをしてみませんか?