SODA Engineering Blog

GASでMagicPodにアップロードされた複数のアプリを削除する

に公開

こんにちは。SODAでクオリティエンジニアをやっているokauchiです。
今回はMagicPodにアップロードされたアプリをUIに頼らずGASで削除するというテーマになります!
紹介するのはモバイルアプリ版ですが、Web版も似たような仕組みで実装できるかもしれません。

以下のGASを作成しよう

function deleteMagicPodFilesFromSheet() {
  // 設定
  const API_KEY = 'YOUR_API_KEY'; // ← ここに取得したAPIキーを入力
  const ORGANIZATION_NAME = "YOUR_ORGANIZATION";  // ← 組織名を入力
  const PROJECT_ID = 'YOUR_PROJECT_ID'; // ← プロジェクトIDを入力
  const SHEET_NAME = 'Delete File'; // シート名

  // シートから開始番号と終了番号を読み取る
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  const startNumber = sheet.getRange('B1').getValue();
  const endNumber = sheet.getRange('B2').getValue();

  if (isNaN(startNumber) || isNaN(endNumber)) {
    Logger.log('開始番号または終了番号が無効です。');
    return;
  }

  // 開始番号から終了番号までのファイル ID に対して処理を行う
  for (let fileId = startNumber; fileId <= endNumber; fileId++) {
    deleteMagicPodFile(API_KEY, ORGANIZATION_NAME, PROJECT_ID, fileId);
  }
}

function deleteMagicPodFile(apiKey, organizationName, projectId, fileId) {
  const url = `https://app.magicpod.com/api/v1.0/${organizationName}/${projectId}/delete-file/`;
  const requestBody = {
    "app_file_number": fileId
  };
  const options = {
    method: 'delete',
    headers: {
      "Authorization": `Token ${apiKey}`,
      "Content-Type": "application/json"
    },
    payload: JSON.stringify(requestBody),
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const responseCode = response.getResponseCode();

    if (responseCode === 200) {
      Logger.log(`ファイル ID ${fileId} の削除成功`);
    } else {
      Logger.log(`ファイル ID ${fileId} の削除失敗: ${responseCode}`);
      Logger.log(response.getContentText());
    }
  } catch (e) {
    Logger.log(`ファイル ID ${fileId} のエラー: ${e}`);
  }
}

概要
Delete Fileシートという名前のスプレッドシートのB1セル,B2セルに入力した番号のプロジェクトに登録されているアプリを削除します。
例としてB1セルに10,B2セルに20と入力されていると、10から20までの合計11Appファイルを削除するという動きをします。

必要になった背景
アプリチームに協力してもらい、日々最新のDevアプリをMagicPodにアップロードすることができるようになりました。これによって手動でアップロードやAppファイルを依頼することなく、最新のAppでMagicPodのテストケースを動かせるようになりました。
一方で変更があってもなくても毎日新しいバージョンでアプリがアップロードされる為、今度はMagicPod上にAppファイルが溜まり過ぎてしまうことになります。特にアップロード出来るAppファイルの上限はなさそうですが、だからといって必要のないものをいつまでも残しておく必要はありません。
記事執筆現在のMagicPodでは、UIで削除をしようとすると1つずつ選んで削除することしか出来なさそうなのでAPIを用いて削除する仕組みを作りました。

という記事を少し温めていたらMagicPod MCPが誕生していました
MagicPodさんの記事はコチラです!
私自身まだ試せていないのですが、MCPの力を借りれば、いつアップロードされたファイルなのかを確認しつつ、削除が出来そうですね!GASで行うことで比較的ライトに導入ができるという所でまだ優位性があるかなと思いこの記事を公開しています。何かの参考になれば幸いです!

SODA Engineering Blog
SODA Engineering Blog

Discussion