2023.04.17
こんにちは。技術部の真間と申します。主にネットワークをしております。
趣味の場では「行儀の悪いネットワーク屋」と自己紹介しております。
私の記事ではおおよそ技術っぽいことを書いていこうと思っていますのでよろしくお願いします。
一発目からネタに悩んだので、ひとまずジャブとして「最近作ったもの」のお話をします。
Qiitaやはてなでやれと言われそうですが、飼い猫の話と同等だと思うので、あちらではもっと細かく書きますが、こちらではライトに書いていきます。
ふと、おすすめに上がってきたVtuberさん(個人勢)の配信を見ると、歌枠をやっていたのですが、曲選びに困っていました。「ランダムでできたらなー」と言っていたので作れないか考えてみました。
既にその方はSplead Sheetに今まで歌った曲をタイトル・アーティスト・ジャンル・テンション(その曲のノリ)・著作権管理団体情報などの項目で一覧にまとめていました。
そこで、こんなものを作りました。
この老人はアカシックレコード(正体はスプレッドシート)と神(正体はPHP)とチャネリング(APIを利用)しています。浮いているのは仙人だからです。
結果はこのように出ます。
「ジャンキーナイトタウンオーケストラ」、すりぃさんの曲ですね。名曲ですね。やたらと最近の曲にも明るい老人(神)のようです。
もう一回押してみます。
「違う、そうじゃない」、鈴木雅之の名曲ですね。かっこいいです。
条件を指定してもう一回してみます。「たかし」(テンションが高めの意)を設定します。
「ピースサイン」、米津玄師の曲ですね。たしかにテンション高めの曲ではあります。
ちゃんと条件指定でのランダムもやってくれます。たかしの曲は208曲あるようです。
久しぶりにPHPを書きましたが、調べながら考えて寝ずに書いておおよそ2日程度で作れました。
処理は以下のようになります。
1.データを入れてあるテキストファイルの更新日時を確認し、1日以前の場合はGoogle API(Splead Sheet)をつかってSplead Sheetを読みに行き、テキストファイルに書き込む。そうでない場合はテキストファイルを読みに行く
2.データを配列にしてジャンルの配列・テンションの配列をつくり条件のプルダウンに表示する。
3.「お願いします」が押されると「導き」が始まる。
条件のジャンル・テンションが選択されているとデータの配列から指定されたジャンル・テンションのデータを配列にする。そうでない場合はすべてのデータを配列にする。
4.配列の総個数をMAXにして乱数を生成し、生成された番号の配列を取得する。
5.配列の総個数を曲数として表示させる。
6.取得した配列から曲名を「導き」として表示する。
以上が簡単な処理の流れです。
ソースも貼りたかったのですが、長くなるので割愛します。
ひとまずこれを使うかどうかは別として、Splead SheetからAPIを利用してPHPで読めることが確認できたので上々だと思っています。
非常に悩んだのはSplead Sheetから受け取ったJsonを配列にした際、連想配列がなぜかさらなる入れ子構造になったりならなかったりした現象があり、ここの解決に時間がかかった印象がありました。
あとはリファクタリングに時間がかかりました。最初はすべて一つのPHPファイルに書いていたのですが、ユーザー定義関数を作り別のPHPファイルにすることでスッキリさせました。
乱数で配列を取得する部分や連想配列へアクセスする部分、そもそもドキュメントを読んでAPIを利用するなどは、とあるサイトからランダムで画像を取得する処理を行うとても複雑なLineBOT(PHP)を作った経験や、とても簡素なDiscordBOT(Python)を作ったときの経験が活かされました。現在はすべて爆破済みです。
趣は異なりますが、こういった日曜プログラマーのようなものは、ある種の一芸のようなものだと思っています。結局はプログラミング言語も人間が扱う道具なので、便利になれるように工夫して使ってあげればみんなハッピーになれると思ってます。
次もなにか、気になっているものについてや、やってみたことについて書いていこうと思いますのでよろしくお願いします。
技術 真間