CakePHP5入門【CakePHP5実用編①】要件定義

A子

C菜

B美
A子、あんた…
クライアントサーバ型でリアルタイムチャットを実現することの難易度(難しさ)って、ちゃんと分かってる?

A子
クライアント(ブラウザ)がサーバ(Webサーバ)に要求すると、サーバはクライアントに対して応答を返す
…ってのがクライアントサーバ型だよね?
自分の発言をブラウザから送信することで、それがサーバに届いて処理される…
別に問題ないじゃん
(前に作った「掲示板」と同じ仕組みよね?)

C菜
例えば、A子社長、B美部長、私(C菜)の三人がチャットサービスを利用しているとして~
私の送信した文章がWebサーバに届くのは問題ないです~
でも、それを即座にA子社長とB美部長にも届けなければなりませんよね~?
それって、(クライアントからの要求無しに)サーバからクライアントへ通知するということになりませんか~?

B美

A子
あっ、そうか!
だったら、事前に(空の)要求をしておいて、サーバは応答を保留状態にしておく…って方法はどう?

B美
(それを思いついたことに…)
実は、その技術(「Comet」と呼ばれています)ってすでにあるのよ
ただし、現在ではほとんど使われてないけどね

C菜
今はもっと良い技術があるのでしょうか~?

B美
今の時代、サーバからクライアントへアクションを起こすには「WebSocket」を使うのが一般的ね
(これって「双方向通信」を実現する技術なの)

A子
そっかー
電話って、たしかにクライアントサーバ型じゃないもんね

B美
ただ、Webサーバとは別に、WebSocketサーバを起動しておかないといけないけどね
(要するに、Webサーバは「クライアントサーバ型」だけど、WebSocketサーバはそうじゃないってことよ)

C菜

B美
CakePHPでもcomposerで簡単にインストールできるし…

A子
だったら簡単だね
ライブラリの名前は?

B美
(正確には「cboden/ratchet」)
CakePHP5のプロジェクトディレクトリに移動したあと
composer require cboden/ratchet[Enter] |
…って打ち込むだけ

C菜

B美
詳細に教えてくれるはずよ

A子

B美
(実験用ではなく)きちんとしたWebアプリケーションとして実装するなら、まずは要件定義から始めなさいね

C菜

A子
でも、機能としては単純なものよ
・LINEっぽいやつ |
ただ、それだけ(笑)

C菜
例えば
・発言をデータベースに格納するのか?ログファイルに書き込むのか?
・誰でも自由に利用できるようにするのか?それともログイン必須にするのか? ・自由にチャットルームを作ることができて、そこには招待した人だけが参加できるようにするのか? ・画像ファイルを貼り付けられるようにするのか? |
などが、パッと思いついたところですね~

A子
その場限りの発言で良いんじゃない?

C菜

A子
でも、かなり前の発言から最新の発言までを全部表示するの?

C菜
そのチャットルームに入室した時点で、それまでの発言を全て表示するんですよ~

A子
あと、ログインは必須にしよう
(内緒話ができるように(笑))

C菜
(招待した人だけが入室できるようにするのか…ってことです~)

A子
ログインしたユーザだったら、誰でも入室できる…で良いんじゃない?

C菜
画像ファイル投稿はどうしましょう~?

A子
「画像投稿掲示板」で経験したから、それほど難易度は高くないと思うけど…
いや、やめておこう
ベースはできるだけシンプルにして、制作難易度は下げておいたほうが良いと思う
あ、あと前回作った認証アプリ(authapp)を改造して作ろう
(さらに制作難易度が下がるからね)

C菜
【要件定義】
・前回の認証アプリ(authapp)をベースに発展させていく(ログイン必須)
・チャットルームを作り、そこへ入室することでメンバー間のチャットを行う ・誰でも新たなチャットルームを作ることができるとともに、その部屋には誰でも入室できる ・チャット内容はデータベース上に格納され、入室時点までの過去ログが全て画面上に表示される ・双方向通信についてはWebSocket(Ratchet)により行う ・テキスト情報以外の送信は不可(画像ファイル等の貼り付けはできない) |
という感じで、どうでしょうか~

B美
永続的なものにするの?
(削除しないと、どんどん増えていくわよ)

A子

C菜
良いと思います~
あ、でも「削除」方法ですけど~
(物理的な完全削除じゃなく)削除フラグを立てる形のほうが良いと思いますよ~

B美
(あとは臨機応変に変更していけば良いわ)
【要件定義】
・前回の認証アプリ(authapp)をベースに発展させていく(ログイン必須)
・チャットルームを作り、そこへ入室することでメンバー間のチャットを行う ・誰でも新たなチャットルームを作ることができるとともに、その部屋には誰でも入室できる ・チャット内容はデータベース上に格納され、入室時点までの過去ログが全て画面上に表示される ・双方向通信についてはWebSocket(Ratchet)により行う ・テキスト情報以外の送信は不可(画像ファイル等の貼り付けはできない) ・チャットルームの管理人はその部屋の作成者とする ・チャットルームの管理人のみがその部屋の削除を行うことができる(ただし「削除フラグ」を立てる形式) |

A子
それじゃ、次回はデータベース設計だね