Friction River Software

  • お問い合わせ

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

B美

さて何を作りましょうか?

A子

誰もが自由に投稿できる(発言できる)掲示板みたいなやつを作ろう!

C菜

5chごチャンネルっぽいやつですか~?

B美

あれって、まず複数の「いた」があって、その「板」ごとに複数の「スレッド」(通称「スレ」)を作るから、かなり複雑よ

A子

いや、いうなれば「スレ」一つだけの掲示板ね

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

C菜

だとすると、5chのように最新の発言が下に追加されていくのは読みにくいかもです~

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

A子

確かに…

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

C菜

CAPTCHAキャプチャ」って、ぐにゃぐにゃした文字の画像のことですよね~?

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

A子

お、良いねぇ

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

B美

あなたたち、めっちゃ盛り上がってるみたいだけど、投稿の削除機能のことも考えておきなさいね

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

C菜

管理者としてのログイン機能も必要ってことでしょうか~?

A子

うへぇ
ユーザ管理用のテーブルなんかが必要ってこと?

めっちゃ面倒くさそうなんだけど…(苦笑)

B美

うーん、ログイン認証機構って「CakePHP」なら簡単に作れるんだけどねぇ

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

C菜

それじゃ、それでいきましょう~
(ベーシック認証というのが、実はよく分かってないですけど~)

あ、アクセスログはWebアプリケーション側で記録していくんですか~?

A子

Webサーバ側でアクセスログを取ってくれてるんでしょ?

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

B美

んー、悩みどころねぇ

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

C菜

投稿者のIPアドレスって簡単に取得できるんですかぁ~?

B美

もちろん!
あ、あと投稿の削除についてだけど、二つの考え方があります

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

A子

そのまま削除するという一つ目のほうが簡単なんじゃない?

B美

いいえ、どっちも簡単に実現できるわよ

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

C菜

だったら削除フラグを立てる二つ目の方法にしましょうよ~

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

A子

あー、そうか

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

B美

それじゃ、削除についてはそれで…

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

A子

要らないんじゃない?

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

C菜

誰でも投稿できる掲示板なんですから、私も「編集」機能は不要だと思います~

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

B美

ふむ、ではそのように…

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

A子

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

C菜

私はデータベース内に保存するんだと思ってました~

B美

二人とも正解よ

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

A子

どっちが簡単なの?

B美

C菜の言った「データベース内に格納」のほうが(処理としては)簡単かな

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

C菜

それでは、そっちにするです~

A子

OKよ

あ、最初のほうに出てきた「CAPTCHAキャプチャ」はどうなの?
簡単にできる?

B美

PHPライブラリはたくさんあるんだけど、お勧めは「Google Cloud」の「reCAPTCHAリキャプチャ」かな

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

A子

いやいや、無料のライブラリがあるんだったら、そっちにしようよ

B美

んー、だったら「Captcha Plugin for CakePHP」かな?
(dereuromark/cakephp-captcha)

説明文が全て英語だけど、「CakePHP5」に対応してるからね

C菜

英語は得意です~

B美

さてと、だいたい仕様は固まったかな?

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

…ってところかしら

A子

こうやって一覧にすると、なんだか難しそうなんだけど…(苦笑)

B美

あ、細かい仕様を決めるのは【基本設計】でやるからね

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

C菜

B美部長がいれば楽勝です~

B美

私が作るならすぐにできるけど、これってあなたたちが主体となって作らなきゃいけないのよ
(でないと学習にならないでしょ?)

私は基本的にアドバイザーだから、そこんところよろしく!

A子

はいはい(苦笑)

B美

あ、そうだ
あなたたち「CSSフレームワーク」って知ってる?

C菜

「Webフレームワーク」じゃなくて「CSSフレームワーク」ですか~?

聞いたことないです~

A子

私も知らない

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

B美

正確には「Cascadingカスケーディング Styleスタイル Sheetsシート」ね(頭文字を並べて「CSS」)
Webページのデザインに統一性を持たせるために用意するのが、CSSファイルってわけ

あ、「CakePHP」でも「cake.css」というCSSファイルを使ってるわよ

A子

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

B美

簡単に言っちゃえば「これを適用すれば美しいデザインを実現できますよ」…って感じで提供されている「CSSファイル」のことよ

有名なものとしては「Bootstrapブートストラップ」や「Bulmaブルマ」「Foundationファウンデーション」「Skeletonスケルトン」などなど、色々なものがあるわ

C菜

どれが良いんでしょうか~?

B美

自分で使ってみて、フィーリングの合うやつを選ぶべきね

まぁ、私は「Bulmaブルマ」を推すけど…

A子

んじゃ、それで良いよ

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

B美

またいいかげんな決め方を…(苦笑)

あ、説明文についてはこちらのサイトを参照してね
(クリックすると別ウィンドウで開きます)

C菜

うわぁ、すごく詳しくて分かりやすいです~

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

A子

れすぽんしぶ?

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

B美

パソコンの広い画面だけじゃなくて、スマホやタブレットなんかの狭い画面で閲覧したときでも、見やすく表示してくれる機能のことよ

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

C菜

Bulmaブルマ」の入手については、そのファイルをダウンロードするんでしょうか~?

B美

それでも良いんだけど、お手軽なのは「CDN」かな

A子

何それ?

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

B美

「CDN」とは「Contents Delivery Network」の頭文字を並べたもので、必要なファイルをそのつど入手する仕組みのこと

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

C菜

さっきの説明サイトでも「CDNの利用」という項目がありましたよ~

B美

あ、「CDN」を利用するときって、一つだけ気を付けておいて欲しいんだけど…
必ず最新のバージョンを指定するようにね!

さっきの説明サイトではバージョンが「0.9.3」だったけど、今の最新版は「1.0.2」だから…
2024年12月時点

A子

なるほどねぇ

なんともお手軽な感じ…

B美

そういうこと
もちろん、ファイル一式をダウンロードしてから、自分のWebサイト内に設置しても良いんだけどね

さて、それではWebアプリ開発を始めましょうか

C菜

まずは「CakePHP」のプロジェクトを生成ですか~?

A子

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

B美

大規模開発では「設計」からなんだけど、今から作ろうと思っているWebアプリの規模ではそこまでする必要は無いかな

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

C菜

聞いたことのある言葉ですけど、意味は分からないです~

B美

設計」よりも「実装」を重視する開発手法だと思っておけば良いわ
(「実装」とはプログラミングのこと)

要するに、紙ベースの設計書を作ることから始めるのではなく、最初からコードを打ち込んでいって開発スピードを高速化するやり方ね

A子

そんなやり方で、わけ分かんなくならないの?

B美

個人や数人での開発、つまり小規模な開発では問題になることはそんなにないかな

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

C菜

「設計」→「実装」ではなく、「実装」→「設計」ってことですか~?

B美

いいえ
「ざっくりした設計」→「実装」→「しっかりした設計書」…って感じよ

ちなみに、大規模開発では「しっかりした設計書」→「実装」の順番になります

A子

ふーん

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

B美

「設計」工程はおおよそ二段階
基本設計」→「詳細設計」だと思っておけば良いわ

画面デザインやデータベーステーブルの「正規化」、画面ごとの機能をまとめたものが「基本設計」
個々のデータベーステーブルの「設計」や各機能の細かい条件判断、ファイルの場所(ディレクトリ構成)なんかを規定するのが「詳細設計」ね

要するに、ユーザが見てもある程度理解できるのが「基本設計書
プログラマじゃなければ理解できないのが「詳細設計書」って感じ…

A子

「おおよそ」って何なのよ

B美

共通フレーム」ではもっと細かく分割するのよ

C菜

また新しい用語です~

B美

システム開発に携わる全ての人が「共通」で持っておくべき「フレームワーク(枠組み)」って意味ね
(「フレームワーク」というよりは「ガイドライン(指針)」と言ったほうがイメージ的には合ってるけど…)

簡単に言っちゃえば、「開発関係の用語等を統一して、意思疎通に問題が発生しないようにしよう」…って考え方

A子

「共通フレーム」の設計工程ってどんな感じ?

B美

最新版は「共通フレーム2013」なんだけど…
システム方式設計」→「ソフトウェア要件定義」→「ソフトウェア方式設計」→「ソフトウェア詳細設計」って感じかな

前の二つを「基本設計」、後の二つを「詳細設計」と言っても良いかも…
(「ソフトウェア方式設計」までを「基本設計」に含めるという考え方もあり)

C菜

かなり面倒そうです~(苦笑)

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

B美

そういうこと

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

A子

了解

C菜

分かりました~