BotB!著者:S.H.初稿:2019年8月18日はじめにみなさん、こんにちは。普段はCreatodonというMastodonサーバーの管理人をしています、S.H.と申します。今回は、下記のイベントで寄稿した記事に加筆したものをるびまにも寄稿させて頂きました。執筆者募集中です(公募型アンソロジー)今回書くものは、以前「#顔面工事」というハッシュタグを拡散するBotを作った際に得たノウハウをまとめたものになります。下記のリポジトリを見つつ、読み進めるとより楽しめると思います。本記事では、以下の環境にてBotを作成しました。Rubyランタイムのバージョンが2.5なので、Rubyの2.5系列がインストールされていれば問題ありません。Mastodonとは?Mastodonとは分散SNSと呼ばれるものの一つになります。数年前に日本でもMastodonブームが来たこともあり、ご存知の方もおられるかと思います。実装としてはバックエンドにRails、フロントエンドにReactが使用されています。Dockerイメージも公開されており手軽にサーバーを構築できます。Mastodonなどの分散SNSの魅力は自分でTwitterのようなSNSサービスを立ち上げ、運営することができる点です。自分のサーバーを構築すればアカウントの凍結などを気にする必要もないですし、MastodonではActivityPubというプロトコルを使い、他なサーバーとやり取りをすることができます。その為、別のサーバーのアカウントをフォローできますし、つぶやきなどを見ることもできます。他な分散SNSともやり取りをすることができます。他な分散SNSにはPleromaやMisskeyといったものがあります。それらの分散SNSもActivityPubを使用しています。その為、それらと相互にフォローしたり、つぶやきをお気に入りしたりということができます。分かりやすく言えば、TwitterとFacebookで互いにやり取りができるという状態ですね。ちなみに、海外のRubyistがruby.socialというRubyistのためのサーバーを公開しています。Lambdaについて少し解説します。LambdaとはAmazonが提供しているサービスの一つで、サーバーを意識しなくてもコードを実行する環境を提供するサービスです。そのためコードを書くことに集中できますし、コードを気軽に本番環境で動かすことができます。Lambdaはコードを実行した分だけの課金となっています。その為、Botなどで定期的にコードを実行するものを作成する際には非常に低コストで済みます。LaambdaでMastodonのハッシュタグをブーストするBotを作っていきます。AWSへのアカウント作成などは省略させていただきます。Lambdaを検索します。Lambdaの管理画面に移動して、関数の作成と書かれているボタンを選択します。その後、関数作成のフロー画面に移動します。関数名などを以下のように入力してください。2.5入力後、関数の作成をクリックして、関数を作成します。Lambdaに関数が作成されます。関数が作成されると画面が遷移します。遷移後の画面をスクロールすると、関数コードという項目でエディタ画面が見つかります。そこには既に以下のようなコードが作成されています。World!に修正してください。その後、画面上部にあるテストをクリックします。新しいテストの作成画面が表示されますので、イベント名にhelloworldと入力します。あとは作成をクリックし、テストを作成します。最後に、再び画面上部にあるテストをクリックします。すると、先ほど作成したテストが実行され、実行結果がログとして表示されます。MastodonインスタンスでBotのアカウントを作成Botを作成したいMastodonインスタンスにてBot用のアカウントを作成しましょう。作成後、ユーザー設定を開きます。開発タブをクリックします。新規アプリを作成します新規で作成するアプリの情報などを記入していきます。入力後、送信をクリックします。これで新しいアプリが作成されます。新しく作成したアプリをクリックします。アクセストークンを取得します。以上でMastodon側での設定は完了です。RubyでBotのコーディングそれでは、Botのコードを書いていきます。以下のようにGemfileを作成します。'1.1.0'次に、以下のようにbot.rbを作成します。endend実は、ハッシュタグをブーストするBotはたったこれだけのコードで実装できます。それではコードの内容を解説していきましょう。最初の二行で外部ライブラリを読み込むためのパスを設定しています。Lambdaではbundlerを使っての外部ライブラリ使用ができません。そのため、ローカルのディレクトリ内にライブラリのファイルを配置する必要があり、上記のコードで読込先を指定しています。次に、requireを使ってライブラリを読み込みます。lambda_handlerというメソッドを定義します。endendアクセストークンとインスタンスのURLを使い、Botへのアクセスができるようにします。“顔面工事”)すると、指定のハッシュタグをもつ投稿を取得できます。それをeachメソッドで一つずつ繰り返し、既にブースト済みかを判定してからブーストします。Lambdaへとデプロイしていきます。vendor/bundle実行すると、vendorディレクトリが作成されます。そこに、使用するライブラリのファイルが配置されています。あとは、bot.rb、vendorディレクトリをzip形式で圧縮します。Lamndaの先ほど作成したbot関数の画面を開きます。関数コードの項目内に、コードエントリタイプというものがあります。コードエントリタイプでzipファイルをアップロードを選択します。アップロードをクリックし、先ほど作成したzipファイルをアップロードします。bot.lambda_handlerに書き換えて保存します。次に、トリガーを追加という項目がありますので、それを選択します。トリガーの追加画面に切り替わります。Eventsを使用します。Watchと入力すると以下のように検索結果に表示されます。Watchを選択し、ルールの部分をクリックして新しいルールを作成します。新しいルールは以下のようにします。hour)各項目を入力後、追加をクリックします。Botの作成について解説を行いました。意外と簡単に定期実行のBotは作成できますので、皆さんも是非Botを作成してみてください。S-H-GAMELINKSRubyとC++が好きな人。株式会社侍にてRailsとか教えています。趣味でMastodonの周辺サービスとか色々やってます。