見出し画像

政治家や活動家の発信を見逃さないために、誰でも使えるツールをつくる①

 参議院選挙2022が終了した。終わってみれば与党圧勝、野党第一党が議席を減らすなど、前回(2019年)からの世界情勢の不可逆的変化・日本国内の叫びにも似た声を反映しているようにも見える。

 このような状況を見て自分に何ができるか考えた。そして、「誰でも手軽に政治家あるいは活動家の発信に目を光らせられる仕組みを作れば、不埒な政治家は襟を正し、過激な活動家は鳴りを潜め、ひいては一般の人々の政治参画を促せるのではないか」と思い至った。

 こういう経緯があって、自分が普段使っていた雑なスクリプトを綺麗に書き換えて〈文章さえ読めれば誰でも Twitter 上の発信を定期的に自動で収集できる〉ようになるツール、SATwi: 察威 を作成した。以下にその導入方法と使い方、今後の展望を述べる。

概要

 いにしえの作法に従って産業で紹介すると、以下の通り:

  1. プログラミングが全くわからなくても扱えるツールをつくった

  2. 簡単な設定を行なうことで、対象アカウントが 発信した / 言及されたツイート / いいねしたツイートを定期的に取得できる

  3. 機能はまだまだ少ないので今後も改善する

 ※本記事で説明する項目については README にも全部説明が書いてある。ただし、そちらはグローバルに展開することを見据えてすべて英語表記となっている。必要最低限だけ知りたい場合はそちらを参考にされたい。

導入方法

  1. GitHub アカウントを取得する

  2. Twitter 開発者アカウントを取得する

  3. Twitter Developer Portal にて BEARER_TOKEN を入手する

  4. SATwi を "インポート" する

  5. Actions を有効化する

 まずやるべきは、GitHub のアカウントを取得することである(そもそもGitHub とはなんぞや?という説明は本記事では省略する)。このサービスを使うことで ①プログラムを実行する計算機環境(GitHub Actions) ②集めたデータを保存するストレージ(リポジトリと呼ばれる) をすべて無料(!)で確保できる。以下のリンクからサインアップしてほしい。

 次は、Twitter の開発者アカウントを取得する。なお、仕様上「開発者アカウントだけ独自に取得する」ことはできず、いずれかの一般ユーザアカウントに対して開発者権限を付与する形となっている。

 もし未だアカウントを持っていない場合や、普段使いするアカウントを開発者アカウントとして流用したくないという場合は、新規にアカウントを作成することになる。いずれにせよ、以下のリンクからアクセスすれば Twitter 側で選択肢を提示してくれること思う。そちらの指示を参考にされたい。

 また、開発者アカウント作成の際には質問フォームを埋める必要がある。簡単な英語が読める / 書ける程度であれば問題はないと思われるが、一人で進めるのは不安という方は以下の検索結果を参考にするとよい:

 無事に Twitter の開発者アカウントを開設できただろうか。次は、開発者ポータルにアクセスする。そして、BEARER_TOKEN (ベアラートークン)を入手しよう。以下の Twitter 公式による説明が詳しく、かつわかりやすいため、そちらを参照されたい:

 そして、再度 GitHub に戻って SATwi のリポジトリを "フォーク" する(見慣れない単語かもしれないが、「コピー」とか「複製」に近いニュアンスのものと考えてほしい; GitHub においてはこのワードが使用されている)。ただし、GitHub 公式が提供する通常のフォークは使わないことに注意してほしい。なぜなら、そのようにフォークしたリポジトリは公開範囲を「非公開」に設定することができないからだ(これにはセキュリティ上の理由があるらしいが割愛)。

 代わりに、SATwi のリポジトリを "インポート" する。こうすることで擬似的なフォークを実現できたことになる。具体的なやり方については、以下の GitHub 公式による説明がわかりやすい。次に示す SATwi の URL を [インポートするプロジェクト] のフォームに入力し、公開範囲を Private に変更した上で 新規リポジトリを作成してほしい。

https://github.com/Ningensei848/SATwi

 最後に、インポートしてきたリポジトリの [settings] > [Actions] を選択し、[Actions permissions] を変更する。初期状態では "Disable Action" となっており、ワークフローが一切実行されない。これを "Allow all actions and reusable workflows" に変更し、[save] する。もちろんすべてに許可するのが許せないのであれば、別の選択肢をよく読んでそちらに設定しても構わない。こうして、晴れて Private に SATwi がインポートされたはずだ。

 ※念のため、公開範囲の設定が Private ではなく Public で SATwi が実行された場合には、起動することはできてもデータが収集できないような仕組みを備えている。ただし、万が一その設定を解除して Public にツイートデータを公開した状態に陥った場合、それだけで Twitter 社の規約違反となるし、著作権侵害として訴えられる可能性もあることに留意されたし…!!

 これにて下準備は完了した。ここまでお疲れ様でした。

初期設定

 以下、SATwi が Private な状態におかれている前提で説明を続ける。このツールにおける設定項目には、次の3つが存在する:

  1. targets

  2. parameters

  3. schedule

 なお、targets と schedule においてはリポジトリ内のファイルの内容を変更する必要がある。スマホやPC上でファイルを編集するための「テキストエディタ」を持っていないという人も多いだろうが、その際にはGitHub に備え付けのエディタか github.dev を使うとよいだろう。これらは特定のアプリ等を必要とせず、ブラウザ上だけで直接編集することができる。

画面右上にあるペンのアイコンをクリックするとファイルエディタが開く
画面右上にあるペンのアイコンをクリックするとファイルエディタが開く

 ※備え付けテキストエディタでは、ファイルを一つずつしか更新できないことに注意すべし。もう一つのツールである github .dev では複数ファイルを並行して編集できるが、VSCode の UI に慣れていないと戸惑うこともあるかもしれない。

Targets: 対象アカウントの ID リスト

 Twitter ではアカウントのスクリーンネームとは別に、固有の ID が個々人に割り振られている。これはスクリーンネームを変更しても変わることがない永続的な属性である。"Twitter アカウント ID" といったクエリで検索すれば、どうやって ID を知ることが出来るのか調べられるだろう。

 この ID を "targetList.txt" に一行ごと書き込んでおくことで、その ID を持つアカウントのツイートを取得することができる。一人だけではなく、複数人指定することも可能である。

1247032696586436609 # kishida230: 岸田文雄
903338594 # sugawitter: 菅義偉
468122115 # AbeShinzo: 安倍晋三

 各行に書かれた先頭の数字列(一つあるいは複数の数字の連続)ひとつを ID として読み込み、それ以降の文字はすべて無視する仕様である。カンマ等で区切って二つ以上を横方向に並べても、二つ目以降は無視されてしまうことに注意せよ。

 ※このような仕様にした理由として、ID の羅列を並べるだけではどの ID が誰のものだったのかわかりにくいという問題があったことが挙げられる。ID だけをひたすらに並べても SATwi は問題なく読み取ってくれるが、第三者あるいは未来の自分が見たときに一目でわかりやすいように、「#」より後にスクリーンネームや表示名をメモ書きとして残しておくとよいだろう。

Parameters: 振る舞いを定める変数

 いくつかの変数を指定することで、実行されるスクリプトの振る舞いを制御することができる。現時点ではまだまだ数が少ないが、今後実装される機能が増えるに従って、設定可能な項目も増えていくだろう。

 変数には認証情報も含まれるため、外部にもれないように扱う必要がある。そこで、リポジトリ内に暗号化されたシークレット変数を作成する。以下のリンク先に詳しい説明がある。こちらを参考にしつつ、必要な変数を入力してほしい:

左側サイドバーの下の方に [Secrets] > [Actions] があるはず

 以下の項目について、required となっているのは SATwi が正常に機能するために必要不可欠なものである。一方で optional となっている項目は、設定してもしなくてもよい。

 BEARER_TOKEN (required) には、Twitter 開発者ポータルで取得したトークンを入力する。これが設定されていないと Twitter API を利用することができないため、指定が必須の項目となっている。 

 ENABLE_MENTION (optional, default is "false") は、対象「から」発信されたツイートだけでなく、対象「に対して」発信されたツイート(すなわちリプライ/メンション)も集めるようにする変数である。対象の周囲に存在する別のアカウント群の情報を得られる代わりに、ツイート取得上限に到達しやすくなることがデメリットとして挙げられる。少数の対象に絞るなど、多少の工夫が必要になるかもしれない。"1" あるいは "True" を指定することで有効となる。

 ENABLE_LIKED_TWEETS (optional, default is "false") は、対象がいいねしたツイートのうち、直近100件を集めるようにする変数である。これは Like を管轄する Twitter のエンドポイントは取得できる範囲を定めていないため、TIME_RANGE 変数で時間を限定できず、無際限に過去のいいねを取得してしまうことを防ぐための措置である。"1" あるいは "True" を指定することで有効となる。

 TIME_RANGE (optional, default is 25) は、実行される際にどれくらい過去の時間まで遡ってツイートを取得するのかを決める変数である。例えば、24 であれば、24 時間分過去に遡る(最大は99時間)。
 次の <Schedule> において 「24時間に一回実行する」ように設定してある場合、TIME_RANGE をそれより小さい数値に指定するとデータの取りこぼしが発生する。かといって、実行される周期と厳密に同じ時間幅を指定しても多少は取りこぼしてしまうリスクがある。これは定期的に実行されるタイミングには多少のブレがあり、最大で15~30分程度ほどカバーできない可能性があるからだ。よって、+1h 程度の安全マージンを取ることをおすすめする。

例1:Schedule が 24 時間に一回 → 24 + 1 = 25 を TIME_RANGE に指定
例2:Schedule が 6 時間に一回 → 6 + 1 = 7 を TIME_RANGE に指定

Schedule: 定期的に実行すべき頻度

 GitHub Actions のおかげで、ファイルに設定をまとめてあれば何もしなくとも自動で定期的にスクリプトを実行できるようになった。

 この「定期的」に実行する頻度を決めるのが POSIX cron syntax である。"cron" や "crontab" で検索すると、様々な指定方法が存在していることがわかるだろう。詳しい設定方法はそちらを見てほしい。

 次の例は、「毎日 05:30, 17:30 に実行する」と指定されている:

on:
  schedule:
    # * is a special character in YAML so you have to quote this string
    - cron:  '30 5,17 * * *'

 ※ただし、GitHub Actions は最低実行間隔が 5 min, 月ごとの累計実行時間上限が 2,000 min となっており、あまり間隔を短く設定しすぎると、制限に引っかかってしまい、実行されなくなる可能性もある。そうそう超えることはないだろうが、頭の片隅においておくとよいだろう。

まとめ

 ここまで追い付いてきていれば、指定期間中に発信された対象アカウント群のツイートを任意の実行頻度で全取得できるようになっているだろう。これで誰がどのような発信をしていたのか、たとえツイートが消されてもあなたの手元には証拠が残ることになる。

 プロジェクトの第一段階は、取り敢えずここまでとする。賢明な諸兄であればタイトルから察しただろうが、このツールはただツイートを集めるだけに留まらない。戦闘力53万を有する宇宙の帝王に倣って言えば、SATwi はまだあと N 段階の変身を残している。その意味がわかるかな……?

あとがきと今後の展望

 いち有権者として思うのは、「もっとポジティブな理由で参院選に投票したかった」ということに尽きる。ただ変わるというだけでも「気持ち新たに」とか「初心に帰って」みたいな、正の感情に由来するリセット行動ができるだけでぜんぜん政治に対する印象は改善するはずなのに、現状は寧ろ「どちらもハズレだけど、より悪くない方を選んでね」みたいなことが全国で起きている。

 根本的には、自分が思いを託せる政治家を育てていくしかないのだと思う。個々人がもっと政治あるいは政治家個人に興味関心を持つことで初めて、政治家がその権力性に自覚を持つようになるからだ。現状は「誰がなっても同じ」「どうでもいい」として政治家を蔑ろにしているために、知名度だけが売りの無能候補が擁立されたり、詐欺師や嘘つきアジテータがちょっとでも面白がられるだけで票が集まったりしてしまう。

 かといって、皆が常に動向を監視できるわけではない。一般の人々は日頃社会で働いているだろうし、もちろん政治家だって同様のタイミングで議論し交渉している。すなわち、よほど例外的に時間が余る人々でもない限り、日々の政治家の言行をフォローアップしていくのは難しい構造だといえる(そういう事情もあって、退職後の人々ばかり政治参加する|《第二の人生を謳歌する》"シルバー民主主義" が幅を利かせる状況に陥る)。

 今回開発したこのツールは、現段階ではただツイートを集めるだけの機能しか持たない。もちろん権力者にとっては市井の人々に期待され監視されているという事実だけでも、不正行為に対する負のインセンティブたりうるだろう。しかし、それは理想に近い志を持った政治家に対してのみ効力を発揮するのであって、自分だけがかわいい薄っぺらな表集めマシーンに対しては効果が薄い。

 上記を踏まえて、次は「集めたツイートを分析できる」とか、「分析結果を画像として出力する」といった、SNSで共有・周知することで威力を発揮するような機能を実装したい。もちろん、これを読んで共感した開発者各位においては、Issue にて機能をリクエストしてもいいし、自分で作って PR 飛ばしたり、あるいは何かしら独立したアプリ・ Web サービスなどつくってみるのもいいだろう。わからないこと・知りたいことがあれば適宜この記事へコメント、あるいは筆者の Twitter までご連絡いただきたい。

 このツールが広く世間の役に立つことを願ってやまない。

次の記事

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?