1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Zernioを使ってから毎日の「SNSコピペ作業」をやめた話【SNS投稿自動化】

1
Posted at

Threads、Bluesky、X……気づけば同じ文章を何回もコピペして貼り付けていませんか。

僕もしばらくそれをやっていたのですが、最近は「1箇所に書くだけで複数SNSに配信される」仕組みに切り替えました。今回はその内容を軽くご紹介します。

できるようになったこと

  • 投稿文を1つ書くだけで、複数のSNSへまとめて配信
  • 投稿日時を指定しておくだけで、勝手に予約投稿してくれる
  • 投稿が成功したか失敗したかも、あとで一覧で確認できる

特別なアプリを新しく覚える必要はなく、普段のGoogleスプレッドシートに書き込むだけというのがポイントです。

裏側で使っているもの

構成自体はいたってシンプルで、

  1. Googleスプレッドシート(入力・管理画面代わり)
  2. Google Apps Script(自動処理)
  3. Zernio(複数SNSをまとめて操作できる統合API)

の3つを組み合わせているだけです。Zernioは対応プラットフォームが幅広く、Instagram・Facebook・YouTube・TikTok・LinkedIn・X・Threads・Blueskyなど、接続すればスプレッドシート側にもすぐ反映されます。

BufferやSocialDogのような専用ツールに比べると初期設定はやや手間ですが、その分「自分の運用に合わせて自由にカスタマイズできる」のが個人的には気に入っているポイントです。

コードはこんな感じのものをGASに貼って運用している感じです


/**
 * Googleスプレッドシート × GAS × Zernio API
 *
 * 主な機能:
 * - Zernioに接続されているSNSアカウントを自動取得
 * - 接続済みSNSだけを投稿先プルダウンに表示
 * - 即時投稿・予約投稿
 * - 画像URL1枚の添付
 * - 結果・エラー内容の書き戻し
 *
 * APIキー:
 * Apps Scriptの「プロジェクトの設定」→「スクリプト プロパティ」に
 * ZERNIO_API_KEY という名前で登録してください。
 */

const CONFIG = {
  API_BASE_URL: 'https://zernio.com/api/v1',

  POST_SHEET_NAME: '投稿管理',
  SETTINGS_SHEET_NAME: '設定',

  TIMEZONE: 'Asia/Tokyo',
  ALL_TARGETS_LABEL: 'すべて',

  PROPERTY_KEYS: {
    API_KEY: 'ZERNIO_API_KEY'
  },

  STATUS: {
    DRAFT: '下書き',
    READY: '準備完了',
    SENT: '送信済み',
    ERROR: 'エラー'
  }
};


/**
 * スプレッドシートを開いた際に独自メニューを表示します。
 */
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('SNS自動投稿')
    .addItem('初期設定を実行', 'setupSheets')
    .addItem('接続アカウントを取得', 'syncZernioAccounts')
    .addItem('投稿先プルダウンを更新', 'updatePostTargetDropdown')
    .addSeparator()
    .addItem('選択した行を送信', 'postSelectedRow')
    .addItem('準備完了を一括送信', 'processReadyPosts')
    .addToUi();
}


/**
 * 設定シートの「投稿対象」を変更した際、投稿先プルダウンを更新します。
 */
function onEdit(e) {
  if (!e || !e.range) {
    return;
  }

  const sheet = e.range.getSheet();

  if (
    sheet.getName() === CONFIG.SETTINGS_SHEET_NAME &&
    e.range.getRow() >= 2 &&
    e.range.getColumn() === 5
  ) {
    updatePostTargetDropdown_();
  }
}


/**
 * 投稿管理シートと設定シートを作成・更新します。
 */
function setupSheets() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  // 旧「投稿日時」列を「投稿日」「投稿時刻」に自動分割します。
  migrateDateTimeColumns_(spreadsheet);

  setupPostSheet_(spreadsheet);
  setupSettingsSheet_(spreadsheet);
  migrateOldStatuses_();
  updatePostTargetDropdown_();

  SpreadsheetApp.getUi().alert(
    '初期設定が完了しました。\n\n' +
    '次の順番で設定してください。\n\n' +
    '1. Apps Scriptの「プロジェクトの設定」を開く\n' +
    '2. スクリプト プロパティに ZERNIO_API_KEY を登録\n' +
    '3. 「接続アカウントを取得」を実行'
  );
}

/**
 * 旧「投稿日時」列を「投稿日」と「投稿時刻」に分割します。
 *
 * 旧構成:
 * F: 投稿日時
 * G: ステータス
 *
 * 新構成:
 * F: 投稿日
 * G: 投稿時刻
 * H: ステータス
 *

唯一気をつけているポイント

ほとんどのSNSは無料枠の範囲で問題なく使えるのですが、Xだけは投稿のたびにAPI利用料がかかる仕組みになっています。特にリンク付きの投稿は単価が上がるため、記事URLを頻繁に投稿する運用だと想定より費用が積み上がることがあります。Xを組み込む場合は、月ごとの利用上限をあらかじめ設定しておくのがおすすめです。

気になった方へ

具体的なスプレッドシートの中身やGASの設定方法は、別の記事でじっくり解説しています。まずはZernio自体が無料で試せるので、気になる方はそちらから覗いてみるのもよいと思います。

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?