今日誕生日のアイドルを出力するCircleCI orbをつくったお話

2018年12月25日

こんにちは。、 .ごっちです。

2018/12/23 に行われたアイマスハッカソンに行ってきました! 【増枠】アイマスハッカソン 2018 (2018/12/23 10:00〜) *今回のテーマ:We♡IDOLS きっとアイマスハッカソンに参加するプロデューサー全員に共通していること、 それは皆アイドルを愛でているということ。 そして、ものづくりが好きであるということ。…*imas.connpass.com

なんか先月も京都でアイマスハッカソンしてきたんですが、細かいことは気にしません アイマスハッカソン 2018in 京都を振り返り *この記事は アイドルマスター Advent Calendar 2018 の 6 日目の記事です。*medium.com

今回の東京でのハッカソンもスタッフとして参加してきましたが、プロダクトも作ったのでそのお話です。

2018/12/15 に CircleCI Japan のミニハッカソンに行ってきたことを思い出して、アイマスの Orb も作れないかなぁなんてアイマスハッカソン当日に思っていました。 CircleCI Orbs ミニハッカソンに行ってきた こんにちは、 .ごっちです。 #circlecijpmedium.com

っで、im@sparql を使って今日誕生日のアイドルを出力させてみてみるかと思ってさっそく作ってみました。 im@sparql 広がるアイマスワールドをオープンデータ化 Web やアプリから SPARQL で検索・利用可能なエンドポイントsparql.crssnky.xyz

im@sparql とは、

広がるアイマスワールドをオープンデータ化 Web やアプリから SPARQL で検索・利用可能なエンドポイント

です!SPARQL というものを使ってアイマス情報をいい感じにまとめてくれているデータの塊です。。(SPARQL についてあまりよくわかっていない)

im@sparql をよく調べてみると、curl の GET メソッドでアクセスできるし、json でレスポンスもしてくれるので、かなり簡単にできそうだなぁと思っていました。

リポジトリ ↓ YutaGoto/todays-imas-idol-orb *Contribute to YutaGoto/todays-imas-idol-orb development by creating an account on GitHub.*github.com

CircleCI Orb に公開したもの ↓

https://circleci.com/orbs/registry/orb/yutagoto/todays-imas-idol

ざっとコードをみてみる

version: 2.1
description: >
  このOrbは本日誕生日のアイドルをCircleCI上に出力します。
  このOrbはim@sparqlをしようしています。 [https://sparql.crssnky.xyz/imas/](https://sparql.crssnky.xyz/imas/)
  このOrbのリポジトリは [https://github.com/YutaGoto/todays-imas-idol-orb](https://github.com/YutaGoto/todays-imas-idol-orb) です。

examples:
  echo-idols:
    usage:
      version: 2.1
      orbs:
        todays-imas-idol: yutagoto/todays-imas-idol@0.1.0

      jobs:
        build:
          docker:
          - image: ubuntu:18.04
          steps:
            - run:
                command: |
                  apt-get update
                  apt-get install -y sudo
            - todays-imas-idol/echo-todays-imas-idol

      workflows:
        main:
          jobs:
          - build

commands:
  echo-todays-imas-idol:
    description: アイドルを出力
    steps:
      - checkout
      - run:
          command: sudo apt-get update && sudo apt-get install -y curl jq
      - run:
          name: 今日のアイドル
          command: |
            TODAY=`date +%m-%d`
            SPURL="[https://sparql.crssnky.xyz/spql/imas/query?query=PREFIX%20schema%3A%20%3Chttp%3A%2F%2Fschema.org%2F%3ESELECT%20(sample(%3Fo)%20as%20%3Fdate)%20(sample(%3Fn)%20as%20%3Fname)%20WHERE%20%7B%20%3Fsub%20schema%3AbirthDate%20%3Fo%3B%20schema%3Aname%7Cschema%3AalternateName%20%3Fn%3BFILTER(regex(str(%3Fo)%2C%20%22$TODAY%22%20)).%7Dgroup%20by(%3Fn)order%20by(%3Fname)](https://sparql.crssnky.xyz/spql/imas/query?query=PREFIX%20schema%3A%20%3Chttp%3A%2F%2Fschema.org%2F%3ESELECT%20(sample(%3Fo)%20as%20%3Fdate)%20(sample(%3Fn)%20as%20%3Fname)%20WHERE%20%7B%20%3Fsub%20schema%3AbirthDate%20%3Fo%3B%20schema%3Aname%7Cschema%3AalternateName%20%3Fn%3BFILTER(regex(str(%3Fo)%2C%20%22$TODAY%22%20)).%7Dgroup%20by(%3Fn)order%20by(%3Fname))"
            curl -s $SPURL | jq ".results.bindings[].name.value"

こいつの commands でやっていることは curl と jq をインストールして、簡単な shell 芸人していい感じに出力をするだけです。

URL はすでに im@sparql の当サイトお誕生日お祝い編にパスとパラメータがあったので、あとはいい感じに置換すれば OK みたいな状態でした。

date コマンドの出力フォーマットを指定できることを初めて知りましたw。

YutaGoto/todays-imas-idol-orb のリポジトリにプッシュすると CircleCI 上では下の画像のような出力になります。

12/23 が誕生日のアイドルがいないので null になっています。12/24 が誕生日のアイドルはいるので、12/24 に実行してみると。。

このように出力されます。複数人数でも対応できている jq コマンドがすごい。

つくって公開はしたはいいものの、だれにも使われない状態なのは悲しいので、すくなくとも自分の練習プロジェクトでは使おうと思っています。

その PR はすでに投げてはいます。。 add todays idol by YutaGoto · Pull Request #223 · YutaGoto/salmon_run *GitHub is home to over 28 million developers working together to host and review code, manage projects, and build…*github.com

いろいろコミットがあるのは察してください。タイムゾーンが違っていて日付が変わっても出力がかわらないのはさすがに違和感があったので直したり、bash コマンドが使えるのかわからなかったりしてリリースするまで orb もかなりコミットしていたりしています。

この Orb の使い方は簡単で、CircleCI でもろもろ設定した後 .circleci/config.yml に次の行を追加するだけです。

version: 2.1
orbs:
  todays-imas-idol: yutagoto/todays-imas-idol@0.1.0

# ...
jobs:
  build:
    steps:
      - todays-imas-idol/echo-todays-imas-idol

みたいなことをかければ OK です。すると、、

コードチェックやテストをしたあとに今日のアイドルが出力されます!これはすごい!タイムゾーンには注意しましょう。

ほんとうにこれです。お世話になっております。

こうも簡単にできて公開してみんなが使える状態になっている orb の仕組みはすばらしいと思ったし(正しい使い方かどうかは置いておく)、im@sparql で比較的カンタンに情報をとってこれるのもすごい仕組みだなと改めて思ったのでした。

あと、アイマスハッカソンの当日の Tweet の様子は Togetter にまとめられています。 #imas_hack アイマスハッカソン 2018 in 東京 ツイートまとめ 2018/12/23 に開催されたアイマスハッカソンのまとめですtogetter.com

ほかの方の発表の様子は YoutubeLive でも配信されていて、そのアーカイブはいつでも見れる状態にあります。

来年もアイマスですよ!アイマス

おまけ

当日の LT のタイムキープ用の銅鑼がなかったらしいので NintendoLabo で銅鑼っぽいものを作りました。使われなかったけど。

References

ProfilePicture

Yuta Goto

フリーランスのソフトウェアエンジニアです。現在はReact.jsを使用したWebフロントエンドの開発やRuby on Railsを使用したサーバサイドの開発を行っています。