【X自動投稿】Makeデータベースを使ったデータ管理
こんにちは。今回は少しマニアックなテーマになりますので、かなり読者が絞られると思います(笑)
この記事は以下の方々に向けた記事となります。
Make』にあるデータベース(以降、DB)の機能を活用したい
ほぼ私自身の作業メモのようなものですが、役立つ情報を共有できればと思い、記事を書くことにしました。
先日、X(旧Twitter、以下「X」と表記)での自動ポストを実現する方法についての記事を執筆しました。このBotは現在も活発に稼働していますが、稼働当初からいくつかの課題がありました。今回は、これらの課題にどのように対処したのかについて解説したいと思います。
運用当初からの課題について
この自動ポストの仕組みはポストする元ネタをJSON形式のファイルにしてクラウドに配置し、そのファイルを読み込む方式になっています。
これがとてもイケてない。
そもそも、JSONファイルは大量のデータを管理するのには適していません。データ量が増えるにつれて、システムのパフォーマンスが低下し、データの整合性を維持するのが難しくなる可能性があります。
もともと、ポストするための元ネタは時間とともに増え続けると予想していました。しかし、自動ポスト機能を早く実装したいという思いから、手軽さを優先してJSONファイルをデータストアとして採用しました。
現在、自動ポストアカウントは順調に稼働していますが、いずれはより効率的なDB方式への移行したいと考えていました。今回、その移行する手順について解説していきたいと思います。
本記事のゴール
さて、やりたいことは2つあります。
① 既存のJSONファイルを読み込んでDBへデータを反映する
② 自動ポストしてるX(旧 Twitter)アカウントのデータ取得先をDBへ向ける
少し長くなってしまいそうなので、本記事は①を「データ移行編」として解説していきたいと思います。②の記事は①が完了してから読んでください。
システム構築手順
さて、ここから構築手順の解説をしていきます。
DBを作成する
以下のようなJSON形式のファイルがあります。このデータを『Make』に存在するDataStoreに収録していきます。
『Make』の左側にある「Data stores」を開いて右上の「Add data store」ボタンを押してください。
「Data structure name」に管理したいデータ郡の総称(テーブル名と思ってください)を記載してください。ここではTESTとしています。
次にカラムを命名します。今回は「WORD」という「Text」タイプのカラムを作りました。設定が終わったらSaveボタンを押してください。
Browserボタンを押して中身を確認してみましょう。
「WORD」カラムが作成されたことが確認できます。また、「key」カラムは自動作成されます。こちらに採番することでデータの整合性を保ちます。
Make上にモジュールを配置する
さて、Make上のモジュールは以下のように配置しています。
各モジュールの具体的な機能とその設定値について詳しく説明します。
『Google Drive』<Download a file>モジュール
GoogleDrive上に保存されてるファイルを読み込みます。File ID項目に読み込みしたいファイル名を指定してください。
『JSON』<Parse JSON>モジュール
GoogleDriveで読み込んだファイルをJSON形式のデータファイルとして認識させます。
『Array aggregator』モジュール
JSON形式のデータをリスト化します。ここまでの操作により、JSONファイルのデータをリストとして保持できるようになりました。
『Iterator』モジュール
複数行をのレコードを挿入する場合はこちらのモジュールが必須となります。指定した配列の長さの分だけ繰り返し処理をします。
『Tools』<Increment function>モジュール
keyカラムへの採番用の値です。繰り返しの数を取得することができます。
『Data store』<Add/replace a record>モジュール
リストのデータをDBへ挿入します。Key項目には『Tools』モジュールで取得した値、WORD項目には『Iterator』モジュール で取得したリストの値をセットします。
これで実装は終わりです。
シナリオを実行する
実行してみましょう!「Run once」ボタンを押してみてください。DBにJSONファイルのデータが格納されていれば成功です。
まとめ
今回はJSONファイルのデータをMake上にあるData storeに移行する手順について解説しました。冒頭に申し上げた通り、少しマニアックな話題でしたが想像してたよりも簡単に実施することができました。また次回。