【React】Game Usersを一緒に作ろう!【Node.js】 [無断転載禁止]©2ch.net
ゲームユーザーズはゲームユーザーのためのコミュニティサイトです。
現在、開発者を募集しています。
初心者でもWebを触ったことのないプログラマーでもOKです!
ReactやNode.jsを使える、または興味があるみなさん
ぜひ一緒にやりましょう!
デザインできる人も協力してくれると嬉しいです。
開発者募集!
https://gameusers.org/dev/blog/developer/
開発ブログ
https://gameusers.org/dev/blog/
GitHub
https://github.com/gameusers/web
Game Users
https://gameusers.org/
質問・疑問なんでも書き込んでください。
ブログの記事をここにも投稿するので読んでみてね。 参加ありがとうございました。
未来のプログラム環境を感じられました! プログラム配信 - 本を読みながらNode.jsを勉強します
プログラム配信を行っています。
Teletype for Atom というリアルタイムのコラボレーションツールを利用して
勉強・開発を行っていくので、よかったら見てみてください。
Node.jsに詳しい方おられましたら教えてください。
https://www.youtube.com/channel/UCGmS-B707Sqa19BXRn02JIw/live
Teletype の使い方はこちらの記事で解説しています。
この記事は配信中のみ見れるようにしています。
https://gameusers.org/dev/blog/live/ プログラム配信中。
Node.js の Express で Hello Worldを表示したところから勉強を再開します。
今日はもっとスピードを上げて進めていきたい。
https://www.youtube.com/channel/UCGmS-B707Sqa19BXRn02JIw/live
Teletype for Atom の使い方はこちらの記事で解説しています。
この記事は配信中のみ見れるようにしています。
https://gameusers.org/dev/blog/live/
Teletype 気軽に参加してください。
portal ID: a06d1a7b-41e8-4e70-af4f-0ea4f2f92e99 Dockerってすごくない?
Game Users を Node.js で書き直したいので、本を読みながら Node.js の勉強をし始めました。
https://www.amazon.co.jp/dp/B077ZY61ZL/
この本を読みながらコードを書きつつ進めていたのですが
MongoDB の導入部分で詰まってしまいました。
これまでは XAMPP や Node.js などの Windows 用インストーラーを利用して
開発環境を簡単に構築していたのですが
MongoDB は Windows の設定がややこしそうなので
ここらへんで一度、今後の環境構築について見直すべきではないかと考え
新たな道を模索することにしました。
比較的、新しい技術や機能を使おうとしたときに、Windows はやっぱり不便なんですよね。
Mac を使っているプログラマーが多い理由が理解できました。
そこで勉強しようと思ったのが、なにかと話題になっている Docker。
ネットでプログラム関連の記事を調べていると
あちこちで目につくので名前だけは知っていたのですが
開発環境構築に便利だと聞いて手を出してみました。
とりあえず Docker Toolbox を利用して
ローカル環境で Node.js の Hello World ページが表示できるところまでは行けました。 本当に初心者レベルなのですが、触ってみて感じたのは
Docker(コンテナ技術)はすごいということです。
なにがすごいのかというと、例えば Node.js の Docker イメージ(コンテナを作るための元)が
オフィシャルから提供されており、それを簡単なコマンドで導入することができるのです。
WordPress や各種データベースも公式からイメージが提供されているので
それを元にして、わずか数行のコマンドで開発環境を構築することができます。
これがやばい!Docker を利用すれば本当に簡単に開発環境が作れるのです。
Docker はバックエンド臭が強くて(解説サイトは難解な専門用語だらけ!)
導入障壁が高いように思われますが
ローカルに開発環境を作るだけなら、そこまで難しいものではないです。
黒い画面に恐怖を感じる人は触りたいと思えないかもしれませんが
そういう人にこそ Docker をお勧めしたいですね。
最初に Docker についての学習コストを支払う必要はありますが
昔ながらの方法で手動で開発環境を構築していくよりも
Docker を利用した方が、のちのち楽になるのではないかと感じています。
https://www.amazon.co.jp/dp/B01ID3FE60/
自分はこの本を読みながら(値段が高いので Kindle Unlimited で読むことをオススメします)
1週間くらいで、とりあえず使うことはできるようになりました。
そのくらいのコストで、今後の開発環境構築の手間と憂いが除かれるなら
安いものではないかと思います。
具体性のないぼんやりした内容なので、いまいち良さが伝わってこないかもしれませんが
もうちょっと使いこなせるようになったら
雑魚プログラマー視点からの Docker の利点をまとめた記事を書いてみようと思います。 Windows10なら、WSL のUbuntu で、MongoDB は出来ないのか?
ただし、WSLでは、Dockerは使えないけど Windows Subsystem for Linuxなんてあるんですね
検索して初めて知りました
自分はDocker Toolboxを使ったので
同時にVirtualBoxもインストールされました
知ってたらDockerを覚えなかったかもしれないですね
でもDockerを使えるようになってよかったと思ってます
慣れたらどんな環境でも簡単に作れるようになるかも?しれないので PCのディスプレイが壊れていたので、プログラム配信がしばらくできていませんでした。
Node.jsの勉強中です。MongoDBを使うところから再開します。
今日からまたがんばります!
Teletype for Atom の使い方はこちらの記事で解説しています。
この記事は配信中のみ見れるようにしています。
https://gameusers.org/dev/blog/live/
Teletype 参加者募集中
portal ID: 3a69b9ec-e1a7-4c15-8459-d96c3ea98c58 プログラム配信中。
Node.js&ExpressでMongoDBにデータの挿入に成功しました。
次は挿入したデータを表示するところからです。
Teletype for Atom の使い方はこちらの記事で解説しています。
この記事は配信中のみ見れるようにしています。
https://gameusers.org/dev/blog/live/
Teletype 参加者募集中
portal ID: f88f92c1-0f8c-40a5-a377-c9df3481f932
配信URL
https://www.youtube.com/channel/UCGmS-B707Sqa19BXRn02JIw/live Node の本がある。
Node.js超入門、掌田津耶乃、2017
YouTube に、外人の動画もある
Node.js & Express From Scratch [Part 1] - Intro & Environment
https://www.youtube.com/watch?v=k_0ZzvHbNBQ 良さそうな本だったけどお金がないので読めない…。
Visual Studio Code を使おうという項目があったので気になりました。
自分はAtomを使ってるんですが、VSCにもコード共有機能があるようなないような話なので
ちょっと気になっています。
ドットインストールみたいにYouTubeにも解説動画があるんですね。
英語なので理解に時間がかかりそうですが。
良い情報をありがとうございます! プログラム配信中。
Node.jsでMongoDBのデータを挿入&表示することができました。
今日は画像アップロード機能を実装する項目からです。
Teletype 気軽に参加してください。
portal ID: 0a1c7b4e-5d1e-4ee4-bad9-17e0c341490f
Teletype for Atom の使い方はこちらの記事で解説しています。
この記事は配信中のみ見れるようにしています。
https://gameusers.org/dev/blog/live/
配信URL
https://www.youtube.com/channel/UCGmS-B707Sqa19BXRn02JIw/live 再起動したので portal IDが変わりました
fdbe5d72-2a56-442e-8942-0f709d4caf01 プログラム配信 - Node.js勉強、Passport(ログイン用パッケージ)の使い方
Teletype for Atomの利用をやめて、AWS Cloud9で開発することにしました。
参加者各自がAWSのアカウントを作らないといけないのかと思ったら
こっち側で用意するだけでいいみたいです
ブラウザだけあれば開発に参加できます
ブログで開発について詳しく解説しています。
https://gameusers.org/dev/blog/live/
Cloud9 IDEのページにアクセスするとログイン画面が出てくるので
この情報を入力してください
アカウントID:956477059000
ユーザー名(どれかひとつ):guest-1, guest-2, guest-3, guest-4, guest-5
パスワード:Password12345
Cloud9 IDE
https://us-west-2.console.aws.amazon.com/cloud9/ide/592e5c99fbf1446d803867cf6100218d
開発中のウェブサイト(リアルタイムでコードが反映されます)
https://592e5c99fbf1446d803867cf6100218d.vfs.cloud9.us-west-2.amazonaws.com/
Mongo Express(Basic認証が表示されますが未入力で入れます)
https://592e5c99fbf1446d803867cf6100218d.vfs.cloud9.us-west-2.amazonaws.com:8081/ プログラム配信 - Node.js勉強、第二部開始
PCが壊れそうになったので
パーツを買って新しいPCに組み直しました。
お金がないのでRyzen 2200Gという微妙なCPUになりましたが
OSをSSDに載せ替えたのもあって非常に快適です。
Passport(ログイン機能)を簡単に理解できました。
正常に認証ができなくて一日を潰してしまいましたが
協力してくれた方のおかげで問題が解決しました
フォームのタグにこれがついているとダメなようです
enctype="multipart/form-data"
このせいでだいぶ時間を無駄にしてしまいましたが
とりあえず原因が特定できてよかったです
今日は2冊目の本を利用して勉強を進めていこうと思います。
https://www.amazon.co.jp/dp/B077RGMSHB/
Cloud9をグーグルの無料サーバー上に設置していますが
参加人数が増えるとすぐにCPU使用率が100%を超えてしまいます
あまりにも重たいのでサーバーをスペックアップしました。
f1-micro(vCPU x 1、メモリ 0.6 GB)
↓
g1-small(vCPU x 1、メモリ 1.7 GB)
無料で使えるクレジットが30000円分あるので、しばらくは大丈夫そうです。 プログラム配信 - Node.js勉強、Passport(ログイン用パッケージ)の使い方
配信URL
https://www.youtube.com/channel/UCGmS-B707Sqa19BXRn02JIw/live
Cloud9(IDE) を VPS 上に設定して、ブラウザさえあれば、みんなで開発できる環境を作ってみました。
アカウントID:956477059000
ユーザー名(どれかひとつ):guest-1, guest-2
パスワード:Password12345
ゲストアカウントでログインすると以下のページが見れるようになります。
Cloud9 IDE
https://us-west-2.console.aws.amazon.com/cloud9/ide/df44294c8853471b8ddd609c09af06f3
開発中のウェブサイト(リアルタイムでコードが反映されます)
https://df44294c8853471b8ddd609c09af06f3.vfs.cloud9.us-west-2.amazonaws.com/
Mongo Express(Basic認証が表示されますが空欄で入れます)
https://df44294c8853471b8ddd609c09af06f3.vfs.cloud9.us-west-2.amazonaws.com:8081/
ログアウトするときはブラウザを閉じるだけでOKです。
ゴミ箱マークは押さないようにしてください。
ブログで開発について詳しく解説しています。
https://gameusers.org/dev/blog/live/ 2冊目の本を進めています。Express アプリケーションと CSS という項目から勉強を続けます。
配信URL
>>127 現在の開発環境 ? AWS Cloud9 の問題点
Teletype for Atom、Docker、共同開発ができる場所を模索して、
いろいろなものを試しましたが、結局、AWS Cloud9 がいいのではないのか?
というところに落ち着きました。
AWS Cloud9
https://gameusers.org/dev/blog/wp-content/uploads/2018/04/cloud9-ide.png
Cloud9 とはブラウザで使える IDE で
ネットを介して複数人でのコラボレーション開発が行えます。
Teletype for Atom も同じような機能が使えるのですが
実際、他のプログラマーに意見を聞いてみると
Atom を利用しての共同開発にはあまりいい印象を持っていないようでした。
当然、プログラマーはそれぞれ自分の好きな環境をすでに構築しているわけで
わざわざそこに新規の環境を構築して(Atom をインストールして)まで
参加するのは面倒だと感じるようでした。
Game Users の開発はゲームが好きなプログラマー・デザイナーの方々に
気軽に参加してもらいたいという考えがあるので
環境構築で大きな手間がかかるのはやはりいいことではありません。
そうなるとブラウザだけで参加ができる
Cloud9 を採用するメリットは大きいのではないかと感じています。 AWS Cloud9 の問題点
使ってみて感じたのですが、いろいろな問題もあります。
・参加人数が 8 人まで
なんでこんな仕様なんだと言いたいところなんですが
自分を入れて計 8 人までしか参加できません。
サーバーの能力依存で参加人数を決めさせてくれればいいのに
最初から IDE 側で人数を制限してるので
どれだけサーバーのリソースに余裕があっても無駄です。
AWS Cloud9 は AWS の管理画面でアカウントを発行して
そのアカウントで IDE に参加してもらう形になっています。
Game Users の開発では、いろいろな人に個人用のアカウントを発行して
時間のあるときに気軽に参加してもらえたらなという思いを持っていたのですが
8 人制限のせいでそれができなくなりました。
今は guest-1〜2、master-1〜5 というアカウントを用意して
そのアカウントにログインして参加してもらう形になっています。
個人用のアカウントの場合、自分を除くと 7 人までしかアカウントを発行できませんが
ひとつのアカウントを複数人で使ってもらう場合は
人数制限が緩和されるのでそういう形にしています。
ただこれだと誰が参加してくれているのかわかりにくく、とても不便です。
そもそも Cloud9 は不特定多数の人が開発に参加するプロジェクトを想定していないのでしょうが
GitHub を経由した push だ pull だと面倒くさい
現在の共同開発環境を変えられるポテンシャルを秘めているので
早急になんとかして欲しいところです。 ・IDE の出来が今ひとつ
Atom や Visual Studio Code(触ったことがないのでわからない)は
なんだかんだと言って優秀なんだと思います。
様々な機能が最初から提供されていたり
プラグインなどで後から追加することができたり
個人的に使いやすい設定を細かく突き詰めることができたり
当然のようにいろいろできていたことが、Cloud9 ではできなくなりました。
ブラウザだけで開発ができる・コラボレーションが手軽に行える
というメリットは大きいものの、使いづらい・必要な機能がない
といったデメリットも大きいので
現状、上記のメリットを求めている人以外には勧めづらい環境になっています。
アマゾンが買収したので今後の発展に期待したいところですが
今のところは正直なんとも言えないクオリティです。 ・ネットに情報がない
本当に辛いところなんですが、ネットに情報がありません。
なんでもそこそこの規模になってくると
日本語の情報はなくても英語の情報があったりするものですが
Cloud9 はその域にも達していません。
例えば今、ESLint で “extends”: “airbnb” が動かない問題を抱えているのですが
調べても情報がなくて困っています。
このプラグインを入れるといいよと英語で書いている情報はひとつ発見したのですが
そのとおりにやっても動かず。
それ以外情報がないので、どうにもならない状態に陥っています。
アマゾンのサポートも利用できるようなのですが
技術的なサポートは有料になっているみたいなので
お金持ちや企業でないとサポートを受けられません。
参加者募集!
Cloud9 の至らなさをいろいろと語ってみましたが
Game Users の開発には手軽なコラボレーション機能が必要なので
利用しないという選択肢はありません。
ゲームが好きな開発者の方おられましたら、ぜひ一緒に開発しましょう。
参加したとして権利や金銭的な問題はどうなるんだということについて
文章にきっちり残していないので
その辺についてもこのブログで記事にしていかないといけないなと思っております。
YouTube でプログラム配信をしながら開発しているので
もし少しでも興味があったら覗いてみてください。
配信中はこのブログのトップページにも配信が見れる記事が掲載されるようになっていますのでぜひ! Node.js の使い方を学びました。
いよいよ Game Users を書き直す作業を始めようと思います。
それに当たって調べないといけないことがたくさんあります。
React は状態管理に Redux を使用していたのですが
コードを書く量が多く、学習コストも高いため
同じ状態管理機能を持った MobXというライブラリに興味を持っています。
こちらもいろいろ調べてみようと思います。
配信URL
>>127 プログラム配信 - Next.jsを試します!
昨日、MobX(Reactの状態管理ライブラリ)について調べていたら
Next.jsというフレームワークを発見しました。
これを使うとサーバーサイドレンダリングや、Code Splitting(分割して初期ロードを早くする)
ブラウザの自動更新などの機能が使えるようになるみたいです。
非常に面白そうに感じたので、今日はそれを試してみようと思います。
MobXやMaterial UIなどもついでに触れたらいいなと思っています。
配信&IDE URL
>>128 Next.js を試してみたところ、すごく優秀だったので採用することを決めました。
サーバーサイドレンダリングの機能や、
コード Splitting をデフォルトで行ってくれるのは非常に便利です。
ただすべての機能を提供してくれるわけではないので
結局、自分で Express 用コードを書かないといけない部分も多くあるのですが。
それと Next.js はデータベースへのアクセスを API で行うことを推奨しているようです。
そこそこの規模のサイトになると、そういった構成が増えてくるのかもしれないのですが
自分は小規模なサイトしか作ったことがないので、初めての経験でちょっと不安です。 上のは制作物のURLです。
変更になりました。
配信&IDE URL
>>128 複数人の開発者で同時に各ファイルを編集した場合
誰かがエラーを出すと他の開発者にもエラーが出て
開発がスムーズに進まないという問題が発覚しました。
同じ環境でトランスパイルが行われるわけですから
考えてみれば当然なのですが、今まで気づきませんでした。
同時に違うファイルを触れないというのは結構致命的な問題です。
そこで Cloud9 の環境を複数用意して
それぞれの開発者が別のファイルを気軽に触れるようにしてみました。
マスターアカウントでログインできる方は、そちらの環境でも開発が行えます。
git clone で複製しているだけなので、細かいことは気にせずいろいろ試してみてください。
詳しくはこちら
https://gameusers.org/dev/blog/live/ git は、2段階保存が特徴だから、
エラーが出る状態のコードは、
リポジトリには保存せず、自分側だけで保存する
自分だけのブランチを作ってもよい これはですね、あれなんですよ
gitの問題じゃなくてCloud9の問題なんです
Cloud9はブラウザでアクセスできるIDEなんですが
そこに複数人でアクセスして、それぞれが違うファイルを編集していると
誰かがエラーを出した段階で、他の人も全員エラーに巻き込まれるんです
どこかにエラー出ているファイルが存在していると
それ込みで全体をトランスパイルするので全部が動かなくなるって寸法です
結局、独立してトランスパイルする環境を複数作らないといけなくなりました
快適な開発環境を作るのはなかなか難しいですね Next.js で Material UI を使おうとしたのですが
Material UI のコンポーネントにスタイルシートを適用する方法がわからず1日を費やしてしまいました。
Material UI の公式ページに書かれている方法と
Next.js が推奨しているスタイルシートの書き方が違うため
どう書けば正常に表示されるのか理解するのに時間がかかりました。
結局、以下の書き方でいけました。
Material UI のコンポーネントはグローバルスコープのスタイルシートが必要なようです。
<style jsx global>{`
.list-1 {
background-color: #81F7F3;
}
.list-2 {
background-color: pink;
}
`}</style>
今日はGame UsersのヘッダーをMaterial UIでデザインします
配信URL
>>139 Next.js で Material UI を使う方法ですが、前回やっていた方法では、
サーバーサイドレンダリング時にスタイルシートが正常に適用されていない。
なぜか遅れて適用される?ため、設定を見直しました。
https://github.com/adrianmcli/styled-mui-next
https://github.com/mui-org/material-ui/tree/v1-beta/examples/nextjs
上記サンプルを参考にしながら、設定してみました。
Next.js はデフォルトで
styled-jsx?というスタイルシートの記述法を採用しているのですが
それを使った場合はサーバーサイドレンダリングする際に
Material UI のコンポーネントに正常にスタイルシートが適用されず
styled-components?を使うと正常に適用されるという状況になりました。
設定方法が悪いだけかもしれないのですが
今のところ対処法がわからないので
Material UI のコンポーネントを使うときだけそうしています。
Next.js で Material UI を使う際の書き方がわかる方おられましたら、ぜび教えてください。
今日もGame UsersのヘッダーをMaterial UIでデザインします
配信URL
>>139 誰でもできる在宅ワーク儲かる方法
少しでも多くの方の役に立ちたいです
グーグルで検索するといいかも『金持ちになりたい 鎌野介メソッド』
F5DBU スタイルシートですが、Next.js がデフォルトに定めている styled-jsx よりも
styled-components を使った方がいいような気がしてきました。
複雑な分岐を行う場合などに
クラスの内部にそれ用の function を作ってコンポーネントを返すような構成にすると
styled-jsx がちゃんと反映されません。
Material UI を使うときだけ、styled-components を使うというルールもいまいちしっくりこないので
styled-components に統一した方がいいのかなと思ってきました。
まさかスタイルシートでこんなに悩むとは思いませんでした。
また Next.js のバージョンを 6.0 に変更しました。
babel-plugin-transform-class-properties というプラグインを入れろという警告が出たので
それを入れて設定もしておきました。コードの書き方や、動作には特に変更がないようです。 プログラム配信 - フッターを作ります!
サイト制作とは直接関係ないのですが
数日前にAmazonアソシエイトアカウントが意味不明な理由で閉鎖されました…。
お調べしたところ、Amazonアソシエイト・プログラム運営規約を順守されていないことを確認しましたのでご連絡いたします。
貴殿は、書面による明示的な事前の承認を得ずに
ブラウザー・プラグインにおいて、Amazonサイトのコンテンツ、特別リンク
またはその他Amazonサイトに関連する内容を記載しており
Amazonアソシエイト・プログラム参加要件第7項に抵触いたします。
ブラウザプラグインなんて一度も作ったことがないのに
それを理由にして、警告もなくいきなり閉鎖なんてあんまりだ。
返信でどのブラウザプラグインに問題があるのでしょうか?
と問い合わせても具体性のないテンプレ返答が返ってくるだけ。
わずかな収入がさらに削られるという悲劇、本当に悲惨だ。
今日は頑張ってフッターを作ります。
他のサイトのフッターを参考にしながらデザインを考えようと思います。
配信&IDE URL
>>139 プログラム配信 - ヘッダーの調整とトップページをデザインします!
AmazonアソシエイトアカウントがBANされた件ですが
ブログにまとめました。本当にひどい扱いです。
https://gameusers.org/dev/blog/ban-amazon-associate/
今日は頑張ってヘッダーの気に入らない部分を調整して
トップページのデザインを考えようと思います。
配信&IDE URL
>>139 Material UI バージョン 1.0.0 に対応しました。これまでと書き方が変わっていたので、戸惑う方もいるかもしれません。
import Button from '@material-ui/Button';
↓↓↓
import Button from '@material-ui/core/Button';
開発版が終わって、core をつけなければならなくなりました。
あと Next.js を 6.0 にしてから、getInitialProps (最初に処理される constructor みたいなもの)
が正常に動かなくなっていたので、こちらのページを参考に裏側の処理を書き直しました。
https://github.com/mui-org/material-ui/tree/master/examples/nextjs
Node.js なのですが、ブラウザの表示サイズをサーバー側で取得することができないようです。
PHP はできていたような気がするのですが。
PC でアクセスしたときとスマホでアクセスしたときに表示の違いを設けたいのですが
CSS のメディアクエリですべてを処理するのは大変なので
JavaScript のサーバー側でも取得したいのです。でも方法がわからず。
今日もトップページのデザインを行います。
カード型デザイン
配信&IDE URL
>>139 デザインを考えているのですが、機能性といいデザインを両立するのが大変で
かなりしんどいです。基本的に既存のものの切り貼りや
ちょっとしたアレンジで乗り切っていますが、ゼロから想像するセンスがないため
いろいろな面で妥協しないといけなくなるのが辛いです。
現在はカード型デザインでゲームの一覧を表示
検索もできるようになるページのデザインを考えるところです。
トップページはそこそこいい感じになりました
http://35.203.143.160:8080/
配信&IDE URL
>>139 今このページのデザインを考えています
ゲームを検索できるページです
http://35.203.143.160:8080/gc
配信&IDE URL
>>139 トップページ、ゲームコミュニティ一覧、ユーザーコミュニティ一覧
ログインページのデザインが終わり
いよいよメイン機能であるコミュニティページのデザインを行うところまで来ました。
掲示板の使い勝手が悪いので、改善案を出してもらいながら
新しいデザインを考えようと思います。
ユーザーコミュニティ一覧
http://35.203.143.160:8080/uc
ログインページ
http://35.203.143.160:8080/login
配信&IDE URL
>>139 現在、ユーザーコミュニティのデザインを行っています。
掲示板のスレッド一覧、検索、コメント部分などを考えています。
http://35.203.143.160:8080/uc/community 掲示板の画像アップロード・動画投稿機能を作成中です。
アップロードする画像を選択、または投稿する動画のURLを入力した際に
画像がプレビューされるようにします。
複数画像のアップロード、複数動画の投稿に対応しようと考えています。
http://35.203.143.160:8080/uc/community
配信&IDE URL
>>139 自分はReactを触りだしていきなり、Reduxという状態管理パッケージで管理したので
setStateは使っていなくてよくわかりません
今はMobXという同じような状態管理パッケージを使っているのですが
Reduxと比べても非常に簡単に書けるので
Reactに慣れてきたら、これをおすすめしたいですね
なんかあんまり役に立たない答えでごめんなさい
調べてみたところ、この辺りに答えが書いてあるでしょうか?
https://likealunatic.jp/2015/07/reactjs-setstate
https://ja.stackoverflow.com/questions/38711/ 掲示板にアップロードされた画像や動画を表示する部分を作成します。
画像&動画がひとつだけ投稿された場合の表示はすでに完成しています。
次は複数の画像、動画が投稿された場合の表示部分を
Swiper という Lightbox を利用しながら実装しようと思います。
Swiper: http://idangero.us/swiper/
react-id-swiper: https://github.com/kidjp85/react-id-swiper
http://35.203.143.160:8080/uc/community
配信&IDE URL
>>139 Swiper で Lightbox(複数の画像を表示するギャラリー) 的な機能を
実装しようと思ったのですが
Swiper は本格的な Lightbox パッケージじゃないようなので
納得の行くものになりませんでした。
そこで React 用の Lightbox パッケージを探し出してきて
それで画像を表示させようと思います。
できれば動画もギャラリー的に表示したかったのですが
以下のものは画像しか対応していないようです。
React Images:?https://jossmac.github.io/react-images/
配信&IDE URL
>>139 ストアの構成を見直していました。APIからどういう形式でデータを受け取って、
表示に反映させるかということを考えなければならなかったので
その間、プログラム配信は行っていませんでした。
だいたいの形は見えてきたので、また再開しようと思います。
現在はユーザーが登録してくれたサムネイルや名前を表示する部分を作成しています。
配信&IDE URL
>>139 ユーザーコミュニティページ内にある掲示板をずっと作っています。
コメントへの返信フォーム、投稿されたコメントを編集するフォームを作成しています。
配信&IDE URL
>>139 Node.js のバージョンを8.11.4にアップグレードしました。
nvm でインストールすると、毎回 npm が v5.6.0 になるんですが、
これはなにか意味があるんでしょうか。
npm もついでにアップグレードしていますが
アップグレードしたらいけないんだろうか。
今日もユーザーコミュニティページの掲示板を作ります。
コメントへの返信フォーム
投稿されたコメントを編集するフォームを作成しています。
配信&IDE URL
>>139 掲示板の画像表示部分を調整しています。
1つだけ画像がアップロードされた場合は大きく表示し
複数の画像や動画が同時にアップロードされた場合は
小さく表示しようとしています。
コメント投稿・編集、返信用フォームも完成していないので、そちらも作成します。
配信&IDE URL
>>139 コメントの投稿フォームと、投稿済みのコメントの画像表示部分が
意図せず連動してしまう問題が起こっていたのですが
コピーが参照になっていたせいでした。
昨日1日使ってしまったのですが、冷静に考えたらすぐにわかりました。
もう少し落ち着いて考えないとだめですね。
今日もコメント投稿・編集、返信用フォーム部分を作成します。
配信&IDE URL
>>139 掲示板の投稿フォームで
画像と動画部分については正常に投稿できるようになりました。
いつまでやってるんだって感じですが
まだコメント投稿・編集、返信用フォームも完成していないので
そちらも作成していきます。
配信&IDE URL
>>139 MongoDB をインストールしてみたものの
全然試さずに外観ばかり触っていたので徐々に不安になってきました。
実際、データベースを使ったときに思っていた処理ができなかったら困るので
データベースを利用しながらログインシステムを作ってみます。
これまでインストールされていた MongoDB は Ver.3 だったのですが
Ver.4 にアップデートしました。
トランザクションが使えるようになったらしいです。
配信&IDE URL
>>139 ログイン、アカウント作成部分を作っています。
クライアント側から POST でログイン ID、ログイン Password を送信して
ユーザー登録を行おうとしたのですが
Fetch で new FormData を利用してデータを送信しようとすると
Node.js + Express 側で POST 情報が受け取れなくなりました。
これまでは body-parser で POST 情報をパースしていたのですが
そのパッケージだと new FormData で作成した情報は受け取れないようなのです。
調べてみたところ new FormData は multipart/form-data なので
body-parser では処理ができないとのことでした。
そこで multer をインストールして POST 情報を処理できるようにしました。
Node.js + Express は本当にめんどくさいですね。
PHP ではなにも考えずにできていたことが簡単にできなくなっています。
裏側の理屈を理解できている人なら原因がすぐにわかるのかもしれませんが
自分レベルだといちいち引っかかってしまうのが苦しいところです。
配信&IDE URL
>>139 Next.js を Ver.7.0.0 にしました。すると以下のエラーが出ました。
Error: [BABEL] /home/cloud9/collaboration/pages/login/index.js:
The decorators plugin requires a ‘decoratorsBeforeExport’ option,
whose value must be a boolean.
If you want to use the legacy decorators semantics,
you can set the ‘legacy: true’ option.
MobXで利用しているデコレーター(@)で問題が起きているようです。
・babel-plugin-transform-class-properties
・babel-plugin-transform-decorators-legacy
上記の Babel 用プラグインでデコレーターを利用していたのですが
Babel 7 から新しいプラグインが用意されたようです。
・@babel/plugin-proposal-class-properties
・@babel/plugin-proposal-decorators
Babel 7 から関係するパッケージは @ つきのパッケージ名になり(スコープ化というらしいです)
同じような機能のものが新しく作られたみたいなので
そちらを利用することにしました。
引き続きログイン、アカウント作成部分を作っているのですが
ロボットの不正ログイン対策で reCAPTCHA を導入しました。
そしてさらに CSRF 対策で、csrf ミドルウェアを利用しようとしています。
配信&IDE URL
>>139 ログイン機能の reCAPTCHA & CSRF 対策のコードをモジュール化して分離しました。
Node.js は import が使えないため、
クライアント側と同じ書き方ができないのが不便です。
いろいろ調べてはみたのですが
今のところは現実的に import / export 文を使うのは難しいとの結論に達しました。
ES Modules をお試し機能的に使うことはできるようなのですが
安定版として提供されているわけではないので
なにか問題が起こったときに対処ができなくなりそうなので
現時点での利用はやめておこうと思います。
早く使えるようになるといいのですが。
今やろうとしているのはアカウント作成時に
パスワードをハッシュ化して保存し、E-Mail は暗号化して保存する部分です。
配信&IDE URL
>>139 ログインとログアウト機能はほぼ完成しました。
あとはログインしていないときに、ログアウトページにアクセスした場合、
ログインページに飛ばすといった、リダイレクト機能を追加するだけです。
それが終わったらプレイヤーページ
(ログイン後にアクセスする各ユーザーのホーム)を作成しようと思います。
配信&IDE URL
>>139 プレイヤーページ(ログイン後に表示されるホーム)の作成に移ります。
とりあえずプレイヤーカードのデザインを考えようと思います。
プレイヤーカードというのは各ユーザーのプロフィールのようなもので、
カード型のデザインで、プレイヤーの各種情報を表示する機能を持たせる予定です。
できればいろいろなページで使い回せるようなデザインのものにしたい。
配信&IDE URL
>>139 プレイヤーカードのデザインが完成しました。
これからこれをコーディングしていきます。
各ソーシャルサイトへのリンクを掲載でき、
フレンド募集にも活用できるので
なかなか機能的でいいデザインになったのではないかと思います。
https://gameusers.org/dev/blog/wp-content/uploads/2018/02/player-cards.jpg
配信&IDE URL
>>139 私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。 MongoDB でトランザクションが使えるように設定しました。
レプリカセット構成じゃないと駄目だとのことだったので設定を行いました。
レプリカセットというのは、複数台のデータベースを立ち上げて
それを組み合わせることで安定性をもたらす機能のようです。
同じサーバー内に3つのプロセスを立ち上げて構成しているので
安定性の向上にはあまり期待できない状況ですが
とりあえずトランザクションは使えるようになったので良かったです。
現在はプレイヤーカードのデータベーススキーマを作成して、データを挿入できるようにしようとしています。
配信&IDE URL
>>139 プレイヤーカード(各ユーザーのプロフィールカードのようなもの)を
作っているところで進みが悪くなっています。
Fetch のラッパー関数を作ったり、エラー処理の方法を考え直したり、
アカウント作成・ログイン部分を修正したり、いろいろやっていたのですが
そういった基本的な構成を考えるところで詰まってしまうので
時間がどんどん過ぎていきます。
ひとつ型ができると、それをベースにしていろいろなページを作っていけるのですが
その型を作るのがとても大変ですね。
昨日はページのローディングが終わってからボタンを利用可能にする機能を作っていました。
ページへのアクセス後、現在読み込んでいることを明確に示すために
ローディングアニメーションのアイコンをページのどこかに表示しようと思っています。
配信&IDE URL
>>139 MongoDB でリレーショナル DB と同じような join ができることを知って、
データベースの構成を見直していました。
MongoDB は配列もオブジェクトもそのまま入れることができ
検索も可能であるが故に、どういう構成にすればいいのか余計に悩んでしまいます。
例えば多言語データの扱いで { ja: ‘日本’, en: ‘Japan’ }
こうやってひとつのオブジェクト内にすべて含ませるか
それとも行ごとにデータを分けて必要なデータだけを読み込むか、どっちにすればいいのか迷ってしまいます。
すべてのデータをひとかたまりにすると、データがバラバラに保存されないメリットもあるのですが
一度すべてを読み込んでから
不必要なデータをそこから排除するという手間がかかってしまうため
結局のところ、行ごとに管理して必要なデータだけを読み込む方がいいように思えてきました。
データベースの構成を考えるのは本当に難しいですね。
あとデータベースの中身は容量の関係上で、GitHub 上に掲載しなくなったのですが
すでにデータがないと正常に動かなくなってきているので
簡単に初期データを挿入できる機能をつけました。
詳しくは GitHub の解説をチェックしてください。
今は各ユーザーの名前やサムネイルが表示されている部分にボタンを表示して
それを押すことでプレイヤーカード(プロフィール的なもの)を
ダイアログ(モーダル)で表示する機能を作っています。
配信&IDE URL
>>139 今日はプレイヤーカードのゲームID表示部分を変更します。
綺麗にIDを表示したい!
配信&IDE URL
>>139 現在、Cloud9 を GCE で運用しているのですが、夜9時頃になるととても重くなります。
バンドルファイルが大きくなっていることも関係しているのか、読み込みが正常に終わりません。
VPS は仮想なのでアクセスが集中する時間帯は重くなったりもするのですが
GCE も同じなんですね。クラウドはそういう問題とは縁がないのかなと考えていたのですが
そういうわけではないんでしょうか。というかそもそも GCE はクラウドじゃない??
1年間無料で使える枠であれこれ文句言うのも申し訳ないので
そろそろ VPS に環境を移したほうがいいのかなと考えています。
とにかく夜になると開発ができなくなるのはまずい。
今は ID を登録するフォームを作成しています。
Game Users では何度も同じ ID を入力しなくていいようなシステムにしているのですが
そこのフォーム部分でバリデーションの基本的な型を生み出そうとしています。
テキストフィールドに文字を入力すると
文字数が表示されて、エラーの警告も表示されるようにしたい。
配信&IDE URL
>>139 夜9時になると、サーバーが重いとこの前書いたのですが、
調べてみたところサーバーのせいではなく利用している
プロバイダーが原因である可能性が高くなってきました。
現在、webpack で固めたバンドルファイルのサイズが
4〜6MB くらいなのですが、契約しているプロバイダーは夜になると
速度が 5Mbps 以下になってしまうのです。つまり速度の異常な低下で
バンドルファイルをダウンロードしきれないという状況になっているようです。
無料でお試しができる他のプロバイダーに申し込んで切り替えてみたところ
夜でも開発中のページが表示できるようになりました。
ただそのプロバイダーもあまり速度が速いところではないため
表示が遅いことは遅いのですが
現在契約している bb.excite よりはずっとましな状況です。
bb.excite は 500円ながらも、これまでは普通に使うことはできていたのですが
最近はそれすら無理な速度になってきています。
速度を求める用途がなかったので、500円プロバイダーでも十分だったのですが
さすがにバンドルファイルすら正常にダウンロードできない状態になってしまったのは
非常に辛いです。このままでは開発に影響が出るため、IPv6 IPoE の利用を検討しています。
いいプロバイダーが見つかればいいのですが。
開発は現在、ID 登録フォームをほぼ完成させたところです。
今後、自分でフォームのバリデーションをひとつひとつ書いていくのは時間がかかるため
バリデーションパッケージを選定&利用していこうと思っています。
配信&IDE URL
>>139 夜に開発サーバーが重たくなる問題ですが、プロバイダーが悪いという結論に至りました。
bb.excite がここのところ速度の低下が激しく、
人が多くなる時間帯はまともにページを表示することができなくなっていたのです。
そこで IPv6 IPoE 接続のできるプロバイダーに変更したところ、夜も快適に開発ができる状態に戻りました。
当初 GCE のせいにしていたのは良くなかったですね。
約一年間無料で使わせてもらった GCE ですが、無料期間が終わると
当然有料で継続しなければならなくなるため
他の VPS に開発サーバーを移すことにしました。
理由は料金的な問題です。やはりクラウドは高級感のあるお値段になってしまうので
予算的に VPS しか選択肢がなくなりました。
いろいろ調べてみて、Amazon がやっている Lightsail も魅力的に感じましたが
IPv6 の IP が割り振られないらしい?ので、結局 IPv6 対応サイトにできる
さくら VPS になりました。
今回の件で、Game Users も IPv6 でアクセスできるサイトにしたいと強く感じたので
練習も兼ねて開発サーバーも IPv6 でのアクセスができるようにしておこうと思いました。
IPv6 対応のついでに DNS でサブドメインに割り振っておいたので、URL が変わりました。
ドメインでのアクセスになったのにポート番号を入力しなければならないのは
ちょっとかっこ悪いですが、ここもまた Nginx を導入してリバースプロキシ?
で設定をしないといけないようです。今後はそちらの勉強も頑張っていこうと思います。 なぜIPV6にこだわるのですか?
どんな利点があるのでしょうか。 個人的な経験によってIPv6に対応したいと感じただけで
現状ではそこまで大きな利点はないんじゃないかと思います。
IPv6に対応したいと思ったのは、プロバイダー関連の話になるのですが
自分の場合、新しく申し込んだプロバイダーの設定が一時うまくいかなくて
IPv4 over IPv6 接続が機能していなかったのです。
(IPv4にしか対応していないサイトも、IPv6の経路を使うことによってアクセスが速くなる機能です)
そのためYouTube、Google、NetflixなどのIPv6対応サイトの場合は
IPv6接続ができて速度も非常に快適だったのですが
IPv4にしか対応していないサイトは旧式の接続で、速度も遅いままだったのです。
そういう環境の人はあまりいないと思うんですが
IPv6に対応しておくことで、誰でも快適にアクセスができるようになるのと
対応サイトは、上記有名サイトのように軽くて最先端なサイトのイメージがあるので
できれば早い段階から、うちもその仲間入りをしたい!と思ったのです。
現在、ウェブサイトのSSL化が急激に進んでいるように
いずれどのサイトもIPv6に対応するようになるんじゃないかと思うので
今のうちから勉強しつつやっておこうと思いました。
そんな感じですね。無理してやる必要はまったくないと思うんですが
ちょっとだけメリットを感じるユーザーもいるので
利用できる環境なら、サーバーの設定をいじるついでに
やっておくといいんじゃないでしょうか。 今日はinputで選択した画像をプレビューする機能を作ります
プログラム配信中、詳しくは
>>184 アイコンをキレイにします
Simple IconsというキレイなSVGアイコンが揃っているサイトをみつけたので
それを利用させてもらおうと思います。
https://simpleicons.org/
プログラム配信中、詳しくは
>>184 やっとですが、バリデーションを含めたフォームのガワはできあがりました。
次は API に POST でデータを送って、サーバーに保存する部分に取り組もうと思います。
単純なテキストデータの保存はすでにできているのですが、
画像の処理はまだできていません。srcset に対応するために
複数のサイズにリサイズして、圧縮するという作業が必要になります。
Jimp(リサイズ用パッケージ)
https://github.com/oliver-moran/jimp
imagemin(圧縮用パッケージ)
https://github.com/imagemin/imagemin
良さげなパッケージを発見したので、これらを使わせてもらって実現しようと思います。
プログラム配信中
https://youtu.be/s_XYS2XyFgY
開発について詳しくは
>>184 今日はアップロードしたSVG画像をサーバーに保存する部分を作ります。
プログラム配信中
https://youtu.be/9HVRWHiPq6A 誰でも頭が良くなる、プログラムが書けるようになる方法が発見される 55271
https://you-can-program.hatenablog.jp プレイヤーカード作成フォームの完成を目指します!
プログラム配信中
https://youtu.be/IYx-Q5B0zUY 記事の更新が疎かになってしまいました。
アカウント作成、ログイン、ログイン後のページでIDやパスワードの変更など
基本的な機能はほぼ実装し終わりました。
途中、カスタムエラーの投げ方を学んだり、ログの保存方法を勉強したり
いろいろあって無駄に時間もかかりましたが
各ページのベースになる部分は徐々に固まってきています。
次は横幅の広いデバイスでアクセスした場合に
2カラムでコンテンツを表示できるようにしようと思っています。
サイドに掲示板のスレッド一覧を表示したり
サイドに表示するコンテンツがない場合は
サイト内の更新情報をカードで表示したりしたい。
ttps://gameusers.org/dev/blog/wp-content/uploads/2018/02/2column.jpg
そしてモバイルの場合は、ドロワーメニューで必要な情報を表示しようと考えています。
プログラム配信中
https://youtu.be/gewLTvihd0w Next.js で styled-components + Material UI を使う場合、
それ用に別途コードを書かなければならない必要が生まれます。
しかも Material UI がアップデートすると動かなくなったりするので、とても面倒な組み合わせです。
今回もまた Material UI を Ver.4 にアップデートしてみたところ正常に動かなくなったため
なにか他に方法はないのかと調べてみました。
すると emotion という CSS in JS の新しめのライブラリを発見することができました。
なんと Material UI では emotion を特別なことをせずにそのまま使えるようなのです。
実際、使用してみたところ styled-components との組み合わせよりも、全然相性がいい気がします。
Material UI にスタイルを当てる場合
Material UI がデフォルトで用意している書き方を使う方法もあるのですが
自分はその書き方が気に入らなかったのと
サイト全体のスタイルシートの書き方を統一する意味も込めて
これまでは styled-components を採用していました。
ですが今回使ってみて emotion の感触が良かったので、こちらに移行することにしました。
後発のライブラリなので機能的にもいいとこ取りをしていて、とても優秀です。
同じように Material UI を利用している方はチェックしてみて欲しいですね。いろいろ楽になると思います。
emotion: https://emotion.sh/docs/introduction
プログラム配信中
https://youtu.be/jZ0kcMrT0DA ユーザーが作成できるコミュニティページの制作を進めています。
前に掲示板のガワだけは作っていたのですが
開発を進めていくうちに仕様の変更で動かなくなっていたので
それを直しつつ、データベースの構成を考えています。
データベースの知識に自信がない上、MongoDBの扱いにも不慣れなため
どのように構成するといいのか、なかなか見えてきません。
1件1件データを取得するコードをループさせれば望みのものは取得できますが
それだと当然重くなるわけじゃないですか。
だからできるだけ少ない回数でデータを取得するコードを書かなければならないのですが
それが難しい。
多言語に対応することも考えたりするとわけがわからなくなって、頭がごちゃごちゃになります。
プログラム配信中
https://youtu.be/Mp-ZrD-Ml04 今日は掲示板のスレッド作成フォームを完成させたい
プログラム配信中
https://youtu.be/KEboEKUucXs 掲示板の画像&動画表示部分を作ります
キレイに表示させたい!
プログラム配信中
https://youtu.be/HR0NB_ZDypM 二ヶ月以上、掲示板を作っています。
サイト全体の画像や動画の扱い方(投稿・表示)を
統一できるようにしようとしているので、
多少はしょうがないにしても、いろいろ時間がかかりすぎてやばいです。
普通の人はもっとサクッと完成させるもんなんでしょうか?
やっぱり自分自身プログラマーとしての能力がアレなんかなと思わざるを得ません。
ただそれでもめげずに頑張りたい!
プログラム配信中
https://youtu.be/P_PS3w6cUjU 雑食系エンジニア、KENTA の動画
Rubyはオワコン?「滅びゆく5つのプログラミング言語」に関する所感
https://www.youtube.com/watch?v=yBrnuR8YJN4
初心者向きのweb アプリの結論は、Ruby on Rails !
Rails でも、HTML, CSS/SASS, JavaScript, jQuery, Node.js も学ぶと、1年は掛かる フォーラム(掲示板)のページの切り替え部分を作っています。
Next.jsがAPIをデフォルトで扱えるようになったので
その方法に書き換えています。
pages/api
以下にファイルを設置すると、そのアドレスのAPIが使えるようになります。
最初っからあれば書き直さなくて済んだのに。苦しみ…。
https://youtu.be/Ni3pJT90FL8 ようやくフォーラム(掲示板)の完成が近づいてきました。
コメントやスレッドの削除機能をつければ
大まかな機能の実装は終わりです。がんばります!
https://youtu.be/d5u3gZd51bY 今日は配信用の課金システムを作ろうと思います。
Game Usersに実装したい機能なのですが
いつ完成するかわからないので
とりあえず違う場所に作ってみます。
https://youtu.be/0PMdbnKpd_g 今日も課金システムをいじります。
iPhoneでフォームに入力できないと言ってたのでそこを調べます。
https://youtu.be/aIk6c5Z6kMg プログラム配信やります。
ユーザーコミュニティをクローズド設定にした場合
参加者以外には見れなくしたい。
#React #Nodejs #JavaScript
配信URL
https://youtu.be/zF3pRI_SuHQ プログラム配信やります。
ユーザーコミュニティに参加承認した人をメンバーにする処理。
ブロック機能も作りたい。
#React #Nodejs #JavaScript
配信URL
https://youtu.be/eJaZ-C4a-NM React Hook について少し勉強してみました。
これまで状態管理に MobX を利用してきたのですが、
Hook を勉強した結果、これまでのやり方を見直すべきなのではないかと思いました。
Hook を利用してローカルステートで書くのは
とてもわかりやすく、処理が散らばらない点も素晴らしいと感じました。
現状、MobX 上ですべてのステート、すべての処理をまとめているのですが、このやり方はやめるべきじゃないかと。
状態管理の例としてよくあるカウンターの数値を増減させるサンプルのようなものでも
自分はこれまで外部のストアにすべて書き出していました。
でも Hook を学び、コンポーネント内にステートも処理も入れ込んでしまう書き方を試してみたところ
こちらの方が全然扱いやすいように思えるのです。
CSS では emotion というライブラリを利用しているのですが
こちらも HTML のタグにそのままスタイルを書き込んでいきます。
最初は違和感も大きかったのですが、しばらく使ってみると、とても扱いやすいことに気づきました。
配信URL
https://youtu.be/Fcdv9UXVAFU 久しぶりのプログラム配信。かなり完成に近づいています。
GitHubにDockerの解説を載せておいたので
誰でもコードや動作をチェックすることができるようになりました。
今日はユーザーコミュニティ作成ページを作るぞ!
https://youtu.be/-HT1VvxOr3A