20年働いた会社を離れ、創業3期目のAIベンチャーへ!ベテランエンジニアの新たなキャリアとは? | AI Engineer
廣谷 貴志/関東支社 AIエンジニアリング部 部長群馬県出身。群馬大学工学部情報工学科を卒業後、パシフィックシステムにて画像処理検査システムの開発に従事。上流工程から、実装、現場導入、保守まで多...
https://www.wantedly.com/companies/hutzper/post_articles/462532
今回は、フツパーの主力サービス「メキキバイト」を始めとしたサービスの開発をPythonからC#に移行した理由や、そのモダンな開発環境について、大阪本社から和田さんに、関東支社から廣谷さんに参加していただき、詳しく深堀していきます!
【メキキバイトとは?】
外観検査業務をAIで自動化するサービス。現場の環境や検査要件に併せた高精度なAI及び関連ハードウェア一式を自社で構築。検査結果を管理図へ自動変換する品質管理機能を備えた管理アプリケーションにより、良品か不良品かを判定して終わりではなく、不良原因の分析までサポート可能。
群馬県出身。群馬大学工学部情報工学科を卒業後、パシフィックシステムにて画像処理検査システムの開発に従事。上流工程から、実装、現場導入、保守まで多くのプロジェクトを経験。マルチスレッドプログラミングが得意。2022年9月よりフツパーに参画。
5歳でスーパーファミコンに出会う。ゲーム漬けの日々が始まる。ゲームプログラミングの専門学校を経て、テレビゲーム制作会社に入社。ゲーム会社では、主にコンピューターグラフィクスを担当。趣味で電子工作にハマる。2023年1月よりフツパーに参画。
今回の対談にはインターンの峯澤と山元が参加し、質問をさせていただきました!!
和田さん:フツパーではこれまで、少ないコード量で成果物が作りやすいpythonを使用していましたが、処理スピードや汎用性を考えたらC#の方が良いということで、昨年の夏くらいからC#への移行を行ってきました。
廣谷さん:そうですね、おっしゃる通りです。メキキバイトは外観検査のサービスなので、カメラや照明をはじめとするハードウェアが必須ですが、創業当時はカメラ一台、照明一台みたいなシンプルなデバイスの構成の案件が多かったのでPythonでも充分機能していました。
ですが、フツパーが最終的にはスマートファクトリーや、無人工場を目指していく中で今後カメラ以外の設備と連動したり、いろんなセンサーからデータを取ったり、そのシステムとしての使い勝手というか機能を拡張していくと考えたときに、Pythonだと処理能力や拡張性の点で足りない部分があったのでC#に移行することになったという流れですかね。
ハードウェアとの連携はメキキバイトにおいて不可欠。エンジニアだけでなく営業メンバーもハードウェアの知識は豊富です。写真は営業担当の吉山さんと。
廣谷さん:私が入社してすぐ社長から工作機械の異常検知プロダクトの「振動大臣」の開発を依頼されたんですが、その管理アプリケーションとしてグラフィカルで直感的な操作が出来るという要件に応えるため、またそれを短期間で完成させるためにをC#でつくったんですよね。その過程で作ったコードが振動大臣の中でしか使えないのはもったいないので、並行して他製品でも使えるようにC#のライブラリを強化していきました。それがフツパーのなかでのC#での開発の始まりです。
当時、社内的には振動大臣を除けば全部Pythonで対応していたのですが、関東支社のほうでデバイス構成が複雑な案件が増えてきたんですよね。そういったこともあって、将来的にはC#のシステムじゃないとカバーできないだろうなと思い、未来に備えてライブラリを強化していました。ですが、これまでAIはPythonで記述されることが多かったので、当時は完全移行は難しいと思っていました。そんな中、テクノキングの今井先生が頑張ってAIを標準化していただいた関係でPhythonだけでなくC#とも組み合わせができるようになっていったんです。そこで一気に移行しようということになりました。性能的にもそうですし、お客さんのシステムとの連携を考えたときに、標準的にモノを作っていくのがいいだろうということでそのタイミングでPythonからC#に移行することにしました。
テクノキング今井先生の記事はこちら
和田さん:簡単にできることではないです!カメラ・照明・クラウドへの送信など、多岐に渡った知見が必要になります。廣谷さんが多忙なスケジュールのなかでC#のライブラリを積み重ねて基礎を作ってくださったので、大変助かりました。PythonのコードをC#のコードに一発変換みたいにできたらいいんですけどね。
廣谷さん:移行の作業は置き換えというより一からの作り直しに近かったです。作業は大変でしたが、関西側にも和田さんという強力な人がいてくれて、私が作った基礎部分に、たくさん機能追加をしていってくれているので心強いです。
和田さん:関東で廣谷さんが半年かけて基礎やライブラリを作ってくださってから関西側にもバトンパスしてもらって、今は関東では廣谷さん、関西では私が中心になってインターン生を含め合計4、5人で開発を続けている状況です。
廣谷さんがクラス選択やモジュール結合度の値、読みやすいプログラムをしっかり作ってくださっていたので、関西で引き継いでも開発が進めやすい良い状況を作ってもらいました。
廣谷さん:私は前職でFA現場向けの検査システムを作ってきた経験があるのですが、検査ができるのは当たり前のことで、そのうえで、24時間365日耐えられるかとか、処理時間の安定性などを考慮しながら設計しているんですよね。なのでライブラリもそういう観点を持って作っています。
和田さんはその点を理解してくれているので、C#を始めたばかりのメンバーに対しても早さだけではなく安定性を重視した書き方であったり、現場を意識した実践的な教育ができる環境があると思います。関東は私、関西は和田さんが他のメンバーへの指導を担当して開発を進めているという感じですね。
廣谷さん:そうですね、産業用カメラはいろんなメーカーがあるので、その都度みんなが好き勝手に開発していると手間もお金もかかってしまうんですよね。なのでどのカメラが来ても大丈夫な汎用的な設計にするとか、だからライブラリを作るときはそこを工夫しますね。そしてそれを可能にできるのがC#の強みだと思います。
和田さん:産業用カメラって、Omron SentechとかBaslerとかThe Imaging Sourceとか、いろんなメーカーさんがカメラを作っているんですけど、それを扱うソフトフェアも動かし方も全部違うんですよね。そしてカメラメーカーごとの処理を書くのは結構面倒です。なのですが、廣谷さんの基礎はどのカメラがきても同じボタンを押したらカメラが動くというような汎用性を持たせて作ってくださっていて、それがすごいところだと思います。
和田さん:廣谷さんが作った部分だけでもメキキバイトは動かすことが出来ていますが、さらにより汎用性を持たせたいとか、設定を柔軟にしたいとか機能を付け加えたいっていう要望があるので、そこをさらに作っていってますね。
和田さん:実は、フツパーは元々Pythonを使っていたのもあって、C#の経験があるのは廣谷さんと西日本AIエンジニアリング部部長の山本さんしかいなかったので、その他のエンジニアは移行に合わせて勉強会を開いて覚えていきました。
私もC#は前職でちょっとしたものを作った経験があるくらいで、C++が一番のメインでしたが、移行に合わせて覚えて、頑張って教えました。
勉強会は具体的には月3回程度開いて、業務の中でも覚えていってもらって、最近はC#を書ける人がそこそこ出てきたという感じです。C#始めたての時は、みんなコードを読むのすら大変で、書くなんてほど遠いみたいな状況でしたが、できることから挑戦していって、徐々に難しいことをお願いしていった結果、ある時をすぎたら逆に私が指摘されるくらいになってきてました(笑)
そういう時は嬉しいですし、助かる~!と思います。着実に成長しているのは感じますね。
廣谷さん:関東支社のAIエンジニアの小池さんと上原さんもC#は全くの初心者でしたが、今は実際の案件で自分でコードを書いて作ったアプリを納品してっていうところまできるようになってきています。
関東支社の様子 左から小池さん、廣谷さん、今井先生、上原さん
和田さん:関東は廣谷さん、関西は私のほうで勉強会を開催していて、それぞれのチームのメンバーもスキルレベルがバラバラなので、廣谷さんは廣谷さんで、こう教えていったら一番良いだろうという考えで教えていたと思うし、私も同じように関西はこの教え方がいいだろう思うやり方で教えていってました。
プログラミングは15年ぐらいやっているので、こういう順番で学べば早いっていう感覚があったのと、いろんなサイトにC#のチュートリアルや説明動画があるので、そういうのをかいつまみながらこれをしようみたいな感じでやっていました。教育に関して廣谷さんはどう考えていますか?
廣谷さん:和田さんもそうだと思いますが、プログラミングは個人個人でレベルが違うので、そこを一緒にやるのはなかなか難しく、カリキュラムの部分は正直手探りでやってるという感じです。
気を付けていることとすれば、文法や決まり事の話ばかりになってしまうと面白くないと思うので、実際の開発につなげていけるようなサンプルコードとかを作ることに重きをおいていますね。プログラミングに限らず、何かを習得するとき、最初はマネから入るので、どれだけいいものに触れてマネするかっていうのは上達の早道かなと思っています。なので今はそういう観点でサンプルコードを作ったり選んだりしています。
和田さん:モダンな開発環境とコンピューターサイエンスの2つがあります。
和田さん:前者のモダンな開発環境は新しいサービスを取り入れて使ってみたりとか、面白いライブラリを積極的に使っていったり、そういう新しい技術への取り組みですね。
C#が主に使われているところはゲームや業務用アプリケーションだと思うのですが、業務用アプリケーションになってくると、大企業が作ってたりすることも多いんですよね。そうすると携わる人が多くて新しいライブラリを入れづらかったりとか、固定観念を持ったままでソースコードを書いてしまったりとかもあると思うんですけど、フツパーは人数も少ないのもありますが、みんな新しい技術に積極的なのでかなり柔軟に新しいライブラリも取り入れていますね。
例えばSentryという、エラーが起こった際にすぐSlackに通知がきて修正できるSaaSと連携したりしています。あとはTOMLっていうファイルのフォーマットを使ったりとか、適宜必要だったら新しいものを入れています。
ただライブラリに依存する量が多すぎるとメンテコストがかかるので、とりあえず新しいものをいれて機能を足したらいいわけではなく、そのあたりを注意しつつ新しいものを取り入れているという感じです。
あとはGithubアクションというのがありまして、製品に自分が作ったものを入れたときに、問題がある状態で入れたらダメなので、一回テストを挟むんですよね。そのテストをつくれるのがGithubアクションなんですけど、それも徐々に拡張中で、そういうナウいことも頑張っております。
和田さん:今はGithubアクションで簡単なテストしかできてないんですけど、より複雑なテスト、例えば新たなプログラムを入れることでメモリーの使用量が増えすぎていないかとか、パフォーマンスに悪影響を与えたりしないかというテストも今後はしていこうと思っています。
廣谷さん:こういうモダンな開発はたぶん和田さんの方が詳しくて、ナウい方は和田さんがリードしてくれています!
和田さん:後者のコンピューターサイエンスの理解に関しては、そこを理解してC#を書いたほうが処理速度が速くなるんですよね。例えば検品検査用のAIでいうと、1秒に5回しか検査できなかったのが、コンピューターサイエンスを理解してコードを書くだけで1秒で10回に増えたりとか、そういうコンピューターへの知識の深さに関する話になっています。
フツパーでは、ガベージコレクションの挙動を理解してプログラミングしていたり、メモリリークの調査方法と直し方の勉強会を行ったりしています。あとはソースコードの可読性も大事にしてますね。
和田さん:メモリ上の不要なデータを削除する仕組みのことですね。 C#って注視しておかないと結構簡単にメモリーリークするんですよね。そうなった時に、なんでそれが上がっていくのかとか、どのオブジェクトがメモリーに乗っかりっぱなしになっちゃってるのかとか、どういう条件でメモリーが増え続けてしまうのかの知識が必要になってくるんですよね。
和田さん:関西ではやりましたね。
廣谷さん:関東の場合はさっきも話したように良いサンプルを用意して、画像データを扱うプログラム特有のガベージコレクタの挙動まで意識した書き方を癖づけてもらいました。
和田さん:僕は、日本語を上から読むみたいにプログラムが書かれているコードが一番美しくて読みやすいと思っているので、皆がそう書けるようになることを目指して頑張っています。そこに至るまでに、プログラミングの規則っていうのがたくさんありまして、KISS(Keep It Simple, Stupid.)とかYAGUNI(You Aren't Going to Need It.)とかDRY(Don't Repeat Yourself.)とかオブジェクト指向とかSOLID原則とか、いろいろプログラミングするうえで知っておいたほうがいいことやマナーがあるんですけど、今はそういうものを勉強会で教えていって徐々にメンバーのレベルが上がってきているという状況です。
でも、DRY原則のように、二回同じことは書かないようにしようと言ってはいるものの、実際に二回同じことを書かないように作るのはかなり難しいんですよね。なので、作ったコードを製品版に入れる時はその都度Githubのプルリクエストという機能を使って、コード管理者(和田さん・廣谷さん)がレビューをするようにしています。
廣谷さん:コンピューターサイエンスの部分の面白さに関してだと、私が社会人になったころに比べて、PCの性能やマルチコアの性能もかなりあがっているので、それをどれだけ引き出せるかという挑戦ができるフツパーの環境は、C#のエンジニアにとってグッとくる環境なのではないかと思います。
画面を作って表示したりとかは勉強すれば誰でも出来るんですけど、現場で使える、現場で耐えるための最適化を突き詰めるみたいなところはそれはフツパーだからこそ挑戦できることだし、楽しいところです。
あとはプログラミングそのものの話じゃないですけど、カメラやPLCだったり、お客様の現場の設備と連携したり、実際に動くものを見ながらプログラムを作ってその結果を自分で見れるっていうのもすごく楽しい環境だと思います。
和田さん:同意見です!
大阪本社の作業部屋の様子
廣谷さん:C#での開発は独学だとどうしてもたどりつけない部分ってあると思っているんですけど、フツパーには最適化や処理性能の追及に関して和田さんを始めとしたプロのメンバーがいるので、それに追従していけば他では得られないスキルが得られると思っています。
あとは、メンバーが年齢や国籍もバラバラで個性的なところも魅力として伝えたいですね。
和田さん:確かに、バラバラですね!中国出身の方もいるので、お互いが努力してもどうしても伝わりきらない部分もたまにあるかもしれないんですけど、チームとしてはうまくいっていますね。
廣谷さん:C#メンバーの全員が日本語のやりとり以上にプログラミング言語でつながっていると思っています!