見出し画像

CADDiの技術的変遷、C++からRustへ

どうも、CADDiでC++エンジニアとして働いております、いなむのみたまと申すものです。雇用されてからずっと、3次元CADの解析というR&D的なことをやっています。

教職をやめてエンジニアとしてCADDiに転職してから1年半ほど経ちました。今回はCADDiの技術的な変遷をお話しようと思う。

どうでもいいけどnoteがくそ使いにくい。二度と使いたくない。

基礎知識

CADDiは板金・金属加工の発注をお受し、製造管理、お届けまで行うサービスです。

エンジニア向けのページがありますので技術的なことの現状はここを見るとわかります。

実は、CADDiには「3次元データでの自動お見積り」というものがあります。自動見積りは大きく分けて2段階あり、一つが形状解析から工程を割り出す部分、もう一つが工程から見積り金額を割り出す部分です。私は前者の3次元データの形状解析を実装しています。

割と最近(2019年8月くらい?)に発足した社内ツールを作っているチームもあります。というかこちらにほぼ全員のエンジニアが所属しています。

キャディの技術的変遷

noteが使いにくいので雑に書くことにした。わざわざ画像作るのが非常にめんどくさいしHTMLタグなんて書いてられん。

言語だけで言うとこんな感じだろうか。

(浅草初期) C++, Python, JavaScript
(浅草後期) C++, Python, TypeScript, Java
(蔵前現在) C++, Python, TypeScript, Rust

僕がジョインしたときはオフィスは浅草でしばらくエンジニアが5人ほどでした。その頃はC++とPythonで諸々があってVue.jsでフロントが書かれていてK8sとかが使われていた気がします。

浅草オフィスが狭くなり、蔵前に移転したのが2019年の8月頃で、その頃にはエンジニアが十数人という感じであり、新たに社内プロダクトが発足して様々な要素技術を組み合わせて開発されるようになり、CI/CDやチームマネジメントも整備されていきました。

なんやかんやあって、こんな感じになりました。

画像3

ところでこのロゴいくつ知ってますか?僕は2,3個知らないのがありました。全部わかる人は多分変態です。

以下、自分視点で書いていきます。

Twitterで誘われリモートで参加

世の中ではC++11が使われており、C++14に緩やかに移行する中、最新のC++規格であるC++17で開発をしているという話をTwitterのDMでいただきました。とりあえず興味を示しオンラインでCTOと面接した後、大阪でCEOと食事をしました。C++とけん玉についてひたすら熱く語り続け、なぜか採用になりました。

当時、CTOと僕ともうひとりしかフルタイムのエンジニアがおらず3人でした。その全員で板金の3次元CAD図面の解析を完成させるべく頑張っていました。最初2週間くらいはBRepなどのCADの内部実装を通話で必死に教えてもらいながら大阪からリモートでやっておりました。流石に効率悪いため東京に来てくれと言われマンスリーマンションを借りてもらい東京へ。

図面を解析するのには、CADを読み解く必要があります。そのために利用するライブラリがOpen Cascade Technologyです。

このOpen Cascade TechnologyがC++製のため開発言語C++17を採用しており、データはGoogle Protocol Buffer (protobuf)で管理、周りとはPythonで繋がれているという感じでした。みんなでC++17で頑張っていました。

CTOが作ったものをベースに必要機能を追加。動くもの(β版)を作りきり、10月の展示会に向け奔走。

浅草オフィス時代

浅草のオフィスがかなり狭くなってきたころの写真。

画像1

なんだかんだそのまま入社。社員番号007番。

9月末になんとか実装を終え、実際に図面を解析できる雰囲気までこぎつけることに成功。

1月まで板金の解析を安定させるためバグつぶしとβ版で未実装だった機能の実装に着手、既存の機能のバグはもうひとりの実装者に任せつつ新機能は僕が気合で全部実装しました。

このあたりでmitama-cpp-resultというRustのResultをC++でも使える感じのライブラリを作ったり、range-v3を導入したりしてモダンな感じでサクッと実装できるようにしていきました。

3月には坂井さんを加え今動いているものとほぼ変わらないものがリリースされました。このとき、リベースをミスしている事に気が付かずdevelopにforce pushしました。同僚のローカルから再びforce pushしてもらいました。気をつけましょう。(何故か同僚の方が焦っており、逆に冷静になった私が同僚のローカルに正しいGitの歴史がまだ残っていることを教えていた)。

この頃にBitbucketからGitHubにソース管理が移行しています。また、CircleCIを用いた自動テスト環境が整えられました。

この頃、リグレッションテストを作りました。リグレッションとは、master版で解析できていたものがdevelop版では解析できないことです。CircleCIのschedule実行で毎朝行われています。このためのテストツール群を作るため(僕の一存で)投入された言語がRustです。

現在、CADDiで最も使われている言語はRustです。私は日頃から「Rustを使おうや」と叫び続けていましたから、非常に嬉しい限りです。

11月頃にはずっと一緒に形状解析を実装してきた木村さんが見積もりの実装へ。僕は見積もり計算の構造化ログを収集するためのライブラリを書いてお手伝いしました。

蔵前オフィス時代(現在)

蔵前に遷都して快適になった。

画像2

引っ越した後くらいのタイミングで社内プロダクトの開発が本格化しました。坂井さんが吸収され、5月に入社しトレーニングしていた高橋さんが本格的に参戦。後の8月に入社することになるバイトの田中さんも参戦し、3人でCAD解析チームはR&Dを始めました。

このとき導入したライブラリがcpp-taskflowです。処理をワークフローとして表現し、処理間の依存関係グラフを表現できるライブラリで、そのワークフローを自動でマルチスレッド実行できるようになっています。最新のcpp-taskflowを使うためにはC++17のコンパイラを使う必要があります。

R&Dもなんかいい感じに成果を出せそうな感じになってきた年末、その頃バックエンド側は相変わらず忙しかった。そのため高橋さん・田中さんがバックエンドへ旅立ち、現在は一人でやっています。

バックエンドに携わるともれなくRustを学び、実践することになります。みんなどんどんとRustが書けるようになってきました。いいぞ!

優秀なエンジニアに囲まれて楽しく仕事してます。

CADDiではモノづくり産業のポテンシャルを解放するエンジニアを募集しています!

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
72