LoginSignup
3
4

More than 5 years have passed since last update.

かんたん、お手軽、TweetBot(Crystal編)

Last updated at Posted at 2017-11-30
1 / 23

お前 is 誰?

@msky026


切っ掛け

10月からブレンド・Sが始まりました。


ドリコムの者として(10月時点)何かせねば、、、


どうしようか、、、


そうだ、TwitterBotを作ろう!


というわけで、放映時間10分(くらい前)に放送開始を通知するBotを作ることにした。


いい機会だからCrystalでやろう


いい感じにCrystal版のクライアントがある

https://github.com/sferik/twitter-crystal
(Ruby版のと同じ作者)


shard.yml
dependencies:
  kemal:
    github: sdogruyol/kemal
    branch: master
  db:
    github: crystal-lang/crystal-db
    branch: master
  twitter-crystal:
    github: sferik/twitter-crystal
    version: ~> 0.2.0

require "twitter-crystal"

class TwitterClient
  @client : Twitter::REST::Client
  def initialize
    consumer_key                 = ENV["CONSUMER_KEY"]
    consumer_secret              = ENV["CONSUMER_SECRET"]
    access_token                 = ENV["ACCESS_TOKEN"]
    access_token_secret          = ENV["ACCESS_TOKEN_SECRET"]
    @client                      = Twitter::REST::Client.new(consumer_key, consumer_secret, access_token, access_token_secret)
  end

  def tweet(message)
    @client.update(message)
  end
end
twitter_client = TwitterClient.new
twitter_client.tweet("hogehoge")

かんたん、お手軽



本当に?


heroku run bash
crystal run src/tweetbot/tweet.cr

--: 1: --: cc: not found
Error: execution of command failed with code: 127: `cc "${@}" -o '/app/.cache/crystal/crystal-run-tweet.tmp'  -rdynamic  -lz `command -v pkg-config > /dev/null && pkg-config --libs libssl || printf %s '-lssl -lcrypto'` `command -v pkg-config > /dev/null && pkg-config --libs libcrypto || printf %s '-lcrypto'` -lpcre -lm -lgc -lpthread /app/.platform_tools/crystal/src/ext/libcrystal.a -levent -lrt -ldl -L/usr/lib -L/usr/local/lib`

結論から言うと、Heroku上でスクリプト実行が出来ない。
(少なくともHeroku-16スタックでは)
ビルドしてバイナリ実行すればOK


ただし、Kemalのとバイナリを2つ作らなければならない
(BotなのでKemalのはいらないと言えばいらないけど)


Heroku ビルドパック(msky026製)
https://github.com/msky026/heroku-buildpack-crystal


crystal_version=0.23.0
always_rebuild=false
config_vars_to_export=(DATABASE_URL)
post_compile="pwd"
build_command=("crystal build --release ./src/tweetbot.cr" "crystal build --release ./src/tweetbot/tweet.cr")

build_command
ビルドコマンドを複数指定できる


これでKemalとTweetBotのを2つ作り
Herokuスケジューラで

./tweet


結論
Elixirベースのビルドパックはいいぞ

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4