概要
X(旧Twitter)上には、某格闘ゲームの技名や、某テレビ番組の名前をランダムに並び替えて投稿するbotがありますよね。
今回の記事では、Serverless Frameworkを使って簡単にX botを作成します!
準備
nodeのインストール
$ brew install node
Serverless Frameworkのインストール
$ npm i serverless -g
awscliのインストール
$ brew install awscli
次にIAMを作成して、発行したアクセスキーとシークレットアクセスキーをAWS CLIに設定します。(IAMの作成方法については今回は省略します。)
$ aws configure
AWS Access Key ID [None]: アクセスキーを入力
AWS Secret Access Key [None]: シークレットアクセスキーを入力
Default region name [None]:
Default output format [None]:
次に、プロジェクトを作成しましょう!
プロジェクト作成
sls
コマンドを入力すると、プロジェクトを作成できます。
入力を求められたら以下を参考に適当に進めてください!
$ sls
✔ Select A Template: · AWS / Node.js / HTTP API
✔ Name Your Project: · xbot
✔ Create Or Select An Existing App: · Create A New App
✔ Name Your New App: · xbot
プロジェクトが作成されたら、ディレクトリを移動します。
$ cd xbot
以上で準備は完了です!
実装
handler.js
ファイルを以下の内容に書き換えます。
今回は「Switch2当選しますように!」と複数回呟くコードにしています。(現在の筆者の心の叫び)
この部分は好きに書き換えてください。
const { TwitterApi } = require('twitter-api-v2');
// ツイート内容を生成
const makeTweet = () => {
const times = Math.floor(Math.random() * 5) + 1;
return Array(times).fill('Switch2当選しますように!').join(' ');
};
// ツイート処理
module.exports.hello = async () => {
const twitter = new TwitterApi({
appKey: process.env.X_API_KEY,
appSecret: process.env.X_API_KEY_SECRET,
accessToken: process.env.X_ACCESS_TOKEN,
accessSecret: process.env.X_ACCESS_TOKEN_SECRET,
});
const result = await twitter.v2.tweet(makeTweet());
return {
statusCode: 200,
body: JSON.stringify({ message: 'succeed!' })
};
};
環境変数の設定
プロジェクト直下にenv.yml
ファイルを作成し、以下の情報を記述します。
これらの値は、Xの開発者ポータルから発行してください!
※発行した後、ツイートできるように開発者ポータルで権限を修正する必要があるので注意してください。
X_ACCESS_TOKEN: xxx
X_ACCESS_TOKEN_SECRET: xxx
X_API_KEY: xxx
X_API_KEY_SECRET: xxx
設定ファイルの編集
serverless.yml
のprovider
に以下の行を追加します。
provider:
name: aws
runtime: nodejs20.x
environment: ${file(./env.yml)} # 追加
必要なパッケージのインストール
$ npm install twitter-api-v2
いざ、AWSへデプロイ
以下コマンドを実行すると、AWS Lambdaにアップロードされます。
$ sls deploy
デプロイが完了すると、エンドポイントURLが表示されます。
そのURLにアクセスするとLambda関数が実行され、ツイートが投稿されます!
レスポンスとして{"message":"succeed!"}
と返ってきたら成功です!🎉
自分のXアカウントを確認して、投稿されているか確認しましょう!
できてそうですね!
このままだと毎回URLにアクセスする必要がありますが、EventBridgeを使って定期実行するように設定することもできます。設定方法は今回は省略しますが、比較的簡単にできるので、ぜひ試してみてください。
デプロイしたLambda関数の削除方法
以下コマンドを実行することで、今回デプロイしたリソースを削除できます。
$ sls remove
まとめ
今回はServerless Frameworkを使って、簡単にX botを作成しました。Amazon Bedrockなどと連携してAIに内容を考えさせて投稿するbotなども作ることができるので、ぜひ色々な応用を効かせて楽しんでみてください!