プログラミング勉強メモ

不真面目 Web プログラマーの勉強メモとか

手探りで laravel でブログを作る その 0

前回の記事から結構時間が空いてしまいました。 言い訳するとちょっと仕事が忙しくなって帰宅後眠くて眠くてやる気出なかったんですよ。 まぁ、その割にはニコ動みたりして寝るの遅くなったりしてたんで本当に言い訳ですね。

とりあえず、最初の記事らへんに書いた通り laravel でブログを作るのが目標なのでまずは DB 設計と仕様を考えるところからいきますよー

ブログに実装したい機能とか考える

とりあえずパッと思いつくことを優先度が高い順にあげていきます。

  1. ブログの投稿
  2. ログインしてる人だけ投稿とか編集できるようにする
  3. タグをつけれるようにする
  4. タグ検索
  5. カテゴリーをつけれるようにする
  6. カテゴリーで検索
  7. レスポンシブデザイン
  8. マークダウンで投稿できる
  9. 画像投稿
  10. 投稿したときに Twitter にも連携してつぶやかれるようにする

……パッと思いつくのはこれぐらいですかね。どうせ私しか利用しないですし。 8 と 9 と 10 はホントに出来たらやるぐらいの気持ちです。 ゲームのネタバレを含む感想を語りたいときに使うブログの予定なので、画像を投稿したいと思うときがあるのか疑問ですしね。

DB のテーブル設計をする

実装したい機能 1 ~ 6 までを考慮して考えていきますー。 9 も設計に関わる要素だと思いますが、今のところ絶対実装したいわけでもないですし所詮個人で開発した自分しか使わない奴なんで、画像投稿したいって思ってから作り変えます。 必要なテーブルは

  • 記事テーブル
  • タグテーブル
  • タグと記事を結びつけるテーブル
  • カテゴリーテーブル
  • ユーザーテーブル

の 5 つですかね。 私しか使わないのにわざわざユーザーテーブル用意するのはどうなの感がありますが、ユーザーテーブルがある方がログイン機能実装が楽っぽそうなので用意します。 次はそれぞれのテーブルの属性名とか型とか決めていきます。

articles(記事テーブル)

属性名 id
id unsigned smallint(5) 記事のid(主キー)
title varchar(30) 記事のタイトル
body text 記事本文
category_id unsigned tinyint カテゴリーのid(外部キー)
created_at timestamp 作成日
updated_at timestamp 編集日

よくあるブログのチュートリアルではここに投稿者のユーザを格納する属性があるんですが、投稿したりするのは私一人だけなのでなくしました。 idsmallint は記事の総数がそもそも 6 万まで届くことなさそうですし、絶対 int が必要なほど投稿しないです。 あとは値がマイナスになることがないので符号なしにしてます。

カテゴリー、多対多にするか悩んだんですけど一つの記事にカテゴリーは一つの方向性でいきます。ゲームの感想はゲームの感想、日記は日記と同じ記事内に違うカテゴリーのことを書きそうにないので……。ワードプレスとかはカテゴリー複数指定できる仕様ですね。まぁ、好みの問題かと。

tags(タグテーブル)

属性名 id
id unsigned tinyint(3) タグのid
name varchar(30) タグ名

タグとか絶対総数 255 を超えることはないだろうで tinyint にしました。 namevarchar(30) はあれです、とりあえず 30 あればいけるでしょの精神です。

article_tag(記事とタグの中間テーブル)

属性名 id
article_id unsigned smallint(5) 記事のid(主キー、外部キー)
tag_id unsigned tinyint(3) タグのid(主キー、外部キー)

laravel の中間テーブル名は公式ドキュメントによると、複数形ではなく単数形でアルファベット順にアンダースコアで繋ぐっていう感じっぽいです。 属性は2つとも外部キーかつ複合主キーでいいはず……たぶん。

categories(カテゴリーテーブル)

属性名 id
id unsigned tinyint(3) カテゴリーのid
name varchar(30) カテゴリー名

タグと同じノリですね。これ以外に値ないですし。


laravel で実際にコーディングする前に考えておかないと駄目なのはこれぐらいですかね (-ω-)

次の記事からコーディングやっていきます。