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

B美

A子

C菜

B美

A子
代わりに「1000発言を上限とする」という制約は無しで…

C菜
最新の発言が一番上に表示されるようにして、あと「ページネーション」も行うべきだと思います~

A子
あ、できるかどうかは分からないけど、ボット投稿を防ぐための「CAPTCHA」も組み込んでみたいね

C菜
あと、せっかくなので、画像ファイルの投稿もできるようにしたいです~

A子
一度に複数の画像ファイルをアップロードするのは難しそうだから、0個または1個のファイルという制約を設けよう
(0個ってのは、画像ファイルのアップロードは必須じゃない…って意味ね)

B美
不適切な投稿があった場合、IPアドレスの開示請求や投稿内容の削除要求なんかが来るかもしれないんだから

C菜

A子
ユーザ管理用のテーブルなんかが必要ってこと?
めっちゃ面倒くさそうなんだけど…(苦笑)

B美
まぁ、「ログイン認証するのが管理者のみ」だったら、BASIC認証の機能を組み込むのが一番簡単かな

C菜
(ベーシック認証というのが、実はよく分かってないですけど~)
あ、アクセスログはWebアプリケーション側で記録していくんですか~?

A子
だったら要らないんじゃない?

B美
投稿と紐づけるのなら、独自にログを取ったほうが良いと思うわよ

C菜

B美
あ、あと投稿の削除についてだけど、二つの考え方があります
一つは、該当レコードをそのまま削除しちゃう
もう一つは、レコードの中の削除フラグに特定の値をセットする
(要するに、実際は削除しないけど、削除したものとみなす…ってこと)

A子

B美
二つ目の方法では、データベーステーブルに余分な項目が増えるってだけね

C菜
それなら間違って削除したものを元に戻すこともできますよね~?

A子
そういう可能性もあるのか…

B美
投稿の「編集」はどうする?

A子
投稿者を「ログイン認証した会員のみ」にするのなら、その投稿者本人だけが編集できるようにしても良いけど…

C菜
管理者が「削除」だけできれば良いんじゃないかと…

B美
あとはアップロードした画像の保存先をどうするのか?…ってことね

A子
Webサーバ内のどこか特定のディレクトリ内に保存するんじゃないの?

C菜

B美
要するに、そのどちらにするのか?…ってこと

A子

B美
でも私のお勧めは、A子の言った「ファイルとして保存」のほうね
これってちょっと面倒だけど、特に難しいってわけでもないからね

C菜

A子
あ、最初のほうに出てきた「CAPTCHA」はどうなの?
簡単にできる?

B美
「Google Cloud」への会員登録が必要だってことと、アクセス数が増加すると有料になっちゃうのが困りものだけどね(苦笑)

A子

B美
(dereuromark/cakephp-captcha)
説明文が全て英語だけど、「CakePHP5」に対応してるからね

C菜

B美
【要件定義】
・誰でも投稿可能な掲示板(投稿数の上限なし)
・画像ファイルのアップロードも可(必須ではない) ・アップロードされたファイルは、ファイルとして保存する ・投稿時のボット対策として「CAPTCHA」を組み込む ・投稿表示順は投稿日時の逆順(最新のものが最上位) ・「ページネーション」を実装 ・管理者はBASIC認証でログイン後、投稿された記事の削除のみ可 ・削除は「削除フラグ」を立てる ・投稿時にアクセスログの記録を行う |
…ってところかしら

A子

B美
例えば、一覧表示するときのデザインや、1ページあたりの件数、管理者用画面のレイアウト等…
もちろん、データベース設計もね

C菜

B美
(でないと学習にならないでしょ?)
私は基本的にアドバイザーだから、そこんところよろしく!

A子

B美
あなたたち「CSSフレームワーク」って知ってる?

C菜
聞いたことないです~

A子
でも「CSS」って、「スタイルシート」ってやつじゃなかったっけ?

B美
Webページのデザインに統一性を持たせるために用意するのが、CSSファイルってわけ
あ、「CakePHP」でも「cake.css」というCSSファイルを使ってるわよ

A子
それで「CSSフレームワーク」って何?

B美
有名なものとしては「Bootstrap」や「Bulma」「Foundation」「Skeleton」などなど、色々なものがあるわ

C菜

B美
まぁ、私は「Bulma」を推すけど…

A子
B美と私の感性って似てるからね
(B美が気に入ってるのなら、多分私も気に入るはず)

B美

C菜
なるほど「Bulma」って、レスポンシブ対応なんですね~

A子
それって何だっけ?
(聞いたことはあるような…)

B美
ちなみに「CakePHP」の標準CSSである「cake.css」は、レスポンシブじゃありません

C菜

B美

A子
また新たな言葉が…(苦笑)

B美
要するに、自分のWebページのヘッダー内(<head></head>)にCSSファイルへのリンクをURLとして記述するだけで、そのCSSファイルを使えるようになるってわけ
(JavaScriptのライブラリである「jQuery」でもよく使っているやり方ね)

C菜

B美
必ず最新のバージョンを指定するようにね!
さっきの説明サイトではバージョンが「0.9.3」だったけど、今の最新版は「1.0.2」だから…
(2024年12月時点)

A子
なんともお手軽な感じ…

B美
もちろん、ファイル一式をダウンロードしてから、自分のWebサイト内に設置しても良いんだけどね
さて、それではWebアプリ開発を始めましょうか

C菜

A子
最初は「設計書」を作っていくんじゃないの?

B美
いわゆる「アジャイル」で開発していきましょう

C菜

B美
(「実装」とはプログラミングのこと)
要するに、紙ベースの設計書を作ることから始めるのではなく、最初からコードを打ち込んでいって開発スピードを高速化するやり方ね

A子

B美
もちろん「設計書」にはまとめるんだけど、それをやるのはプログラムの完成後…ってわけ

C菜

B美
「ざっくりした設計」→「実装」→「しっかりした設計書」…って感じよ
ちなみに、大規模開発では「しっかりした設計書」→「実装」の順番になります

A子
それじゃまずは「ざっくりした設計」ってことね

B美
「基本設計」→「詳細設計」だと思っておけば良いわ
画面デザインやデータベーステーブルの「正規化」、画面ごとの機能をまとめたものが「基本設計」
個々のデータベーステーブルの「設計」や各機能の細かい条件判断、ファイルの場所(ディレクトリ構成)なんかを規定するのが「詳細設計」ね
要するに、ユーザが見てもある程度理解できるのが「基本設計書」
プログラマじゃなければ理解できないのが「詳細設計書」って感じ…

A子

B美

C菜

B美
(「フレームワーク」というよりは「ガイドライン(指針)」と言ったほうがイメージ的には合ってるけど…)
簡単に言っちゃえば、「開発関係の用語等を統一して、意思疎通に問題が発生しないようにしよう」…って考え方

A子

B美
「システム方式設計」→「ソフトウェア要件定義」→「ソフトウェア方式設計」→「ソフトウェア詳細設計」って感じかな
前の二つを「基本設計」、後の二つを「詳細設計」と言っても良いかも…
(「ソフトウェア方式設計」までを「基本設計」に含めるという考え方もあり)

C菜
私たちは、とにかく「ざっくり」決めて、「あとは細かく」って感じで良いんですね~?

B美
ただ、ちょっと長くなっちゃったから今回はここまでかな
続きは次回ね

A子

C菜