LoginSignup
0

More than 1 year has passed since last update.

GithubActionsを用いてpushをcronで定期実行し、毎日レポジトリに1草生やしていく

Last updated at Posted at 2022-05-29

初めに

みなさん草生やしてますかーー!!!!

Githubが日常に入り込んできてから、いろいろな人のレポジトリを見るようになったのですが、草がたくさん生えてる方のProfileって映えてますよね。

私はまだまだ道半ばですが、、、
スクリーンショット 2022-05-29 13.09.31.png

あくまでも見た目です。開発力があるかどうかはそれだけではわからない。

けど、なんとなくすごそうに見えるのがあの草だと思ってます。
あとコード書くのが好きなんだろうなーってのも伝わる?気がしますね。

一日最低1lineは開発をしているのかなと思いきや、毎日なんらかの差分をpushする流れを定期実行できるようにしてしまえば、旅行に行こうと開発できなかろうと草は生やせることに気がつきました。

前置きはいいから先にコードを見せろ! という方、是非こちらからどうぞ。

このqiita記事を読むことで、あなたも明日からプロフィールを草だらけにできることでしょう。

(あくまでも生やすだけなので、自己満足の領域は超えないことをしっかり胸に刻み込みましょう。)

せっかくなので少しでも価値あるものを

とはいえ、毎日訳のわからない差分を無理やり生み出してcommit → pushするのも味気ない。と、思ったので今回は

BTC/JPY通貨の、Job実行タイミングでの価格を毎日記録してpushする

この流れをGithubActionsで自動化してみようと思います。

今回の実行イメージはこんな感じ。!

スクリーンショット 2022-05-29 12.55.20.png

補足

確かにGithubActionsは、CI/CDツールとして有名ですが、今回実装するcronジョブは、CI/CDの定義からは若干離れているような気がします。

サービスを公開している訳でもなければ、テストの自動化でもなく、

ただ草を生やすための継続的KUSA生やしBot なので、CI/CDパイプラインを作ったった!とは言わないようにします。

なんちゃってCI/CDくらいのイメージだと個人的に思っていますのでご了承ください。

準備

みなさんの環境でもすぐ動かせる流れを記載します。ご自身で手を動かしてみたい方も、是非ご参考ください。

Forkしてくる

こちら(https://github.com/ishidao0910/kusa-bot) に飛んでいただいて、

Image from Gyazo

こちらからご自身のgithubにコピーしてください。

Forkが完了すると、ご自身のレポジトリにkusa-botが追加されていると思います。
Image from Gyazo

Github Actions有効化

ここは初めてGithub Actionsを使う方向けですが、これを使うためにはGithubでActionsを有効にする必要があります。

こちらの記事で丁寧に説明してくれているのでご参考ください。

環境変数の設定

Github Actionsでflowを正しく実行させるために、Actions secretsを設定する必要があります。

Forkしたレポジトリ内で、Settings > Secrets > Actionsに飛んでください。
Image from Gyazo

ここで、①New repository secretからEMAIL, USERNAMEをそれぞれご自身のgithubアカウントのもので作成してください。

(blank.ymlで利用します。)

作成したら②のようにキーが追加されると思います。

Image from Gyazo

flowのテスト実行

kusa-botのActionsに飛んでいただくと、このような画面に出くわすかと思いますが、
Enable workflowをクリックしてから、Run workflowをクリックしてください。

スクリーンショット 2022-05-29 11.02.24.png

出ない方はそのままRun workflowを実行していただくと、実行中のworkflowが見えると思います。
Image from Gyazo

Jobが成功すると、レポジトリのReadMe.md最下部に、現在時刻のBTC/JPY価格が追記されていると思います。

cronの設定もしているので、Jobが成功したらやることおしまい!

中身の解説

やりたいことを編集できるように、中身を軽く解説しようと思います。

pythonスクリプト

実行タイミングでのBTC/JPYの価格を、README.mdに追記するスクリプトです。

  1. 通貨選択してページにアクセス
  2. 静的ファイルを解析して、通貨データを取得
  3. add_txtという変数にstr型で結果を格納
  4. Readmeの中身を読み込んで、add_txtを追記

この流れで書きました。

import datetime
from bs4 import BeautifulSoup
import urllib.request as req

d_today = datetime.date.today()


# 通貨設定
crypto = 'BTC'
currency = 'JPY'

# スクレイピングページ
url = 'https://coinyep.com/ja/ex/' + crypto + '-' + currency

# 取得結果
current_value = ''

# 取得先URLにアクセス
res = req.urlopen(url)

# 対象を抽出
soup = BeautifulSoup(res, 'html.parser');
values = soup.select_one("#coinyep-reverse1").findAll(text=True)
current_value = str(''.join(values))
current_value = current_value.replace('1 ' + crypto + ' = ', '')
current_value = current_value.replace(' ' + currency, '')

# 取得結果
add_txt = '<br>' + str(d_today) + ' 1' + crypto + '(' + currency + '): ' + str(current_value)

file_path = "README.md"
 
with open(file_path, "r") as file:
    txt = file.read()
    txt = txt + add_txt
    print(txt)

with open(file_path, 'w') as file:
    file.write(txt)

スクレイピング先のwebページはこちらを指定しています。

スクレイピングをする上で、規約やルールなどいろいろ注意が必要ですが、
規約等も特になく、商用利用する訳でもないので良かろうと判断しました。

Github Actions Flow

Github Actionsのワークフローは、ymlファイルで管理することができます。

  • workflow_dispatchで、GUIでの手動テストボタンを追加する
  • cronはUTCなので、01:00を指定すると日本時間10:00/amに実行される
  • Ubuntuの上にpython実行環境を立てる(pythonは3.9を使用)
  • Commit and Pushで、変更差分をcommit→push

こんなことをしています。

name: write today's jpy-btc

on:
  workflow_dispatch:
  schedule:
    - cron: 0 1 * * * #JST 10:00

jobs:
  build:
    name: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Setup Python
        uses: actions/setup-python@v2
        with:
          python-version: "3.9"

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install requests
          pip install bs4

      - name: Run btc_jpy.py
        run: |
          python btc_jpy.py

      - name: Commit and Push
        run: |
          echo commit and push
          git config --local user.email ${{ secrets.EMAIL }}
          git config --local user.name ${{ secrets.USERNAME }}
          git add . 
          git commit -m "write today's btc-jpy"
          git pull
          git push origin main

最後に

Github Actionsのcronジョブが水物だという情報は、ググっていてもよく見つかるのですが、

私自身も実際にcronしてみるまでは半信半疑でした。

JST10:00に設定しているはずのジョブが、2時間遅れで実行されたので、正確な定期実行にcronは向かなそうですが。今回の目的としては毎日1草最低限生やすことだったので、よしとしましょう。

この記事を読んでお困りのことがあれば、気軽にissue立てるなり、コメントいただけたらと思います。

ご精読ありがとうございました!!

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
0