2019-11-17に投稿

音楽ランキングメーカーをリリースしました。


https://music-ranking-maker.netlify.com/
- URLシェアの例

開発のきっかけ

UIが似ているのでお気づきの方もいらっしゃると思いますが、10/27にリリースしたアニメランキング作成サービスの派生プロジェクトです。
楽曲の情報も持てないかな、と思ってちょっと調べたところ、itunes search APIを見つけました。

動作イメージ

アニメランキング作成サービスとの違い

楽曲試聴機能

今回使ったライブラリ:react-player
音楽プレイヤーを実装するにあたり、いくつかのコンポーネントを検討しましたが、最初のうち、あまりにUIが簡素(開発者が自由に作れる)で敬遠していました。

ただ、controlsオプションでHTML5 Audioのネイティブプレーヤーを表示できることに気づいたのでこちらを採用しました。

JSONPの解釈

アニメランキング作成サービスではGraphQL APIを使用していましたが、
itunes search APIはRESTでGETリクエストを送るだけです。
ただし、今回はサーバ側ではなくクライアント側の実装なのでCORS問題が発生します。
クエリパラメータにcallbackを指定して、fetch-jsonpでJSONPを扱います。

itunes search APIへの問い合わせ。ページングとURLエンコード済み

(async()=>{
        if(keyword !== undefined){
            let url = 'https://itunes.apple.com/search?term='+encodeURIComponent(keyword)+'&offset='+((pageNum-1)*50)+'&limit=50&media=music&country=jp&lang=ja_jp';
            let resp = await fetchJsonp(url);
            let response = await resp.json();
            if(response !== null){
                store.dispatch(loadData(response.results))
                console.log(store.getState());
            }
        }
    })().catch(
        error=>{
          console.log(error);
        }
    )

要素内スクロール

アニメランキング作成サービスではあまり使っていなかったのですが、
下部にプレイヤーが表示されるため、

.scroll{
    height: calc(100vh - ヘッダの高さ);
    over-flow: scroll;
}

スクロールを実装しています。

選択時にUIがガタガタする問題への対処

アニメランキング作成サービスではまだ改善できていませんが、
選択前と選択後で枠線の太さを変える実装をしているため、UIががたつくという問題がありました。
あらかじめ同じ太さで目立たない色の枠線にしておき、選択された際に色のみを変える方法を取っています。


ckoshien

個人開発4年目。普段はアプリケーションエンジニア。 ReactJS/NodeJS/ReactNative/Java

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント