tag:crieit.net,2005:https://crieit.net/boards/annict-access/feed 「アニメランキング作成サービスの開発」の投稿 - Crieit Crieitで「アニメランキング作成サービスの開発」ボードに投稿された最近の投稿 2019-11-17T23:22:03+09:00 https://crieit.net/boards/annict-access/feed tag:crieit.net,2005:PublicArticle/11-17 2019-11-17T23:22:03+09:00 2019-11-17T23:22:03+09:00 https://crieit.net/boards/annict-access/11-17 11/17 フィードバック対応 <p>派生プロジェクトの<a href="https://crieit.net/posts/509e31a0bbc4ffe7a1003278816c9e5d">音楽ランキングメーカー</a>を昨日リリースして、早速<a target="_blank" rel="nofollow noopener" href="https://ikens.net/ckoshien_tech/music-ranking-maker">IKEN</a>でフィードバックをいただきました。</p> <h2>keydownイベントに対応</h2> <blockquote> <p>検索時にPCだとエンター押下で検索できると便利</p> </blockquote> <p>reactにはinputタグにonKeyDownイベントがあるんですね。<br /> 知らなかった。<br /> keyCode 13はENTERキーです。inputタグにフォーカスしているときにENTERキーを押すと検索処理をするようにします。</p> <pre><code class="javascript">onKeyDown={(e)=>{ if(e.keyCode === 13){ //検索処理 } <span>}</span><span>}</span> </code></pre> <p>参考:<a target="_blank" rel="nofollow noopener" href="http://portaltan.hatenablog.com/entry/2015/08/07/173942">ReactでEnterキーのpushイベントを取得する方法</a></p> <h2>改行のスタイルを修正</h2> <blockquote> <p>iPhoneだと、楽曲選択時に改行の位置に英文字が来ると数文字見切れてしまう</p> </blockquote> <p>デバッグするとどうやらはみ出しているのは要素ではなく#text。<br /> oh...怪奇現象!と思いつつググってみると。</p> <p>参考:<a target="_blank" rel="nofollow noopener" href="https://memorandum-plus.com/2018/04/03/css-ブロックレベルから文字がはみ出してしまう/">css – ブロックレベルから文字がはみ出してしまう</a></p> <p>改行にも種類があるようで、何も指定していなかったので<strong>word-wrap: break-word</strong>を適用します。</p> <p><strong>CSS in JS</strong></p> <pre><code class="javascript"> wordWrap: 'break-word' </code></pre> ckoshien tag:crieit.net,2005:PublicArticle/11-3 2019-11-03T23:52:23+09:00 2019-11-03T23:52:23+09:00 https://crieit.net/boards/annict-access/11-3 11/3フィードバック対応など <h2>OGP設定</h2> <p>ちゃちゃっとcanvaで作りました。<br /> <a href="https://crieit.now.sh/upload_images/3cebc8b53a7a1a70fcf9eb56cb0dfce15dbee45b21b7f.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3cebc8b53a7a1a70fcf9eb56cb0dfce15dbee45b21b7f.jpg?mw=700" alt="" /></a></p> <h2>放送時期バッジ追加</h2> <p><a href="https://crieit.now.sh/upload_images/cbe767d73b91ce5956eb595079b64b6d5dbee68a61576.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/cbe767d73b91ce5956eb595079b64b6d5dbee68a61576.jpg?mw=700" alt="" /></a></p> <h2>フィードバック対応</h2> <h3>option要素並び順修正</h3> <p><a href="https://crieit.now.sh/upload_images/8b3bc553940e752ad81bfd979ed1312d5dbee64905ce2.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8b3bc553940e752ad81bfd979ed1312d5dbee64905ce2.jpg?mw=700" alt="" /></a></p> <blockquote> <p>・アニメ選択は降順で今の季節まででもいいかなと思いました。つまり 2019秋、夏、春、2018冬、秋、夏、春、2017冬、・・・ の順に並ぶのもいいかなと。</p> </blockquote> <h3>追加・削除を行うとソートが初期化されるバグ修正</h3> <blockquote> <p>・並び替えし終わった後にアニメ追加を行うと並び替えしたものが元に戻るので、戻らないようにしてもらえるとありがたいです…!</p> </blockquote> <h2>未実装のiken</h2> <ul> <li>アニメ番組の探しやすさ改善 <ul> <li>キーワード検索</li> <li>フィルタリング</li> </ul></li> <li>おすすめアニメのサジェスト <ul> <li>現状DBに保存していないので難しい</li> </ul></li> </ul> <p>本日のユーザ数:<strong>115</strong></p> <p>引き続き<a target="_blank" rel="nofollow noopener" href="https://ikens.net/ckoshien_tech/annictaccessv3">IKEN</a>募集しています。</p> ckoshien tag:crieit.net,2005:PublicArticle/URL-5dbd7f76e143e 2019-11-02T22:07:02+09:00 2019-11-02T22:11:10+09:00 https://crieit.net/boards/annict-access/URL-5dbd7f76e143e URLシェア機能を実装しました <h2>URLシェア機能をリリース</h2> <p><a href="https://crieit.now.sh/upload_images/300ee1fd55c6e057ffed5065722266ee5dbd7add39a27.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/300ee1fd55c6e057ffed5065722266ee5dbd7add39a27.png?mw=700" alt="" /></a></p> <p>これまで文字でのツイートや画像での保存のみのシェア機能でしたが、作ったランキングを再現する機能を実装しました。</p> <p>例:<a target="_blank" rel="nofollow noopener" href="https://annictaccessv3.netlify.com/replay?W3siYW5uaWN0SWQiOjUxOTd9LHsiYW5uaWN0SWQiOjUyNjF9LHsiYW5uaWN0SWQiOjUzMjJ9LHsiYW5uaWN0SWQiOjUxMTR9LHsiYW5uaWN0SWQiOjUxMDF9LHsiYW5uaWN0SWQiOjUyNDZ9LHsiYW5uaWN0SWQiOjUyMjd9LHsiYW5uaWN0SWQiOjUxMDB9LHsiYW5uaWN0SWQiOjUyMDh9XQ==">シェア機能で作ったランキング</a></p> <h3>「画像で保存」機能は廃止</h3> <p>画像のレンダリングが不完全ということと今回のURLシェアで役目を終えたと判断して廃止しました。</p> <h3>使い方</h3> <p><a target="_blank" rel="nofollow noopener" href="https://annictaccessv3.netlify.com/">https://annictaccessv3.netlify.com/</a><br /> これまでどおり、ランキングを作りたいアニメを選択し、ソート画面で並び替えてtwitterシェアボタンを押すとURLが生成されます。(※URLは結構長いです)</p> <h2>技術的なこと</h2> <p>アニメはそれぞれannictIdを持っているのでidを記述した配列をクエリパラメータに渡せばいいんじゃないかと思いつきました。<br /> 今回はクエリパラメータをbase64化してSPAに渡すようにしています。<br /> アニメのデータはannictIdを基にannict GraphQL APIから取得してきています。</p> <p><strong>GraphQLクエリ</strong></p> <pre><code class="javascript">query { searchWorks(annictIds:[]}) { edges { node { title seasonName seasonYear annictId twitterUsername watchersCount malAnimeId image { recommendedImageUrl } } } } } </code></pre> <h3>API、それは罠</h3> <p>上記クエリでIDに一致するデータを取得していたのですが、どういうわけか、並び順がannictIdsで指定した順番と異なるということに気づきました。<br /> 配列なので当然並び順にデータを返してくると思っていたのですが、annictIdでソートされて返ってきていたので、プログラム側で並び替える処理を書くことに。</p> <pre><code class="javascript">//API側でソートされてしまう問題に対処する let sortedArray = [] for(let j = 0; j < ids.length ; j++){ for(let i = 0; i < response.data.searchWorks.edges.length; i++){ if(response.data.searchWorks.edges[i].node.annictId === ids[j]){ sortedArray.push(response.data.searchWorks.edges[i]); } } } </code></pre> <h3>先送りした問題</h3> <p>順位とコメントを保持しようと思っていたのですが、日本語はエスケープ処理が必要で、実装に時間がかかるため、今回は見送りました。</p> <h2>意見(iken)を募集しています</h2> <p><a target="_blank" rel="nofollow noopener" href="https://ikens.net/ckoshien_tech/annictaccessv3">iken</a>で機能要望・改善案などを引き続き募集しておりますのでそちらもよろしくお願いいたします。</p> ckoshien tag:crieit.net,2005:PublicArticle/77d0600d2b51deeb7b4b4b1809f10d06 2019-10-29T23:36:40+09:00 2019-10-29T23:36:40+09:00 https://crieit.net/boards/annict-access/77d0600d2b51deeb7b4b4b1809f10d06 フィードバック対応 <p><a target="_blank" rel="nofollow noopener" href="https://ikens.net/ckoshien_tech/annictaccessv3">IKEN</a>にご意見いただきありがとうございました。下記対応しました。</p> <h2>選択解除・コメント入力対応</h2> <blockquote> <p>ランキングに入れたアニメは外せないですかね?あと、コメントも書けるといいと思いました</p> </blockquote> <p><a href="https://crieit.now.sh/upload_images/d0556852f4cab3111339c6af7fb06cc75db84ae829fb3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d0556852f4cab3111339c6af7fb06cc75db84ae829fb3.png?mw=700" alt="" /></a></p> <p>一言コメントを各作品に入力できるようにしました。<br /> また、「アニメ選択」の画面で選択中の番組をもう一度押すと選択が解除されるよう実装しました。</p> <h2>twitterシェア・画像保存に対応</h2> <blockquote> <p>ランキング作成後に何すればいいのかがちょっとわからなかったです。URLに保存してツイート機能とかほしいです。</p> </blockquote> <p><a href="https://crieit.now.sh/upload_images/32dcc5b527e51bf0365ec1f171a58f0d5db84d22a81f9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/32dcc5b527e51bf0365ec1f171a58f0d5db84d22a81f9.png?mw=700" alt="" /></a><br /> 画像保存も実装しました。レンダリングの精度はいまいちか...。</p> <h3>react-share</h3> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/nygardk/react-share">react-share</a><br /> 各種SNSへのシェアボタンを手軽に作れるコンポーネント。<br /> <a href="https://crieit.now.sh/upload_images/102e92a702e89059033b1dff5b0f87c55db84e010e8b0.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/102e92a702e89059033b1dff5b0f87c55db84e010e8b0.jpg?mw=700" alt="" /></a></p> <h3>html2canvas</h3> <p>言わずと知れた有名ライブラリ。reactでも問題なく使えます。</p> <h2>アニメ一覧の表示をシーズンごとにしました</h2> <blockquote> <p>年毎に全部比較するのは難しいため期ごとの選択もいいと思いました。</p> </blockquote> ckoshien tag:crieit.net,2005:PublicArticle/5-19-ReactNative 2019-05-19T22:34:41+09:00 2019-05-19T22:34:41+09:00 https://crieit.net/boards/annict-access/5-19-ReactNative 5/19 ReactNativeアプリ進捗 <p>進捗的には<a href="https://crieit.net/posts/ReactNative">昨日</a>の続きです。<br /> <a href="https://crieit.now.sh/upload_images/91632ca6f0d432d4d8f8c50c397eb3505ce1588f1b261.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/91632ca6f0d432d4d8f8c50c397eb3505ce1588f1b261.jpg?mw=700" alt="image" /></a></p> <h1>react-navigationを使ってページ遷移を実装する</h1> <pre><code class="javascript">const Stack = createBottomTabNavigator( { Main: { screen: Main, navigationOptions: ({ navigation }) => ({ title: 'メイン', }), }, ranking: { screen: Ranking, navigationOptions: ({ navigation }) => ({ title: 'ランキング作成', }), }, select: { screen: CtrlSelectPrograms, navigationOptions: ({ navigation }) => ({ title: '番組選択', }), } }, { tabBarOptions:{ activeBackgroundColor: '#f85b73', activeTintColor: 'white', style:{} } } ); </code></pre> <p>下にタブを作ってタブで画面遷移を切り替える形にしました。<br /> screenプロパティで実際に表示するコンポーネントを指定し、<br /> navigationOptionsではタブに表示するラベルをtitleプロパティで指定します。<br /> できる限りannictのテーマカラーを採用していきます。</p> <h1>react-native-elementsを使ってヘッダを実装する</h1> <pre><code class="javascript">import React from 'react' import { Header } from 'react-native-elements' export default class NavBar extends React.Component{ constructor(){ super(); } render(){ return( <Header //leftComponent=<span>{</span><span>{</span> icon: 'menu', color: '#fff' <span>}</span><span>}</span> centerComponent={ { text: this.props.title, style: { color: '#f85b73', fontSize: 16, fontWeight: 'bold' } <span>}</span><span>}</span> //rightComponent=<span>{</span><span>{</span> icon: 'home', color: '#fff' <span>}</span><span>}</span> //backgroundColor={'#fff'} containerStyle=<span>{</span><span>{</span> color:'#f85b73', backgroundColor: '#fff' <span>}</span><span>}</span> /> ) } } </code></pre> <p>画面遷移ではヘッダコンポーネントを共通化するのが難しいようだったので、propsでタイトルを渡して切り替えられるように実装しました。<br /> leftComponentやrightComponentは使わないので一旦オミットします。</p> <h1>原因不明のビルドエラー !?</h1> <p><strong>Invariant Violation: View config not found for name RTCView</strong>というエラーメッセージが出て実行エラーが出る状態に。<br /> <a target="_blank" rel="nofollow noopener" href="https://kenjimorita.jp/reactnative-invariant-violation-view-config-not-found-for-name-input/">【ReactNative】これ。Invariant Violation: View config not found for name input</a></p> <p>エラーメッセージの内容が明確でない場合は基本的に<strong>パッケージャーの再起動とキャッシュの削除</strong>を試します。<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/yshz/items/9d4438a64275550cbf13">キャッシュを削除する方法</a></p> <p>しかしいくらやってもエラーが出てこれだけで2時間ぐらい奮闘。<br /> ふと違うスマホでビルドしてみると成功したので、スマホ側のアプリキャッシュを削除するとあっけなく通ったのでした。ぐったり。</p> ckoshien tag:crieit.net,2005:PublicArticle/RN 2019-05-15T22:26:53+09:00 2019-05-15T22:26:53+09:00 https://crieit.net/boards/annict-access/RN RNアプリ化始動。 <h1>仕様策定</h1> <h2>使う技術</h2> <ul> <li>React Native</li> <li>GraphQL(annictサーバ問い合わせ)</li> </ul> <h2>ランキング集計機能</h2> <ul> <li>1-50位まで設定し、50位は1pt、1位50pt。</li> <li>10位までしか設定しなかった場合は10位1pt、1位10pt。</li> <li>多く設定すれば高pt。</li> <li>「高ポイントをつけてお気に入りのアニメを応援しよう!」とかどうだろう。</li> <li>ユーザ登録しない場合、UUIDで集計する?</li> <li>アプリ削除時にUUIDリセット</li> <li>ユーザがアプリ削除したときにサーバ側では検知できない</li> </ul> <h2>twitterシェア機能</h2> <p>1-10位ぐらいまでのシェア機能つけたい</p> <h2>一旦のゴール</h2> <p>playストア公開</p> ckoshien tag:crieit.net,2005:PublicArticle/b2e0256fcd24966cd3ace9d0e02910c1 2019-04-11T22:55:28+09:00 2019-04-14T22:59:58+09:00 https://crieit.net/boards/annict-access/b2e0256fcd24966cd3ace9d0e02910c1 ランキング作成機能 <p><a href="https://crieit.now.sh/upload_images/a199d94e7eef6de4fca20a85e49642065caf465411841.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a199d94e7eef6de4fca20a85e49642065caf465411841.jpg?mw=700" alt="image" /></a></p> <h1>ライブラリ変更・実装変更</h1> <p>annictから最近見たアニメをGraphQLで取得してドラッグ&ドロップで並び替える機能を作成しました。まだUIは整っていません(汗)</p> <p>先日、ReactでGraphQLへアクセスする方法を書きました。</p> <ul> <li><a href="https://crieit.net/posts/React-GraphQL-API">ReactでGraphQL APIにアクセスする</a></li> </ul> <p>昨日作ったランキング作成機能ですが、コンポーネントがスマホのtouchイベントに対応していないことに気づきまして、急遽ライブラリの入れ替えと実装の変更を行いました。</p> <h1>使用しているライブラリ</h1> <p>学習コストは多少ありますが、react-dndほど難解ではない印象です。割とスムーズにドラッグ&ドロップを楽しめるライブラリかと。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/atlassian/react-beautiful-dnd">react-beautiful-dnd</a></li> </ul> <h1>動作イメージ</h1> <div class="iframe-wrapper"><iframe width="560" height="315" src="https://www.youtube.com/embed/dKwKmKiGAHo" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div> <p>annictアカウントをお持ちの方は是非遊んでみてください!<br /> <a target="_blank" rel="nofollow noopener" href="https://annict-access.herokuapp.com/">https://annict-access.herokuapp.com/</a></p> ckoshien tag:crieit.net,2005:PublicArticle/3-30 2019-03-30T23:35:57+09:00 2019-03-30T23:35:57+09:00 https://crieit.net/boards/annict-access/3-30 3/30進捗 <h1>タブ分離</h1> <p>既存の「未視聴一覧」と「グラフ」をタブ化しました。</p> <h1>通信メソッド分離</h1> <p>いわゆるリファクタリングです。<br /> Reactを始めたばかりのころに作ったので色々ソースコードがひどいことになっていましたw</p> <h1>navバーの追加</h1> <h1>画像とサブタイトルの表示をflex-boxに</h1> <h1>best10作成機能作り始めました</h1> ckoshien