個人開発
学祭来場者管理ツール(開発中断)
友人の依頼で、学籍番号から来場者の学部・学科を自動で分類するWebツールの開発に取り組みました。 フロントエンドにNuxt、バックエンドにVapor、データベースにPostgreSQLを使い、それぞれの実装を進めました。学祭当日までに完成せず、開発を中断しています。
- 技術スタック: Nuxt, Vue.js, Vapor, PostgreSQL
iOSアプリ開発 — SwitchBot 非公式クライアントアプリ
SwitchBotの公式アプリを使う中で、デバイスへの接続確認が終わるまで操作できないことにもどかしさを感じ、非公式クライアントの開発を始めました。 接続確認をバックグラウンドで進めながら、すぐに操作できるアプリを目指しています。操作結果を先に画面へ反映する「楽観的UI(Optimistic UI)」を採用しています。
- 技術スタック: Swift, SwiftUI, SwitchBot API
OSS開発 - EasyGL
授業でC++・SDL2・OpenGLを使って3Dゲームを作る際、目的に合うライブラリが見つからず、自分でEasyGLを開発・公開しました。授業のゲームも、このライブラリを使って完成させました。
- 技術スタック: C++17, SDL2, OpenGL
- 概要: SDL2とOpenGLの操作をまとめた、ヘッダーファイルだけで利用できるグラフィックスライブラリ
- 主な機能:
- OBJモデルの読み込み・描画
- テクスチャマッピング・マルチライト照明
- カメラコントロール
- 2D図形・テキスト描画
詳細な設計
授業のゲーム制作で使いやすい設計: OpenGLの初期化やシェーダー管理をライブラリ内で扱い、セットアップ・モデル読み込み・描画をそれぞれ1つの関数で行える設計にしました。ヘッダーファイルだけで利用できる構成にしたのも、導入時のビルド設定を減らすためです。
GPUリソースを自動で解放する仕組み:
_EZ_Objectなどの構造体にOpenGLリソースを持たせ、std::shared_ptrで管理しています。参照がなくなるとデストラクタでGPUリソースを解放し、利用者が手動で解放する負担を減らしています。
