Back to tech

GitHub ActionsからGemini CLIを使って記事を校正する

4 min read
Table of Contents

お久しぶりです。

昨日に引き続き、AI関連の記事です。

皆様はGemini CLIをご存知でしょうか?

2025年6月末にGoogleからリリースされた、GeminiをCLIで利用可能にするツールです。 c.f.: https://cloud.google.com/blog/ja/topics/developers-practitioners/introducing-gemini-cli/

私は日頃からGemini CLIを使っているわけではありませんが、GitHub Actionsで使うと便利そうなので、試しにブログ記事の校正を自動化してみました。

作成したもの

御託はさておき、まずは結果をご覧ください。

PRを作成すると、以下のようにGemini CLIが実行され、記事の校正が行われます。

校正結果は、PRのコメントとして出力するようにしています。

準備するものやコード

必要なもの

事前準備

Google AI StudioのAPIキーをリポジトリのSecretsに登録します。

APIキーの名前はGEMINI_API_KEYとします。

Workflowのコード

以下のコードを.github/workflows/gemini.ymlに追加します。

大したことはしていません。

注意点として、下記のコードはsrc/content/**/*.mdのパスにあるMarkdownファイルが変更された際に、Gemini CLIを使って記事の校正を行います。

必要に応じてパスは変更してください。

name: Correction AI

on:
  pull_request:
    paths:
      # トリガーの対象をより具体的に絞り込む
      - 'src/content/**/*.md'
    types: [opened]

permissions:
  contents: read
  pull-requests: write

jobs:
  gemini:
    runs-on: ubuntu-latest

    steps:
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22.x'

      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Get changed markdown file content
        id: get_files
        run: |
          # PRのベースブランチのコミット(base.sha)と、このPRの最新のコミット(head.sha)を比較し、
          # 変更があったMarkdownファイルの一覧を取得。
          echo "Finding changed files between ${{ github.event.pull_request.base.sha }} and ${{ github.event.pull_request.head.sha }}"
          files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} -- 'src/content/**/*.md')

          if [ -z "$files" ]; then
            echo "No markdown files changed in 'src/content/**/*.md'."
            # 後続のステップが実行されないように、content出力を空に設定します
            echo "content=" >> $GITHUB_OUTPUT
            exit 0
          fi

          echo "Found changed markdown files:"
          echo "$files"

          # 変更されたファイル名を1つの変数に結合
          content=""
          for file in $files; do
            if [ -f "$file" ]; then
              content="${content}"$'\n'"- $file"
            fi
          done

          if [ -z "$content" ]; then
            echo "Content is empty."
            echo "content=" >> $GITHUB_OUTPUT
            exit 0
          fi
          
          # 複数行のファイル内容を、後続のステップに安全に渡すための記述
          echo "content<<EOF" >> $GITHUB_OUTPUT
          echo "$content" >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT

      - name : Run Gemini AI
        if: steps.get_files.outputs.content != ''
        id: gemini_cli
        env:
          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
        run: | 
          echo "Set up Google Gemini CLI"
          npm install -g @google/gemini-cli
          
          prompt="Markdown形式の記事を、レイアウトやコードブロック、見出し、リストなどの構造は一切変更せずに、日本語として自然で読みやすい文章に校正してください。\n \
            - 誤字脱字や文法のミスを修正してください \n \
            - 冗長な表現や不自然な言い回しを改善してください \n \
            - 口語的な表現は残しても構いませんが、必要に応じてトーンを統一してください \n \
            - Markdownの構文(\`---\` や \`\`\` やリンクなど)は変更しないでください \n \
            - 改行位置も可能な限り維持してください \n \
            - 出力は読み込んだファイルのパスと結果だけ返してください。 \n \
            - ファイルへの書き込みは不要です。 \n \
            記事は、以下のpathにあるので読み込んでください。 \n \
            ${{ steps.get_files.outputs.content }}"


          output=$(gemini --prompt "$prompt")

          if [ -z "$output" ]; then
            echo "Gemini AI returned no output."
            echo "content=" >> $GITHUB_OUTPUT
            exit 0
          fi

          # 複数行の出力を後続のステップに渡すための記述
          echo "content<<EOF" >> $GITHUB_OUTPUT
          echo "$output" >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT


      - name: Comment on PR
        if: steps.get_files.outputs.content != ''
        uses: peter-evans/create-or-update-comment@v4
        with:
          issue-number: ${{ github.event.pull_request.number }}
          body: |
            ## Gemini AIによる校正結果
            以下の内容は、Google Gemini AIによって校正された結果です。内容を確認し、必要に応じてマージしてください。

            `````
            ${{ steps.gemini_cli.outputs.content }}
            `````

          edit-mode: replace

大変だった点

gemini-cli-actionが使えなかった

GoogleのGitHubリポジトリを見ると、GitHub Actions用にgemini-cli-actionというものが用意されています。

GitHub - google-gemini/gemini-cli-action
github.com
image

はじめはこれを利用しようとしましたが、Geminiからの結果をPRコメントに渡す処理(name: Comment on PR)でうまく受け取れませんでした。

Geminiに色々とお願いしたものの、解決しなかったため、nodeをインストールしてgemini-cliを直接使うことにしました。

Geminiへのプロンプト

Geminiへのプロンプトは、試行錯誤を重ねました。

色々と試した結果、以下のプロンプトが最も効果的でした。

Markdown形式の記事を、レイアウトやコードブロック、見出し、リストなどの構造は一切変更せずに、日本語として自然で読みやすい文章に校正してください。
  - 誤字脱字や文法のミスを修正してください
  - 冗長な表現や不自然な言い回しを改善してください
  - 口語的な表現は残しても構いませんが、必要に応じてトーンを統一してください
  - Markdownの構文(\`---\` や \`\`\` やリンクなど)は変更しないでください
  - 改行位置も可能な限り維持してください
  - 出力は読み込んだファイルのパスと結果だけ返してください。
  - ファイルへの書き込みは不要です。

記事は、以下のpathにあるので読み込んでください。
${{ steps.get_files.outputs.content }}"

まとめ

Gemini CLIを使い、GitHub Actionsから記事の校正を自動化する方法を紹介しました。

一人で記事を書いていて文字校正が面倒だと感じている方は、是非AIの力を借りてみてください。

おまけ

この記事は Gemini CLIを使って校正しました。

以下に diff の結果をおいておきます。

diff の結果
diff --git a/src/content/blog/2025/07/2025-07-06/index.md b/src/content/blog/2025/07/2025-07-06/index.md
index a00fe79..2c25f22 100644
--- a/src/content/blog/2025/07/2025-07-06/index.md
+++ b/src/content/blog/2025/07/2025-07-06/index.md
@@ -1,6 +1,6 @@
 ---
-title: "Github Actions から Gemini CLI を使って記事を校正する"
-description: "めんどくさい記事の校正は Gemini に任せてしまおうという話"
+title: "GitHub ActionsからGemini CLIを使って記事を校正する"
+description: "面倒な記事の校正はGeminiに任せてしまおうという話です。"
 date: 2025-07-06
 category: "tech"
 tags: 
@@ -11,22 +11,22 @@ coverImage: "WN8UqUUNrbgR.jpg"
 
 お久しぶりです。
 
-昨日に引き続き、AI の記事です。
+昨日に引き続き、AI関連の記事です。
 
-皆様は Gemini CLI をご存知でしょうか?
+皆様はGemini CLIをご存知でしょうか?
 
-2025年6月末にGoogleから突然リリースされた CLI で Gemini が使えるようになるツールです。  
+2025年6月末にGoogleからリリースされた、GeminiをCLIで利用可能にするツールです。
 c.f.: https://cloud.google.com/blog/ja/topics/developers-practitioners/introducing-gemini-cli/
 
-私は日頃から Gemini CLI は使っていないのですが、Github Actions で使うと便利そうなので、試しにブログ記事の校正を自動化してみました。
+私は日頃からGemini CLIを使っているわけではありませんが、GitHub Actionsで使うと便利そうなので、試しにブログ記事の校正を自動化してみました。
 
-## 作ってみた
+## 作成したもの
 
-御託はおいておいて、まずは結果を見てください。
+御託はさておき、まずは結果をご覧ください。
 
-PR を作成したら以下のように Gemini CLI が実行されて記事の校正が行われます。
+PRを作成すると、以下のようにGemini CLIが実行され、記事の校正が行われます。
 
-校正結果は、PRのコメントにして出力するようにしています。
+校正結果は、PRのコメントとして出力するようにしています。
 
 // ここ画像
 
@@ -34,26 +34,26 @@ PR を作成したら以下のように Gemini CLI が実行されて記事の
 
 ### 必要なもの
 
-* [Google AI Studio](https://aistudio.google.com) の API KEY
-  * Gemini CLI を使うために必要。[Gemini CLI は Google AI Studio の API でも動きます。](https://github.com/google-gemini/gemini-cli?tab=readme-ov-file#use-a-gemini-api-key)
+* [Google AI Studio](https://aistudio.google.com)のAPIキー
+  * Gemini CLIを使うために必要です。[Gemini CLIはGoogle AI StudioのAPIでも動作します。](https://github.com/google-gemini/gemini-cli?tab=readme-ov-file#use-a-gemini-api-key)
 
 ### 事前準備
 
-Google AI Studio の API KEY をリポジトリの Secrets に登録します。
+Google AI StudioのAPIキーをリポジトリのSecretsに登録します。
 
-API KEY の名前は `GEMINI_API_KEY` とすること。
+APIキーの名前は`GEMINI_API_KEY`とします。
 
 ![](./images/ss-2025-07-06-13-31-51.jpg)
 
-### Workflow のコード
+### Workflowのコード
 
-以下のコードを `.github/workflows/gemini.yml` に追加します。
+以下のコードを`.github/workflows/gemini.yml`に追加します。
 
-大したことはしていない。
+大したことはしていません。
 
-一応注意として下記のコードは、 `src/content/**/*.md` のパスにある Markdown ファイルが変更されたときに、Gemini CLI を使って記事の校正を行います。
+注意点として、下記のコードは`src/content/**/*.md`のパスにあるMarkdownファイルが変更された際に、Gemini CLIを使って記事の校正を行います。
 
-適宜パスを変更してください。
+必要に応じてパスは変更してください。
 
 ```yaml
 name: Correction AI
@@ -172,25 +172,23 @@ jobs:
           edit-mode: replace
 ```
 
-## 大変だったところ
+## 大変だった点
 
-###  gemini-cli-action が使えなかった
+### gemini-cli-actionが使えなかった
 
-Google 先生の Github をみると Github Action 用に `gemini-cli-action` というものが用意されています。
+GoogleのGitHubリポジトリを見ると、GitHub Actions用に`gemini-cli-action`というものが用意されています。
 
 https://github.com/google-gemini/gemini-cli-action
 
-はじめは、これを利用してなんとかしようとしました。
+はじめはこれを利用しようとしましたが、Geminiからの結果をPRコメントに渡す処理(name: Comment on PR)でうまく受け取れませんでした。
 
-しかし、Gemini からの結果をPRコメントに渡す処理(name: Comment on PR)で受け取れませんでした。
+Geminiに色々とお願いしたものの、解決しなかったため、nodeをインストールして[gemini-cli](https://github.com/google-gemini/gemini-cli)を直接使うことにしました。
 
-Gemini に色々とお願いしたのですが、うまくいかなかったので node インストールして、 [gemini-cli](https://github.com/google-gemini/gemini-cli) を直接使うことにしました。
+### Geminiへのプロンプト
 
-### Gemini へのプロンプト
+Geminiへのプロンプトは、試行錯誤を重ねました。
 
-Gemini へのプロンプトは、色々と試行錯誤しました。
-
-色々と試した結果、以下のプロンプトが一番うまくいきました。
+色々と試した結果、以下のプロンプトが最も効果的でした。
 
 ```text
 Markdown形式の記事を、レイアウトやコードブロック、見出し、リストなどの構造は一切変更せずに、日本語として自然で読みやすい文章に校正してください。
@@ -204,12 +202,12 @@ Markdown形式の記事を、レイアウトやコードブロック、見出し
   記事は、以下のpathにあるので読み込んでください。
   ${{ steps.get_files.outputs.content }}"
 
-記事は、以下の内容から取得します。
-${{ steps.get_files.outputs.content }} // ファイルパス
+記事は、以下のpathにあるので読み込んでください。 \n \
+${{ steps.get_files.outputs.content }}"
 ```
 
 ## まとめ
 
-Gemini CLI を使って、Github Actions から記事の校正を自動化する方法を紹介しました。
+Gemini CLIを使い、GitHub Actionsから記事の校正を自動化する方法を紹介しました。
 
-一人で記事を書いてて、文字校正めんどくさいと思っている人は是非AIの力を借りてみてください。
+一人で記事を書いていて文字校正が面倒だと感じている方は、是非AIの力を借りてみてください。