野球リーグスコア管理システムの開発

2019-01-13に作成

image
野球リーグスコア管理システムキャップ野球情報局に関する進捗です。

使っている技術など

  • NodeJS
  • ReactJS
  • netlify
  • MySQL
  • materializecss
  • react-bootstrap
  • react-bootstrap-table-next

旧システムについてはこちらの記事をご覧ください。

残りタスクリスト

trello

所有者限定モードのためこのボードには投稿できません ボードとは?

2/27進捗

概要

image

昼休み開発

サーバサイドは夜に差し替え。
夜は運営者ギルドでのKoretteさんのレビュー会に参加。

選手ページの打撃成績に出塁率・長打率・OPSを表示するよう修正

  • スマホ版(375px未満)は非表示

選手一覧API

  • 名前を昇順にソートする(全件表示・検索結果)

2/26進捗

作ったサービスのレビュー依頼掲示板でご指摘いただいている箇所を部分的に修正しました。ありがとうございます。

概要

最新のスタッツのチーム順位からチームページへのリンク実装

テーブルセルのpaddingを増やした

#before
padding: 8px 1px 8px 1px;

#after
padding: 10px 5px 10px 5px;

2/11進捗

概要

  • フッタにツイートボタン置いてみた
  • IE11対応
  • 期毎打撃成績・投球成績をアコーディオン化
    image

フッタにツイートボタン置いてみた

ページごとにシェアするURLを動的にしたいのでまだ課題として置いておきます。

参考にした記事:Twitterシェアボタンの設置 - Qiita

IE11対応

ふとIE11で表示させてみたら真っ白に近かったので急遽対応しました。下記記事のbabel-polyfill入れてindex.jsでインポートする方を採用しました。

参考記事:Reactアプリを IE11 で表示すると 「オブジェクトは 'startsWith' プロパティまたはメソッドをサポートしていません。」 が発生する

期毎打撃成績・投球成績をアコーディオン化

1/17のボードでシーズンをプルダウンで選択する方式にしたのですが、他の箇所でアコーディオン化に成功して思いのほかよかったのでこちらもアコーディオン化しました。
ただ、苦労したのはアコーディオンの中に格納したテーブルの横幅
テーブルの中で表示するコンテンツが多く、結局paddingで5px程度取っても横幅が足りなくなるのでfont-sizeを下げることにしました。

2/7-9進捗

概要

image

  • メニュー実装
  • react-sticky-footer廃止
  • 個人成績ページに所属チームを表示するように修正
  • コンテンツのカード化
  • レビュー募集しています

メニュー実装

元々スライドメニューはあったのですが完成度が低かったので途中からコメントアウトしていました。
メニューを選択するとfocusで意図しないスタイルが適用されていたので背景色に同化してごまかしましたw

  .bm-item:focus {
    outline-color: darkcyan;
  }

コンテンツのカード化

カード化すると見栄えがよくなりました。
ただ、react-bootstrap-tableをカードでラップしようとするとカードのheightが0になってしまってちょっと悩みどころ。

レビュー募集しています

ずっと公開はしていたのですが、
- UIがだいぶマシになってまともに見られるようにはなった
- UIの修正が一段落ついた
- メニューを実装して導線が張れた

ということで、crieitのサービスのレビュー掲示板でレビューを募集しています。

2/6進捗

昨日記事書けなかったので今日書きます。

概要

  • 配色の変更
  • react-sticky-footerの導入
  • フレーム解除
  • 試合結果ページ内の選手へのリンク追加

配色の変更

カード型コンテンツの配色パターンの決め方があったので参考にしてだいぶ改良しました。アクセントカラーはどこに置けばいいかわからずに結局すごく目立つところに置いてます。

react-sticky-footer

react-sticky-footer
コピーライトとかの表記ですね。
フッタがスクロール中は半透明になり、一番下までいくと指定したスタイルで見える、というコンポーネントです。

フレーム解除

reactのwindow.locationではページをフレーム内で表示していても、現在ブラウザがどこで表示しているか判定できないようだったので結局public/index.htmlにべた書きしました。

    <script type="text/javascript">
      if (top!=self) {
         top.location.href=self.location.href;
      }
    </script>  

試合結果ページから選手ページへのリンク

勝利・敗戦・セーブ・HRを記録した選手に選手ページへのリンクを追加しました。これでトップページ(試合開催日一覧)→試合結果→選手個人ページへの導線まではできたことになります。
肝心のスタッツが独立しているという。

2/5進捗

試合動画の埋め込み

image

コンテンツを活用したい

リーグのコンテンツとして試合動画を撮っているので上手く活用したいところです。

react-youtube

今回はreact-youtubeというパッケージを使っています。

データの紐付け

定石としてはDBにカラム作ってAPIで返すべきなのだとは思いますが、今回はjsonですらないです。

  • jsonにはしたいけどコメント書きたい

ということで試合IDをキーとしてyoutubeの動画IDを格納するファイルを作りました。
DBに追加するのと手間は同じぐらいだと思います。

export const youtubeConfig =
{
  //日付などのコメント
  "試合ID":"youtube動画ID",
}

これをreact内のループでこう書いてやります。

import { youtubeConfig } from './youtubeConfig'
(中略)
<YouTube
 videoId={youtubeConfig[試合ID]}
/>

CSSでアスペクト比を維持する

個人開発でcalcを使ったのは初めてです。
業務でもそんなに使ったことはないのですが...。
ブラウザの幅に応じて動画の幅を拡大縮小し、高さをアスペクト比を維持するように変えてやります。

iframe{
    width: 90%;
    height: calc(90vw*9/16);
  }

react-bootstrapのbreaking change

個人開発のちょっと恥ずかしい話(失敗談)です。
image

1.0からBootstrap4対応へ

react-bootstrap
Reactを使われている方は馴染みがあるかと思いますが、
0.32.4までがbootstrap3に対応しており、bootstrap4対応によって0.32.4から1.0.0-betaまで一気にバージョンが上がりました。
公式ではbootstrap3系と4系は分けてサポートしていくとアナウンスされています。

breaking changeに気づかなかった

昨年9月に1.0.0-betaがリリースされていましたが、知ったのは昨日。しかも「ドキュメントのフォーマットちょっと変わったなー」ぐらいの認識で見ていたのと、Cardコンポーネントが新たに追加されていたのでそちらの実装に気を取られていたのとでbreaking changeに気づいたのが今朝。昨夜デプロイしてたので一晩メインのページが落ちた状態でした...。

昼休みに直す

昨夜実装したコンポーネントをコメントアウトして一旦デプロイしなおし、エラー箇所のソースを確認していた際にようやくbreaking changeに気づく。Cardコンポーネントがある4系に寄せるか、3系に戻してCardコンポーネントがない状態で対応するか少し迷いましたがとりあえず3系に戻してCardはmaterializeCSSで対応しました。元々ベースのデザインにmaterializeCSSを採用しています。
結局昼休み30分ぐらい使って何とか直して再デプロイ。

1/27進捗

全期間通算成績

現在入力している全てのシーズンのデータから通算成績を取得する処理を実装しました。
image
react側は旧システムAPIであらかじめ作っていたのもあって、
これにはそんなに時間がかかりませんでした。

本日から新シーズン始動

本日、2019年度前期シーズン開幕戦でした。
現行のReact/NodeJS/Netlifyのシステムでは初めての本格運用が始まります。

スコア入力

スコアの速報を入力していたのですがサーバサイド側で打率が0のときに打撃十傑から除く処理が抜けていたことに気づいてスコア入力を中断してシステムの修正を行うなど。

昨日の進捗

ReactでOGP対応した

1/23進捗

スタッツページから個人成績への遷移

image

ここのところreactでOGPを動的に変える方法を模索していて進捗が出ていませんでした。
これまでスタッツページから個人の成績ページへの遷移は打率タブの名前欄のみ実装していましたが、ノンタイトル以外のタブで個人成績へジャンプできるように実装しました。
また、選手名をマウスオーバーした際にスタイルを変えるよう実装しました。

1/14進捗

1/14進捗

[UI]スコア入力画面実装中

image

[UI]

  • react-autocompleteを用いた選手名の候補表示
  • 数値入力コンポーネントの実装・スタイル調整

[API]

  • クライアントから投げられた検索クエリに対して選手候補の一覧を返す実装

[API]試合結果データ取得

image

[API]

  • 試合結果データを返す

フォーム(UI)と入出力の形が一致していないのでどこかで策定する必要あり。