機械工学からフルスタック開発へ:物理システムが私のコードに与えた規律
FabtechやSVERIでの機械システム、公差、物理的制約の学びが、いかにして堅牢なWebアーキテクチャと優れたUI設計の基盤となったかを振り返ります。
私のエンジニアとしての出発点は、JavaScriptのフレームワークやリレーショナルデータベースではありませんでした。2018年、私はFabtech Technical Campusの実習工場で、ノギスやマイクロメーターを手に、鋼材の寸法を100分の1ミリ単位で計測していました。その後、パンダルプルのSVERI College of Engineeringで機械工学を学んでいた頃の日々は、熱力学、流体力学、材料力学、機械設計の計算で埋め尽くされていました。
当時、機械工学とソフトウェア開発はまったく無関係な別世界のように思えました。一方は質量、摩擦、熱、鋼鉄の歯車を扱い、もう一方は抽象的なテキスト、メモリ空間、ブラウザのDOMツリーを扱うからです。
しかし、フルスタックWeb開発やUI/UXデザインの世界に本格的に飛び込んだとき、私は機械工学からソフトウェア開発で最も重要となるスキルをすでに授かっていたことに気づきました。それは、**「現実の物理的制約下で考えるシステム思考」**です。
機械の「公差」とソフトウェアの「状態管理」
製造現場において、数学的に完璧な寸法など存在しません。直径25.00mmのシャフトを25.02mmのベアリングに収める場合、必ず「公差(許容誤差)」を指定します(例:+0.01mm / -0.00mm)。削りすぎれば隙間ができて振動で壊れ、削り足りなければ熱膨張で焼き付いて動かなくなります。
TypeScriptとReactでフロントエンドを書き始めたとき、私は全く同じ本質を目の当たりにしました。ソフトウェアにおける公差とは、型定義、バリデーション、そして状態の境界線そのものです。
- APIレスポンスが配列ではなく
nullを返したとき、UIは適切な空状態を表示できるか、それとも未処理例外で画面が真っ白にクラッシュするか。 - 想定外の文字列が入力されたり、0.05秒の間にボタンが連打されたとき、状態遷移はその振動に耐えられるか、それともデータが破損するか。
機械工学の訓練は、私から「都合のいい正常系だけを考える甘さ」を奪いました。物理の世界では部品は必ず振動し、摩耗し、熱を持ちます。Webの世界でもネットワークは途切れ、サーバーは遅延し、ユーザーは想定外の操作をします。最悪のケースを想定して設計することは臆病さではなく、エンジニアとしての最低限のたしなみです。
応力集中とパフォーマンスのボトルネック
材料力学で誰もが学ぶ重要な概念に**「応力集中」**があります。引張力を受ける角材の角を直角に削ると、その角の頂点に力が極端に集中し、そこから金属疲労による亀裂が生じます。熟練したエンジニアは、角に必ず滑らかなアール(フィレット)を付けて力を均等に逃がします。
Webの世界でも全く同じ応力集中が起きます。その最大の発生源が、ブラウザのメインスレッドです。
[メインスレッド] -> 重い解析処理 -> 同期的なDOM変更 -> 強制リフロー -> 画面のカクつき
LS PDF や LS Image Compressor を開発していた際、数メガバイトのファイルをメインスレッドでそのまま処理することは、鋼材に直角の切れ込みを入れるのと同じでした。ブラウザが固まり、ボタンの反応が遅れ、画面がぎこちなく揺れてしまうのです。
力を逃がす「フィレット」の役割を果たしたのが以下の工夫です:
- Web Workers を導入し、重い計算を画面描画の外へ逃がす。
- 同期的なループ処理を
requestIdleCallbackや非同期ジェネレータで細かく分割する。 - バイナリ操作に
Uint8ArrayなどのTypedArrayを徹底活用し、ガベージコレクションの負荷を抑える。
CPUサイクルとフレームの描画時間は有限な物理資源であると理解した瞬間、Webの高速化は勘ではなく論理的な設計になります。
機械の組み立て構造とコンポーネント設計
減速機を設計するとき、一つの巨大な鉄の塊から削り出すことはありません。歯車、軸、ベアリング、オイルシールをそれぞれ独立した規格品として設計し、正確な嵌合部で組み立てます。歯車が1枚欠けたら、その歯車だけを交換すればよいのです。
私は LadeStack や多言語Astroサイトを設計する際にも、コンポーネントを標準規格の機械部品のように扱っています:
- 明確な結合部: コンポーネントは、自分の責務に必要な情報以外を知るべきではありません。無秩序なグローバル状態の共有は、ベアリングを車軸に直接溶接してしまうようなものです。
- 交換可能なモジュール性: 1つの機能やUI部品を変更しても、隣り合うサブシステムに影響を与えない設計を徹底します。
- 小手先の器用さより保守性: 最も優れた機械は、どこにでもある普通のスパナで修理できるものです。最良のコードも、半年後に他の人が読んで迷わず直せるコードです。
工学とデザインを繋ぐ視点
エンジニアリングとUI/UXデザインは、論理と感性という正反対のものとして語られがちです。しかし私はそうは思いません。
優れたデザインとは、人間の認知と心理に配慮した「工学」そのものです。旋盤の操作レバーが直感的な位置にあり、目盛りが読みやすく、握りやすいグリップが必要であるのと同様に、デジタル画面にも視線誘導を助けるタイポグラフィ、キーボード操作性、妥当な初期値、明確なエラー表示が不可欠です。
パンダルプルの鉄工実習から始まり、プネでフルスタック製品を届けるようになった今も、扱う対象が変わっただけで本質は全く変わっていません。システムの法則を理解し、制約を味方につけ、無駄な摩擦を削ぎ落として、誰もが安心して頼れる道具を作り続けること。それが私のものづくりの根底にあります。