0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GAS × Google Workspace StudioでSNS投稿を自動化する【第1回:操作記録からQiita投稿まで】

0
Posted at

はじめに

備忘録と情報展開のために、普段のブラウザ操作を記録し、その内容からQiitaやSNS向けの記事を生成・投稿する仕組みを構築しています。
この仕組みは、SNS投稿だけでなく、操作マニュアルの作成にも応用できると考えています。

本記事では、Google Apps Script(GAS)、Google Drive、Google Sheets、Google Docs、Google Workspace Studio、Qiita APIを組み合わせ、記事原稿の生成から人間の確認、承認、投稿までをつなぐ方法を紹介します。

この記事も、今回構築した仕組みで原稿を準備し、人間が内容と機密情報を確認・承認した後、Qiita APIを通じて投稿しています。

現時点では人間による最終確認を必須としているため、完全自動投稿ではなく、「承認付き自動投稿」として設計しています。

こんな人におすすめ

  • 技術ブログを書きたいが、記録の整理や文章化に時間を取られている人
  • GASを使ってGoogle Workspace内の作業を自動化したい人
  • AIを業務フローへ組み込みつつ、人間による確認工程も残したい人
  • QiitaやSNSへの投稿作業を一元管理したい人

このシリーズで作るもの

最終的には、次の流れを自動化します。

  1. Chrome拡張でブラウザ操作とスクリーンショットを記録する
  2. 操作記録をGoogle DriveとGoogle Sheetsへ保存する
  3. Google Workspace StudioでQiita原稿を生成する
  4. 人間がGoogle Docsで内容と画像を確認する
  5. GASサイドバーから媒体ごとに承認する
  6. Qiita、Instagram、ThreadsへAPIで投稿する
  7. 投稿結果、公開URL、エラーをGoogle Sheetsへ記録する

第1回では、サンプルの操作記録を使って、Qiita原稿の生成・承認とQiita API接続までを扱います。

Chrome拡張による実際の操作記録、Instagram・Threadsへの投稿、予約投稿、Discord通知は今後の回で実装します。

なぜこの仕組みを作るのか

作業内容を記録として残し、他の人にも共有したいと思っても、スクリーンショットの整理や文章化、媒体ごとの書き換え、投稿作業が負担になると、継続が難しくなります。

そこで、人間が行う作業を「内容確認と最終承認」に絞り、それ以外をできるだけGoogle Workspace上でつなぐことを目標にしました。

AIの従量課金APIは使用せず、Google Workspace契約内で利用できるGoogle Workspace StudioのGeminiを文章生成に使います。

全体構成

今回の構成は次の通りです。

  • Google Drive: 操作記録、画像、原稿、プロンプト、ログを保存
  • Google Sheets: 記事、手順、画像、投稿、実行履歴、設定を管理
  • Google Docs: AI入力資料と人間が確認する投稿原稿を保存
  • Google Workspace Studio: GeminiによるQiita・SNS原稿生成
  • GAS: 状態管理、承認UI、監視、再試行、API連携を担当
  • Qiita API: 承認済みの記事を投稿
  • clasp: GASコードをローカルで管理して反映

処理の流れ

ブラウザ操作・スクリーンショット
        ↓
Google Drive / Google Sheetsへ保存
        ↓
Google Workspace Studioで原稿生成
        ↓
Google Docsで人間が確認・修正
        ↓
GASサイドバーで承認
        ↓
Qiita APIで投稿
        ↓
投稿ID・公開URL・エラーをSheetsへ記録

Google Driveのフォルダ構成

プロジェクト用フォルダの下に、用途別のフォルダを作成しました。

auto_SNS/
├── 00_管理
├── 01_操作記録
├── 02_記事
├── 03_画像
├── 04_プロンプト
├── 05_ログ
└── 99_一時ファイル

フォルダIDはGoogle Sheetsへ直接書かず、GASのスクリプトプロパティで管理しています。

Google Sheetsの管理テーブル

1つのスプレッドシートに、次のシートを作成しました。

シート 用途
articles 記事単位のタイトル、状態、Qiita原稿URL
steps 操作手順、URL、クリック対象、説明
assets スクリーンショットや生成画像
masks 機密情報のマスク範囲
posts 媒体ごとの原稿、承認、予約、投稿結果
prompts AI生成プロンプトとバージョン
runs 処理結果、再試行、エラー履歴
settings 人間が変更する運用設定

投稿状態は、GENERATINGREVIEW_REQUIREDAPPROVEDPUBLISHEDFAILEDなどで管理します。

GASとclaspの準備

Google Sheetsに紐づくGASプロジェクトを作成し、claspでローカルへクローンしました。

npm install -g @google/clasp
clasp login
clasp clone <SCRIPT_ID>
clasp push

タイムゾーンはappsscript.jsonAsia/Tokyoに固定しています。

秘密情報はスクリプトプロパティへ保存し、Git、Google Sheets、実行ログには出力しません。

Workspace StudioでQiita原稿を生成する

GASでarticlesstepsassetsの情報をGoogle Docsへまとめ、Workspace Studioの入力資料として使用します。

Workspace Studioのフローは、概ね次の3ステップです。

  1. Google Sheetsの対象行変更を検知する
  2. GeminiへAI入力資料と生成指示を渡す
  3. 生成した原稿をGoogle Docsとして保存する

生成指示には、次の制約を入れています。

  • 日本語のMarkdownで作成する
  • 記録にない事実を断定しない
  • 不明点やAI補足を人間が識別できるようにする
  • 機密情報を出力しない
  • 操作手順、注意事項、完了確認を含める

Geminiへ渡す生成指示の例

実際のプロンプトはGoogle Driveでバージョン管理しています。以下は、設計意図が分かるように簡略化した例です。

添付されたAI入力資料に記録された操作手順と画像を使用し、
日本語のQiita記事をMarkdownで作成してください。

記録にない事実を断定しないでください。
不明点やAIが補足した内容には「AI補足・要確認」と明記してください。
概要、目的、前提条件、番号付きの操作手順、注意事項、
完了確認を含めてください。
完成した記事本文だけを出力してください。

GAS側では、記事、操作手順、画像を記事IDで関連付け、1つのGoogle Docsへ整形してからWorkspace Studioへ渡します。これにより、Geminiへ渡す情報源を限定し、記録にない内容が混ざる可能性を減らしています。

GASは生成中の記事を定期監視し、完成したGoogle Docsを検出すると、REVIEW_REQUIREDへ更新します。

生成がタイムアウトした場合は再試行し、上限を超えたらFAILEDとしてrunsシートへ記録します。

人間による確認と承認

生成した原稿は、公開前に必ずGoogle Docsで確認します。

主な確認項目は次の通りです。

  • 記録にない内容が追加されていないか
  • アクセストークンや個人情報が含まれていないか
  • スクリーンショットに機密情報が写っていないか
  • 実装済み機能と今後の予定が混同されていないか
  • タイトル、本文、タグが適切か

確認後、articles.sensitive_data_checkedをオンにします。

GASサイドバーでは、選択中の記事、Qiita原稿へのリンク、媒体別状態、エラーを確認できます。機密確認が完了していない原稿は承認できません。

Qiita APIの準備

Qiitaの設定画面でアクセストークンを発行し、次のスコープを付与しました。

  • read_qiita
  • write_qiita

Qiita Team用のスコープは使用していません。

発行したトークンは、GASのスクリプトプロパティQIITA_ACCESS_TOKENへ保存します。

疎通確認では、投稿を行わないGET /api/v2/authenticated_userを使用し、認証ユーザーを取得できることを確認しました。

投稿時に必要な安全対策

Qiita投稿処理には、少なくとも次の確認を入れます。

  • 記事とQiita投稿が承認済みである
  • 機密情報確認が完了している
  • 承認後に原稿が変更されていない
  • 既に外部投稿IDが保存されていない
  • 同じ記事を並行して投稿しない
  • APIエラーをrunsシートへ記録する
  • 投稿成功後にQiitaの記事IDと公開URLを保存する

この確認により、未承認投稿や二重投稿を防ぎます。

現在できていること

第1回の執筆時点では、次の機能を確認済みです。

  • DriveとSheetsの管理基盤
  • サンプル操作手順と画像の関連付け
  • Workspace StudioによるQiita原稿生成
  • Google Docsへの画像挿入
  • 生成監視、タイムアウト、再試行
  • GASサイドバーによるQiita・Instagram・Threadsの個別承認
  • 承認済みQiita原稿からInstagram・Threads原稿を生成
  • Qiita APIの認証確認

一方、次の機能は今後実装します。

  • Chrome拡張による実際のブラウザ操作記録
  • 画像へのクリック位置表示と機密情報マスク
  • Instagram用画像の生成とAPI投稿
  • Threads API投稿
  • 媒体ごとの予約投稿
  • Discord通知

この記事から持ち帰れること

この記事の構成を参考にすると、次のような承認付き投稿基盤を作れます。

  • Google Sheetsを簡易データベースとして記事と投稿状態を管理する
  • Google Workspace Studioを従量課金AI APIの代わりに文章生成へ利用する
  • Google Docsを人間による確認・修正画面として使う
  • GASサイドバーで未確認原稿の承認を防ぐ
  • スクリプトプロパティでAPIトークンを安全に管理する
  • 実行履歴とエラーを残し、再試行や二重投稿防止へつなげる

まとめ

Google Workspaceを中心に構成することで、操作記録、原稿生成、人間の確認、承認、API投稿を1つの流れとして管理できるようになりました。

重要なのは、AIへ投稿を丸投げせず、事実確認と機密情報確認を人間の承認工程として残すことです。

次回は、承認済みQiita原稿からInstagramとThreadsの原稿を生成し、媒体ごとに個別承認・差し戻しする仕組みを紹介します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?