toCウェブサービスから魚のIoTに転職した

私は今年から[ウミトロン株式会社 https://umitron.com/ja/](https://umitron.com/ja/?)で開発メンバーとして働いています。自分にとって初めてのIoT、水産養殖そして未上場の企業など未体験要素がたくさんあったので、転職して訪れた変化についてつらつらと書いてみようと思います。

# はじめに
話の背景となる情報。

## 現職
ウミトロンは、ざっくり言うと、水産養殖業でデータを収集し分析、そして改善を行うサービスを提供しています。創業は2016年です。

## 転職までの自分
今が三社目です。一社目二社目では主にtoCなウェブサービスの会社でソフトウェアエンジニアをしていました。

参考までに転職時のスキルセットは、言語で言うとPHP, Ruby, JavaScriptで、その他は MySQL, Chef, AWS, Git などです[^5]。

[^5]: 転職サイトに登録したときにスキルとして選択していたキーワード。たぶん。

## 転職の理由
ある時期に、興味あるいくつかの会社（というとヘッドハンティングっぽいですが、単に元同僚に出会したり、久しぶりに会ったり）から立て続けに声をかけてもらい、転職に至りました。なので12/14担当の人と違い、ワクワクする闇の退職理由はないです。ごめんなさい。

退職のときは、例によって1on1を何回かやりました。そのときに、一人の人生の先輩として普通にアドバイス（ベンチャーに転職するとはどういうことか、とか）をしてくださった方もいて、そういうときはキャリアについて改めて考えられたし非常にありがたかったです。端から諦められて嫌だった点とか改善点とかを言わされるよりは好印象だったし、実際話す中で｢今辞めるのがベストなんだっけ？｣と思ったこともありました。[^3]

[^3]: ただこれは、転職の経緯として｢辞めたい｣からではなく｢新たに入りたい会社が見つかった｣をきっかけとしていたという点も関係していたと思います。また、退職希望者にとって好印象であるかはあまり重要ではなさそうので、印象の悪い対応はダメだとか、会社にとってデメリットがあるということではないです。

# 転職して直面した変化
## 一次産業との関わり
この章は、 toC サービスの開発では体験できなかったことイロイロ。

### 現場に行ってユーザーに会う
養殖業の課題はオフィスに居ては分かりません。こちらからお客さんのもとへ出向き、仕事を見せてもらい、お話を聞くということが出発点となります。
私は最初から養殖に関する知識があったわけではないですが、たとえば漁船の上ではスマホは操作しづらいとか、赤潮を予測できるおじさんがいるとか、いろんなヒントが現場に落ちていて、足を運ぶことでアイディアが生まれます。なおユーザーに会うと言っても、エンジニア一人で営業してくるという感じではないです[^1]。

[^1]: 営業には不向きだって前職で言われましたが、今のところ何事もないです

### デプロイのときも現場に行く
課題抽出以外でも、たとえば弊社の提供しているデバイスは設置が簡単ではないため、初めてユーザーに導入するときは現地に出向くことになります。船に乗って生簀に行き、デバイスを置いて、動作試験をします。ハードウェアですが、デプロイと呼んでいます。Shipit!(物理) を体現できます。

（現地に行くのはあくまでハードウェア設置のときで、それ以外の、デバイスの中身を含むソフトウェアデプロイはどこからでもできます。）

デプロイの様子を見たい人は[会社の instagram アカウント](https://www.instagram.com/umitron.aqtech/)をご覧ください

### 出張
水産養殖ということもあり、弊社の顧客・パートナーの一部は四国九州にいて、空港からも少し離れた地域に行くことがあります。そのためユーザーに会うときは必然的に出張です。自分は出不精且つ関東民でしたが初めての四国侵入も果たし、一年で経県値[^6]が15もあがりました。現職になって、私が一番違いを感じるのが、出張するようになったことですね。

[^6]: https://uub.jp/kkn/ これで数えられる数字。

海外出張も行きました。これについては後述します。

ちなみに自分は乗り物が嫌いで、せめて新幹線で行ける出張先を切望しています。飛行機、車、船（漁船）と、頑張ってるほうだと思います。同僚が丘揺れという概念の存在を知らなくてがっかりしました。私は特別大変みたいです。

### 採用
ソフトウェアの業界だと、だいたいみんなが見ているメディアや使っているサービスが似通ったりしていて、どこに人がいるのかとか、どうやったらリーチできるかとかいったことはだいたい想像がつきました[^4]。しかし、ソフトウェアエンジニアに加えて募集しているハードウェアのエンジニアは自分の知り合いにはいなさそうですし、アプローチ方法も分かりません 。どこにいるのでしょうか？Qiita は見るのでしょうか？

[^4]: 想像ができた、もしくは出発点が分かっていた、という意味で、容易だったとかではない


## IoT 業界
この章は、ウェブだけやってたときにはできなかったこと。

### Go / C++ 書くようになった
サービスに用いる言語として Go を採用しています。理由も書こうとしましたがまとまらなかったのでとりあえず省略します。

前述の通り、転職前の自分のスキルセットには LL しかありませんでした。なので、インフラに詳しくなくても、サービスアプリケーションの中でコンパイル言語を使う機会があったことが、自分にとっては良かったことです。 Go は残念ながらまだまだ素人です。見よう見まねで書いています。C++ もちょっとだけ触りましたが、書けているとは言えないレベルだと思います。ウェブサービスやってて Go を書いてる人も当然たくさんいると思いますが、何を言いたいかというと、少しライトな感覚でコンパイル言語に触れられる環境があったのは IoT だからかなという感想です。

### Linux のパッケージ管理とかに詳しくなった
弊社のデバイスは中で Linux が動いているものがあり、デバイスのセットアップ手順に関する仕事をする中でパッケージ管理についても知識がつきました。前職まではぶっちゃけ社内の手順書に書いてあるコマンドを実行するくらいのスキルでしたが、それなりに一人で問題に対処できるようになった気がします。

### ハードウェア / 物理
これまでハードウェアというと、メモリ、ディスク、ネットワークなどを負荷状況把握という文脈でくらいしか気にしてこなかったゆとりな私ですが、先日 CPU の違いで動いたり動かなかったりするコードを書いてしまいました。

その他にも、社内では、コンデンサーがどうのこうのとか、電圧降下だとか、塑性変形だとか、高校/大学での勉強以外では一切耳にしなかったワードが突然出てきたりします。知識が深まった...とまではなかなか言えないですが、景色は変わってきたように感じます。

私がフルスタックエンジニアと聞いてイメージしていた領域は、まだまだ上澄みだったようです

## ベンチャー
この章は、ベンチャーじゃないと難しかったこと。ベンチャーならこうなるというわけではないけど、負債がそれなりにあったりすると難しいこと。

### 新しい開発インフラ
コードベースが2016年以降に作られたこともあり、開発環境が全部 Docker で作られています。自分が初日に Docker image のビルドを待っているだけで開発環境が作れていたのは結構感動でした。もう、「入社して最初の仕事が環境構築で、うまいこと進まず、（これはもしや試されているのでは...）と不安になる」といったこともありません。

最新の Macでエディタは自由、コード管理は GitHub とデプロイは AWS で完結、コミュニケーションは Slack、週一のタスク棚卸しと毎日のスタンドアップミーティング、定期的な1on1など、よくあるそれなりに新しい開発体制だと思います。

### 国際化対応
サービスが最初から国際化を前提として作られています。前+職は正直なところ、なんちゃって i18n 対応みたいなときもあったのですが、今はきちんと日英+α対応です。

### 海外/英語
海外出張に行くことが、先に書いたようや現地視察、デプロイや、パートナーとの打ち合わせ、水産関係の展示会など、様々あります。まだまだメンバーが少ないので、エンジニアも行くことができます。自分は中国に行きました。

出張のほか、日本語が分からないメンバーもいるし、海外からオフィスにお客さんが来ることもあるので、そういうときはまあ当然英語です。自分は英語はたぶん学生以来。あまり喋れないのですが、頑張らねば。

### 残業時間
自分の場合はかなり減りました。大きなリリース前は少し忙しいですが、基本的にはリリース範囲を改めたりして負荷も調整している感じです。

## 書けなかったトピック

* 地方の NHK
* 船の揺れ
* リモートワーク
* 費用の判断が早い
* 何もかも決めるのが早い
* ソーシャルで炎上してない
* DAU 観測からの解放
* 英語で一蘭の話をする
* いきものがかり

# プログラミングの経験を活かすこと
転職して、プログラミングに関して一番思ったのは、｢過去にちょっとでも C/C++ に触れといて良かった...!｣ということです。

今仕事で使っているコンパイル言語に関して、自分の知識のほとんどは大学の授業でやったことしかありませんでした。
授業を受けていた当時は、自分は既にウェブ系の開発を（趣味レベルですが）やっていたので、｢C 言語ってやつでは型を宣言するのかー面倒くさいなー｣としか思っていませんでした。が、今、その時の内容がはめちゃくちゃ役に立っています。今学生の方々は、プログラミングに関する授業をとる機会があったら、入門レベルくらいはそれなりに頑張っておきましょう。

また前提として、新しく出てくる言語というものは、既存の言語のいいところを取り入れていることが多いです。なので、既存言語の考え方が（部分的にですが）そのまま使えたりします。その点で、とにかく色んな言語に触れておくことも大事です。自分の場合は大学の授業の他にも、前職でちょろっとスマホ向けアプリの仕事を任せてもらえたこととかも、今（iOS / Android 以外をやるときも）非常に役にたってます。

触れたほうがいい、といっても程度の決め方は難しいかもしれません。たとえば Hello World だけでは、（もちろんやるにこしたことはないですが）少し不充分な気がします。もうちょっと手を動かしてみて｢この言語、ここがイマイチ面倒で好きじゃないんだよな｣という感想を持てるところまではやってみるのが良いんじゃないかと思います。


おしまい