見出し画像

MI-6契約満了エントリ

題名を見て「契約満了エントリ」とは!?
となった方も多いと思いますが、「退職エントリ」はその会社の社員だった方が書くもの、に対して「契約満了エントリ」はそれの業務委託バージョンです。
MI-6さんは2020年12月から業務委託でお世話になって、2024年2月末に契約満了となりました。
私がフリーになったときの、初めてのお客様であり、これまでのお客様の中では最も長い期間お世話になった会社です。
そういったこともあって、かなり思い入れのある会社だったので、「契約満了エントリ」を書かせていただくこととなりました。

まずは自己紹介

本題に入る前に少し自己紹介させていただければと思います。
私は新卒で大手製造業メーカに入り、組み込み系のソフトやアプリケーションの開発を行っていました。最終的に10年以上勤めていたのですが、後半の数年くらいから副業を始めました。
副業を始めたきっかけは当時ディープラーニングが流行り始めた時期で、機械学習関係の仕事をしてみたいと思ったことや、純粋に収入を増やしたいと思ったことがきっかです。
(ちなみに会社的に副業NGでしたが、いろいろ法的なことを調べて問題ないことが分かったので、普通に副業してました。)
副業を進めていく中で、これは独立できるのでは?と徐々に思い始め、独立に向けていろいろ準備を始め、2020年12月に大手製造業メーカを退職、フリーで活動していくことになりました。

MI-6について

マテリアルインフォマティクス(MI)という材料開発を支援するためのSaaSを提供している会社です。
開発チームでいくと、Webチーム、SRE、機械学習開発、機械学習リサーチに分かれており、私が所属していたのは機械学習開発チームで、プロダクトの機械学習部分を開発していました。
メンバは全国各地に散らばっており、フルリモート体制で、Slack、Github、Jiraなどを使った開発環境になっています。

MI-6に入るまで

最近はフリーランスや副業の案件を探せるサイトがたくさんあり、私もそういったものにいくつか登録していたのですが、OffersというサイトでMI-6の伊藤さんからお声がけいただいたのが最初のきっかけです。
MI-6さん以外にも、業務委託の案件を見たりはしていたのですが、最終的にMI-6さんに週3日の稼働で働く契約を結びました。
選んだ理由としては、当時は面談でMI-6のCEOの木嵜さんやCTOの入江さんとお話しする機会があり、あまり他の企業では聞けなかった会社やプロダクトに対するビジョンの部分が聞けたこと、そのビジョンの中で日本の化学メーカを取り巻く課題がベースにあり、私がいた製造業の世界と似ていて、すごく納得感のあるものだったということです。

MIとSaaS楽しい

初の業務委託ということもあり、いろいろ不安はありましたが、実際入って仕事をしてみると超楽しいという感じでした笑。
機械学習部分ではベイズ最適化というアルゴリズムの開発をPythonで行っていたのですが、直接お客様の要望を解ける問題に落とし込んで実装していく作業が、メーカにいた頃の仕事とは違って自分にとても合ってる感じがしました。
また、これまで組み込みの世界にいたこともあり、Web系の技術の面白さもいろいろと学ぶことができました。機械学習の開発もしながらフロントエンド、バックエンド、インフラも一通り触らせてもらえたのはとても大きな経験になりました。

機械学習開発の課題

週3日の稼働ではありましたが、私が入った頃はまだメンバも多くなく、プロダクトも立ち上げて間もない頃だったので、入って〜1年半くらいは、機械学習部分の開発に関しては私がメインで開発しているという感じになっていました。
ここで開発の課題だったのが、Web周りのメンバはそこそこ増えてきていたけど、機械学習周りのメンバ(特にフルタイムメンバ)がなかなか増えないということ、そして仮にメンバが増えたとしてもMI、ベイズ最適化という一般的な機械学習の開発では扱わないような知識を要するコードに新メンバがうまくコミットしていけるか?ということでした。
私も業務委託で働いているということもあり、できる限り手離れの良い、アルゴリズム的に特殊ではあるが少しでもオンボーディングしやすいようにコードやドキュメントを整えていくという作業を進めていきました。

ドキュメント化と仕組み化

基本的にはCI/CDによる自動化を強化しつつ、ドキュメントを整えていくということを行っていきました。
CI/CDに関してはコードだけでなく、ドキュメント(docstringやGithub管理のMarkdown
)に関しても継続的に管理していくための仕組みとチェック機構を作っていきました。
まずは比較的導入しやすいところから、PythonのコードとdocstringのLintingを強化しました。
black、isort、mypyは既に入っていましたが、flake8のプラグインで以下のようなものを追加しました。

  • flake8-bugbear

  • flake8-simplify

  • flake8-spellcheck

  • flake8-comprehensions

  • flake8-cognitive-complexity

  • pep8-naming

  • pydocstyle

  • darglint
    …など。(プラグイン増えてきたのでこのへんruffに統一していくみたいです。)

また、コーディング規約もなるべく形骸化させないために、規約の中でチェックできるものに関しては独自のflake8プラグインを作成し、チェックするようにしました。
https://github.com/mi-6/mle-flake8-plugins
あとは開発に関することでルール化、統一化できるものをドキュメントにまとめていきました。

  • チケットの作り方

  • プルリクの作り方

  • レビューの仕方

  • 規約の追加方法について

  • アルゴリズム(数式まわり)に関するドキュメント
    …などなど。

徐々にドキュメントや仕組みができていく中で、リサーチメンバが一部、開発に入ってもらったりして、開発のオンボーディングがスムーズになってきたという手応えを感じてきていました。
そうこうしているうちに、フルタイムメンバが徐々に増えていきました。
今いるフルタイムメンバよりも多くフルタイムメンバが入ってくるようなときもあったのですが、あまり混乱することなくオンボーディングできたかなと思っています。

これから

フリーの活動も続けていくのですが、先日、株式会社ファースト・オートメーションという会社のCTOに就任しまして、現在はまだフルではなく半分ほどの稼働なのですが、今後は徐々にこちらの活動に力を入れていきたいと思っています。

最後に

フリーになってからまだ3年ちょっとですが、10社以上の会社で業務委託の経験をさせてもらいました。
どの会社も素晴らしい会社でしたが、MI-6さんはその中でも特にコミュケーションのとり方や開発の進め方などが合っていたなと感じています。
MIやベイズ最適化に興味がある方、関東圏のIT企業に入りたいけど、今の場所でリモートで働きたい方はぜひ応募してみてはいかがでしょうか?
https://recruit.mi-6.co.jp/
最後まで読んでいただきありがとうございました。

この記事が気に入ったらサポートをしてみませんか?