Minishell

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

CShell

概要

Bashを基にした簡易シェルをC言語で実装するプロジェクト。2人のペアで取り組み、約3ヶ月間かけて開発。入力文字列の字句解析(レキサー)、抽象構文木への構文解析(パーサー)、ASTに基づくコマンド実行という3段階のパイプラインで処理を行う。パイプ、リダイレクション、環境変数展開、シグナルハンドリング、ヒアドキュメント、7種のビルトインコマンドに対応。

Minishell

苦労・工夫した点

初めてのチーム開発だったため、開発プロセスの構築から始める必要があった。GitHubのIssueでタスクを管理し、featureブランチで並行開発を行うワークフローを自分たちで設計した。担当範囲とファイルの境界を明確にしたことで、コンフリクトを最小限に抑えながら開発を進められた。 パーサーの実装ではASTのデータ構造の設計に最も苦労した。Bashの文献を調べ、パイプラインの構造を理解した上で、手書きのメモでノードの接続関係を具体的にイメージできるまで整理してから実装に入った。CMD ノードと PIPE ノードを union で同一の型に収める設計は、C言語で多態性を実現する方法として効果的に機能した。 シグナルハンドリングでは、プロンプト待機中・コマンド実行中・ヒアドキュメント入力中など5つの状態ごとに異なるシグナル処理が必要で、readlineライブラリとの連携も含めて状態管理が複雑だった。グローバル変数 g_signal を使ったシグナル情報の伝搬と、rl_done による readline の中断制御の組み合わせで解決した。

ポイント

再帰下降パーサーによるAST構築。入力文字列をトークン配列に分割した後、parse_pipe() → parse_cmd() の再帰構造でパイプラインを表現する木構造を構築している。トークン配列を直接実行するのではなく、ASTを経由することで、パイプラインの入れ子構造を自然に扱える設計になっている。 Bashの仕様への忠実な準拠。終了ステータスのエラーコード体系(0: 成功、2: 構文エラー、126: パーミッションエラー、127: コマンド未検出、128+N: シグナル終了)をBashに合わせて実装した。パイプライン中の終了ステータスは最後のコマンドのものを採用するなど、細部までBashの挙動を再現している。

他のプロジェクト

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

ft_irc

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

C++IRCNetwork

Celvoke 2022 S/S Key visual

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

VFXCommission

miniRT

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

CRay TracingGraphics

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