MENU

    【X(Twitter) Botの作り方】はじめてのHeroku

    はじめてのHeroku【入門・環境構築】

    当サイトでは実際に購入した商品のみをレビューし、アフェリエイトリンク付きでご紹介しています

     Twitter botの開発を目指しています🤖

     この記事では、Herokuのアカウント作成や、Git環境の準備について解説します。

    この記事でわかること
    • Herokuアカウントの作り方
    • Homebrewの更新
    • Gitのインストール
    • HerokuからTwitter APIの実行
    目次

    はじめに

    前回、Twitter APIの実行環境を揃えました。

     

    このままでは、自分のパソコンが起動している時しか使えません。

     

    サーバーから実行できるように、Heroku環境を準備します!

    Herokuを選んだ理由は以下の通りです

    • 無料で使える 2022年11月無料プランが廃止され、有料プランのみとなりました。
    • クレジットカードを登録しなくても使える(550時間)
    • やってみたい!😆

    Heroku公式のスターターガイドが、
    とってもわかりやすかったです👍

     

    今回は、Herokuスターターガイドを読みながら作業をします。

    クライアントは、先日購入したMacbookを使用します🍎😃

    Herokuの無料アカウントを作成する

     

    スターターガイドは、Herokuアカウントがある前提で始まります。
    まずは、アカウントを作っておきましょう。

    STEP
    Herokuへアクセスし、「新規登録」をクリック
    STEP
    必要項目を入力し、「無料アカウント作成」をクリック
    STEP
    メールが来るのを待つ
    STEP
    メールに記載されたURLをクリックしてアカウントをアクティベートする
    STEP
    ログインパスワードを設定する
    STEP
    次へ進む
    STEP
    規約を確認して、「Accept」をクリック
    STEP
    できました!
    STEP
    2段階認証を設定する

    以下の手順で2段階認証を有効化できます。

    1. 右上のアイコンをクリック
    2. 「Account settings」をクリック
    3. 「Manage Multi-Factor Authentication」をクリック
    4. お好みの認証方法を選び、設定する
     

    定番は「ワンタイムパスワードジェネレータ」ですね

    スムーズにアカウントを作ることができました。

    猫の挿絵001

    Gitの準備

     自分のmacでGitを使えるように準備します。

    STEP
    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が入っている旧パソコンから、
    新しいパソコンへ移行したことが原因かも。

    STEP
    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
    STEP
    gitをインストール

    もう一度、gitコマンドを実行してみましょう。

    git --version

    なんと自動的にインストーラーが呼び出されました。親切です。
    「インストール」をクリックします。

    利用規約を確認し、「同意する」をクリック

    ダウンロードが始まります。

     

    106時間⁉️

    びっくりしましたが、実際には10分弱で完了しました。

    STEP
    gitコマンドを実行してみる

    もう一度、gitコマンドを実行してみましょう。

    三度目の正直です。

    git --version
    git version 2.32.1 (Apple Git-133)

    無事にバージョン番号が表示されました👏 成功です!

    STEP
    gitの初期設定をする

    gitにユーザー名とメールアドレスを登録しておきます。

    git config --global user.name "ユーザー名"
    git config --global user.email "メールアドレス"

    Homebrewの準備

     MacにHeroku CLIをインストールする際に、Homebrewを使用します。

     Heroku CLIをインストールするために、色々なエラーに出会いました。
     結果的には「M1 Macbookなら、STEP 4のみ行えば良いのだろう」と感じています。

    STEP
    brewコマンドが実行できるか確認する

    まず、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.
    以下略。

    からの大量のエラー!😂
    かなり長いこと待ってたんですけどね。。。

    STEP
    brew updateを試みる

    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も実行できました。

    STEP
    しかし、brew installが通らない

    今度こそ、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」に新しくインストールし直してください、ということらしい。

     

    先に言ってもらえると嬉しかったデス😅

    STEP
    /opt/homebrewへ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です👍
    いよいよスターターガイドに沿って進めていきます

    猫の挿絵002

    Herokuスターターガイドをはじめてみよう(途中まで)

    STEP
    Heroku CLIをインストールする
    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.
    STEP
    loginコマンドを実行
    heroku login

    以下のように表示されたら、任意のキーを入力します。

    heroku: Press any key to open up the browser to login or q to exit:
    STEP
    ブラウザが起動するので、「Log In」をクリック
    STEP
    アプリを準備する

    作業用ディレクトリに移動し、サンプルアプリケーションをクローンする。

    git clone https://github.com/heroku/python-getting-started.git
    cd python-getting-started
    STEP
    createコマンドを実行
    heroku create
    Creating app... done, ⬢ sleepy-badlands-54831
    https://sleepy-badlands-54831.herokuapp.com/ | https://git.heroku.com/sleepy-badlands-54831.git
    STEP
    アプリをデプロイする
    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
    STEP
    アプリを実行する
    heroku ps:scale web=1
    caling dynos... done, now running web at 1:Free
    STEP
    起動したアプリのWebページを開く
    heroku open

    コマンドを実行すると、ブラウザで以下のページが開かれました。

     

    ほうほう。実行できた感じがあります。

    STEP
    ​ログを表示する
    heroku logs --tail

    このコマンドでログを確認できます。
    問題が起きたときに、エラーログを見ることができますね。
    「Control+C」で終了できます。

    STEP
    Procfile を見てみる

    作業用ディレクトリにある「python-getting-started/Procfile」を確認してみます。
    これは起動時に実行するコマンドです。

    more Procfile
    web: gunicorn gettingstarted.wsgi

    スターターガイドは「アプリの依存関係をローカルでインストールする」と続いていきますが、
    ローカルにPostgresがインストールされている必要があるそうです。
    エラーが発生してしまうので、スターターガイドはここまでとします。

    Twitter API実行アプリをデプロイしてみる

     

    以下の記事を参考に、TwitterAPIをHerokuから実行してみます。

    Twitter APIの実行環境がない方は、先にこちらをどうぞ💁

    STEP
    作業用ディレクトリに新しいディレクトリを作る
    mkdir hello-heroku && cd hello-heroku
    STEP
    twitter_api.pyを作成する

    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を登録します。

    STEP
    test.pyを作成する
    import tweepy
    import twitter_api
    
    auth = twitter_api.get_authentication()
    api = tweepy.API(auth)
    
    api.update_status("Hello Heroku!")
    STEP
    requirements.txtで追加ライブラリを定義する
    tweepy
    STEP
    runtime.txtでPythonのバージョンを定義する
    python-3.10.6
     

    わからないときは、
    自分のパソコンで「python3 –version」を実行しましょう

    STEP
    Procfileで起動時に実行するコマンドを定義する
    clock: python test.py
     

    Webページの起動とは、コマンドが違いますね!

    STEP
    出来上がったソースをGitにCommitする
    git init
    git add .
    git commit -m "Initial commit"
    STEP
    Herokuにデプロイする
    heroku login
    heroku create
    git push heroku master
    STEP
    HerokuにAPI Keyなどを環境変数として登録する
    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に置き換えてください。

    STEP
    Herokuを起動する
    heroku ps:scale clock=1

    できました😆🕊👏❗️

    https://twitter.com/kindle_sale_jp/status/1557971652885069824?s=20&t=ZM_l4y3SYYFV4g2k6KcIIA

    もしもうまくいかない場合は、「heroku logs –tail」でログを確認してみましょう☝️

    まとめ

     これでBotの実行環境が整いました🤖

     次回はツイートする内容を生成するため、AmazonのAPIを勉強します📖

    Kindle日替わりセールをツイートできるようになりました。
    ぜひフォローをお願いします!🕊

    https://twitter.com/kindle_sale_jp/status/1611637292032200704?s=20&t=2M6iXO7gtcvE4NRW5DYjVg

     最後まで読んでいただき、ありがとうございました。
     みなさまの暮らしがより良くなりますように。

    お役に立てたら幸いです
    • URLをコピーしました!
    • URLをコピーしました!
    目次