LoginSignup
4
3

More than 5 years have passed since last update.

cron + shell scriptでGithubの緑化を自動化する

Posted at

はじめに

以前、Githubを緑化するためにできるだけ毎日コードを書いていた時期があったのですが、自動的に緑色にできたらなーと思うことがあったので、自動でGithubにコミットしてくれるようなシステムを作りました。

※ 自分の手でGithubを緑化するのは、手を動かす動機付けになるのでそういう人にはおすすめしません笑

Githubが緑色だと知らない人がぱっとみたとき「このエンジニアは積極的に活動しているな」という印象になるので印象もいいかと思います。(薄い緑がずっと並んでいるのは不自然ですがそこは積極的に他のプロジェクトでコミットして色を濃くしていきましょう笑)

↓参考までに7月あたりからこのプログラムを動かしている現在の僕のGithubはこのような感じになってます。

スクリーンショット 2017-11-30 22.17.26.png

業務で他のプロジェクトにコミットすることも多いのでそれらといい感じに中和してますね。

実装方法

自動でやる方法はいくつかあると思いますが、今回はシェルスクリプトを書いて、CentOS上でcronを用いて自動実行させることにしました。

プログラム

ただやみくもにテキストをGithubにpushさせるのではなく、どうせなら少しだけでもためになるようにしたいなと思い、qiitaのhttps://qiita.com/popular-items/feed から人気の投稿を取得し、Githubにpushするシェルを書きました。

app.sh
#!/bin/sh

cd $(cd $(dirname $0) && pwd)

file_name=`date +%Y-%m-%d`
path="$(cd $(dirname $0) && pwd)/posts/${file_name}.md"

if [ ! -e $path ]; then
  items=`curl -s https://qiita.com/popular-items/feed | \
         grep -o '<title>.*</title>\|https://qiita.com/.*?' | \
         sed -e '1d' -e 's/?$//' -e 's/^<title>//' -e 's/<\/title>$//'`

  IFS=$'\n'
  count=1

  for items in `echo "$items"`
  do
    if [ $(( count % 2 )) == 0 ]; then
      title="- [${items}]"
      row=$title$url
      echo $row >> $path
    else
      url="(${items})"
    fi
    count=$(( count + 1 ))
  done

  git add .
  git commit -m "add post ${file_name}.md"
  git push origin master
fi

自動実行

はじめは自分のmacのlaunchdを用いて、自動実行させていたのですが、macを起動しないと自動実行してくれないので、現在は個人で契約しているVPS上で実行させています。

(エンジニアならVPSぐらいはもってるよね....。)

インストールしているOSはCentOSなのでcronを用いて自動実行させています。

$ crontab -e

で毎日9時に対象スクリプトが動くように設定します。

00 09 * * * /home/hiroki/qiita-trending/app.sh

これで毎日9時にGithubにqiitaのトレンドに載っている投稿一覧が自動でpushされるようになりました。

おわりに

今回作成したプログラムはこちらにのせておきました。

4
3
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
4
3