Windows7にRubyを入れてtwiitterのbotを作る(Windwos10でも)

# 概要

電源つけっぱなしの Windows を twitter の Bot として利用します。
twitter の定期つぶやきは Ruby のスクリプトを Windows のタスクスケジューラ起動で行います。

:::note info
2022-03-06 追記
記事初出時は Windows7 で実行していましたが、
Windows10 の64ビット版でも実行できるのを確認しました。
緑枠内で Winodws10 での作業覚え書きを追記しています。
:::

# 手順要約

1. Winodws 側の準備
    1. Ruby をインストール
    2. DevelopmentKit をインストール
    3. Gem で twitter のライブラリをインストール
    4. 投稿時に SSL ではじかれないよう設定
2. Twitter 側の準備
    1. twitter のデベロッパーセンターに接続
    2. 今回作る Bot機能 をアプリケーションとして登録
    3. 投稿に必要なアカウント情報を書き留めておく
3. Ruby スクリプトを準備
    1. スクリプトを書く
    2. 投稿したいつぶやき集を作成
    3. バッチファイルを作成
    4. Windows7 標準搭載のタスクスケジュールで周期的に実行


# パソコンの環境

自分が bot 投稿に使っているパソコンの環境は、以下の通り。

* OS は Windows7 の 64bit 版
* パソコンはメーカー製の完成品ではなく、自分で組み立てた
* インターネットは光回線で常時接続
* 電源はつけっぱなし。スリープ設定はしない

Windows パソコンなら、特に問題ないはず。
自分は他の用途が目的でスリープしないようにしていますが、
bot がつぶやく時間にスリープを解除するようタスクを設定しても問題ないでしょう。

:::note info
2022-03-06 追記
Windows10 の 64bit 版でも動作していています。
OS 以外の環境は、前と同じです ( パソコンそのものやプロバイダは変わっています )  。
:::

# Windows 側の準備手順の詳細

Ruby の twitter Gem を使える環境にします。

まず [Twitter GemをWindowsにインストールする](http://qiita.com/giiko_/items/493f6ffc3547fbc35667) の
DevelopmentKit をインストールするところまでを行います。

:::note info
2022-03-06 追記
Windows10 では、
https://rubyinstaller.org/downloads/
にある Ruby+Devkit 3.1.1-1 (x64)  をインストールし、
gem install twitter を実行するだけでした。
後述の SSL で弾かれる件は発生しなかったので、解消する為の作業は行いませんでした。
:::

その後、コマンドプロンプトを開き、
```
gem install twitter
```
を実行。
twitter Gem が問題なくインストールできたらOK。

もしインストールできない場合は、

* DevelopmentKit が、インストールした Ruby Installar に合っていない
* DevelopmentKit のインストール方法が間違っている
* DevelopmentKit に必要なファイルを消した
* Ruby Installer のバグで Gem が正常にインストールできない

等の理由が考えられます。

そして twitter に投稿する際に SSL で弾かれるのを解消する為に、
[RubyでTwitterを　SSLではじかれる件（Windows)](http://qiita.com/Accent/items/bc454e2fb653abedc77d)
のページにある
[SSLエラー対処を実際にやってみる](http://qiita.com/Accent/items/bc454e2fb653abedc77d#ssl%E3%82%A8%E3%83%A9%E3%83%BC%E5%AF%BE%E5%87%A6%E3%82%92%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%82%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B) 以下を行います。

    リンク先でも言及されていますが、
    見たことがないユーザーのフォルダを作ることになりますが、
    気にせずやります。


# Twitter 側の準備手順の詳細

twitter 側で、公式ページ以外(アプリ等)から投稿できるように設定します。

[Twitter APIで、アプリケーションを登録する方法](http://syncer.jp/twitter-api-create-application)
の最初から「登録情報の変更」の手前までを行います。

リンク先の通りにやって、気づいた点は…

* アプリケーション情報
    * Name は twitter クライアント内の「○○から投稿」の○○に表示されます。何でもいいですが、仮の名前っぽいものにしていると、恥ずかしい
    * Website と Callback URL は、この bot 作りでは使わない情報なので、存在しない URL で問題無し
* 権限
    * この bot 作りでは投稿するだけなので Read and Write にしました

その後 Key and Access Tokens 画面で、
Access Token の発行(ボタンを押す)を行ってください。

そして Ruby スクリプト内で記入する情報として、
以下をテキストエディタ等にコピー＆ペーストしておきます。

* Consumer Key
* Consumer Secret
* Access Token
* Access Token Secret

:::note info
2022-03-06 追記
Windows10 のパソコンに替えてから、改めて登録情報を作り直さなくても twitter へ投稿できました。
Windows7 の頃に作成した登録情報が、そのまま使えています。
:::

# Ruby スクリプトの準備手順の詳細

[rubyでtwitterのbotを実装する(第5世代のやり方)](http://qiita.com/gosshys/items/d31b4ef37f7614363029) を参考に、
文字コードは Shift-JIS 、改行コードは CR+LF で
スクリプトファイルを作成。

    文字コードを UTF-8 で書かないのは、
    CSV 読み込みのところでエラーになる為です。
    Windows上で class CSV を使う際は
    Shift-JIS (厳密には Windows-31J) でないとうまくいかない事が多いです。
    
    ランダムにつぶやくだけなら class CSV を使う必要はないのですが、
    今後の拡張性を考慮して使っています。

```bot.rb
require "twitter"
require "csv"

client = Twitter::REST::Client.new do |config|
  config.consumer_key        = '前項でコピー&ペーストした情報を貼り付け'
  config.consumer_secret     = '前項でコピー&ペーストした情報を貼り付け'
  config.access_token        = '前項でコピー&ペーストした情報を貼り付け'
  config.access_token_secret = '前項でコピー&ペーストした情報を貼り付け'
end

talk = CSV.read( ARGV[0] )
client.update( talk[rand(talk.length - 1)][0].encode("utf-8") )
```

投稿したいつぶやき集を、
文字コードは Shift-JIS 、改行コードは CR+LF で作成。

:::note info
2022-03-06 追記
Windows10 では、つぶやき集のテキストファイルは、
文字コードが Shift-JIS だと Ruby の CSV 読み込みでエラーになったので、
UTF-8 に変換しました。
改行コードは CR+LF のままです。
:::

    1行1つぶやきで、何行でも追加できます。
    好きなつぶやきを好きな数、書いてください。
    下記は犬棒かるたの例です。

```tw.txt
【い】犬も歩けば棒に当たる
【ろ】論より証拠
【は】花より団子
【に】憎まれっ子世にはばかる
```

この Ruby スクリプトを実行する為のバッチファイルを作成します。
スクリプトとつぶやき集のファイル名は、フルパスで書いてください。
以下は例。

```bot.bat
ruby "c:\mydoc\ruby\bot\bot.rb" "c:\mydoc\ruby\bot\tw.txt"
```

[タスクスケジューラの基本的な使い方（Windows 7／8／8.1編）](http://www.atmarkit.co.jp/ait/articles/1305/31/news049.html)
を参考に、
このバッチファイルを定期的に実行させるよう、
タスクスケジューラにスケジュールを登録します。

:::note info
2022-03-06 追記
タスクが起動するたびにコマンドプロンプトのウィンドウが表示されるのが煩わしい場合は、
[タスクスケジューラでコマンドプロンプト画面を表示しないでバッチファイルを実行する](https://n-archives.net/software/robosync/articles/taskscheduler-with-no-prompt-window/)
を仕込んでおくと良いです。
:::

スケジュールを登録したら、あとは Windows パソコンが起動している限り、
bot がつぶやきを投稿してくれます。