プログラム配信 – Node.jsでGame Usersを書き直したい

現在、PHP と JavaScript で作られている Game Users を React & Node.js で書き直したいと思っています。そのために Node.js の使い方を覚えなければならないので勉強しながら作っていきます。

今やっていること – 2019/8/28


二ヶ月以上、掲示板を作っています。

サイト全体の画像や動画の扱い方(投稿・表示)を統一できるようにしようとしているので、多少はしょうがないにしても、いろいろ時間がかかりすぎてやばいです。

普通の人はもっとサクッと完成させるもんなんでしょうか?やっぱり自分自身プログラマーとしての能力がアレなんかなと思わざるを得ません。

ただそれでもめげずに頑張りたい!

http://dev-1.gameusers.org:8080/uc/community1

デザイン済みのページ


作成中のページをリアルタイムでチェックできるようにしています。機能的なことは置いておいて、とりあえず見た目だけを優先的に作っています。ボタンなど、正常に機能しない部分も多いですが、現時点では気にしないでください。

開発の進捗状況によって一時的にアクセスできないページが出てくる可能性があります。

トップページ
http://dev-1.gameusers.org:8080/

ユーザーコミュニティ一覧
http://dev-1.gameusers.org:8080/uc

ゲームコミュニティ一覧
http://dev-1.gameusers.org:8080/gc

ログイン
http://dev-1.gameusers.org:8080/login

ログアウト
http://dev-1.gameusers.org:8080/logout

ユーザーコミュニティ(現在ここを作成中)
http://dev-1.gameusers.org:8080/uc/community1

プレイヤー
http://dev-1.gameusers.org:8080/ur/user1

現在、解決できていない問題


Cloud9 の IDE で ESLint が正常に動きません。airbnb の構文チェックを利用したいのですが機能せず。

以下のページで Cloud9 に入れるといいプラグインについて書かれていたので、入れてみたのですが、それでも動きません。どなたか詳しい方おられましたら教えてください。

https://stackoverflow.com/questions/45572719/use-eslint-on-cloud-9-ide

プラグイン:https://github.com/michaelmitchell/c9.ide.language.javascript.eslintd

AWS Cloud9


Cloud9 を VPS 上に設定して、ブラウザさえあれば、みんなで開発できる環境を作ってみました。

ゲストアカウント

  • アカウントID:956477059000
  • ユーザー名(どちらか):guest-1, guest-2
  • パスワード:Password12345

ゲストアカウントでログインすると以下のページが見れるようになります。管理者がいないときは、ゲストアカウントは Read Only になっています。

ログアウトするときはブラウザを閉じるだけで OK です。ゴミ箱ボタンは押さないようにしてください。

マスターアカウント

プログラマーやデザイナーの方、または HTML & CSS が理解できる方にはマスターアカウントのログイン情報を、IDE のチャット欄で提供しています。マスターアカウントを利用したい方はいつでも言ってください。

マスターアカウント(master-1~5)でログインできる方は、以下の Cloud9 環境も利用できます。同じ環境で、同時に違うファイルを編集した場合、トランスパイル時にエラーが出ると、他の人もそのエラーに巻き込まれてしまうので、同じ開発環境を複数用意しました。いろいろ試してみたい方は、こちらの環境(URL)にアクセスして、好きなようにファイルを作成・編集してみてください。

git cloneで複製しているだけなので、ぐちゃぐちゃになっても大丈夫です。

※ 現在停止中です。

こちらの環境はメインの環境を定期的にクローンしていくつもりなので、継続して編集したいファイルがある場合は、手動でメイン環境の方にファイルをコピーしてもらうか、手元に作ったファイルをダウンロードしておいてください。クローン後にアップロードしてもらって制作の続きを行ってもらえればと思います。

別の環境とのファイル共有方法ですが、すごくアナログな方法しか思いつかなかったので、もっとスマートな方法があったら、ぜひ教えてください。

共同開発用リポジトリ


https://github.com/gameusers/collaboration

メモ


2019/6/17

ユーザーが作成できるコミュニティページの制作を進めています。前に掲示板のガワだけは作っていたのですが、開発を進めていくうちに仕様の変更で動かなくなっていたので、それを直しつつ、データベースの構成を考えています。

データベースの知識に自信がない上、MongoDBの扱いにも不慣れなため、どのように構成するといいのか、なかなか見えてきません。

1件1件データを取得するコードをループさせれば望みのものは取得できますが、それだと当然重くなるわけじゃないですか。だからできるだけ少ない回数でデータを取得するコードを書かなければならないのですが、それが難しい。多言語に対応することも考えたりするとわけがわからなくなって、頭がごちゃごちゃになります。

2019/6/3

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

2019/5/22

記事の更新が疎かになってしまいました。

アカウント作成、ログイン、ログイン後のページでIDやパスワードの変更など、基本的な機能はほぼ実装し終わりました。途中、カスタムエラーの投げ方を学んだり、ログの保存方法を勉強したり、いろいろあって無駄に時間もかかりましたが、各ページのベースになる部分は徐々に固まってきています。

次は横幅の広いデバイスでアクセスした場合に、2カラムでコンテンツを表示できるようにしようと思っています。サイドに掲示板のスレッド一覧を表示したり、サイドに表示するコンテンツがない場合は、サイト内の更新情報をカードで表示したりしたい。

そしてモバイルの場合は、ドロワーメニューで必要な情報を表示しようと考えています。

2019/3/20

やっとですが、バリデーションを含めたフォームのガワはできあがりました。次は API に POST でデータを送って、サーバーに保存する部分に取り組もうと思います。単純なテキストデータの保存はすでにできているのですが、画像の処理はまだできていません。srcset に対応するために、複数のサイズにリサイズして、圧縮するという作業が必要になります。

Jimp(リサイズ用パッケージ)

imagemin(圧縮用パッケージ)

良さげなパッケージを発見したので、これらを使わせてもらって実現しようと思います。

2019/2/27

夜に開発サーバーが重たくなる問題ですが、プロバイダーが悪いという結論に至りました。bb.excite がここのところ速度の低下が激しく、人が多くなる時間帯はまともにページを表示することができなくなっていたのです。そこで IPv6 IPoE 接続のできるプロバイダーに変更したところ、夜も快適に開発ができる状態に戻りました。

当初 GCE のせいにしていたのは良くなかったですね。

約一年間無料で使わせてもらった GCE ですが、無料期間が終わると、当然有料で継続しなければならなくなるため、他の VPS に開発サーバーを移すことにしました。理由は料金的な問題です。やはりクラウドは高級感のあるお値段になってしまうので、 予算的に VPS しか選択肢がなくなりました。

いろいろ調べてみて、Amazon がやっている Lightsail も魅力的に感じましたが、IPv6 の IP が割り振られないらしい?ので、結局 IPv6 対応サイトにできる、さくら VPS になりました。今回の件で、Game Users も IPv6 でアクセスできるサイトにしたいと強く感じたので、練習も兼ねて開発サーバーも IPv6 でのアクセスができるようにしておこうと思いました。

IPv6 対応のついでに DNS でサブドメインに割り振っておいたので、URL が変わりました。ドメインでのアクセスになったのにポート番号を入力しなければならないのは、ちょっとかっこ悪いですが、ここもまた Nginx を導入してリバースプロキシ?で設定をしないといけないようです。今後はそちらの勉強も頑張っていこうと思います。

2019/2/4

夜9時になると、サーバーが重いとこの前書いたのですが、調べてみたところサーバーのせいではなく利用しているプロバイダーが原因である可能性が高くなってきました。

現在、webpack で固めたバンドルファイルのサイズが 4~6MB くらいなのですが、契約しているプロバイダーは夜になると、速度が 5Mbps 以下になってしまうのです。つまり速度の異常な低下で、バンドルファイルをダウンロードしきれないという状況になっているようです。

無料でお試しができる他のプロバイダーに申し込んで切り替えてみたところ、夜でも開発中のページが表示できるようになりました。ただそのプロバイダーもあまり速度が速いところではないため、表示が遅いことは遅いのですが、現在契約している bb.excite よりはずっとましな状況です。

bb.excite は 500円ながらも、これまでは普通に使うことはできていたのですが、最近はそれすら無理な速度になってきています。速度を求める用途がなかったので、500円プロバイダーでも十分だったのですが、さすがにバンドルファイルすら正常にダウンロードできない状態になってしまったのは非常に辛いです。このままでは開発に影響が出るため、IPv6 IPoE の利用を検討しています。いいプロバイダーが見つかればいいのですが。

開発は現在、ID 登録フォームをほぼ完成させたところです。今後、自分でフォームのバリデーションをひとつひとつ書いていくのは時間がかかるため、バリデーションパッケージを選定&利用していこうと思っています。

2019/1/31

現在、Cloud9 を GCE で運用しているのですが、夜9時頃になるととても重くなります。バンドルファイルが大きくなっていることも関係しているのか、読み込みが正常に終わりません。

VPS は仮想なのでアクセスが集中する時間帯は重くなったりもするのですが、GCE も同じなんですね。クラウドはそういう問題とは縁がないのかなと考えていたのですが、そういうわけではないんでしょうか。というかそもそも GCE はクラウドじゃない??

1年間無料で使える枠であれこれ文句言うのも申し訳ないので、そろそろ VPS に環境を移したほうがいいのかなと考えています。とにかく夜になると開発ができなくなるのはまずい。

後日わかったのですが、GCE のせいではない可能性が!

今は ID を登録するフォームを作成しています。Game Users では何度も同じ ID を入力しなくていいようなシステムにしているのですが、そこのフォーム部分でバリデーションの基本的な型を生み出そうとしています。テキストフィールドに文字を入力すると、文字数が表示されて、エラーの警告も表示されるようにしたい。

2018/12/26

MongoDB でリレーショナル DB と同じような join ができることを知って、データベースの構成を見直していました。MongoDB は配列もオブジェクトもそのまま入れることができ、検索も可能であるが故に、どういう構成にすればいいのか余計に悩んでしまいます。

例えば多言語データの扱いで { ja: ‘日本’, en: ‘Japan’ } こうやってひとつのオブジェクト内にすべて含ませるか、それとも行ごとにデータを分けて必要なデータだけを読み込むか、どっちにすればいいのか迷ってしまいます。

すべてのデータをひとかたまりにすると、データがバラバラに保存されないメリットもあるのですが、一度すべてを読み込んでから、不必要なデータをそこから排除するという手間がかかってしまうため、結局のところ、行ごとに管理して必要なデータだけを読み込む方がいいように思えてきました。

データベースの構成を考えるのは本当に難しいですね。

あとデータベースの中身は容量の関係上で、GitHub 上に掲載しなくなったのですが、すでにデータがないと正常に動かなくなってきているので、簡単に初期データを挿入できる機能をつけました。詳しくは GitHub の解説をチェックしてください。

今は各ユーザーの名前やサムネイルが表示されている部分にボタンを表示して、それを押すことでプレイヤーカード(プロフィール的なもの)をダイアログ(モーダル)で表示する機能を作っています。

2018/11/28

プレイヤーカード(各ユーザーのプロフィールカードのようなもの)を作っているところで進みが悪くなっています。

Fetch のラッパー関数を作ったり、エラー処理の方法を考え直したり、アカウント作成・ログイン部分を修正したり、いろいろやっていたのですが、そういった基本的な構成を考えるところで詰まってしまうので、時間がどんどん過ぎていきます。ひとつ型ができると、それをベースにしていろいろなページを作っていけるのですが、その型を作るのがとても大変ですね。

昨日はページのローディングが終わってからボタンを利用可能にする機能を作っていました。ページへのアクセス後、現在読み込んでいることを明確に示すために、ローディングアニメーションのアイコンをページのどこかに表示しようと思っています。

2018/11/5

MongoDB でトランザクションが使えるように設定しました。レプリカセット構成じゃないと駄目だとのことだったので、以下の記事を参考にして設定を行いました。

レプリカセットというのは、複数台のデータベースを立ち上げて、それを組み合わせることで安定性をもたらす機能のようです。同じサーバー内に3つのプロセスを立ち上げて構成しているので、安定性の向上にはあまり期待できない状況ですが、とりあえずトランザクションは使えるようになったので良かったです。

現在はプレイヤーカードのデータベーススキーマを作成して、データを挿入できるようにしようとしています。

2018/10/16

プレイヤーカードのデザインが完成しました。これからこれをコーディングしていきます。各ソーシャルサイトへのリンクを掲載でき、フレンド募集にも活用できるので、なかなか機能的でいいデザインになったのではないかと思います。

2018/10/9

プレイヤーページ(ログイン後に表示されるホーム)の作成に移ります。とりあえずプレイヤーカードのデザインを考えようと思います。プレイヤーカードというのは各ユーザーのプロフィールのようなもので、カード型のデザインで、プレイヤーの各種情報を表示する機能を持たせる予定です。

できればいろいろなページで使い回せるようなデザインのものにしたい。

2018/10/4

ログインとログアウト機能はほぼ完成しました。あとはログインしていないときに、ログアウトページにアクセスした場合、ログインページに飛ばすといった、リダイレクト機能を追加するだけです。

それが終わったらプレイヤーページ(ログイン後にアクセスする各ユーザーのホーム)を作成しようと思います。

2018/9/25

ログイン機能の reCAPTCHA & CSRF 対策のコードをモジュール化して分離しました。Node.js は import が使えないため、クライアント側と同じ書き方ができないのが不便です。いろいろ調べてはみたのですが、今のところは現実的に import / export 文を使うのは難しいとの結論に達しました。

ES Modules をお試し機能的に使うことはできるようなのですが、安定版として提供されているわけではないので、なにか問題が起こったときに対処ができなくなりそうなので、現時点での利用はやめておこうと思います。

早く正式に使えるようになるといいのですが。

今やろうとしているのはアカウント作成時に、パスワードをハッシュ化して保存し、E-Mail は暗号化して保存する部分です。

2018/9/21

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 ミドルウェアを利用しようとしています。

2018/9/10

ログイン、アカウント作成部分を作っています。

クライアント側から 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 ではなにも考えずにできていたことが簡単にできなくなっています。裏側の理屈を理解できている人なら原因がすぐにわかるのかもしれませんが、自分レベルだといちいち引っかかってしまうのが苦しいところです。

2018/9/3

MongoDB をインストールしてみたものの、全然試さずに外観ばかり触っていたので徐々に不安になってきました。実際、データベースを使ったときに思っていた処理ができなかったら困るので、データベースを利用しながらログインシステムを作ってみます。

これまでインストールされていた MongoDB は Ver.3 だったのですが、Ver.4 にアップデートしました。トランザクションが使えるようになったらしいです。

2018/8/24

コメントの投稿フォームと、投稿済みのコメントの画像表示部分が、意図せず連動してしまう問題が起こっていたのですが、コピーが参照になっていたせいでした。昨日1日使ってしまったのですが、冷静に考えたらすぐにわかりました。

もう少し落ち着いて考えないとだめですね。

コメント投稿・編集、返信用フォームも完成していないので、そちらも作成します。

2018/8/23

掲示板の画像表示部分を調整しています。1つだけ画像がアップロードされた場合は大きく表示し、複数の画像や動画が同時にアップロードされた場合は、小さく表示しようとしています。

コメント投稿・編集、返信用フォームも完成していないので、そちらも作成します。

2018/8/20

Node.js のバージョンを8.11.4にアップグレードしました。nvm でインストールすると、毎回 npm が v5.6.0 になるんですが、これはなにか意味があるんでしょうか。npm もついでにアップグレードしていますが、アップグレードしたらいけないんだろうか。

今日もユーザーコミュニティページの掲示板を作ります。コメントへの返信フォーム、投稿されたコメントを編集するフォームを作成しています。

2018/8/6

ストアの構成を見直していました。APIからどういう形式でデータを受け取って、表示に反映させるかということを考えなければならなかったので、その間、プログラム配信は行っていませんでした。だいたいの形は見えてきたので、また再開しようと思います。

現在はユーザーが登録してくれたサムネイルや名前を表示する部分を作成しています。

2018/7/19

Swiper で Lightbox(複数の画像を表示するギャラリー) 的な機能を実装しようと思ったのですが、Swiper は本格的な Lightbox パッケージじゃないようなので、納得の行くものになりませんでした。そこで React 用の Lightbox パッケージを探し出してきて、それで画像を表示させようと思います。

できれば動画もギャラリー的に表示したかったのですが、以下のものは画像しか対応していないようです。

React Images: https://jossmac.github.io/react-images/

2018/7/17

掲示板にアップロードされた画像や動画を表示する部分を作成します。画像&動画がひとつだけ投稿された場合の表示はすでに完成しています。次は複数の画像、動画が投稿された場合の表示部分を Swiper という Lightbox を利用しながら実装しようと思います。

Swiper: http://idangero.us/swiper/
react-id-swiper: https://github.com/kidjp85/react-id-swiper

2018/7/11

掲示板の画像アップロード・動画投稿機能を作成中です。アップロードする画像を選択、または投稿する動画のURLを入力した際に、画像がプレビューされるようにします。複数画像のアップロード、複数動画の投稿に対応しようと考えています。

2018/6/19

トップページ、ゲームコミュニティ一覧、ユーザーコミュニティ一覧、ログインページのデザインが終わり、いよいよメイン機能であるコミュニティページのデザインを行うところまで来ました。

掲示板の使い勝手が悪いので、改善案を出してもらいながら、新しいデザインを考えようと思います。

2018/6/4

デザインを考えているのですが、機能性といいデザインを両立するのが大変で、かなりしんどいです。基本的に既存のものの切り貼りや、ちょっとしたアレンジで乗り切っていますが、ゼロから想像するセンスがないため、いろいろな面で妥協しないといけなくなるのが辛いです。

現在はカード型デザインでゲームの一覧を表示、検索もできるようになるページのデザインを考えるところです。

2018/5/23

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 のサーバー側でも取得したいのです。でも方法がわからず。

2018/5/9

スタイルシートですが、Next.js がデフォルトに定めている styled-jsx よりも styled-components を使った方がいいような気がしてきました。

複雑な分岐を行う場合などに、クラスの内部にそれ用の function を作ってコンポーネントを返すような構成にすると、styled-jsx がちゃんと反映されません。Material UI を使うときだけ、styled-components を使うというルールもいまいちしっくりこないので、styled-components に統一した方がいいのかなと思ってきました。

まさかスタイルシートでこんなに悩むとは思いませんでした。

また Next.js のバージョンを 6.0 に変更しました。babel-plugin-transform-class-properties というプラグインを入れろという警告が出たので、それを入れて設定もしておきました。コードの書き方や、動作には特に変更がないようです。

2018/4/23

Next.js で Material UI を使う方法ですが、前回やっていた方法では、サーバーサイドレンダリング時にスタイルシートが正常に適用されていない。なぜか遅れて適用される?ため、設定を見直しました。

上記サンプルを参考にしながら、設定してみました。

Next.js はデフォルトで styled-jsx というスタイルシートの記述法を採用しているのですが、それを使った場合はサーバーサイドレンダリングする際に、Material UI のコンポーネントに正常にスタイルシートが適用されず、styled-components を使うと正常に適用されるという状況になりました。

設定方法が悪いだけかもしれないのですが、今のところ対処法がわからないので、Material UI のコンポーネントを使うときだけそうしています。

Next.js で Material UI を使う際の書き方がわかる方おられましたら、ぜび教えてください。

2018/4/20

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>

2018/4/18

複数人の開発者で同時に各ファイルを編集した場合、誰かがエラーを出すと他の開発者にもエラーが出て、開発がスムーズに進まないという問題が発覚しました。

同じ環境でトランスパイルが行われるわけですから、考えてみれば当然なのですが、今まで気づきませんでした。同時に違うファイルを触れないというのは結構致命的な問題です。

そこで Cloud9 の環境を複数用意して、それぞれの開発者が別のファイルを気軽に触れるようにしてみました。

マスターアカウントでログインできる方は、そちらの環境でも開発が行えます。git clone で複製しているだけなので、細かいことは気にせずいろいろ試してみてください。

2018/4/17

Next.js を試してみたところ、とても優秀だったので採用することに決めました。サーバーサイドレンダリングの機能や、Code Splitting をデフォルトで行ってくれるのは非常に便利です。ただすべての機能を提供してくれるわけではないので、結局、自分で Express を利用したサーバー用コードを書かないといけない部分も多くあるのですが。

それと Next.js はデータベースへのアクセスをすべて API で行うことを推奨しているようです。そこそこの規模のサイトになると、そういった構成が増えてくるのかもしれないのですが、自分は小規模なサイトしか作ったことがないので、初めての経験でちょっと不安です。

またそれに際して、Cloud9 が提供している URL では、 Fetch → API でのデータ取得が正常にできない問題が出てきました(なぜか Status 499 のエラーが出てしまいます)そのため、サーバー側でファイアーウォールのポートを開けて、普通のウェブサイトとして制作中のサイトにアクセスできるようにしました。

https://df44294c8853471b8ddd609c09af06f3.vfs.cloud9.us-west-2.amazonaws.com/

http://dev-1.gameusers.org:8080/

こちらのアドレスでは、Fetch でのデータ取得が正常に行えます。

React の状態管理で MobX を使ってみました。Redux よりコードの記述量がずっと減る感じなので、Next.js と一緒に採用してみます。後は Material UI の使い方を学んで、デザインを触りながら作っていこうと思います。

2018/4/9

勉強した本の独自の書き方になっていたので、express-generator をディレクトリ構成のベースにしました。

Webpack の最新バージョンがいつの間にか 4 になっていたので、アップデートしました。webpack.config.js も バージョン4に合わせて書き直しました。ビルドが速くなっているそうです!

React が正常に表示されるかテストしてみました。とりあえず Hello World を表示することができたので良かったです。React のサーバーサイドレンダリングに興味があるので、そちらについて調べてみたのですが、手間が非常にかかるようで、やるべきかやらないべきか悩んでいます。

React は状態管理に Redux を使用していたのですが、コードを書く量が多く、学習コストも高いため、同じ状態管理機能を持った MobXというライブラリに興味を持っています。こちらもいろいろ調べてみようと思います。

2018/4/3

IDE のユーザー削除を間違えて行ってしまいました。本来は IDE から削除してから、AWS の IAM でユーザーを削除するという順番で行わければならないのに、先に IAM でユーザーを削除してしまったので、IDE から削除ができなくなってしまいました。

修正方法がわからず、環境を作り直すことになったので、IDE などの URL が変更になりました。ブラウザのお気に入りに入れていた方は、お手数ですが URL の変更をよろしくお願いします。

2018/3/30

GCE 上に Cloud9 を構築していますが、あまりにも重たいのでサーバーをスペックアップしました。参加者が3人集まると止まるので。

f1-micro(vCPU x 1、メモリ 0.6 GB)

g1-small(vCPU x 1、メモリ 1.7 GB)

無料で使えるクレジットが30000円分あるので、しばらくは大丈夫そうです。

node.js のバージョンを 8.11.1 にし、.bashrc に source ~/.nvm/nvm.sh を記述して、ターミナルを立ち上げるたびにパスを通さなくてもいいようにしました。

Node.js を勉強するために利用した本


2 冊とも読み終わりました。

JavaScriptでのWeb開発 ~ Node.js + Express + MongoDB + ReactでWebアプリを開発しよう ~ その1(改訂版)

JavaScriptでのWeb開発 ~ Node.js + Express + MongoDB + ReactでWebアプリを 開発しよう ~ その2

Kindle Unlimited を契約している方は読み放題で読めます。

勉強した項目

  • Node.js のサーバー起動
  • Hello World の表示
  • MongoDBの導入、データの挿入・表示
  • 画像のアップロード機能
  • Passport(ログイン用パッケージ)を利用して、ID & Passord のログインと SNS 認証でのログイン
  • Winston(エラーログ記録パッケージ)の利用方法
  • 404 ページの表示
  • エラー処理
  • Helmet(セキュリティ用ヘッダーを設定するパッケージ)の設定
  • CSRF対策、トークンをフォームページの <input type=”hidden”> に表示させてチェックする方法
  • CORS(クロスオリジンリクエスト)の設定、開発環境では正常に機能しなかったのでよくわからず
  • HTTPS の設定、本番環境じゃないので後回しにしました

Teletype portal ID(利用停止中)


気軽に参加してください!

portal ID: 

Teletype for Atom


Atom を使ってコラボレーションができる Teletype というプラグインを使ってみようと思います。実際どんな使用感なのかわからないので手探りになりますが。

※ 利用にはGitHubのアカウントが必要になります。

Teletypeの使い方


1. Teletype プラグインをインストールする

まずは Atom に Teletype のプラグインをインストールしてください。

2. トークンを取得する

以下のページにアクセスして Authorize atom というボタンを押してください。トークンを取得するページに移動します。

https://teletype.atom.io/login

3. トークンを取得します

モザイク部分にトークンが表示されます。それをコピーしましょう。

4. Atom の電波塔アイコンをクリックしてトークンを貼り付けます

Atom の右下に電波塔のアイコンがあるので、そこをクリックしましょう。画像のような画面が表示され、トークンを入力するフォームが表示されます。そこにさきほどコピーしたトークンを貼り付けましょう。

そして Sign in ボタンを押すと、Teletype の利用準備は完了です。

5. portal ID を入力して参加してください

再度、電波塔のアイコンをクリックして、Join a portal と書かれた部分をクリックすると、portal ID を入力するフォームを開けます。そこにこの記事上部に掲載している portal ID を入力して Join ボタンを押してください。

これでプログラム配信のポータルに参加できます。開発に参加したり、アドバイスをしたりしなくても全然構いません。Teletype を試しに触ってみたいという理由でもなんでもいいので、気軽に参加してみてください。