🧑‍🎨

GitHub Issue上でコンセプト/WFを簡単に生成する GitHub Action「eidosai」

に公開

普段はPdM兼エンジニアとして働いており、要件などをGitHubのIssue上で管理しています。

最近、GitHub Issueに要件を書いたあと伝えるために「絵にするとしたらどんな感じ?」ってなることが多く、Figma Makeとかもありますがさっと画像を作ろうかなという時にテキストをコピーして…貼り付けて…みたいなのが面倒だったので、Issueの中でそのまま“たたき台の絵”まで出せるやつを作ってみました。
それが eidosai です。

概要

GitHub Issue上で @eidosai にメンションして指示を出すと、Issue本文・コメントから要件を要約して、Gemini画像生成API でコンセプト画像やワイヤーフレーム(WF)などを生成し、Issueコメントに貼り付けてくれます。

リポジトリ: https://github.com/hosshan/eidosai

about eidosai

ざっくりの処理の流れ

  1. Issue本文に要件を書く
  2. コメントで @eidosai wf / @eidosai concept などをメンション
  3. Actionが動いて要件を要約
  4. 画像を生成
  5. 生成画像をGCSへアップロード
  6. 署名付きURLを作ってIssueコメントに貼る

できること

基本コマンド

  • @eidosai wf
    • ワイヤーフレーム画像を生成(デフォルト: 4枚)
  • @eidosai concept
    • コンセプト画像を生成(デフォルト: 2枚)
  • @eidosai modify
    • 既存画面を参考に修正版を生成(デフォルト: 2枚)
  • @eidosai "説明文" または @eidosai custom "説明文"
    • カスタム画像を生成(デフォルト: 2枚)

オプション

  • --count / -c \<数値\>
    • 画像生成枚数を指定
    • 例: @eidosai wf --count 6
  • --no-issue-body
    • Issue本文をコンテキストから除外し、コメント本文のみを使用
    • 例: @eidosai wf --no-issue-body

複数のオプションを組み合わせて使用できます。

  • 例: @eidosai wf --count 6 --no-issue-body

使用例

実際の使用画像

例1:ワイヤーフレーム生成

コメント:

  • @eidosai wf
  • @eidosai wf --count 6

例2:コンセプト画像生成

コメント:

  • @eidosai concept
  • @eidosai concept --count 3

例3:カスタム画像生成

コメント:

  • @eidosai "モダンで親しみやすいアイコンデザイン、グラデーションを使用"

例4:画面修正(modify)

コメント:

@eidosai modify この画面に「保存」ボタンを追加してください。 !\[現在の画面\](画像URL)

注意: 画像はMarkdown形式 !\[alt\](url) で記述してください。複数の画像がある場合、すべての画像が参考として使用されます。

セットアップ

1. リポジトリにワークフローを追加

.github/workflows/eidosai.yml を作成します。

name: eidosai Action

on:
  issue_comment:
    types: [created]
  issues:
    types: [opened, edited]

permissions:
  issues: write
  pull-requests: write
  contents: read

jobs:
  eidosai:
    runs-on: ubuntu-latest
    if: contains(github.event.comment.body, '@eidosai') || contains(github.event.issue.body, '@eidosai')

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Run eidosai Action
        uses: hosshan/eidosai@v1.0.0
        with:
          github-token: $ secrets.GITHUB_TOKEN 
          ai-api-key: $ secrets.EIDOSAI_AI_API_KEY 
          ai-provider: 'gemini'
          model-name: 'gemini-3-pro-image-preview'
          gcs-project-id: $ vars.GCS_PROJECT_ID 
          gcs-bucket-name: $ vars.GCS_BUCKET_NAME 
          gcs-service-account-key: $ secrets.GCS_SERVICE_ACCOUNT_KEY 
          gcs-signed-url-expiry: '2592000' # 30日(オプション)

※今のところAI Providerは gemini だけサポートしています。

2. シークレットと変数の設定

リポジトリの Settings → Secrets and variables → Actions で以下を設定します。

Secrets(機密情報)

  • EIDOSAI_AI_API_KEY(Gemini APIキーなど。必須)
  • GCS_SERVICE_ACCOUNT_KEY(Google Cloud Storage サービスアカウントキー。JSON文字列。必須)

Variables(非機密情報)

  • GCS_PROJECT_ID(必須)
  • GCS_BUCKET_NAME(必須)

GCSサービスアカウントキーの取得方法

  1. Google Cloud Console → IAM & Admin → Service Accounts
  2. サービスアカウントを作成または選択
  3. Keys タブで新しいキーを作成(JSON形式)
  4. ダウンロードしたJSONの内容を GCS_SERVICE_ACCOUNT_KEY に貼り付け

必要な権限

  • Storage Object Creator
  • Storage Object Viewer(署名付きURL生成のため)

GCSバケットの設定

  1. Cloud Storage → Buckets でバケットを作成
  2. サービスアカウントに roles/storage.objectCreatorroles/storage.objectViewer を付与
  3. (推奨)パブリックアクセスを無効化(署名付きURLを使うため不要)
  4. (オプション)ライフサイクルポリシーで古い画像を自動削除

システムプロンプトのカスタマイズ

GitHub Actionsの入力パラメータでプロンプトを差し替えできます。

カスタムプロンプトテンプレート

system-prompt-wfsystem-prompt-conceptsystem-prompt-customsystem-prompt-modify

使用可能なプレースホルダー

  • imageNumber:現在の画像番号(1から開始)
  • totalCount:生成する総画像数
  • aspect:現在のアスペクト
  • fullContext:Issue本文とコメント本文の結合
  • customInstruction:カスタム指示(customタイプの場合のみ)
  • commonContext:共通コンテキスト

カスタムアスペクト

system-prompt-wf-aspectssystem-prompt-concept-aspects で、画像ごとの焦点をカンマ区切りで指定できます。

例:

system-prompt-wf-aspects: "レイアウト構造,UIコンポーネント,ナビゲーション,インタラクション"

共通コンテキスト

system-prompt-common-context で、すべての画像タイプ共通の前提(サービス概要、ブランドガイドラインなど)を指定できます。

入力パラメータ一覧

パラメータ 説明 必須 デフォルト
github-token GitHub API アクセストークン はい -
ai-api-key AIプロバイダのAPIキー はい -
ai-provider 使用するAIプロバイダ いいえ gemini
model-name 使用するモデル名 いいえ gemini-3-pro-image-preview
gcs-project-id Google Cloud Storage プロジェクトID はい -
gcs-bucket-name Google Cloud Storage バケット名 はい -
gcs-service-account-key GCSサービスアカウントキー(JSON文字列) はい -
gcs-signed-url-expiry 署名付きURLの有効期限(秒) いいえ 2592000(30日)
system-prompt-wf WF用システムプロンプトテンプレート いいえ -
system-prompt-concept コンセプト用システムプロンプトテンプレート いいえ -
system-prompt-custom カスタム用システムプロンプトテンプレート いいえ -
system-prompt-modify modify用システムプロンプトテンプレート いいえ -
system-prompt-wf-aspects WF用アスペクト(カンマ区切り) いいえ -
system-prompt-concept-aspects コンセプト用アスペクト(カンマ区切り) いいえ -
system-prompt-common-context 共通コンテキスト いいえ -

おわりに

まだ作ったばかりで荒いところもあると思うのですが、もしよければ使ってみてください
Starや要望などフィードバックあれば、ありがたいです
リポジトリ: https://github.com/hosshan/eidosai

Discussion