ft_irc
C++98で実装したIRCサーバー
概要
C++98でIRC(Internet Relay Chat)サーバーを実装するプロジェクト。3人チームで取り組み、複数クライアントの同時接続、チャンネルでの会話、プライベートメッセージ、チャンネル管理など13種のIRCコマンドに対応している。poll()によるノンブロッキングI/Oで多重化し、PING/PONGによるKeep-Alive機構、バッファ管理、タイムアウト検出まで実装した。
苦労・工夫した点
最も苦労したのは、各コマンドをRFCの仕様通りに実装することだった。IRCプロトコルの仕様はRFC 2812に定義されているが、コマンドごとに細かいエッジケースが多い。例えばパスワード不一致時にすぐ切断すべきか、ニックネームに許可される特殊文字は何か、チャンネルモードの一括変更でパラメータをどう対応付けるかなど、直感に反する仕様も少なくない。RFCを読み込み、既存のIRCサーバーの挙動も参考にしながら、一つずつ仕様を確認して実装を進めた。特にMODEコマンドは5つのモードそれぞれに設定・解除の2方向があり、一括操作のパース・検証・適用・通知を正しく処理する必要があり、584行の最大ファイルとなった。 3人チームでの開発では、429コミット、51ブランチ、100以上のPRという規模で開発を進めた。GitHub ActionsによるCI/CDを導入し、PRテンプレートでレビュープロセスを標準化した。minishell、miniRTでのペア開発の経験を踏まえて、チーム規模が大きくなっても運用できる開発プロセスを構築できた。
ポイント
コマンドパターンとファクトリメソッドを組み合わせた設計。各IRCコマンドを独立したクラスとして実装し、抽象基底クラスCommandの純粋仮想関数execute()を通じてポリモーフィズムを実現している。各コマンドクラスに静的ファクトリメソッドを持たせ、std::mapに登録するコマンドマップ方式により、新しいコマンドの追加が「クラスを作成 → ファクトリをマップに登録」の2ステップで済む拡張性の高い構造になっている。C++98の制約の中でこの設計を実現したことで、10個のコマンドをスムーズに実装できた。 Database → Client / Channelの全体設計もこだわった点。Databaseクラスがクライアントとチャンネルの状態を一元管理し、各コマンドはDatabaseを通じてデータにアクセスする。コマンドの実行結果はt_response構造体で返し、「何を」「誰に」「送るか」「切断するか」をデータとして表現することで、コマンドロジックとネットワークI/Oを完全に分離している。
他のプロジェクト
Urban Reflection
「JUMPSTARTER 2023 Tech by the Harbour」(香港)のアートインスタレーション
TOTO Technical Center Tokyo
TOTOテクニカルセンター東京のデジタルコンテンツ
Recursive Orchestra
HOTORIUM
安川メカトレック末松九機株式会社新社屋のアトリウム空間演出
AIR HUB TOKYO "Clean Air Vision”
パナソニック「AIR HUB TOKYO」のビジュアルサイネージ、タブレットアプリ
Reflective tree
六本木ヒルズ・ウエストウォークのクリスマスインスタレーション
sonus-oleum
WOW 25th Anniversary Exhibition - Unlearning the Visuals
ビジュアルデザインスタジオWOWの設立25周年を記念した展覧会
ft_transcendence
ブラウザで動作するリアルタイムオンラインお絵描き当てゲーム
Yakushiji Hikari Kyoya -inori-
meme nippon project新作歌舞伎舞踊の映像演出
Celvoke 2022 S/S Key visual
Celvoke 2022 S/S Makeup Collectionキービジュアル
miniRT
C言語で実装したレイトレーサー
Minishell
Bashの仕様に基づくシェルの再実装
NEM-PA Series M.2 2280 Gaming SSD
NEM-PA Series M.2 2280 Gaming SSDの初公開映像
Fluctuation landscape
The MixC(上海)の常設インスタレーション
Contour
ボリュメトリクスを用いたWOWオリジナルショートムービー
CodeHero by shibajuku
HTML + CSSリファレンスサイト
Virtual Event Platform Concept movie
ドコモの独自仮想空間「Virtual Event Platform」コンセプト映像
Moment
風の計測結果を3次元データに変換した彫刻作品
SFC Creative Week
大学のキャンパスを活用して学生主導で企画実施した展示会