1. HOME
  2. ブログ
  3. IT技術
  4. 【第4回】Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみる【モデルの構築】

【第4回】Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみる【モデルの構築】

第4回~モダンなフレームワークの使い方を学びながらブログシステムを構築~

連載「Python Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみる」第4回目です。

前回は、「管理者ページの整備」まで行いました。

今回は、「ブログシステムのデータベース」を解説していきます。

ブログシステムのデータベースを作ろう!

今回は、いよいよ Firestore を使って、「ブログシステムのデータベース」を作ります。

以下のポイントを押さえながら解説していきます。

  1. Firestore と Python の連携はどうやるの?
  2. ブログシステムには何が必要?

それでは、さっそく見ていきましょう!

モデルの作成

まずはモデルを扱う、 models.py を作成しましょう。

ここで、「記事」や「カテゴリ」といったモデルを作成し、「Firestore に追加していく機能」を実装していきます。

実際には「コントローラ側で、モデルをもとにデータを作成する」形になります。

まずは、試しに作ってみましょう。

Category

まずは、「カテゴリのモデル」作成から。

カテゴリは、以下の要素で構成されます。

  1. 主キーとなる ID
  2. 名前
  3. スラッグ

Firestore と Python の連携はどうやる?

Firestore と Python の連携は、一般的に「構築したクラスを Dict に変換して追加」という方法で行います。

したがって、この様な実装をしてみました。

ID の設定

ID は、動的に被りがない様にしましょう。

Cloud Firestore は、データを追加する際、「指定しなければ、ランダムに ID を割り当ててくれる」ので、これを使います。

スラッグの設定

また、ID 同様、スラッグも被りがない様にします。

以下のように、「Firestore 内データのスラッグ一覧を取得する関数」を用意しておきます。

コレクションから stream() で得たデータは、そのままでは使い勝手が悪いです。

そのため、「辞書型変数」に直してから、スラッグだけのリストを作りましょう!

Tag

タグも同様です。

Article

記事は、以下のフィールドを持たせます。

id一位に定まるキー
title記事タイトル
thumbnailサムネイル画像
contents記事内容
description詳細・記事抜粋
author著者
slugスラッグ (これも一意に定まるもの)
categoryカテゴリ (1つ)
tagsタグ (複数個可)
released公開状態

今回、「カテゴリは1つ」「タグは複数個」持てるようにします。

その他は、先ほどの2つと大きな違いはありません。

サンプルデータを追加してみる

それでは、動作確認がてらデータを追加してみましょう!

マークダウン形式で書いておこう

執筆はマークダウン形式にしたいので、ここでも、マークダウン形式で記事内容を書いておきます。

今は、とりあえず適当なデータを格納しておきましょう。

実行!

実行してみると、以下の様にデータが追加されました!

データが追加できた

管理者ページに反映させる

これで、データベースに記事ができました。

次は、「管理者ページ」もとい「投稿一覧ページ」に、反映させましょう。

関数を作成

まずは、 models.py に、記事を List[Dict] で取得できる関数を作っておきます。

諸々の仕様を設定

あとで使い回せるよう、公開済みか否か」によって、取得する記事を変更する様にしました。

また、 order_by('last_update', direction=Query.DESCENDING) で日付降順で取り出すようにしています。

ビューに投げる処理を追記

そうしたら、 controllers.py 側からこれを呼び出し、ビューに投げる処理を追記します。

ビューを変更

最後に、ビューも変更しましょう。

ポイントは、以下の3つです。

  1. 公開済みの記事に直接飛べるようにする
  2. サイドメニューに「カテゴリ」と「タグ」の編集リンクを追加(後ほど実装します)
  3. テーブルのヘッダーに「公開」を追加

確認

実際に、管理者ページにアクセスしてみると、

管理者ページにデータが反映された

うまく動作しています!

第5回へつづく!

今回は、データベースにおける「Firestore と Python の連携部分」を実装してみました。

管理者ページもだいぶ整いましたが、「記事の追加」「編集」などの実装はまだです。

まだまだブログシステム完全構築には程遠いですね…。

次回は「記事個別ページ」を作成していきます。

道のりは長いですが、次回も頑張って実装していきましょう!

次回の記事はこちら

第1回はこちら

こちらの記事もオススメ!

書いた人はこんな人

広告メディア事業部
広告メディア事業部
「好きを仕事にするエンジニア集団」の(株)ライトコードです!

ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。

システム開発依頼・お見積もり大歓迎!

また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」「WEBディレクター」を積極採用中です!
インターンや新卒採用も行っております。

以下よりご応募をお待ちしております!
https://rightcode.co.jp/recruit

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア