Hatena::ブログ(Diary)

aranagy RSSフィード

2015-08-02

[] 3D小説『bell』再放送botの説明書

概要

3D小説『bell』再放送bot(@bell_repeat) は、
bellの物語を再体験することを目的としてつくられた、非公式のtwitter botです。
2014年の第1部・第2部連載時と、同じ日付・同じ時刻に動作します。

作成: aranagi (@arng_sol)
問題や要望等は@arng_sol宛にお問い合わせください。

くわしい機能

1. 3D小説『bell』本編URLツイートします

ブロマガ(http://ch.nicovideo.jp/3d_bell/blomaga)の各記事の投稿日時を参照し、同じ日時になると記事URLを投稿します。

2. 少年(@3d_bell)のツイートRTします

少年ことベルくんのアカウントツイートを、投稿されたときと同じ日時になるとRTします。
RT対象には、「このアカウントRTした他の方のツイート」も含みます。
ただし、ベルくんによる本編URLツイート、正確には
「投稿のsourceがIFTTTになっているツイート」はRTしません。

3.「愛媛の愛情100%」の記事URLツイートします

第1部の途中で登場するブログ愛媛の愛情100%」の各記事の投稿日時を参照し、同じ日時になると記事URLを投稿します。

4.たすけて!(@4koma_memories)のツイートRTします

第1部の途中で登場するtwitterアカウント @4koma_memories のツイートを、投稿されたときと同じ日時になるとRTします。
RT対象には、「このアカウントRTした他の方のツイート」も含みます。

その他

"ゲブラーの力"こと Rubyで作ってます。
動作中に第3部が始まった場合は、ハッシュタグ検索の邪魔にならないよう、
動作を停止させるつもりです。
まだ勉強中な部分もあるため、意図しない動作をする可能性がありますがご了承ください。

[] twitter bot開発で詰まったところメモ

最近@bell_repeat というtwitter botをつくったときに
やったことや躓いたところを簡単にメモ。

Rubyのインストールし直し

さくらレンタルサーバに入れてるRubyが2.0.0だかそこらの古めのバージョンだったので
2.1.6までアップデート
最新の安定版は2.2.2だったのだけれど すこし開発に急いでいたので
「最新版だと動かないよ〜」とかあると嫌だなあとおもって1つ前の安定版にしてみた。
参考:

さくらインターネットのスタンダードプランにRuby 2.1.5を自前でインストールしてみた | 極上の人生
http://kawairi.jp/weblog/vita/2014123118992



デフォルトシェルbashにした

上の記事で書いてるとおりにbashに変えた。
特にこだわりは無いのだけれど手元もたぶんbashだし
学校とかで触ったことあるのもbashだったはずだし。

SSHログインするたびに一回 $ source $HOME/.bashrc ってやらないと
環境変数とかの設定を読んでくれないっぽい?ので忘れないようにしたい・・・

botを動かそうとしたら「SSLがなんとか」みたいなエラーでコケた

書いたコードをサーバーに移して動かそうとしたら、SSLの認証ができなかったぜみたいな
エラーが出てしまった。
参考にしたのは以下の記事

RubyHTTPS 接続するときの証明書で悩んだ話 - てっく煮ブログ
http://tech.nitoyon.com/ja/blog/2014/05/30/ruby-https-cert/

SSL証明書はここにあるはずだ〜っていう位置に何もないせいで、証明書がみつからなくてコケたらしい。
記事を参考に証明書をサーバーに置いて、それからその証明書の位置を知らせるために

export SSL_CERT_FILE=(証明書のファイルまでのパス)

を .bashrc に追記した。

csvが読めなかった

UTF-8で保存したのにASCIIなんとかで読もうとして、読めないよ〜っていうエラーが出て困った。
参考:

Japanese user list of the Ruby programming language ()
http://comments.gmane.org/gmane.comp.lang.ruby.japanese/7079

encodingを明示的に書かないといけないとのこと。

cronの環境変数

cronとかcrontabというやつ、定期的にコマンドを実行してくれるあれは、
.bashrcとかに書いた環境変数を読み込んでくれないみたい。
なのでcrontabの冒頭に、必要な環境変数は書いておいてあげる必要がある。

cron力をつけよう!全てのcrontab入門者に贈る9個のテクニック · DQNEO起業日記
http://dqn.sakusakutto.jp/2012/06/cron_crontab9.html

ここに書かれているように、
"※ LOG_DIR="$HOME/logs" のように右辺で変数を使うことは残念ながらできません"ので、.bashrcから書き写すときに $HOME になってるところはもとの値で書き起こす必要がある。
たぶん本当は必要な環境変数だけ書くべきなのだろうけど、ぶっちゃけどれが必要か判ってないため .bashrcに書いてるものは全部書き写してある。
今回はそんなに数がないからまるごと移せたけど、すごくたくさん設定してあるような環境でそれをやるわけにもいかないだろうなー

cronの実行結果

もともとさくらサーバでは別のbotを動かしている状態だったのだけど、そのコードがあんまり良くなかったせいか、実行すると警告が出る状態だった。
cronの実行結果、エラーなどの出力はメールで飛んでくるようになっていたのだけど、放置していたせいでメールボックスが87万件とかになっていてメールボックスが開けない状態になってしまっていた。
このままでは新たに今回作成したbotのログが見られないので、上の記事をまた参考にして、テキストファイルにログが吐かれるようにしてある。

cron実行時のカレントディレクトリ

cronで実行されるとき、カレントディレクトリがどこになってるかってよくわからない。
昔書いた記事ではフルパスを取得して作って・・・みたいなことをやっているのだけど、そんなことしなくても
crontabのほうに

cd (カレントディレクトリにしたいところの絶対パス) ; (実行するコマンド)

って書いてしまえば済む話だった。早い。

macSSHログイン

昔書いた記事windowsで開発してたときだったし、バージョンが古くてあまり参考にならない。
macではSSHログインしたいときは、ターミナル

$ ssh [さくらサーバのユーザー名]@[さくらサーバのユーザー名].sakura.ne.jp

って打って、パスワード入れれば、それだけでオッケー。便利。

gemのnokogiriをインストールするときに困った

botで、webページを読んで投稿日時や記事タイトル等を取得する必要があり、
nokogiriというgemを利用した。
インストールのために

$ gem install nokogiri

サーバー上で実行したら、

Fetching: mini_portile-0.6.2.gem (100%)
Fetching: nokogiri-1.6.6.2.gem (100%)
Building native extensions. This could take a while...
ERROR: Error installing nokogiri:
ERROR: Failed to build gem native extension.

/(パス)/ruby extconf.rb
checking if the C compiler accepts ... yes
Building nokogiri using packaged libraries.
checking for gzdopen() in -lz... yes
checking for iconv using --with-opt-* flags... no
checking for iconv... no
-----
libiconv is missing. Please locate mkmf.log to investigate how it is failing.

(以下省略)

のようなエラーがでてインストールできなかった。

代わりにこんなコマンドを使って入れました。

$ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri --no-rdoc --no-ri

参考にしたのは以下の記事。

さくらインターネットのスタンダードプランにRailsインストールしようとしたらnokogiri が使うライブラリのチェックで怒られた件 | 極上の人生
http://kawairi.jp/weblog/vita/2015010319009



twitterのメモ

client.retweetツイートのidをわたすだけでよいんだって、便利
・user_timelineであるアカウントの投稿を全部取得するというのをやったのだけど、
そのアカウントツイート数より、取得できたツイートが10個少ないということが起こった。
RTも含めて取得したのだけど・・・いまのところ原因不明。


おわり。たくさん躓いた。

2013-08-08

[] gitのメモ

・ブランチを切ろう
$git checkoutは状態を切り変えるよ
$git checkout -b (ブランチ名)とすると、あたらしいブランチをつくってそこに移るよ

・$git statusをみよう
今の状態がわかるよ
ステージにのってるものはcommitされるよ

・$git diffをみよう
自分がした変更を確認しよう
git diffはどことどこの差分をみてくれるのかよく知ろう(課題)

・commitは意味のある単位でしよう
今回「画像を縮小する」変更を行ったけど、それは「RMagickの導入」と「縮小機能の追加」に分けられるよ

コミットメッセージは複数行書けるよ
GitHubでは1行目がタイトルのように表示されて、2行目からは詳細表示に仕舞われるよ
1行目に概要を書いて、細かい説明は1行開けて3行目に書くといいよ

コミットメッセージは現在形で書くのが良い?
好みによるけど、「このコミット適用することで何が起こるのか」説明する視点ならば現在形だよ

・$git commit -mは省略記法のようなものだよ

・$git commit -vすると変更部分を見ながらコミットメッセージを書けるよ
変更部分は表示されてるだけでメッセージには含まれないよ

・$git commit --amendで直前のコミットを修正できるよ

・$git push どこに どこを
今回は$git push origin HEADと書いた
originは$git remoteででてきたよ
HEADは今触っている場所だよ


おまけ
$git config --global color.ui auto してもらったよ
.gitconfigってファイルを編集するやつ
グローバルが範囲で、colorって項目内のuiって項目にautoって値を設定したよ
gitのコマンドの出力にちょっと色がつくようになった

2013-07-28

[] Homebrewのインストールコマンドがよくわからない→ちょっとわかった!


macでHomebrewをインストールするには、公式ページに載ってるとおり

$ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

ってターミナルで実行する。

せっかくだしこのコマンドの意味を調べた。

ruby
 rubyってこと
eオプション
 その後ろに書かれたスクリプトを実行するというもの
$
 よくわからないけどターミナルで実行するものを表すときに書く記号だしきっとその意味だと思う
curl -fsSL https://raw.github.com/mxcl/homebrew/go
 curlというコマンドはファイルの送受信を行うためのものらしい
 -fsSLっていうのはしらべても全然情報がでてこなくて(Homebrewをインストールするまさにこのコマンドしかみつからなかった)不明
 たぶんSSL接続するよとかそういうことじゃないかと予想
 うしろがhttpsだし

つまり、要はとにかくhttps://raw.github.com/mxcl/homebrew/goっていうところからデータを受信するんだと思う。
でも、もしこの認識があっているとするとruby -eを通さなくてもターミナルにそのまま
curl -fsSL https://raw.github.com/mxcl/homebrew/go
って書けばいいのではと思うものの、わからないしそんなわけないし試してない。

  • 20:34追記

コメント読んでめっちゃわかった!

githuburl先を見るとわかるけど、rubyのコードになっているのでこれをcurlを使ってダウンロードしてきてそれをrubyで実行しているんじゃないかという認識です(僕は)

fはfailの略でエラー処理をするオプションで、sはsilent、Sはshow error、Lはlocationなんだそうです
参考: http://www.hcn.zaq.ne.jp/___/unix/curl_manpage.html

e-jigsaw

受信するとこまでは合っていたけど、そうやって受信したものをruby -eで実行したかったんだ。
たしかにそうだ。もう少しだったー!
あと、-fsSLって書かれたときに、自分は"fsSL"っていうオプションなんだと思い込んでいたのでそうやって調べていたわけだけど、こういう書き方をしたときそれはfとsとSとLというオプションをまとめて指定する書き方なんだそうだ。
これは知らなかったので今後こうやってコマンドの意味調べることがあってもかなり自力でたどり着ける率上がった気がする。
というわけで各オプションの内容を自分でもまとめてみる。

f

サーバエラーが生じたときに黙って(何も出力しないまま)終わらせます。

no title

このオプションを書くことで、サーバエラーがruby -eに読まれてしまうのを防ぎたいのだとおもう。たぶん。

s

沈黙モードにします。 プログレスメータやエラーメッセージは表示されません。 curl の出力を止めます。

no title

これも、これを入れることでcurl自身の出力がruby -eに読まれるのを防ぎたいのだと思う。

S

  • s, --silent と伴用すると、失敗時にはエラーメッセージが表示されるようになります。
no title

アイエエエ!?エラーメッセージ表示ナンデ!?ruby -e食べちゃう!?
fと言ってることが違うからこまるけど、「表示」と「出力」がちがう意味で、
「表示」はターミナルに表示されるだけで「出力」されないという意味ならばわかるかも。

L

要求したページが別の場所に移動していた場合に(サーバからの Location: ヘッダ行と 3XX 応答コードで検知されます)、このオプションにより,新しい場所に対して要求を再試行するようになります。

no title

サーバーに、移動したページを登録しておくことができるということから既に初耳。
これでもしインストールのためのコードが https://raw.github.com/mxcl/homebrew/go から移動してしまっていても追跡してくれるわけだな。

というわけで全体的になんとなくわかった。おおよそすっきり。id:e-jigsaw、ありがとうございます!!

2013-07-27

[] MBAの環境整備


先日MBA13インチの安い方を購入しましたので環境整備とかしてました。
やったこととかわかったことのメモ。

AppStoreから入れたもの

  • 夜フクロウ
  • Xcode

XcodeをAppStoreからインストールしたあと、なにか適当なプロジェクトつくって起動して、
画面左上のXcode->Preferencesを開く
それから出てきた画面のDownloadsのCommand Line Toolsもインストールする
せっかくなのでiOS 6.0 Simulatorもインストール

インターネットでとってきたもの

  • GoogleChrome
  • Google日本語入力

Chromeはログインしたらすぐいつもの環境がやってくるのが便利すぎる

コマンド叩いたもの

パッケージ管理のためのものらしい
たぶん何かあたらしいコマンドをインストールするときにこいつを経由することでいろいろ楽になるんだと思う
インストールは公式ページに有る

$ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

を実行
それから

$brew doctor

を実行して、準備オッケーだよみたいな意味の文が出てれば問題なし
自分は何かのファイルにどれどれを追記しろみたいな内容の英文が出ていたのでそのまま従った
実はたしかHomebrewを入れてる時にここに乗っているエラーに遭遇して悩んだ覚えがあるのだけど、
どこで遭遇したか記録がないので細かく書けない
いちおうメモとして貼っておく
YOMiTOKU: brew doctorの /usr/bin occurs before /usr/local/binにはまったときの解決法

さいきんRubyとかRailsでなにか作ってみるときgitを使うようにしていて、こっちでもその続きが開発できるようインストール
Homebrew経由でインストールするには以下を実行

$brew install git


  • readline

rubyのirbって対話型で実行できる機能のときに、こいつを入れないと日本語が入力できないことがあるようなのでインストール

$brew install readline


これから入れるrbenvを便利に使うために必要らしい
rbenvではrubyインストールするのになんだか難しいものを書かなければいけないようなのだけど、こいつが居るとそれが自動で出来上がるらしい

 rbenvは複数バージョンのrubyをすぐ切り替えられるということのみにフォーカスしてて、ruby本体をインストールするのは自前でmake等します。毎回それは面倒すぎる。そこで、ruby各バージョンのビルド内容のレシピをもっててコマンド一発でやってくれるよう、補助的に用意されているのがruby-buildなわけです。わー、ruby-build便利!

homebrewで入れたreadlineを使いつつruby-buildでruby入れてみた - Meltdown Countdown rev.

とのことなので以下のコマンドでインストール

$brew install ruby-build


  • rbenv

Homebrewが自分が追加したコマンドを管理してくれる(?)みたいにrbenvは自分で入れたrubyを管理してくれるらしい
いろんなrubyのバージョンを切り替えたりしながら使うこととかできる
自分はrubyをいくつも使い分けたりする予定はないけれども、Homebrew経由で入れたrubyがうまく使えないっていう事態に見舞われたのでこいつ経由で入れなおした
Homebrew経由でインストールするので

$brew install rbenv


Rubymacに標準で入っていて、Homebrewのインストールでも使っているのだけど、
どうにもバージョンが古くてRailsが入れられないようなのであたらしいRubyを入れてみた
自分がインストールしようとした時点でのRubyの最新の安定版は2.0.0-p247というやつだったから
さっき入れたrbenvを利用してインストール

$rbenv install 2.0.0-p247

rbenvではインストールとかなにか変更をしたとき、パスを通すために以下を実行しないといけない

$rbenv rehash

そのあと、ターミナルで単にrubyって打つときに使われるような、いわゆるデフォルトのバージョンを決めるために以下を実行
変更が起こるわけなのでrehashもする

$rbenv global 2.0.0-p247
$rbenv rehash

それから以下を実行してインストールしたバージョンが出れば問題なし!

$ruby -v

ちなみに $rbenv install -l したら、インストールできるRubyのバージョンの一覧みたいなのが見れた(めっちゃたくさんあった)

無事ruby2.0.0が入ったところでやっとRailsインストール
今度はRailsgemというやつ経由で入れるらしい
gemはRubyGemsのことで、Rubyに関する追加機能の管理をやってくれるようだ
寺子屋で触ったときはgemRailsの追加機能を入れるためのものだと思っていたのだけど、勘違いしていた!
gemRailsを入れるには以下を実行

$gem install rails

実行が終わったら、rubyまわりの変更が起こったということでまたrehashしないといけない。

$rbenv rehash


  • rbenv-rehash

$gem installするたびにrehashするのは非常にめんどくさそうなので、自動化してくれるものをインストール

$gem install rbenv-rehash



以上。これで環境が整ったので、次はgitから自分がRailsで作りかけのものを引っ張ってきて動かすフェーズ。

2013-03-24

[]Rails寺子屋で教わったことなど

教わったことや、覚えたいことや、その他のメモを忘れないうちに。
説明は自分なりに解釈したもので自信はないので、これから真偽を勉強します。

Ruby(http://tryruby.org)
  - シンボルはシングルトン(唯一)なんだけどただの変数は名前が同じでも値が同じなだけの別物(? むずかしかった)
  - ブロック
  - ハッシュ
  - [ ] ←これ
  - えぬめらぶる
  - Mix-in
Rails(http://railsgirls-jp.github.com/app)
  - MVC
  ModelがPHPの領域、ViewはHTMLやCSS、ControllerはJacascript というイメージ
Git
  - ギットって読む
  - addしてcommitしてpushする
  - add間違えたらaddしたものを消すコマンドがある
  - pushまで済んでるものもローカルにあるものも消したり、pushしたものだけ消せたりする
 - addしたものしかcommitやpushには含まれないし、毎回addしたものはリセットされるけど、オプションで一度addしたものを全部含めることができる
 - .gitignoreファイルで絶対にcommitとかpushしたくないものをあらかじめ決めておける。
GitHub
・Heroku(http://railsgirls-jp.github.com/Heroku)
  - HeroとHaikuをあわせてHerokuらしい