最近まともにプログラム書いてないのでなまった腕を叩き直すためにブログシステムでも開発しようと思う
記事の投稿・更新、認証、画像やファイルのアップロード、コメントの投稿、ページ分け、RSSフィードぐらいまで実装してデプロイできたらいいな
最近まともにプログラム書いてないのでなまった腕を叩き直すためにブログシステムでも開発しようと思う
記事の投稿・更新、認証、画像やファイルのアップロード、コメントの投稿、ページ分け、RSSフィードぐらいまで実装してデプロイできたらいいな
手を動かす前にデータベース設計考えとく
カテゴリとかタグとか使わないと思うし users と posts と comments があれば十分かな(一人で使うだろうから users も別になくていいけど)
無難にこんな感じでいいかな 最近の PostgreSQL って拡張機能使わなくても UUID 生成できたり色々便利になっててすごい
CREATE TABLE IF NOT EXISTS users (
id UUID DEFAULT gen_random_uuid(),
username VARCHAR(255) UNIQUE NOT NULL,
hashed_password VARCHAR(255) NOT NULL,
salt VARCHAR(255) NOT NULL,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS posts (
id UUID DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id),
title TEXT NOT NULL,
content TEXT NOT NULL,
is_deleted BOOLEAN DEFAULT FALSE,
is_published BOOLEAN DEFAULT TRUE,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS comments (
id UUID DEFAULT gen_random_uuid(),
post_id UUID NOT NULL REFERENCES posts(id),
author TEXT NOT NULL,
content TEXT NOT NULL,
is_deleted BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
インデックスも貼るよん とりあえず絶対使うとこだけ
CREATE INDEX idx_posts_created_at ON posts (created_at);
CREATE INDEX idx_comments_post_id ON comments (post_id);
ウヒョー
こういうの好き
支援
エロゲじゃなくてブログか
ウヒョ?
まだ?
SQL?本職の人かな
初心者の学習のしかたおしえて!
ブログシステム出来たら見せてね
>>5
日中は仕事だから夜中にしか作業できないんだ
YouTube とか見ながらのんびりやってるから遅いのは許してほしい
>>6
Web 系の開発はほとんど趣味でやってる
何をやりたいのかにもよるけどサイト作ってみたいなら HTML, CSS, JavaScript の入門書読むのがいいと思う
FC2 Web みたいなレンタルサーバーにできたものアップロードすれば簡単に作ったものネットに公開できるから何か作って NEP でスレ立てようぜ そしたら俺に教えられることなら教えるよ
https://web.fc2.com/
C++ でクソ早いアプリを組みたい気分なので Drogon っていう謎の Web フレームワークを使ってみることにした
ググっても全然情報なくてびびる
とりあえずローカルの Mac にインストール
https://github.com/drogonframework/drogon/wiki/ENG-02-Installation
基本的にマニュアル通りだけど結構ハマるポイントがあった
まず使いたいライブラリはビルドする前にインストールしとかないと組み込まれない
載ってるコマンドの git clone がリポジトリを過去バージョンまで全部ダウンロードしちゃうから --depth=1 -b v1.9.5 つけて欲しいバージョンだけ手元に来るようにしたほうがいい
Homebrew のインストール先を LDFLAGS に追加しとかないとリンカがライブラリを見つけられなくてビルド失敗する
export LDFLAGS="-L/opt/homebrew/lib $LDFLAGS"
やったー
https://i.imgur.com/khJZ2Ic.png
ボイラープレートを生成してくれるコマンドで今回は記事周りの API のコントローラを作成
drogon_ctl create controller -h api::v1::posts
ヘッダファイルでは METHOD_ADD マクロでルーティングの処理が書けて、リクエストを実際に処理するための関数を所定のシグネチャで宣言
あとはこの中身を実装すればもう API が完成ってわけか
べんり〜
https://i.imgur.com/3bIDtIN.png
>>8
死んだHTML5とCSSでクソダササイトを作って遊んでたんだけどjavascriptの勉強してみようかな
やっぱ入門書読むところからだよな
ありがと
記事の投稿の処理書きました
長々しく書いてるけどほとんどエラーハンドリング
何やってるか分かるようにコメントつけといたよ
https://i.imgur.com/nbRxNHU.png
https://i.imgur.com/5JxWtHa.png
実際に動かしてみた様子がこちら
これだけのことでも結構感動するね
https://i.imgur.com/J974rVN.mp4
データ受け取る所とかレスポンス送る所とか毎回これ書くのはしんどいから管理用のクラス作るよ
(地味ながらリクエストに redirect_url が入ってたら処理の後その URL にリダイレクトさせる仕組みも追加してる)
https://i.imgur.com/JVIVAH3.png
https://i.imgur.com/s3Qgvz4.png
これを使うと>>12と同じ処理がこんなに簡単に書けます
https://i.imgur.com/jdbhXJL.png
投稿した記事を見られる記事一覧ページ作っていくよ
drogon_ctl create controller -h index_controller で作った index_controller.cc をこんな感じに実装
("LIMIT $1 OFFSET $2" のバインド変数に渡す値の型は int じゃなくて std::string じゃないといけないってとこで小一時間つまづいてた…)
https://i.imgur.com/IKz7Msl.png
plain_index_view.csp でシンプルな HTML にデータベースから読み込んだデータを埋め込んで
https://i.imgur.com/klDb6RZ.png
見れた! やったぜ
https://i.imgur.com/EkYvNtA.png
>>15
今気付いたけどソート順逆じゃん…
SQL の ASC を DESC に置き換えんと
>>15
グンリューチちゃんめっちゃ圧かけてくるじゃん
ついでに背景桃色にしようぜ
ページネーション実装した
やりたいことは単純で最初と最後と前後いくつかのページを表示するだけなんだけどロジックに落とし込むのが意外と難しい
プログラミングの練習のお題にちょうどよさそう
https://i.imgur.com/cxSkm6D.png
https://i.imgur.com/uoazZ7T.png
思ったとおりに動いてて一安心
ついでに背景桃色にしたぜ
https://i.imgur.com/x27rQD1.mp4
すごいそれっぽくなってる!
まさかのC++