このブログでも使っています。備忘録として残しておきます 概要 HUGO は Go 言語で書かれた高速な静的サイトジェネレータ(SSG)です。Markdown ファイルから HTML サイトを生成し、テーマを使用することで簡単に美しいサイトを構築できます。 インストール Linux / macOS # Homebrew を使う場合(推奨) brew install hugo # または、バイナリを直接ダウンロード https://github.com/gohugoio/hugo/releases Windows # Chocolatey を使う場合 choco install hugo # Scoop を使う場合 scoop install hugo バージョン確認 hugo version 新しいサイトの作成 # 新規プロジェクトを作成 hugo new site my-site cd my-site # Git を初期化(推奨) git init 作成されるディレクトリ構造: my-site/ ├── archetypes/ # コンテンツテンプレート ├── content/ # コンテンツ(Markdown ファイル) ├── layouts/ # カスタムレイアウト ├── static/ # 静的ファイル(CSS, JS, 画像など) ├── themes/ # テーマディレクトリ └── hugo.toml # サイト設定ファイル サイト設定(hugo.toml) 基本的な設定例: ...
Discordでリアルタイム歌詞表示!カラオケBotをPythonで自作した話
Discordでカラオケしたいじゃん? はじめに 友人たちとDiscordでボイスチャットをしながら「カラオケっぽいことができたら面白くない?」という話になったのがきっかけです。 既存の音楽Botはたくさんありますが、歌詞をリアルタイムで表示してくれるものはなかなか見当たりませんでした。そこで「YouTube動画の字幕データを使えばできるのでは?」と思い、自作することにしました。 最終的に完成したBotの主な機能は以下の通りです。 YouTubeの音声をボイスチャンネルでストリーミング再生 再生に同期した歌詞(字幕)をリアルタイムでEmbedに表示 キュー・プレイリスト管理(追加・スキップ・削除など) 環境 項目 内容 OS Raspberry Pi OS (Debian Bookworm) Python 3.13 主要ライブラリ discord.py 2.x、yt-dlp、youtube-transcript-api、FFmpeg 実行管理 systemd 認証 YouTubeのCookieファイル(cookies.txt)でBot検出回避 依存ライブラリはvenvで管理しています。 python3 -m venv .venv source .venv/bin/activate pip install discord.py yt-dlp youtube-transcript-api nest-asyncio 仕組みの概要 Bot全体の処理フローはシンプルです。 ユーザーが /karaoke <URL> を入力 ↓ yt-dlp で音声ストリームURLを取得 ↓ youtube-transcript-api で字幕データ(開始時刻・テキスト)を取得 ↓ FFmpegOpusAudio でボイスチャンネルに流しながら 字幕の start タイムスタンプに合わせて asyncio.sleep → Embed を更新 字幕データには各セリフの**開始時刻(秒)**が付いているので、再生開始時刻を time.time() で記録しておけば、差分を計算してピッタリのタイミングで表示を切り替えられます。 実装のポイント 1. 歌詞の同期表示 一番の肝になる部分です。字幕データは以下のような構造を持っています。 # youtube-transcript-api が返すデータのイメージ [ FetchedTranscriptSnippet(text='夜に駆ける', start=2.48, duration=3.2), FetchedTranscriptSnippet(text='あなたと出会えた', start=5.84, duration=2.7), ... ] これを使い、再生開始時刻との差分で asyncio.sleep を挟みながら順番にEmbedを更新しています。 ...
Proxmox上のマイクラサーバーをDjangoで一元管理!atコマンドとRCONを駆使した「司令塔」パネルの構築
自宅サーバー運用の効率化:Djangoによる複数サーバー管理の実践 1. 導入 自宅でProxmoxなどの仮想化環境を運用し、複数のMinecraftサーバー(PaperMC等)を立てていると、以下のような課題に直面します。 管理が面倒: 各VMにSSHでログインしてコマンドを叩くのが手間。 再起動予約のブラックボックス化: atコマンドで再起動を予約しても、どのサーバーにいつ予約を入れたか忘れてしまう。 ゲーム内への通知不足: サーバーの停止や再起動を、ログイン中のプレイヤーにスマートに伝えたい。 ログ確認の心理的ハードル: 異常時にlatest.logを見に行く作業をブラウザで完結させたい。 これらの課題を解決するため、Djangoをベースに、複数サーバーの「即時操作」「ログ取得」「スケジュール管理」を一括で行えるコントロールパネルを構築しました。 2. 環境 今回のシステム構成は以下の通りです。 Control Server (Apacheサーバー兼用): OS: Ubuntu Language: Python 3.13 Framework: Django 6.0 Target Servers (Town, Live等 / Proxmox LXC): OS: Linux (Debian/Ubuntu) Software: Minecraft (PaperMC) Management: systemctl (Service化済み) Infrastructure: Proxmox VE (10.2.x.x ネットワーク) 3. Technical Details ① データベースとatコマンドの同期(OSレイヤーの制御) 本プロジェクトの肝は、DjangoのデータベースとLinux標準のatジョブをどう紐付けるかという点にありました。 単にDBに「5分後に再起動」と保存するだけでは、サーバー側でジョブが失敗した際に不整合が起きます。 そこで、以下のフローを実装しました。 SSH経由でatを発行: subprocessでコマンドを投げ、標準エラー出力から job <ID> を抽出。 Job IDの永続化: 抽出したIDをモデルの at_job_id フィールドに保存。 双方向の同期: atq コマンドの結果を定期的に(または表示時に)取得し、既に消えているジョブはDB側でも「実行済み」に更新。 ② RCONによるリアルタイム介入(アプリケーションレイヤーの制御) OSコマンドだけでは、ゲーム内で遊んでいるプレイヤーへ配慮が欠けてしまいます。そこで、**RCON(Remote Console)**プロトコルを実装し、Minecraftサーバーの内部へ直接命令を送れるようにしました。 ...
はじめてのブログ:自己紹介と今後の展望
はじめに こんにちは!私のブログへようこそ。 まずは、このブログを開設した目的や私自身のバックグラウンド、そして現在熱中している技術についてお話ししたいと思います。最初の投稿ということで、少し長くなりますが自己紹介をさせてください。 自己紹介 名前: キーマ 居住地: 京都市 職業: 学生 趣味 サーバー ゲーム 音楽 音MAD ブログの説明 目的 日々の技術的な備忘録を残す 自分のアウトプットの習慣をつける 興味のある技術について深掘りして共有する 今弄っている技術 サーバー・インフラ関連 Proxmox Docker Ubuntu Web開発 HTML / CSS / JavaScript PHP Apache / Nginx Django Hugo 管理ツール RCON ゲームサーバー関連 Paper / Velocity (Minecraft) Java 他にも触っているものはいくつかありますが、メインはこのあたりです。 サーバーに興味を持ったきっかけ 2022年、私は一本の動画に出会いました。 当時、Minecraft公式のサーバーホスティングサービス「Realms」の月額料金に「少し高いな……」と感じていた私にとって、その動画は衝撃的でした。 その動画が、うんちゃまさんの自宅サーバー紹介動画です。 「自宅サーバー」——なんて美しい響きでしょうか。 とはいえ、当時の私は右も左もわからない状態。それから約2年間、うんちゃまさんの動画や過去のアーカイブをひたすら視聴し、知識だけを蓄える日々を過ごしました。 運命の秋葉原旅行と「相棒」との出会い 転機は、人生2度目の秋葉原旅行で訪れました。 事前にリサーチしていた中古PCショップを巡っていたところ、驚きの光景が目に飛び込んできました。 なんと、Dell Vostro 3268(第7世代 Intel Core i5 / メモリ8GB)がわずか5,000円。 学生の私にとって、これ以上の「入門機」はありません。即決で購入しました。 帰りの新幹線ではProxmoxについて調べ尽くし、帰宅してすぐにUSBインストーラーを作成。セットアップを完了させ、念願のマイクラサーバーを構築しました。 最初は右も左もわからず、OS丸ごと仮想化する**仮想マシン(VM)**として立てていました。 試行錯誤の日々と「コンテナ」との遭遇 VMを立てては壊し、Linuxのコマンドと格闘する毎日。ようやく公開に漕ぎ着けたサーバーは、1日あたり1〜2人程度の小規模なものでしたが、自分で管理する空間に誰かが遊びに来てくれることに、筆舌に尽くしがたいやりがいを感じました。 そんな運用を続けて1年が経った頃、Proxmoxの管理画面にある「CTを作成」というボタンの真価に気づきます。 これが **LXC(Linux Containers)**との出会いでした。 VMがハードウェア全体をエミュレートするのに対し、コンテナはホストOSのリソースを共有するため、オーバーヘッドが極めて小さいのが特徴です。 ...