既存サイトにSEO対策もりもり詰め込んだ改修サイト、手を動かしてからはだいたい10日ぐらいで作れた。脳内設計が形になるまでを含むともっと長いとは思うけど
想像よりは短くすんだけどそこそこ大変だった
構成
Next.js + FastAPI + MySQL
で作った。
デザインはMUI、ウェブサーバはnginxにした。SSLはhttps-portal(正式名称わからん)で対応した。あとスクレイピングはSelenium使った
https-portalはnginxを持ったdocker imageなので、構成的にnginxが二重になってしまっているのが正直きもすぎる。とはいえSSL対応の知識がない + 学習がめんどかったので簡単に済むhttps-portalを選んだ感じ。
FastAPIとても良かった
今回SeleniumからDBにデータ突っ込むにあたってAPIを用意するようにした。
なのでAPIの量がいつもの開発より多めになったのだけど、FastAPIの自動ドキュメント生成が強すぎてかなり楽だった。
SwaggerとRedocが生成されるのだけど、Swagger経由でpost出来たりするのがめちゃ楽。exampleとか用意してあげるとpostするときに毎回値を作ったりなんて必要もないのが楽。
response_modelとしてschema書いてあげると自動的にバリデーションしてくれるのも良き。
Laravelに比べたら格段にスモールなのもいい(LaravelをAPIとしてしか使ってなかったので、API以外の機能を持つフォルダ等を無駄だしうざいなぁと思っていた)
問題を強いて言うならスキーマ駆動開発が慣れてなくてむずかったなと言うぐらい。認識的にAPIレスポンスやリクエストをベースにデータベース設計とかもやっていくことになるんだけど、機能ベースというのが中々ムズいなと思った感じ。
SQLAlchemy全然わかんない
ORMとしてSQLAlchemyというものを採用したのだけど、ver1.4以降の2.0Styleとかいう書き方を使うようにした結果、情報量が少なすぎて死んでた。
公式ドキュメントを調べてもAsyncSessionを使う場合の書き方が全然わからず、1対多対多みたいなテーブル結合やるときのqueryどうすんねん…ってなってた。
なんやかんやなんとかなりはしたし、慣れるとかなり書きやすい印象はあったりした。
あと今度作るときはDBをpostgresにしてみようかなとか思った
Next.jsよい
久々に書いたけどNuxtよりNextのが好きかもなぁと思った。
そこまで大きなプロジェクトではないというのもあるかもしれないけど、コード構造がシンプルにしやすくて良いなという印象。
Nuxtは簡単なんだけど、だからこそ突き詰めていくと不明瞭なところがでてきて逆にしんどい…みたいなことが発生するイメージ。
単純にNuxtは型付けするバージョンで書いてなくて、Nextはtypescriptで書いたからとかもあるかもしれない。typescriptは補完が効きまくって気持ちが良い。jsonのやり取りが発生する場面とかなおさら
MUIもよい
使いやすかったし、デザインのコストをかなり抑えられた。
リリースした後にLightHouseチェックしてみてスコアかすだったら掌返すかもしれない。
tocbot良かった
目次生成したかったので採用した。
だいぶ良い。
docker楽しい
だいぶ分かったような気がするので今まで以上に便利度がアップした
やっぱ「分かる = 楽しい」だよなぁと思う
Seleniumでスクレイピングコード書くときの開発体験はクソ
Seleniumをdockerで動かすこと自体がそこそこうざいし、Selenium自体もわりとうざい。とはいえSPAから文言抜くならSeleniumしかない(ないよね…?あったら教えてほしすぎる)と思っているので仕方なし。
しかしSeleniumでスクレイピング用のコード書くのは真っ黒な便所を掃除しろと言われたときのような忌避感がある
対象サイトの構造に影響を強く受けるし、類似ページを順繰りにスクレイピングしようと思った時、要素があったりなかったりされると例外処理をゴリゴリ書く羽目になって本当にクソ(さらに言えばそういった例外把握にかなり時間を取られるのもクソ)
とはいえシステムの根幹部分ではあるのでちゃんとやらなきゃいけないのも非常にクソだなぁと思う。
※なお、スクレイピングするやつがそもそもクソとかいう苦情は受け付けておりません。
SEOちょっと楽しい
コンテンツを自分で書いてた頃はマジでクソだったけど、プログラマティックにコンテンツを生成するのであればPDCAを高速で回せるのが良い。精神的負担も主観的にはかなり低いし。
辛いところがなくなると、SEOは仕組みをハックしたらお金がもらえるゲームと化すのでそこそこ楽しい。
ただこれはうまくいく兆しが少なからずあるからなので、希望ゼロな状態だったらクソゲーって言ってたとは思う。
---
そんな感じ。
ちなみに出来たふうに書いてるけど、残タスクとしてアクセス解析系入れるのと、本番環境用に諸々の設定を変更する作業残ってたりする(後デプロイ)。まあでも今日中に終わるっしょ多分
今回は自分の知識の中でSEO対策として切れるカードは全部切ったつもりなので、これでだめだったら結構困る。一応そうなった時のためにclarity入れてコンテンツ改善をしやすくしておこうというのはあったりする。
現状であれこれ考えても何もわからないので、とりあえず投げるしかないっすね。
あと、index促進にindexing apiを使うサイトと、使わないサイトで2つ作ろうかなという予定。使う方を一応メインと考えて、使わない方はメインをリリースした後にコンテンツを再度用意して作る予定
indexing api使う場合、使わない場合でどんな差がつくかの情報は今後の糧にだいぶなりそうな気がしているのでちゃんと記録しておきたいなという次第。
おわり
---
Q. 開発っていつやってるの?
A. 帰宅後と仕事中、つまりほぼ全ての使える時間。仕事はちょうど長期スケージュールのタスク振られたので、速攻で終わらせて「長めに期間割り振られてるタスクだけあってやっぱ大変ですね…!まだまだ終わらないです!」みたいにしてずっと自分の開発やってた。