【就活】個人サイトをつくろう

あいさつ

Pozdrav! わたしです。
またしても2週間ぶりの記事。皆さんはお元気でしょうか?
さて、先日わたしは就活用の技術スタック作りを目的としたサイトを公開しました。
URLはこちらです。


今回はこのサイトの話をしていきます。

使用言語とか

OS

  • Debian 13
過去記事を参照してください。

使用言語

バックエンド

  •  PHP/Laravel
  •  MySQL
元々JavaをやっていたのでJavaでも良かったのですが、志望先の技術スタックに合わせるためにPHP/Laravelを採用。たぶんRubyでも良かったと思います。
MySQLは雰囲気で決めました。今回の規模感であればどのDBでも大して変わらないと思います。

フロントエンド

  • Vue/Nuxt.js
HTML、JS、CSSあたりはとても苦手(そういう理由でバックエンド志望です)なので、少しでも楽をするためにフレームワークを使いました。
PHPなのでBladeを使う択もありましたが今回はパス。
本当はNuxtならそれ自体でフルスタック開発が可能なのですが、そのことに気付いたのはPHPでバックエンドを作った後でした。
今回は画面表示およびAPIのゲートウェイとしてのみ使用しています。

サーバー

  • nginx
ンギンクスです。
Apacheも考えましたが、動的サイトならンギンクスの方が向いているとか聞いたような記憶。

使用しなかった技術

  • Docker
とりあえずサイトを作って公開することを優先したため導入できず。どこかで使い方を勉強しないといけない。
  • React
制作時の候補には入っていましたが、使用しませんでした。
jsが比較的苦手なので、文法がHTMLに近いVue系の方が個人的には書きやすいと感じました。
とはいえVueでもReactでも文法が違うだけでやることは同じなので、少なくともAI時代にあってはサイトを作って公開するまでの流れが理解できればどちらでもOKという理解。
実際に使用する機会があったらそのタイミングで勉強します。
  • Ruby on Rails
候補にはありましたが使用しませんでした。
言語が違ってもバックエンドでやることは同じであるはずなので、LaravelやJavaの経験があるならRoRも後から勉強できると思います。

やったこと

目標

  1. 志望先での使用技術をとりあえず使ってみる
  2. 過去の配信記録をカレンダーで見られるようにする
1については省略。
2が主目的です。ざっくり下の画像のようなものを作ろうとしていました。(作りました)


ついでに配信用のbot(discordinebot2)と連携して自動的に配信記録を付けるようにします。単にPOSTを飛ばすだけなのでそこまで難しくはないです。

要件

  1. カレンダーで過去の配信記録をまとめる
  2. 配信記録をクリックすると詳細が見られる
  3. 管理者が詳細画面から配信の情報を操作できる(メモの追加、記録の消去)
  4. 配信用botが自動で配信記録を作成し、それをPOSTで受け取って保存する
1-2についてはFullCalendarで実現します。たぶん一番簡単。

1-3で表示する情報については、PHP/Laravel・MySQLのバックエンドに保存しておきます。
ページにアクセスした際には、Nuxtサーバーからループバック通信でバックエンドを叩き、得られた情報を取得および表示します。
インターネット上からバックエンドを直接叩けないようにする意図でこの仕様にしていますが、もっと良い方法がありそうな気もします。

2の配信記録とは以下のものを指します。
  • 配信タイトル
  • カテゴリ
  • 開始時刻
  • 終了時刻
  • 経過時間
  • メモ
メモはMarkdown形式に対応させます。

3についてはログイン機能を設けて実現します。自前でログイン機能を作るほど信用できないものは無いと思うので、今回はTwitch Oauthを使いました。
usersテーブルを作って云々とかしても全然OKなのですが、管理者が自分1人かつ今後増える予定もなかったため、Twitch Oauthとtwitchのユーザー名だけで判定する方式で十分だと思います。

4ではNuxtをAPIゲートウェイとして使用し、Nuxt側で情報がbotから送信されたものか否かを判定し、判定が通ったらPHPに対してデータをPOSTし直します。
(こんなことをするぐらいなら、NuxtでMySQLを直接操作した方が良いと思います。)
botからの送信か否かを判定するため、POSTのHeaderにパスワード情報(非常に長いランダムな文字列)を付与し、これが一致した場合にのみPOSTを受け付ける仕様にしています。

ソースコードを公開しない前提であったため、面倒くさがってbotか判定するためのパスワードをnuxt-config.tsに書いています。(Oauthトークンは流石に.envに置いています)
セキュリティ上のアンチパターンな上に、これのせいでコードが公開できなくなっており悪いことしかありません。

※2026-08-07追記
……と記憶を頼りに書いていたのですが、改めてsrcを確認したらちゃんと.envに全部まとめてあったのでsrcを公開しました。

開発フロー

SQL以外大多数の技術がほぼ初見なので普通にAI駆動開発します。
ただし最終的にその技術を自力で使えなくてはどうしようもないので、Codexなどのエージェントは使用せず、あくまでもコーディング補助ツールとしてのみ使用しています。
(そもそも無職である今の経済状況でエージェントなんて使ったら破産してしまう、というのもあります)

LLMでこういうことが出来るようになったのは技術の進歩を感じますね。Stackoverflowあたりを必死に探していた時代(1年ほど前)とは隔世の感。初歩的なトラブルってStackoverflowに上がっていないことの方が多いんですよね……

手順としてはバックエンド→フロントエンドと積み上げる感じでやります。機能要件がおおよそ満たされたあたりでbot側に連携用のコードを追加し動作テストしました。

最終的な成果

冒頭に貼ったurlを参照してください。
とりあえず要件はTwitchログイン以外満たしたので満足です。

おわりに

そのうち自サイトに掲示板とかも生やしたいです。DB設計は考えたのでいずれ作ります。
おわり

※2026-07-04加筆 掲示板をつくる

ということで掲示板を作りました。完成品はこちら

よかったらいろいろ書いてってください。時代は匿名掲示板

設計

要件はジェネリック2chです。(説明放棄)
DB設計はこんな感じ。

Threads
  • id 整数 主キー 
  • name 文字列 NOT NULL
  • timestamps
Posts
  • thread_id 外部キー(threads.idから)
  • name 文字列(カキコ主の名前)
  • body TEXT
  • timestamps
2テーブルのかんたん設計です。まあ普通ですね。

トップからスレッドを立てる→立てたスレに自動で遷移→スレに書き込み
という感じの流れで操作します。挙動はどっちかというとDiscordとかのチャンネルに近いです。
最初の1カキコをトップからできるようにする場合、トランザクションとか考えないといけないのでちょっと面倒。

Markdownとかの特殊記法は未対応です。(将来的に対応予定)
URLについては自動で<a href="">になるようにしました。ロジックが思いつかずAIに投げました。JSってすごいですね。
AAを書き込めるようにしたさがあります。Markdown対応のついでに独自タグ([aa][/aa]みたいな)を実装する感じにしたい。

CSSについてはChatGPTに全部任せました。

2026-08-04追記

DDNS Nowで取っていたドメインをCloudflareに登録しました。
参考資料はこちら

おわり

そんな感じで今度こそおわりです。Sbogom! 

コメント

このブログの人気の投稿

【2026-05-16】所有衣装一覧

カクヨムに鬼才を見た

EDFのアイテム回収周りについて言語化したい