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子
それじゃ、次回はデータベース設計だね


