期待と不安が入り混じった、あのオファー受諾の日
「ついに、きた。」
メールのタイトルに「Offer Letter」の文字を見つけた瞬間、正直テンションが爆上がりした。
あの長い海外転職活動、何十回と受けたオンライン面接、時差に苦しみながら夜中に受けたコーディングテスト……全部がこの一通のメールにつながったんだ、って。
もともと日本ではC#とWPFメインで、業務アプリケーションの開発や設計にがっつり携わってきた。
でも正直、ずっと「このままでいいのかな…」って思ってた。
なんか、もっとグローバルな環境で働いてみたい。
英語で仕様確認とか、海外のエンジニアとGitでバチバチやりとりするとか、Slackで英語雑談しながらペアプロするとか、そんな経験が欲しかった。
そんな思いでLinkedInやIndeed、Glassdoorあたりで海外ポジションを探しはじめて半年。
で、ついに、念願の「海外オファー」が手に入った。
オファー内容を見てみたら…
内容は正直、めちゃくちゃよかった。
給料は日本時代より年収1.5倍。
しかもリロケーションサポート付き。
最初の数か月の仮住まいも会社持ち。
ビザサポートもフルでやってくれるっていう、まさに「海外転職ドリームプラン」みたいな条件。
ただ、正直、オファーレターをもらった段階で気づき始めてた。「あれ、これって本当に大丈夫?」って。
具体的にはこんな不安があった:
- Job Descriptionに「WPF」って書いてあったはずなのに、改めてオファーレターを見ると「.NET Full Stack Developer」って書いてある…。ん?フロントはBlazor?それって何?
- チームメンバーの国籍、よく見たら全員現地の人+インドのオフショアチーム…。日本人どころかアジア人すらいないっぽい。
- 勤務地、聞いてたのはダウンタウンだったのに、よく見たら郊外のTech Park…。あれ、生活環境どうなるんだ…?
でも、もうここまで来たら行くしかない、って思った。
そもそも、海外で働くってそういう「予想外」を楽しむもんでしょ?って、無理やりポジティブ思考にシフトチェンジした。
渡航準備が、いきなりハードモード
オファー受諾してからはもう怒涛だった。
まずはビザ手続き。
これがまた、とんでもない量の書類作成&証明写真撮影の連続。
しかも全部英語。
HRから送られてくる英文PDFがまるで法廷文書みたいで、夜な夜なDeepLで翻訳しながら作業した。
次は住居探し。
最初の数か月は会社が仮アパートを用意してくれるって聞いてたけど、長期的には自分で賃貸を探さないといけない。
現地不動産サイト(ZillowとかApartments.comとか)で家賃相場をチェックして、
「え、ワンルームで月1500ドル…?」「日本の倍じゃん…」って一人で叫んだのもこの時期。
さらに英語でのリロケーションエージェントとのやりとり。
「Do you have any pets?」「What’s your preferred neighborhood?」「Furnished or Unfurnished?」
こんな質問攻めにあいながら、グーグル翻訳と格闘。
英語コミュニケーションの洗礼
あと、完全にナメてたのが「入社前のオンボーディングプロセス」。
日本ならせいぜい内定者向けガイダンスとか、事前書類送付くらいじゃないですか。
でも海外企業、違った。
入社前からSlackアカウントが発行されて、HRからは
「Let’s introduce yourself in the general channel!」
とか言われるし、
IT部門からは「Can you install VPN and set up your laptop before Day1?」ってメールくるし。
初っ端から「フル英語Slack文化」にいきなりぶちこまれて、
「え、まだ入社してないのに英語自己紹介!?」って心が折れそうに…。
で、勇気出して書いた自己紹介がこちら:
Hi everyone,
I’m Hiro, joining as a .NET Developer from Japan.
This is my first time working abroad, so I’m super excited but also a little nervous 😅
Looking forward to working with you all!
うん、まあ、可もなく不可もなく?
絵文字でごまかした感あるけど、誰かが「Welcome Hiro!」って返信してくれただけで救われた。
家族の反応、そして出発前夜
ちなみに、家族はめちゃくちゃ心配してた。
「本当に大丈夫なの?」「言葉通じるの?」「生活できるの?」って、何回も言われた。
それでも「今しかできないことだから」って言い聞かせて、荷物をまとめた。
スーツケース2つ、バックパック1つ、ガジェット類とノートPC、そして大量のインスタント味噌汁(笑)
出発前夜、羽田空港近くのビジネスホテルで、窓の外を見ながら一人でこう思った。
「さあ、どうなるかわからないけど、とにかく行ってみよう。」
初出社のリアル、理想と現実のギャップに打ちのめされる
飛行機に乗り、トランジットで迷子になり、ヘロヘロの状態で現地入りして数日。
会社指定のサービスアパートメントに着いたときは、本当にホッとした。
家具付き、Wi-Fi付き、キッチン付き。
でもまあ、狭いし、どこか異国のにおいがするし、窓から見える景色も当然ながら「完全に外国」。
それでも、「明日からいよいよ海外エンジニアとしてのキャリアが始まるんだ!」っていう高揚感でいっぱいだった。
朝、オフィスに向かう。Googleマップ片手に大冒険
初出社の日の朝。
慣れないバスに乗り、Googleマップとにらめっこしながら、言われた住所のビルへ。
オフィスビルに入ると、そこはオシャレなIT企業って感じ。
受付のロビーには観葉植物、壁には会社ロゴ。
「おお、ちゃんとした会社だ…」って思いながら、指定されたフロアへ。
ドアを開けた瞬間、耳に飛び込んできたのは…
完全なる「英語の海」。
SlackのDMとか、メールの文章では多少慣れてきてたけど、リアルな英語会話は…やっぱり次元が違った。
しかもインド英語、ネイティブ英語、ヨーロッパ訛り…いろんなアクセントが混ざってる。
初日のウェルカムイベント、いきなり英語で自己紹介タイム!
ITマネージャーに案内されて、まずはウェルカムイベント。
新入社員向けに開かれる、いわゆる「オンボーディングセッション」。
PowerPointがスクリーンに映されて、人事部長が英語でベラベラと説明。
「Oh… crap… 全部英語だ…。」
途中で「Now let’s do a quick round of introduction!」
まさかの…全員の前で一人ずつ自己紹介タイム。
前の順番の人たちがペラペラと自己紹介していく中、もう心臓バクバク。
ついに自分の番。
Hi, I’m Hiro.
I’m from Japan, and I have experience in C# and WPF development.
This is my first time working abroad, so… yeah… very excited and also nervous.
Hope to work with you all!
…あれ、さっきのSlackの自己紹介とほぼ同じ内容じゃん(笑)
でも、その場はみんな拍手してくれた。
「Welcome, Hiro!」って何人か声かけてくれて、ちょっとだけ安心した。
初日の席…隣はインド人シニアエンジニア
席に案内された瞬間、またびっくり。
隣の席はインド出身のシニアデベロッパー、Rajさん。
どうやらこのプロジェクトのリードっぽい。
Raj:「Hey Hiro, welcome! What’s your experience with Blazor?」
え、Blazor…?
そこ、WPFじゃないの…?
とりあえず笑顔で返す。
「Ah… Actually, I’m new to Blazor… But I’m eager to learn!」
Rajはにっこりしながら、
「No worries! We have tons of documentation. Also, the first ticket I assigned to you is a small Blazor UI fix. Should be easy.」
チケット…?
UI fix…?
いきなりタスクアサイン!?
まだPCセットアップすら終わってないんですが…。
開発環境セットアップ、想像以上にカオス
次にやったのは開発環境のセットアップ。
支給されたノートPCはWindowsマシン。
でも、会社はGitLab、CI/CDはAzure DevOps、フロントエンドはBlazor、バックエンドはASP.NET Core、クラウドはAzureというフルモダン構成。
C#経験者とはいえ、正直、WPF専業だった自分には未知の領域だらけ。
- VS CodeでBlazorソリューション開く
- GitLabのPersonal Access Token作成
- Azure DevOps Pipelineの確認
- Jiraでチケット管理
- Slackでデイリースタンドアップ
もうね、頭がパンクする。
「ローカルでビルド通すだけで半日かかる」って、現地のジョークかと思ったらガチだった。
初スプリントレビューで受けたカルチャーショック
そして極めつけは、午後に待っていたスプリントレビュー。
この会社はアジャイル開発を採用していて、2週間ごとのスプリントで回してるらしい。
その締めくくりがスプリントレビュー。
Google Meetでオフショアチームとも接続。
合計20人以上がオンライン・オフライン混在でレビューに参加。
もちろん進行はフル英語。
いきなりPMがこう言い出す。
「So, Hiro, can you share your thoughts on the current UI improvements?」
ええええええええ!?
初日で!?
何もまだ作ってないし、むしろ環境セットアップすら終わってないし!
とっさに出た言葉がこれ。
「Sorry, I just joined today… Still catching up… But I’ll try my best for the next sprint!」
周りは笑ってくれたけど、顔から汗が吹き出たのは言うまでもない。
日本では当たり前だったことが、ここでは全然違う
この初日の体験で痛感したこと。
- ドキュメントも会話も全て英語。当たり前だけど、改めてその重さを実感。
- 「習うより慣れろ」文化。とにかく投げ込まれて、泳ぎながら学ぶスタイル。
- フィードバック文化が強烈。レビューでもSlackでも、どんどん意見が飛び交う。
特に最後のポイントは、日本で経験してきた「空気を読む」「遠回しに伝える」とは真逆だった。
「Hiro, this code can be improved. Let me suggest a better approach.」
「Hey, your current design looks a bit outdated. Maybe you can try this UI library?」
みたいに、直接ズバズバ言われる。
でも、嫌な感じは全然しない。
どちらかというと「建設的」「協力的」「フレンドリー」な空気感。
夜、アパートで一人反省会
その日の夜、アパートに戻って、一人でPCに向かいながらこう思った。
「これが、海外エンジニア生活か…。めちゃくちゃキツイけど、めちゃくちゃ面白い。」
明日からも、また怒涛の日々が待ってるんだろうな…。
最初の技術課題でつまづく。「できない」「通じない」「怖い」…でも、そこから学んだこと
初日が終わり、「明日はもっと慣れるだろう」なんて甘いことを考えていた翌日。
いきなり現実の壁がやってきた。
RajからSlackでDMが飛んでくる。
Raj:
「Hiro, could you take care of ticket #2435? It’s a small UI enhancement on the Blazor dashboard. Shouldn’t take long.」
これが、私にとって最初の正式なタスクだった。
内容は「ダッシュボード画面のフィルタ機能に、Date Range Pickerを追加する」というもの。
チケットにはざっくりしたAcceptance Criteriaが書かれていて、こんな感じ。
Ticket #2435:
- Add a date range filter to the dashboard view.
- Integrate with existing API call for data filtering.
- Ensure responsiveness for mobile view.
- Unit tests required.
正直、この時点で半分パニック。
「BlazorでUI作るってどうやるの?」
「API連携って、ここのプロジェクトではどんなルールで書くの?」
「ユニットテストって、フロント側もやるの?それともバックエンド?」
頭の中で「?」が10個くらい同時に点滅。
Google検索 → Stack Overflow漬け生活、スタート
とりあえずBlazorのチュートリアルを探し始めた。
「Blazor DateRangePicker」とか「Blazor Dashboard Filter Example」とか、いろんなキーワードでググりまくる。
でも問題はここから。
現地プロジェクトには独自のUIコンポーネントライブラリがあって、それがまた全然ドキュメント化されてない。
社内Wikiはあるんだけど、内容が断片的。
そもそも文章が全部ネイティブ英語の省略表現だらけで、意味がつかめない。
コードリポジトリをクローンして、中の既存コードを参考にしようと思っても、設計思想が謎すぎる。
@using Project.Shared.Components
<MyCustomDateRangePicker @bind-StartDate="startDate" @bind-EndDate="endDate" />
@code {
private DateTime startDate;
private DateTime endDate;
protected override async Task OnInitializedAsync()
{
await LoadData();
}
private async Task LoadData()
{
var result = await ApiClient.GetDataAsync(startDate, endDate);
// ...Bind to UI
}
}
↑これ見ても、「MyCustomDateRangePicker」って何?どこで定義されてるの?状態。
日本でWPFばかりやってきた自分には、Blazorの双方向バインディングも非同期呼び出しも、全部が未知の世界だった。
プルリク出したけど、コードレビューでフルボッコ
何とか動くところまで作って、初めてのPull Request(PR)をGitLabに作成。
タイトル:「Add DateRange filter to Dashboard」。
正直、自分の中では「まあまあ頑張った方じゃない?」って思ってた。
でも、そこからが地獄の始まり。
レビューアのRajともう一人のシニアデベロッパーEmmaが、コメントを大量につけてくる。
Emma:
「Please follow our naming convention for variables. startDate → start_date (camelCase)」
「Missing unit tests for the new API integration.」
「Your error handling needs improvement. What happens if API fails?」
「Also, please add XML documentation for public methods.」
Raj:
「Good start, but performance-wise, please avoid making API calls inside OnInitializedAsync without pagination.」
画面が赤文字コメントで真っ赤になってる…。
ショックだった。
一気に自信がなくなった。
「やっぱり、自分には無理なのかも。」
「WPFエンジニアなんて、こっちじゃ通用しないんじゃないか…。」
夜、アパートに帰って、一人で落ち込んだ。
英語で質問するのが怖い
次に待っていた壁がこれ。
「助けを求めたいのに、英語でどう言えばいいかわからない。」
レビューコメントに返信するにも、どう書けばいいかわからない。
「Thank you for the feedback. I will fix.」みたいな小学生英語しか浮かばない。
Slackで同僚に聞こうと思っても、
「こんな初歩的なことで聞いていいのかな…」
「文法間違ってたらどうしよう…」
ってグズグズしてしまう。
正直、質問するよりも「黙ってググって自己解決」してたほうがラクだった。
でも、それじゃ全然前に進まない。
勇気を出して、Rajに1on1ミーティングをお願いした
悩んだ末、思い切ってRajにSlackでこう送った。
Hi Raj,
I’m struggling a bit with the current ticket and also with the review comments.
Would it be possible to have a short 1on1 call to clarify a few things?
Thank you!
震える手で送信。
でも、Rajの返事は意外にもすぐ来た。
Raj:
「Of course! Let’s jump on a call in 10 mins.」
Zoomでの1on1。
Rajはとてもフレンドリーに、1つ1つの指摘を画面共有しながら説明してくれた。
Raj:
「Hiro, no worries. It’s normal to struggle at the beginning. We don’t expect you to be perfect.
But we do expect you to ask questions and communicate.
Don’t try to fix everything alone. We’re a team.」
この言葉、正直泣きそうになった。
「もっと早く聞けばよかった…」って心の底から思った。
初めての「ちゃんとした」修正PR提出、そしてマージ!
Rajのアドバイス通り、修正作業を開始。
- 変数名をキャメルケースに直す
- APIエラー時の例外処理追加
- ユニットテストを書く(xUnitで初挑戦)
- XMLコメント追加
- レスポンスデータのページネーション対応
今まで日本でやってきたスタイルとはまるで違う。
でも「これがグローバルスタンダードなんだ」って必死に食らいついた。
数日かかって、ようやく修正版のPRを提出。
今度はRajとEmmaから「Looks good!」のコメントがついて、
初めての「Merge」ボタンが押された瞬間、本当に嬉しかった。
できないことを、できるふりをしない大切さ
この経験で学んだのは、ただ一つ。
「できないことは、できないって早めに言うこと。」
「質問は恥じゃない。」
「英語が下手でも、伝えようとする気持ちが大事。」
日本では「迷惑かけないように」「黙ってがんばる」のが美徳だったけど、
ここでは「黙ってる=何もしてない」と思われる。
質問しない=やる気がない、って受け取られる。
夜、久しぶりに日記アプリにこう書いた。
「今日は一歩前進した気がする。」
チームに馴染むまでの道のり ― 英語、技術、文化の壁を乗り越えて得たもの
初PRが無事にマージされたあの日から、少しずつ、少しずつだけど、毎日が変わりはじめた。
朝、Slackを開くと、今まではただの情報の洪水にしか見えなかったスレッドが、少しずつ意味を持つようになってきた。
英語の文章も、最初は単語レベルでしか理解できなかったのに、今では文脈ごとわかることが増えてきた。
コードレビューコメントも、単なる「赤いダメ出し」じゃなくて、「どうすればもっと良くなるか」というアドバイスに見えるようになってきた。
英語コミュニケーション、心がけた3つのこと
特に大きかったのは「英語でのチームコミュニケーション」に対する考え方の変化。
正直、最初の数週間は怖くてしょうがなかった。
英語がうまく出てこない。
言いたいことの半分も伝えられない。
それでも、ある日ふと気づいた。
「誰も、自分の英語力なんて気にしてない。」
RajもEmmaも、他のチームメンバーも、とにかく「内容」「意図」「やる気」を見てくれてた。
そこで、意識したことが3つ。
- 短くてもいいから、すぐ返すこと
「Let me check and get back to you later」でもいい。
「Sorry, could you clarify?」でもいい。
沈黙よりは100倍マシ。 - わからないときは、素直に聞くこと
「Sorry, I didn’t catch that. Could you say that again?」
「Could you explain that in another way?」
これ、使いまくった。 - 相手の英語フレーズを真似する
特にSlackのやり取り。
他の人が使ってる表現をそのままコピペ脳内保存して、次回そっくり真似した。
「わからないことリスト」をNotionで管理
技術面では、「わからないことリスト」をNotionに作った。
例:
| 日付 | キーワード | 内容 | 調べた結果 | 次回のTODO |
|---|---|---|---|---|
| 7/10 | Blazor Lifecycle | OnInitializedAsyncのタイミングがわからない | 公式ドキュメントで確認 | サンプルプロジェクト作って試す |
| 7/12 | GitLab CI/CD | .gitlab-ci.ymlの書き方 | チームの既存ファイルを参照 | 自分用のテンプレ作る |
| 7/14 | Agile Ceremony | Sprint PlanningとBacklog Refinementの違い | Scrum Guideで復習 | 次のプランニングで実践 |
これを毎日更新して、週末には必ず見返した。
少しずつだけど、技術用語にもアジャイル用語にも慣れてきた。
チームメンバーとの距離感が一気に縮まった「ある出来事」
そんなある日。
金曜日の夕方、Slackに突然メッセージが流れる。
Emma:
「Hey team, let’s have a casual online beer session tonight! Bring your drinks! 🍺」
「うわー出た、海外企業名物、バーチャル飲み会。」
最初は正直迷った。
英語の雑談なんて絶対ついていけない自信があったし、
時差のせいで日本時間だと深夜になる。
でも、思い切って参加。
Zoomを開くと、みんな笑顔で画面越しに乾杯してた。
Rajはインドビール、Emmaはワイン、他のメンバーはコーヒーやソフトドリンク。
私はというと、日本から持ってきた缶チューハイ(笑)
最初は聞き役に徹してたけど、途中でRajが話を振ってくれた。
Raj:
「Hey Hiro, how’s your first month so far? Any cultural shock? 😄」
私は正直に言った。
「Honestly… It’s been super tough.
Understanding English, learning Blazor, catching up with CI/CD… Everything is new for me.
But… I’m enjoying it!」
みんな笑ってくれて、そこから自然に会話が続いた。
日本のラーメンの話、アニメの話、東京の夏の蒸し暑さの話。
気づけば1時間以上、英語で笑いながら話してた。
「Hiro、来週のデモ、君がやってみない?」
数週間後、さらに大きな転機がきた。
次のスプリントレビューの前日、PMがこう言った。
PM:
「Hiro, how about presenting your recent UI changes in the next demo?
Just a 5-minute talk, nothing fancy.」
一瞬「ムリ!」って思った。
でも次の瞬間、なぜか自然にこう答えてた。
「Sure! I’ll try!」
前日の夜、部屋で一人リハーサル。
スライドは作らないで、画面共有だけでいこう、と決めた。
5分間、シンプルに、「Before」「After」「What I changed」「Any questions?」この流れだけに絞った。
本番当日、英語でのプレゼンはガチガチだったけど、
終わったあと、PMが笑顔で言ってくれた。
PM:
「Great job Hiro! Clear and concise. Welcome to the team officially!」
この一言、今でも忘れない。
振り返って思うこと:海外エンジニア生活は「修行」でもあり「成長」でもある
この数か月で、身に染みて感じたことがある。
- 「完璧な英語」なんて求められてない
求められてるのは、「誤解なく伝える努力」。 - 「できません」って言える勇気が武器になる
わからないなら、わからないって言えばいい。
それがグローバルスタンダード。 - 「自分は日本人だから仕方ない」は言い訳にならない
プロジェクトに貢献するのに国籍は関係ない。
「どんな価値を出せるか」だけが評価基準。
今、もしあの日の自分にひと言だけ言えるなら、こう言いたい。
「怖がるな。英語も技術も、最初からできる人なんていない。」
海外で働くITエンジニア生活は、毎日が挑戦。
でもその分、成長速度も日本の何倍も早い。
最後に:これから海外エンジニアを目指す人たちへ
もしこの記事を読んでる人の中に、
「自分もいつか海外で働きたい」
「でも英語が不安」「技術力が不安」って思ってる人がいたら、
こう伝えたい。
「大丈夫。行けばなんとかなる。
でも“行く前”に少しでも“自分の武器”を増やしておくと、もっとラクになる。」
私の場合は「C#とWPF」がその武器だった。
BlazorもCI/CDも、入ってから全力で学んだ。
最初から全部できる必要はない。
必要なのは、「できるようになろうとする姿勢」だけ。
海外でのITエンジニア生活は、
間違いなく「人生で一番成長できる環境」。
もし、次に迷ったら、ぜひこの言葉を思い出して。
「Go for it. You’ll figure it out later.」

コメント