🐥
GitHub Actions + OpenAI APIを使ったReadMeの自動翻訳対応
はじめに
デスクトップマスコットの OSSとして以下のプロジェクトを開発しています。こちらは誰も簡単にカスタマイズができるというものを考えて作っています。そのため開発者にも優しいリポジトリを目指しており、今回は ReadMeを多言語対応する部分について OpenAIを使って自動翻訳を行ったことについて記事にしました
環境
- GitHub Actions
- python 3.11(actions内)
- Open AI GPT-4o-mini
デモ
実際にどのようなjobのフローになっているのか、翻訳結果などはどうなっているのかは以下になります
ReadMeの更新差分が入ったコミットがPRされると自動的に翻訳処理が入ります
翻訳差分(例:中国語)は以下のようになります。実行する度に翻訳結果が変わるのは諦めました..
ここで行ったこと(要件)
- README.mdが更新されたときにほかの5言語の
README_EN.md
等を自動的に翻訳して、コミットしたい - developブランチにREADME.mdの差分が入ったときは自動で実行して、が更新されたいないときはスキップする
翻訳処理について
翻訳処理には、現時点で一番価格が安いgpt-4o-miniをpythonで処理をしてその処理をactinos側で管理しています
pythonでの翻訳処理
from openai import OpenAI
import os
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
def translate_text(text, target_language):
completion = client.chat.completions.create(
model="gpt-4o-mini", # 使用するモデルの指定
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": f"Translate the following text to {target_language}: {text}"}
]
)
# メッセージのコンテンツに直接アクセスする
return completion.choices[0].message.content
def main():
# Read the original README
with open('README.md', 'r', encoding='utf-8') as file:
original_text = file.read()
# Translate to English
translated_en = translate_text(original_text, 'English')
with open('README_EN.md', 'w', encoding='utf-8') as file:
file.write(translated_en)
# Translate to Chinese
translated_cn = translate_text(original_text, 'Chinese')
with open('README_CN.md', 'w', encoding='utf-8') as file:
file.write(translated_cn)
# Translate to Spanish
translated_es = translate_text(original_text, 'Spanish')
with open('README_ES.md', 'w', encoding='utf-8') as file:
file.write(translated_es)
# Translate to French
translated_fr = translate_text(original_text, 'French')
with open('README_FR.md', 'w', encoding='utf-8') as file:
file.write(translated_fr)
if __name__ == "__main__":
main()
actionsの処理について
name: Translate README
on:
pull_request:
branches:
- develop
paths:
- README.md
jobs:
translate:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4.2.2
- name: Set up Python
uses: actions/setup-python@v5.3.0
with:
python-version: '3.11'
- name: Install OpenAI library
run: pip install openai
- name: Run translation script
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: python .github/scripts/translate_readme.py
- name: Commit changes
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
# 変更をステージしてコミット
git add README_EN.md README_CN.md README_ES.md README_FR.md
if git commit -m "Update translations"; then
echo "Changes committed successfully."
# Pullでリモートの最新の変更を取り込み、リベース
if git pull --rebase origin ${{ github.head_ref }}; then
echo "Successfully rebased."
else
echo "Rebase failed. Please review the errors."
exit 1 # エラーが発生した場合、処理を中止
fi
# スタッシュが必要かを確認
if git stash list | grep -q "stash@{0}"; then
# スタッシュが存在する場合はポップする
git stash pop
fi
# 最後にプッシュ
git push origin HEAD:${{ github.head_ref }}
else
echo "No changes to commit"
fi
最後に
LLMを使えばOSSの活動をよりグローバルに展開できる可能性があるので、みなさんもぜひ試してみてください!

midra-lab.notion.site/MidraLab-dd08b86fba4e4041a14e09a1d36f36ae 個人が興味を持ったこと × チームで面白いものや興味を持ったものを試していくコミュニティ
Discussion