当サイトでは実際に購入した商品のみをレビューし、アフェリエイトリンク付きでご紹介しています
【X(Twitter) Botの作り方】はじめてのHeroku
Twitter botの開発を目指しています🤖
この記事では、Herokuのアカウント作成や、Git環境の準備について解説します。
- Herokuアカウントの作り方
- Homebrewの更新
- Gitのインストール
- HerokuからTwitter APIの実行
はじめに
前回、Twitter APIの実行環境を揃えました。
このままでは、自分のパソコンが起動している時しか使えません。
サーバーから実行できるように、Heroku環境を準備します!
Herokuを選んだ理由は以下の通りです
無料で使える2022年11月無料プランが廃止され、有料プランのみとなりました。クレジットカードを登録しなくても使える(550時間)- やってみたい!😆
Heroku公式のスターターガイドが、
とってもわかりやすかったです👍
今回は、Herokuスターターガイドを読みながら作業をします。
クライアントは、先日購入したMacbookを使用します🍎😃
Herokuの無料アカウントを作成する
スターターガイドは、Herokuアカウントがある前提で始まります。
まずは、アカウントを作っておきましょう。
以下の手順で2段階認証を有効化できます。
- 右上のアイコンをクリック
- 「Account settings」をクリック
- 「Manage Multi-Factor Authentication」をクリック
- お好みの認証方法を選び、設定する
定番は「ワンタイムパスワードジェネレータ」ですね
スムーズにアカウントを作ることができました。
Gitの準備
自分のmacでGitを使えるように準備します。
git --version
早速エラーが出ました。
git: error: couldn't stat Xcode's Info.plist (errno=No such file or directory)
Error loading required libraries. If there is an ongoing installation please wait for it to complete. Otherwise reinstall. (dlopen(@rpath/libxcodebuildLoader.dylib, 0x0001): tried: '/usr/lib/swift/libxcodebuildLoader.dylib' (no such file), '/Applications/Xcode.app/Contents/Developer/usr/bin/libxcodebuildLoader.dylib' (no such file), '/Applications/Xcode.app/Contents/Developer/usr/bin/../../../Frameworks/libxcodebuildLoader.dylib' (no such file), '/Applications/Xcode.app/Contents/Developer/usr/bin/../../../SharedFrameworks/libxcodebuildLoader.dylib' (no such file), '/Applications/Xcode.app/Contents/Developer/usr/bin/../../../PlugIns/libxcodebuildLoader.dylib' (no such file), '/Library/Developer/PrivateFrameworks/CoreDevice.framework/Frameworks/libxcodebuildLoader.dylib' (no such file), '/usr/lib/swift/libxcodebuildLoader.dylib' (no such file), '/Applications/Xcode.app/Contents/Developer/usr/bin/libxcodebuildLoader.dylib' (no such file), '/Applications/Xcode.app/Contents/Developer/usr/bin/../../../Frameworks/libxcodebuildLoader.dylib' (no such file), '/Applications/Xcode.app/Contents/Developer/usr/bin/../../../SharedFrameworks/libxcodebuildLoader.dylib' (no such file), '/Applications/Xcode.app/Contents/Developer/usr/bin/../../../PlugIns/libxcodebuildLoader.dylib' (no such file), '/Library/Developer/PrivateFrameworks/CoreDevice.framework/Frameworks/libxcodebuildLoader.dylib' (no such file))
XCodeが入っている旧パソコンから、
新しいパソコンへ移行したことが原因かも。
一般的に、この作業は不要です。(私の環境特有の対応です)
sudo rm -rf /Applications/Xcode.app
sudo rm -rf /Library/Preferences/com.apple.dt.Xcode.plist
sudo rm -rf ~/Library/Preferences/com.apple.dt.Xcode.plist
sudo rm -rf ~/Library/Caches/com.apple.dt.Xcode
sudo rm -rf ~/Library/Application Support/Xcode
sudo rm -rf ~/Library/Developer/Xcode
sudo rm -rf ~/Library/Developer/CoreSimulator
もう一度、gitコマンドを実行してみましょう。
git --version
なんと自動的にインストーラーが呼び出されました。親切です。
「インストール」をクリックします。
利用規約を確認し、「同意する」をクリック
ダウンロードが始まります。
106時間⁉️
びっくりしましたが、実際には10分弱で完了しました。
もう一度、gitコマンドを実行してみましょう。
三度目の正直です。
git --version
git version 2.32.1 (Apple Git-133)
無事にバージョン番号が表示されました👏 成功です!
gitにユーザー名とメールアドレスを登録しておきます。
git config --global user.name "ユーザー名"
git config --global user.email "メールアドレス"
Homebrewの準備
MacにHeroku CLIをインストールする際に、Homebrewを使用します。
Heroku CLIをインストールするために、色々なエラーに出会いました。
結果的には「M1 Macbookなら、STEP 4のみ行えば良いのだろう」と感じています。
まず、brewのコマンドが実行できるか、アップデートができるか、確認をオススメします。
brew --version
brew update
私の場合は…
brew install heroku/brew/heroku
Updating Homebrew...
約1時間待機。。。。
You can upgrade it with brew upgrade
or list it with brew outdated.
Error: Failed to import: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/m4.rb
m4: undefined method `cellar' for #<BottleSpecification:0x0000000127c96198>
Error: Failed to import: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/minimesos.rb
minimesos: wrong number of arguments (given 1, expected 0)
Error: Failed to import: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/libbdplus.
以下略。
からの大量のエラー!😂
かなり長いこと待ってたんですけどね。。。
HomebrewのUpdateでコケているので、以下のコマンドを試みます。
brew update
今度はすぐにエラーが表示されました
Error:
homebrew-core is a shallow clone.
To `brew update`, first run:
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
This command may take a few minutes to run due to the large size of the repository.
This restriction has been made on GitHub's request because updating shallow
clones is an extremely expensive operation due to the tree layout and traffic of
Homebrew/homebrew-core and Homebrew/homebrew-cask. We don't do this for you
automatically to avoid repeatedly performing an expensive unshallow operation in
CI systems (which should instead be fixed to not use shallow clones). Sorry for
the inconvenience!
「Githubからの要請があって、表示されたコマンドを実行してください」ということだそうです。
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
次は、10〜20分で完了しました。
remote: Enumerating objects: 1215838, done.
remote: Counting objects: 100% (1214209/1214209), done.
remote: Compressing objects: 100% (376438/376438), done.
remote: Total 1208374 (delta 837264), reused 1199998 (delta 828979), pack-reused 0
Receiving objects: 100% (1208374/1208374), 478.59 MiB | 4.75 MiB/s, done.
Resolving deltas: 100% (837264/837264), completed with 5123 local objects.
From https://github.com/Homebrew/homebrew-core
42eecd82cd3..b3023d15007 master -> origin/master
この後は、brew updateも実行できました。
今度こそ、brew installでHerokuのインストールを試みます。
brew install heroku/brew/heroku
またしても、エラー!😅
brew install heroku/brew/heroku
==> Tapping heroku/brew
Cloning into '/usr/local/Homebrew/Library/Taps/heroku/homebrew-brew'...
remote: Enumerating objects: 1802, done.
remote: Counting objects: 100% (187/187), done.
remote: Compressing objects: 100% (140/140), done.
remote: Total 1802 (delta 47), reused 187 (delta 47), pack-reused 1615
Receiving objects: 100% (1802/1802), 236.61 KiB | 2.13 MiB/s, done.
Resolving deltas: 100% (443/443), done.
Tapped 2 formulae (16 files, 293.8KB).
Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)!
Please create a new installation in /opt/homebrew using one of the
"Alternative Installs" from:
https://docs.brew.sh/Installation
You can migrate your previously installed formula list with:
brew bundle dump
あなたのパソコンでは「/opt/homebrew」に新しくインストールし直してください、ということらしい。
先に言ってもらえると嬉しかったデス😅
/opt/homebrewへのインストールは、こちらの記事を参考にさせていただきました!
実行時、一箇所だけ変更しています。
案内通りにコマンドを実行すると、権限が足りませんでした。
cd /opt
mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
mkdir: homebrew: Permission denied
以下のようにディレクトリの権限を変更して、実行しています。
cd /opt
sudo mkdir homebrew
Password:
sudo chown -R あなたのユーザー名 homebrew
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
これでうまくいきました👍
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 2850k 100 2850k 0 0 1704k 0 0:00:01 0:00:01 --:--:-- 2474k
環境準備はこれでOKです👍
いよいよスターターガイドに沿って進めていきます
Herokuスターターガイドをはじめてみよう(途中まで)
brew install heroku/brew/heroku
やっと成功しました!
Initialized empty Git repository in /opt/homebrew/.git/
remote: Enumerating objects: 213662, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (25/25), done.
Running `brew update --auto-update`... 4.75 MiB | 3.05 MiB/s
remote: Total 213662 (delta 11), reused 14 (delta 3), pack-reused 213634
Receiving objects: 100% (213662/213662), 59.29 MiB | 2.69 MiB/s, done.
Resolving deltas: 100% (157201/157201), done.
heroku login
以下のように表示されたら、任意のキーを入力します。
heroku: Press any key to open up the browser to login or q to exit:
作業用ディレクトリに移動し、サンプルアプリケーションをクローンする。
git clone https://github.com/heroku/python-getting-started.git
cd python-getting-started
heroku create
Creating app... done, ⬢ sleepy-badlands-54831
https://sleepy-badlands-54831.herokuapp.com/ | https://git.heroku.com/sleepy-badlands-54831.git
git push heroku main
Enumerating objects: 535, done.
Counting objects: 100% (535/535), done.
Delta compression using up to 8 threads
Compressing objects: 100% (251/251), done.
Writing objects: 100% (535/535), 103.82 KiB | 103.82 MiB/s, done.
Total 535 (delta 242), reused 535 (delta 242), pack-reused 0
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-20 stack
remote: -----> Determining which buildpack to use for this app
remote: -----> Python app detected
heroku ps:scale web=1
caling dynos... done, now running web at 1:Free
heroku open
コマンドを実行すると、ブラウザで以下のページが開かれました。
ほうほう。実行できた感じがあります。
heroku logs --tail
このコマンドでログを確認できます。
問題が起きたときに、エラーログを見ることができますね。
「Control+C」で終了できます。
作業用ディレクトリにある「python-getting-started/Procfile」を確認してみます。
これは起動時に実行するコマンドです。
more Procfile
web: gunicorn gettingstarted.wsgi
スターターガイドは「アプリの依存関係をローカルでインストールする」と続いていきますが、
ローカルにPostgresがインストールされている必要があるそうです。
エラーが発生してしまうので、スターターガイドはここまでとします。
Twitter API実行アプリをデプロイしてみる
以下の記事を参考に、TwitterAPIをHerokuから実行してみます。
Twitter APIの実行環境がない方は、先にこちらをどうぞ💁
mkdir hello-heroku && cd hello-heroku
pytry3gさんのサイトより、引用です🙇
import os
import tweepy
consumer_key = os.environ["CONSUMER_KEY"]
consumer_secret = os.environ["CONSUMER_SECRET"]
access_token = os.environ["ACCESS_TOKEN"]
access_token_secret = os.environ["ACCESS_TOKEN_SECRET"]
def get_authentication():
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
return auth
各種Keyは変更せず、このままでOKです。
後ほどHerokuの環境変数に、自分のKeyを登録します。
import tweepy
import twitter_api
auth = twitter_api.get_authentication()
api = tweepy.API(auth)
api.update_status("Hello Heroku!")
tweepy
python-3.10.6
わからないときは、
自分のパソコンで「python3 –version」を実行しましょう
clock: python test.py
Webページの起動とは、コマンドが違いますね!
git init
git add .
git commit -m "Initial commit"
heroku login
heroku create
git push heroku master
heroku config:set CONSUMER_KEY="consumer_key" CONSUMER_SECRET="consumer_secret" ACCESS_TOKEN="access_token" ACCESS_TOKEN_SECRET="access_token_secret"
小文字のconsumer_key等の部分などは、自分のKey・Tokenに置き換えてください。
heroku ps:scale clock=1
できました😆🕊👏❗️
もしもうまくいかない場合は、「heroku logs –tail」でログを確認してみましょう☝️
まとめ
これでBotの実行環境が整いました🤖
次回はツイートする内容を生成するため、AmazonのAPIを勉強します📖
Kindle日替わりセールをツイートできるようになりました。
ぜひフォローをお願いします!🕊
最後まで読んでいただき、ありがとうございました。
みなさまの暮らしがより良くなりますように。