2022年 海外新卒で東京のソフトウェアエンジニア職を探した経験

(Tokyo, credit to Derrick Brutel, under CC BY-SA 2.0)
修士 3 年のときにミラノへ交換留学に行きました。その目的の 1 つは、自分が海外で働くのが好きかどうかを確かめることでした。結論として、ミラノは「一番働きたい場所」ではないかもしれませんが、海外で働く体験や文化的多様性を肌で感じる機会になったのは間違いありません。自分は海外で働きたいのだと理解しました。外に出て挑戦したいし、カルチャーショックを楽しみたいし、自分を試したい。
ところが 2022 年初頭、想定外の出来事がありました。ミラノで日本人の彼女ができ、卒業後はヨーロッパで就職するつもりだったのが、一気に「東京で仕事を探す」に目標が変わりました。私は海外で仕事が見つからないことをあまり心配していません。ソフトウェアエンジニアはどこにでも仕事があり、英語さえできれば十分なことも多いです。ミラノにいたときも、試しにソフトウェア開発のアルバイトを探してみたら、1 カ月も経たずに見つかりました。どこでも働けるという確信がさらに強まりました。
私の背景はこうです。交大(NCTU)で CS 修士、研究は JavaScript の並列化オフローディング(広義ではシステム寄り)。学部は台大(NTU)の生機(バイオエンジニアリング)です。日本語は話せません。イタリア留学でイタリア語は身につきませんでしたが、英語はそこそこ話せるようになりました。日本の学歴もなく、日本語もできない(N6 レベル。日本語で仕事をする最低ラインはだいたい N2)、正社員経験もなし。外形的には日本で就職するには不利すぎます。日本が外国人エンジニアを採るとしても、基本的にはシニアを引き抜くのが好きです。日本に関する背景がほぼゼロの海外新卒なんて、誰が採るのでしょうか?
2022 年 3 月にミラノから台湾へ戻り、卒業手続きをしながら東京の仕事探しを始めました。5 月初旬に修了し、5 月中旬に納得できるオファーを獲得し、5 月末にはケルンへ旅行に行きました。約 3 カ月のプロセスを経て、最終的に Mujin Corp. というとても良いオファーをもらい、受諾しました。本記事では、台湾で過ごした 3 カ月の転職活動の経験をまとめます。当初は周囲も悲観的でしたし、自分自身も疑いながら進めていました。それでも最終的には運良く仕事が見つかりました。同じような背景の人にとって参考になれば嬉しいです。
¶ 日本の新卒採用の概要
日本の大学を卒業したばかりの社会人を「新卒」と呼びます。一般的に新卒の就活は、前の年に「内定」を取り、翌年に入社するという形で、台湾のキャンパスリクルーティングに近いです。ただ、台湾では下半期から始まることが多く、卒業の半年前に仕事が決まるケースが多い一方、卒業後に就活を始める人も少なくありません。
日本の卒業シーズンは 4 月なので、一般企業の新卒採用は前年の 3 月ごろから始まることが多く、また 10 月ごろにも枠が少ない追加募集があることがあります。ただ、私たちは外国人なので、日本人向けの新卒採用の流れはあまり役に立ちません。一方で、楽天、LINE、メルカリなどの大手は、日本人新卒を採ると同時に、外国人新卒向けの枠も出すことがあります。外国人を採る大企業を狙うなら、時期にも注意が必要です。
外資の採用、ヘッドハンター、LinkedIn の求人などのルートだと、時期の差はそこまでありません。外資は基本的に新卒は厳しく、タイトルに new grad と書いていないなら望みは薄いです。たとえ new grad を採っていても、海外新卒が通るのはさらに難しい印象です。ヘッドハンターにも相談しましたが、新卒にとってはほとんど役に立たないという結論でした。ヘッドハンターは基本的にシニアがターゲットで、新卒はそもそも仕事がないか、相手にされないことが多いです。私にとって一番役に立ったのは LinkedIn でした。LinkedIn に求人を出す会社は、大企業でも小規模スタートアップでも、外国人採用に比較的前向きで、私の面接機会も大半が LinkedIn 経由でした。日本の求人プラットフォーム(Quitta Jobs、Findy など)もありますが、基本的に日本語前提なので少し触ってすぐ諦めました。最後は紹介(リファラル)で、外国人エンジニアや日本在住の台湾人エンジニアに頼んで紹介してもらう方法です。ただ、全体として海外新卒は紹介があっても書類で落ちることが多い(あるいは私の条件が弱かっただけかもしれません)。
給与相場を比較しやすいように、日本のソフトウェアエンジニアの相場を簡単に整理します。日本の大学卒の一般的な初任給は年収 400 万円程度です。Sony や SoftBank のような普通の日系企業が新卒 CS に出すのもだいたいこの水準で、これを「平均」とします。もう少し良い会社(楽天や LINE)だと 500 万円台、さらに良い会社(メルカリなど)だと 600 万円台で、これを「高めの相場」とします。さらに 700〜900 万円以上が出せる会社は「トップ水準」です。普通の日本人エンジニアがトップ水準に届くには 4〜5 年程度かかることが多いです。全体として台湾にも似ていて、台湾のエンジニアの多くは年収 100 万 TWD 前後から始まりますが、台清交の CS 卒なら新卒 1 年目で 150 万 TWD 以上に届くこともあります。スタートの給与は学歴や能力にも左右されます。
¶ 履歴書(Resume)
履歴書は就活の要です。私は英語求人に応募していたので、英語の Resume の標準的な書き方に合わせました。日本語求人を狙う場合、日本の履歴書スタイルはかなり違います。私は Resume のバージョンを GitHub に残しているので、当時の Resume がどんな感じだったかは(Link)を見てください。履歴書の書き方はネット上に大量にあるので繰り返しませんが、私は 1 カ月以上かけて何度も修正し、先輩や先生に見てもらいながら、納得できる形まで仕上げました。
多くの先輩に言われていますが、もう一度強調します。履歴書に書いたことは必ず聞かれます。自信がないことは書かない。書くなら徹底的に語れるようにする。多くの場合、私も書いた内容を聞かれ、さらに昔の経験まで聞かれることもありました。時間が経っていて準備していないと、回答は詰まります。また、私は以前 C++ のレベルを Proficient と書いていましたが、何度か試されてから Experienced に変えました。10 万行以上の意味のあるコードを書いたり、百万行規模の巨大プロジェクトに貢献したりするまでは、「できる」と軽々しく言わない方が良いと思います。
¶ 面接
英語求人のソフトウェアエンジニア職を狙うなら、少なくとも英語が壊滅的では困りますよね(笑)。CS の訓練では、一般的に英語はそこまで苦手になりにくいと思います。コードは英語ですし、一次情報も英語が多い。OSS や国際コミュニティに参加していれば英語でのコミュニケーションもあります。ただ、台湾人は読む・聞くはできても、話すのが難しい人が多いです。英語を話す環境がないからです。話せるようになるには意図的な練習が必要で、私はミラノ留学で外国人と毎日混ざって話していたので、英語を使う量が増えました。高度な英語ではありませんが、少なくとも 2000 語程度で自分の考えをスムーズに伝えられるようになりました。
私の面接経験では、外国人を採る英語求人は、社内エンジニアも外国人が多く、英語で話すのは楽でした。むしろ相手の英語の方が上手いことが多いです。日本人が面接官の場合もありますが、留学経験があって英語ができる人が多いです。ただし例外もあり、「外国人を採りたいのに英語ができない」(しかも英語求人)という会社は基本的に除外しました。英語で一番難しいのは政治・文化・趣味・議論・交渉のような話題だと思います。一方で、自分の経歴や「コードがどう動くか」を説明するのは比較的簡単です。練習すれば TOEFL 100 なくても十分話せるようになります。
日本の面接は本来きちんとした服装が前提なので、最初はシャツくらいは着ていました。しかし、面接官が外国人中心で、雰囲気もカジュアルであることに気づきました。面接官が日本人でも欧米寄りのスタイルだったので、途中からは適当に着るようになりました。
以前、永昱に「台湾の会社にも応募して練習した方がいい」と言われました。面接経験がない状態で海外就職を狙うとボコボコにされやすいし、外国人を採るなら平均以上の人材を求めるのは自然です。ただ、実際に私は台湾に適当に投げても面接機会はほぼ取れませんでした。仮に面接があっても心構えが良くなかったと思います。後から振り返ると、私のように海外に行くと決めているなら、台湾の求人は無理に投げなくても良いと思いました。もちろん、海外でも台湾でも良い人は両方試して良いと思います。
面接期間中に LeetCode も少し解きました。30 問未満で、Easy を中心に Medium と Hard を少しだけです。結果として、LeetCode 系の白板問題を出す会社は少数でした。LeetCode 自体が就活に直接効いた感じはあまりありませんが、コーディングの手を温める効果はありました。実装力を見る会社もあり、例えばその場で LRU Cache を実装させたり、課題を出して RESTful Server を作らせたり、コードリーディングをさせたりします。さまざまな面接を経験すると、かなり視野が広がります。結局、短期の詰め込みより、長期の積み上げが重要です。
面接準備としては、jserv の「資訊科技產業專案」が割と役に立ちました。そこから学べることは多いと思います。また、先生や先輩、友人に相談して議論するのも効果的です。
強く感じたのは、インターン経験やサイドプロジェクトがどれだけあっても、ないよりはマシですが、会社から見ると結局は「おままごと」に近いということです。正社員で必要な経験とノウハウは、小さなプロジェクトで学べるものより遥かに多い。たとえば C++ を少し書いた程度は、シニアにとっては hello world みたいなものです。あるいは私の研究は JavaScript の並列化でしたが、Parallelism と Concurrency の理解も薄い部分がありました。永昱の言う「実際には自分は何もできない」という感覚には同意します。今できることに固執するより、「CS の基礎がしっかりしていて、伸びしろがある」ことをどう示すかが重要です。新卒を採る会社が見ているのは、現時点での即戦力ではなく将来性です。
面接は結局、学び続けるプロセスです。5〜6 回も面接すると適性質問も楽に答えられます。最初に一番困った質問は「なぜ日本に来たいのか」で、さすがに「彼女が日本にいるから」とは言えません 😂。そこで私は、自分でも穴がないと思える理由を用意しました。海外で挑戦したい、日本に友達が多い、日本は台湾に近くて親に会いに帰りやすい、子どもの頃から日本文化が好き、などです。要するに突っ込まれにくい理由です。面接は回数を重ねれば確実に慣れます。私は 20〜30 社応募してようやく最初の面接が取れました。その前は反応があっても書類落ちが多かったです。就活は粘りが大事で、最初の面接が取れると少しずつ流れが良くなります。
¶ 就活の流れ
以下、会社ごとの経験を簡単にまとめます。私はシステム系の研究室でしたが、基本的には Full Stack Engineer と Backend Engineer を中心に狙いました。面接機会が取れたのはこの 2 種だけで、他の Developer / Engineer はほとんど反応がありませんでした。ここで紹介するのは、少なくとも面接機会があった会社、あるいは書いておく価値があると感じた会社です。これ以外にも、応募したが反応がなかった/落ちた会社は大量にあります。有名な大企業は公式サイトから応募しましたが、それ以外は毎日 LinkedIn を見て応募していました。
¶ 平淡な失敗例
Mercari、Line、Rakuten は、外国人を採ることで有名な企業で、新卒でもチャンスがあります。Mercari は 3 月から外国人新卒枠を含む新卒採用が始まりましたが、私はオンラインテストで 1 問も解けず即落ちしました。Line は 3 月末に応募し、4 月末にオンラインテスト、5 月中旬に次の面接に進める通知が来ましたが、その時点で Mujin のオファーを受けていたので辞退しました。Line は全体的に遅く、彼女が応募していたデザイン新卒もプロセスが遅かったです。Rakuten はどのルートで面接に入ったか忘れてしまいました。公式サイト、Connect Job 経由、台湾のヘッドハンター経由など複数で応募していました。結果として Junior の面接に進み、プロセスはこの体験談と同じでした。まずは超 Easy なオンライン問題(鑑別力がない)、その後は雑談のみの 2 回面接。一次は外国人エンジニア 3 人が Resume を中心に質問し、二次は日本人マネージャ 2 人が背景や適性(学び方、問題の解決方法など)を聞く形式でした。二次は手応えがあり「いけた」と思ったのですが、結局落ちました。理由は分かりません。
Amazon と IBM は、どんな職種で応募しても反応がありませんでした。紹介も試しましたが駄目でした。SmartNews も紹介してもらったが反応なし。TeamLabs はオンラインテスト後に音沙汰なし。Hennge は良い会社だと思いますが、新卒はフルタイムインターンに参加してから正社員を検討する形式で、私はその時点ですでに就職先が決まっていたのでやめました。インターンは年に複数回あるので、日本に行きたい後輩は早めに計画すると良いです。Ridge-I は Easy 3 問のオンラインテストで、30 分もかからず解けたのに落ちてしまい、理由が分からず困惑しました。Ascent Robotics は工場ロボット系で、外国人 CEO と話した後に音沙汰なし。Preferred Network はオンラインテストが必須でしたが、問題が鳥すぎて(複雑で意味がない)やめました。NABLAS Inc. は AI 研究寄りの会社で、東大の向かいにオフィスがあり、AI 技術や HPC をやりたい人には良い会社だと思います。一次は会社説明、二次は 3 時間の技術面接で採否決定という形式で、給与は高標あたりだと推測しますが、その時点で Mujin のオファーがあったので二次を辞退しました。ほかにも、英語ができないのに外国人を採りたがる CEO(しかも英語求人)や、CEO 自身が会社紹介すらできない会社など、微妙な会社にも当たりました。CEO が自社を売れないなら、候補者にどう魅力を伝えるのでしょうか。さらに、600 万円未満しか出せない会社もあり、こういった会社は即除外しました。
ちなみに、練習として台湾の外商 N 社にも応募しましたが、ボコボコにされました。並列化関連の職種に応募し、アルゴリズムを聞かれると思っていたら、最初は C++ クラス基本操作のデバッグ、その後に OpenMP の使用を聞かれました。答えられず面接は途中終了で、本来は GPU プログラミングも聞く予定だったようです。私の実力が適切に評価されたとは思えません。私の感覚では、OpenMP は必要になったら文法を調べればよいし、GPU 計算も毎回サンプルをコピーして改造します。面白いのは、最後に面接官が「並列プログラミングの授業を取っていないのか」と聞いてきたことです。履歴書をしっかり見ていないのが救いでした。もし私が並列プログラミングの TA で、優秀 TA 賞まで取っていると知ったらどう思ったでしょうか。さらに、その小主管はカメラも付けず、初めて見るレベルの無礼な面接官でした。途中も「普通は 10 分で解ける」などと急かされ、今回の就活で最悪の体験でした。
¶ 言及する価値のある失敗例
Japan Computer Vision は、就活で最初に面接機会をもらえた会社です。「矽谷輕鬆談」の Slack チャンネルで台湾人エンジニアを見つけ、紹介してもらいました。当時は応募しても反応がなく、最初の面接が取れたことで自信がかなり戻りました。この会社の面白いところは、日本企業なのに中国語を話すエンジニアが多かったことです。後になって、この現象は日本でもそれなりに見かけると知りました(中国人エンジニアが世界中にいる影響でしょう)。応募職種は Full Stack Engineer。一次はフロントエンドエンジニア 2 人が JavaScript の特性と操作を聞き、二次はバックエンドエンジニア 2 人で、片方が DP、片方がマルチスレッドの Key Value データ構造の実装を聞く形式でした。私はどちらも出来が悪く、特に DP で即死しました。修論は JavaScript だったのに、JS の理解も意外と浅いと気づきました(そして DP は結局、その後も真面目に練習していません 🤪)。この会社は SoftBank 傘下の新創で、良い会社だと思います。新卒を直接募集していないので、新卒で入れたら給与は高標〜頂標の間だと思います。
Boostdraft は 6〜7 人規模のスタートアップで、弁護士向けの法律文書専用エディタを作っています。私はこのプロダクトは将来性が高いと思っています。面接は 3 回あり、1 回目は CEO との雑談、2 回目は文字列処理寄りのアルゴリズム問題で、テスト設計について「正しさを最も効率的に検証するにはどう設計するか」という、単に UnitTest と答えるだけでは足りない問いをされました。3 回目は別エンジニアによるアルゴリズム面接です。3 回目の後に落ちました。シニアを即戦力で採りたいのだと思いますが、私はこの会社の将来性にはかなり期待しています。強い人は検討する価値があると思います。給与は高標あたりだと予想します。
Asprova は工場の人員スケジューリングソフトを作っている会社で、新卒給与は頂標以上(800 万〜1000 万円)です。こちらとこちらが参考になります。社員の英語力は高くなく、日本語ができない外国人も採るものの、日本語が多少できるか、今後必ず日本語を身につける覚悟がある方が良いと思います。面接はむしろ感動しました。ネットの体験談と違い、一次からいきなり主管面で、主管はほぼ英語ができません。私は DeepL を使って会話し、コミュニケーション効率が悪いので 3 時間半も話しました。単一人物との面接としては人生最長です。途中でコードリーディングの問題があり、長いコードを渡されて 30 分でメモリ配置を分析させられました。主管は人柄が良く、人を求めているのが伝わってきました。言語障害があっても誠意は強く感じました。その後、2 人のエンジニア(中国人とシンガポール人)とも 2 回話し、主管は「雑談だけで良い。Coding は不要」と言っていたようです。Asprova は候補者に時間をかけて話す誠意のある会社だと思います。ただ、会話を通じて自分には合わないと分かったので辞退しました。理由は 2 つで、プロダクトが成熟していて保守中心で革新が少ないこと、そして日本語が必須で、コミュニケーションに障害がある状態では良い仕事が難しいと感じたことです。
Cogent Lab は AI で文書処理をする規模のあるスタートアップで、ここも外国人が多く、英語は英式寄りでした。一次は背景の雑談で、次に課題が出ました。内容は Node.js で RESTful Server を実装し、マルチプロセス対応、DBMS 連携、Message Queue 追加などのアーキテクチャも考えるというものです。期限は 2 週間でしたが、私は 3〜4 日で作りました。この課題で初めて Docker Compose を触りました。成果物はこちらです。二次は実装の議論で、アーキテクチャを話し、現場で修正したり、想定していなかったエラーを直したりしました。アルゴリズム面接よりストレスが少なく、2 時間は楽に過ごせましたが、結局お祈りでした。課題の出来が足りなかったか、他の理由かは分かりませんが、シニアを採りたかったのだと思います。
Paidy は金融決済系の会社で、ここも外国人が多いです。Backend Engineer で応募し、一次で主管と背景を話した後、課題が出ました。RESTful Server を実装するのですが Rust と Functional Programming を使うことが要件でした。大学以降 Rust は書いておらず、当時は並行プログラムも書いたことがなかったので、課題はむしろ面白かったです。Rust で並行プログラムを書く方法を学びました。成果物はこちらで、個人的にはかなり満足しています。Rust は下手だったと思いますし、FP もほぼ使っていないかもしれませんが、プロジェクトとしては完成していて、動作もしていて、テストも付けました。この時点で Mujin のオファーはありましたが、面白かったので時間をかけて仕上げました。ただ、提出後は次の面接すらなく落ちました。課題だけ見て実力不足と判断されたのかもしれません。Paidy は良い会社だと思います。規模のある金融会社の Backend は退屈しないはずで、技術スタックも Rust + Go が中心です。給与は高標〜頂標あたりだと推測します。
¶ オファーを獲得した例
Monoid はソフトウェアコンサル会社で、中国人留学生が創業し、正社員は 5 人。数年で受託収益が 2 億円に達し、メンバーの学歴も高いです。小規模な新創でここまで売上を出すのは本当に実力があると思います。面接は 1 回だけで 1 時間強。基本的なプログラミング概念とアルゴリズムを少し聞かれただけで、残りは会社紹介でした。あまりに早くて驚きましたが、ブログや GitHub など事前調査が入っており、最終確認だったのかもしれません。面接後すぐに正式オファーが届き、給与は高標水準。Offer compete にも応じてくれ、さらに上も出せそうな雰囲気で、「払えないのではなく、あなたがその価値に足りるかが重要」という感じでした。この会社には感謝しています。5 月初旬にオファーが来て、一気に自信がつきました。最悪でも日本で働けることが確定し、給与も良かったからです。
Monoid に応募する方は、必ず「Neutrino’s Blog から来た」と書いてください。Monoid から美味しいものを奢ってもらえるように交渉します!
Mujin, Inc. は工場ロボットのコントローラと管理プラットフォームを作っています。最初は Full Stack Engineer に応募しましたが、HR の調整で Backend System Engineer になりました。一次は HR と会社説明(補足: 2024 年以降は一次前に Online Coding Test もあります)。その後 2 週間ほど空き、落ちたと思ったら、社内調整の問題で遅れていただけでした。二次は部門主管で、雑談を省いていきなり C++ の試験。LRU Cache の実装だけで、大きな罠はなく、40 分程度で終わりました。その後 40 分ほど、技術や自分ができること、学べることを話しました。二次後に 48 時間の課題がありました。二次は普通難易度+適性で、真の鑑別は課題だと思います。この課題は鑑別力が非常に強く、私も一度は諦めかけました。Mujin が社内で使うロボット系 OSS があり、まずはそれをビルドするところから始まります。TensorFlow や Chromium のようにドキュメントが豊富なプロジェクトではなく、ドキュメントはほぼコードそのもの。指定 OS でビルドする必要があり、コンパイルエラーが大量に出て、経験と勘で潰していくしかありません。指示は「ビルドしろ」の一言で、まるで会社で誰にも助けてもらえないタスクを投げられ、独力でやり切るような体験でした。私は 7〜8 時間ほど全く進まず(48 時間しかないのに)、本当に諦めそうになりましたが、最終的に解決できました。ビルド後は簡単な RESTful Server を実装し、ビルドしたコードを使って処理させます。つまり難所はビルドで、Server 実装はそこまで難しくありません。諦めかけたところから巻き返し、早めに提出できました。主管も満足してくれたようで、本来は課題内容の面接があるかもしれませんが、それも飛ばしてオファーに進みました。HR から新卒給与は 600〜900 万円と言われており、実際のオファーも頂標でした。加えて、永住権のポイント制度で Mujin 入社は +20 点(70 点で 3 年、80 点で 1 年で永住権が取れる)などのメリットもあり、システムソフトウェアを続けられる点も含め、総合的に非常に良い機会だと感じたので受諾しました。
Mujin に応募するなら、ぜひ私に紹介させてください。可視性が上がり、私のボーナスにもなります。
Email: [email protected] 連絡してください。Referral Link を送ります。書類通過率が上がる可能性があります。
¶ 結論
いま私はドイツで旅行中ですが、振り返ると全てが信じられません。彼女の存在がなければ、人生初の正社員がいきなり東京で始まるとは思いもしませんでした。何の有利な背景もない海外新卒として、3 カ月で納得できるオファーを見つけられたのは本当に幸運です。日本で働けるなら、給与が平均〜高標でも受け入れる覚悟はありましたが、最終的には評価してくれる会社に出会い、待遇も良いオファーをもらえて嬉しいです。
「とにかく勇気を持って動く」ことが大事だと思います。周囲は「新卒が日本で仕事を見つけるのは厳しい」と言い、私自身も疑っていました。それでも、義無反顧に突っ込めばチャンスはあると思います。CS を専攻し、ソフトウェアエンジニアを狙ったのは大きな強みでした。現代では、やる気があればどこでもソフトウェアエンジニアの仕事はあります。これが就活での最大の優位性でした。
就活を通じて多くを学びました。外国人面接官との向き合い方、会社ごとの課題の作り方などです。私は特に、面白い課題を出す会社が好きで、就活のプロセス自体を楽しめました。作るのが楽しいし、新しいことも学べる。足りない点を指摘してくれた面接官にも感謝しています。改善を続けられます。
唯一の小さな不安は、入社予定が 3 カ月後という点です。この期間に何も変わらず、無事に入社して東京生活を始められることを願っています。本記事が、将来、私のように日本でソフトウェアエンジニア職を探したい新卒の参考になれば幸いです。