プログラミングのリハビリも兼ねてブログシステム自作するよ

最新10レス
1以下、名無しにかわりましてVIPがお送りします:2024/06/18(火) 22:27:15.39 ID:lh0gmPQq

最近まともにプログラム書いてないのでなまった腕を叩き直すためにブログシステムでも開発しようと思う
記事の投稿・更新、認証、画像やファイルのアップロード、コメントの投稿、ページ分け、RSSフィードぐらいまで実装してデプロイできたらいいな

2以下、名無しにかわりましてVIPがお送りします:2024/06/18(火) 23:37:49.20 ID:lh0gmPQq

手を動かす前にデータベース設計考えとく
カテゴリとかタグとか使わないと思うし 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);

3以下、名無しにかわりましてVIPがお送りします:2024/06/18(火) 23:53:53.98 ID:fsf6eWYJ

ウヒョー
こういうの好き
支援

4以下、名無しにかわりましてVIPがお送りします:2024/06/19(水) 02:56:35.82 ID:bPt/CqKV

エロゲじゃなくてブログか

5以下、名無しにかわりましてVIPがお送りします:2024/06/19(水) 06:12:55.94 ID:kGDhXl5u

ウヒョ?
まだ?

6以下、名無しにかわりましてVIPがお送りします:2024/06/19(水) 18:56:42.81 ID:8kGkHo7Q

SQL?本職の人かな
初心者の学習のしかたおしえて!

7以下、名無しにかわりましてVIPがお送りします:2024/06/19(水) 20:27:09.95 ID:Ot1sPlRJ

ブログシステム出来たら見せてね

8以下、名無しにかわりましてVIPがお送りします:2024/06/20(木) 01:52:40.41 ID:BhNYPwLY

>>5
日中は仕事だから夜中にしか作業できないんだ
YouTube とか見ながらのんびりやってるから遅いのは許してほしい

>>6
Web 系の開発はほとんど趣味でやってる
何をやりたいのかにもよるけどサイト作ってみたいなら HTML, CSS, JavaScript の入門書読むのがいいと思う
FC2 Web みたいなレンタルサーバーにできたものアップロードすれば簡単に作ったものネットに公開できるから何か作って NEP でスレ立てようぜ そしたら俺に教えられることなら教えるよ
https://web.fc2.com/

9以下、名無しにかわりましてVIPがお送りします:2024/06/20(木) 02:23:55.14 ID:BhNYPwLY

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

10以下、名無しにかわりましてVIPがお送りします:2024/06/20(木) 03:05:55.65 ID:BhNYPwLY

ボイラープレートを生成してくれるコマンドで今回は記事周りの API のコントローラを作成
drogon_ctl create controller -h api::v1::posts

ヘッダファイルでは METHOD_ADD マクロでルーティングの処理が書けて、リクエストを実際に処理するための関数を所定のシグネチャで宣言
あとはこの中身を実装すればもう API が完成ってわけか
べんり〜
https://i.imgur.com/3bIDtIN.png

11以下、名無しにかわりましてVIPがお送りします:2024/06/20(木) 18:24:00.73 ID:wnG89nw+

>>8
死んだHTML5とCSSでクソダササイトを作って遊んでたんだけどjavascriptの勉強してみようかな
やっぱ入門書読むところからだよな
ありがと

12以下、名無しにかわりましてVIPがお送りします:2024/06/21(金) 01:01:45.54 ID:oKm6P36G

記事の投稿の処理書きました
長々しく書いてるけどほとんどエラーハンドリング
何やってるか分かるようにコメントつけといたよ
https://i.imgur.com/nbRxNHU.png
https://i.imgur.com/5JxWtHa.png

13以下、名無しにかわりましてVIPがお送りします:2024/06/21(金) 01:05:15.45 ID:oKm6P36G

実際に動かしてみた様子がこちら
これだけのことでも結構感動するね
https://i.imgur.com/J974rVN.mp4

14以下、名無しにかわりましてVIPがお送りします:2024/06/22(土) 17:41:48.47 ID:kmo/xmIS

データ受け取る所とかレスポンス送る所とか毎回これ書くのはしんどいから管理用のクラス作るよ
(地味ながらリクエストに redirect_url が入ってたら処理の後その URL にリダイレクトさせる仕組みも追加してる)
https://i.imgur.com/JVIVAH3.png
https://i.imgur.com/s3Qgvz4.png

これを使うと>>12と同じ処理がこんなに簡単に書けます
https://i.imgur.com/jdbhXJL.png

15以下、名無しにかわりましてVIPがお送りします:2024/06/22(土) 21:54:11.87 ID:kmo/xmIS

投稿した記事を見られる記事一覧ページ作っていくよ
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

16以下、名無しにかわりましてVIPがお送りします:2024/06/22(土) 21:56:15.63 ID:kmo/xmIS

>>15
今気付いたけどソート順逆じゃん…
SQL の ASC を DESC に置き換えんと

17以下、名無しにかわりましてVIPがお送りします:2024/06/22(土) 22:08:39.93 ID:/eeSRfn2

>>15
グンリューチちゃんめっちゃ圧かけてくるじゃん

18以下、名無しにかわりましてVIPがお送りします:2024/06/22(土) 23:59:32.59 ID:FOoZ9hUF

ついでに背景桃色にしようぜ

19以下、名無しにかわりましてVIPがお送りします:2024/06/23(日) 01:09:39.97 ID:OBXgbau6

ページネーション実装した
やりたいことは単純で最初と最後と前後いくつかのページを表示するだけなんだけどロジックに落とし込むのが意外と難しい
プログラミングの練習のお題にちょうどよさそう
https://i.imgur.com/cxSkm6D.png
https://i.imgur.com/uoazZ7T.png

思ったとおりに動いてて一安心
ついでに背景桃色にしたぜ
https://i.imgur.com/x27rQD1.mp4

20以下、名無しにかわりましてVIPがお送りします:2024/06/23(日) 09:49:56.63 ID:cCZHCw0l

すごいそれっぽくなってる!

21以下、名無しにかわりましてVIPがお送りします:2024/07/17(水) 08:53:04.23 ID:4j+7mPxo

まさかのC++


レスを書き込む