個人開発
学祭来場者管理ツール(開発中断)
友人の依頼で、大学の学祭に来場した学生の学籍番号を入力すると学部・学科ごとに自動で分類するWebツールを開発しました。 フロントエンドにNuxt、バックエンドにVapor、データベースにPostgreSQLを使ったフルスタック構成で取り組みましたが、学祭当日までに完成させることができませんでした。
- 技術スタック: Nuxt, Vue.js, Vapor, PostgreSQL
- 概要: 学籍番号から学部・学科を判別し来場者を管理するWebツール
iOSアプリ開発 — SwitchBot 非公式クライアントアプリ
公式アプリはデバイスへの接続確認が完了するまで操作できない仕様になっており、即時操作できないもどかしさを感じていました。 楽観的UI(Optimistic UI)を採用し、接続確認をバックグラウンドで進めながらユーザーが即座に操作できる体験を実現するために開発を始めました。
- 技術スタック: Swift, SwiftUI, SwitchBot API
- 概要: SwitchBot公式アプリの操作性を改善する非公式クライアントアプリ
OSS開発 - EasyGL
学校の授業でSDL2とOpenGLを使った3DゲームをC++で開発する機会があり、開発に使えるライブラリを探しましたが適切なものが見つかりませんでした。 そこで自分で作ることにし、EasyGLとして公開しました。実際にこのライブラリを使って授業のゲームも完成させました。
- 技術スタック: C++17, SDL2, OpenGL
- 概要: SDL2とOpenGLをラップしたヘッダーオンリーのグラフィックスライブラリ
- 主な機能:
- OBJモデルの読み込み・描画
- テクスチャマッピング・マルチライト照明
- カメラコントロール
- 2D図形・テキスト描画
詳細な設計
「大学生でも扱える」をコンセプトに: OpenGLは初期化やシェーダ管理など、3D表示に至るまでの手順が複雑です。EasyGLはそれらを完全に隠蔽し、セットアップ・モデル読み込み・描画をそれぞれ1関数で完結できる設計にしました。ヘッダーオンリーにしたのも、ビルド設定を不要にして導入コストを下げるためです。
自動リソース管理による安全な設計: 内部では
_EZ_Objectなどのstructに OpenGLリソースを持たせ、それをstd::shared_ptrでラップしています。どこからも参照されなくなった時点でデストラクタが呼ばれ、GPUリソースの解放などの終了処理が自動で実行されます。利用者がリソース管理を意識しなくてもメモリ安全に扱えるよう設計しました。
