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

苦労・工夫した点
初めてのチーム開発だったため、開発プロセスの構築から始める必要があった。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」(香港)のアートインスタレーション
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新作歌舞伎舞踊の映像演出
ft_irc
C++98で実装したIRCサーバー
Celvoke 2022 S/S Key visual
Celvoke 2022 S/S Makeup Collectionキービジュアル
miniRT
C言語で実装したレイトレーサー
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
大学のキャンパスを活用して学生主導で企画実施した展示会