ft_irc

C++98で実装したIRCサーバー

C++IRCNetwork

概要

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」(香港)のアートインスタレーション

Art InstallationCommission

TOTO Technical Center Tokyo

TOTOテクニカルセンター東京のデジタルコンテンツ

Interactive SignageApp DevelopmentCommission

Recursive Orchestra

Live StageAICommission

HOTORIUM

安川メカトレック末松九機株式会社新社屋のアトリウム空間演出

Art InstallationCommission

AIR HUB TOKYO "Clean Air Vision”

パナソニック「AIR HUB TOKYO」のビジュアルサイネージ、タブレットアプリ

Interactive SignageApp DevelopmentCommission

Reflective tree

六本木ヒルズ・ウエストウォークのクリスマスインスタレーション

Art InstallationKineticCommission

sonus-oleum

Live StageArt InstallationOriginal

WOW 25th Anniversary Exhibition - Unlearning the Visuals

ビジュアルデザインスタジオWOWの設立25周年を記念した展覧会

ExhibitionArt InstallationOriginal

ft_transcendence

ブラウザで動作するリアルタイムオンラインお絵描き当てゲーム

Web AppTypeScriptReactFastityNetworkGame

Yakushiji Hikari Kyoya -inori-

meme nippon project新作歌舞伎舞踊の映像演出

Live StageCommission

Celvoke 2022 S/S Key visual

Celvoke 2022 S/S Makeup Collectionキービジュアル

VFXCommission

miniRT

C言語で実装したレイトレーサー

CRay TracingGraphics

Minishell

Bashの仕様に基づくシェルの再実装

CShell

NEM-PA Series M.2 2280 Gaming SSD

NEM-PA Series M.2 2280 Gaming SSDの初公開映像

Full-CG VideoCommission

Fluctuation landscape

The MixC(上海)の常設インスタレーション

Art InstallationCommission

Contour

ボリュメトリクスを用いたWOWオリジナルショートムービー

Full-CG VideoCommission

CodeHero by shibajuku

HTML + CSSリファレンスサイト

WebsiteHTMLCSS

Virtual Event Platform Concept movie

ドコモの独自仮想空間「Virtual Event Platform」コンセプト映像

Live ActionVFXCommission

Moment

風の計測結果を3次元データに変換した彫刻作品

Art InstallationC++SimulationCAD

SFC Creative Week

大学のキャンパスを活用して学生主導で企画実施した展示会

Exhibition