Open1

CakePHP初学者向け課題: ブログ機能の実装

yamamotoyamamoto

はじめに

フレームワークの基本は短期間で習得可能です。当記事で提示する課題に取り組む中で実践的なスキルを身につけることができます。

課題は「ブログ機能の追加」です。実務に近い経験を通じて、CakePHPの基本を学びましょう。

目的

既存プロジェクトをベースに、CakePHPの基本的な機能を用いて改修を行います。レビュアーとのコミュニケーションを通じて、以下のスキル向上を目指します。

  • CakePHPの基本機能を学び、システムの構造を理解する
  • プロジェクト特有のコーディングルールを理解する
  • GitHubを利用したレビューの進め方を理解する
  • レビュアーとのコミュニケーションを通じて、プロジェクトに特化した質問力を高める

提出方法

  1. 当プロジェクトの main ブランチから practice/my-name ブランチを作成し、変更をコミットしてください。
  2. プルリクエストを作成し、レビュアーに通知してください。

実装における進め方と配慮

  1. 実装時間の目安
    • 経験者: 半日程度で完了可能
    • 初学者: 学習を通じて進めるため、2~3日を目安として問題ありません。
  2. エンジニアへの配慮
    • プレッシャーをかけないように進めることを重視します。
    • 「いつでも遠慮なく質問する」環境を整え、気軽に相談できる場を提供します。
  3. ペアプログラミングの活用
    • 画面共有を用いたペアプログラミングを積極的に実施します。
    • エディタやターミナル操作について、慣れていない場合はサポートします。

要件

1. ブログ機能の追加

  • 主な機能
    • 一覧表示、詳細表示、作成、編集、削除を実装
    • 管理はAdmin画面で行い、Public画面で表示
    • 記事フィールド: タイトル、本文、作成日、更新日
    • バリデーション: タイトルと本文は入力必須
    • メソッド分割:
      • 記事一覧ページ: index メソッド
      • 記事追加ページ: add メソッド
      • 新規追加処理: create メソッド (bakeコマンドでは生成されません)
      • 記事更新ページ: edit メソッド
      • 更新処理: update メソッド (bakeコマンドでは生成されません)
      • 削除処理: delete メソッド
  • 動線の設定
    • Admin画面: 左サイドバーに「ブログ」を追加
    • Public画面: フッタ部分「会社概要」の右側に「ブログ」を追加
  • 多言語対応
    • Public画面で多言語対応(例: ブログ・Blog・博客)
  • 技術要件
    • bake コマンドでマイグレーション、モデル、コントローラ、テンプレートを生成

参考ドキュメント


実装の観点

技術的観点

  • エンティティ操作
    • newEntity(新規作成)と patchEntity(更新)の適切な使い分け
  • バリデーション
    • モデルでの適切なバリデーションルール
    • 必須項目のチェック(フロント・バックエンド両方)
  • エラーハンドリング
    • バリデーションエラーの返し方
  • マスアサインメント
    • 不要なフィールドが含まれないように$_accessibleを設定

セキュリティ観点

  • CSRF対策
    • フォーム送信時にCSRFトークンを適切に利用
  • XSS対策
    • 表示データの適切なエスケープ処理

HTTPメソッドの使用

  • 適切なHTTPメソッド
    • POST(新規)、PUT(更新)、DELETE(削除)の利用
  • メソッド制限
    • Request::allowMethod() によるHTTPメソッド制限

その他

  • ビューの継承
    • index・add・editで構成を揃える
    • addとeditは共通のテンプレートを継承し、同じformを書かない
  • 多言語対応
    • Public画面での多言語実装
  • コードの可読性
    • コメント・型ヒント・リファクタリング
  • CakePHP3規約
    • 命名規則やインデントの遵守

新人エンジニアへのメッセージ

  1. 躊躇せず苦手を伝えよう
    • 「自分の力不足を知られたくない」「自分は問題なくできる」と思う気持ちは自然なことです。しかし、苦手な部分や分からないことを伝えることで、適切なサポートやアドバイスを受けることができ、学びを深めることができます。
    • わからないことをそのままにせず、早めに声を上げることが、プロジェクトを円滑に進める鍵です。
  2. 質問力を磨く
    • 次から次へ学ぶためには「質問力」が重要です。
    • 具体的な質問をすることで、問題解決がスムーズになります。
    • 例: 「ここが分からない」ではなく、「このコードの〇〇部分の処理が期待どおり動作しないのは、どの条件が影響している可能性がありますか?」と尋ねる。
    • AI時代の質問力: 現在、AIを使った問題解決も重要なスキルとなっています。適切な質問をAIに投げかけることで、技術的な課題を短時間で解決することが可能です。AIに対しても「どんな情報が必要か」を明確に伝える力が求められます。
  3. 学ぶ姿勢を大切に
    • 苦手や未経験の部分は成長の機会と捉えましょう。レビューする側も受け入れてください。
    • 初心者でも一歩一歩進めることで、数日後には 「できる」 に変わります。
    • 学んだことを思い出せることが大切。でも忘れてしまうことはある。何度でも質問しましょう。
  4. 安心して取り組む
    • このプロジェクトは、技術を磨きながら自信をつけるための場です。
    • 信頼できるメンバーがいることを確認するための場です。
    • プレッシャーを感じすぎず、分からないこと・知りたいことがあれば、いつでも気軽に相談してください。