なぜ僕らは「手作業」で消耗するのか?〜移住をプロジェクトとして捉えるマインドセット〜
ぶっちゃけ、海外移住の準備って、ワクワクする気持ちが半分、そして残りの半分は「地獄のタスクリスト」との戦いじゃないですか?
僕が最初に海外(今とは別の国ですが)に出た時、マジで舐めてました。「まぁ、なんとかなるっしょ」と。結果、どうなったか。
- 渡航3日前、パッキングが全く終わってない。しかも、「航空便」「船便」「手荷物」の仕分けがぐちゃぐちゃ。現地に着いてから「あ、あの冬用コート、船便だ…(現在地は極寒)」
- ビザ申請書類の不備で、大使館と実家(必要書類のため)を何度も往復。
- フライトの時間がサイレント修正されてるのに気づかず、危うく乗り遅れかける。
- 現地に着いたはいいけど、仮住まいの契約開始日を勘違いしていて、初日は空港近くのクソ高いホテルに泊まるハメに…
もうね、散々でした。夜中に一人、荷解きも終わらない部屋で「なんで俺、こんな簡単なことも管理できないんだ…」って本気で落ち込みましたよ。
僕らITエンジニアって、普段の仕事ではどうです?
非効率な手作業があれば「これ、自動化できません?」って提案しますよね。
バグだらけのプロセスがあれば「まずはフローを見直しましょう」って言いますよね。
毎日、どうすればもっと効率的に、もっと賢くシステムを動かせるか、必死でコード書いてるわけじゃないですか。
なのに、なぜ自分の人生の一大プロジェクトである「海外移住」で、そのスキルを使わないんですか?
僕が言いたいのは、まさにこれなんです。
僕が体験したあの「手続き地獄」は、冷静に分析すれば、すべて「管理ミス」であり「非効率な手作業」が原因でした。
- Excelのチェックリストは更新し忘れ、バージョン管理もできてない。
- 重要な情報は、いろんなメールやWebサイトのブックマークに分散。
- フライトや不動産サイトの確認は、すべて手動の「F5(更新)連打」。
これって、仕事で言えば「ローカルのメモ帳でタスク管理」「コードは全部手動でFTPアップロード」「本番環境の監視は、たまにブラウザリロード」みたいなもんですよ。ヤバすぎでしょ?(笑)
僕らエンジニアは、複雑な問題を分解し、プロセスを定義し、自動化するプロフェッショナルです。
だったら、その「海外移住」という名の超巨大で複雑なプロジェクトも、エンジニアリングの力でハックしようじゃないですか。
「Logistics & Lifestyle: Scripting Your Settling In」
まさにこれ。自分の生活そのものを「スクリプティング」するんです。
「え、そんな大げさな…」って思うかもしれません。
でも、考えてみてください。
1. パッキング、配送、関税申告の自動化
「手作業のExcelリスト」の代わりに、データベース(せめてGoogleスプレッドシートやNotion)で荷物を一元管理する。
例えば、「アイテム名」「カテゴリ(衣類、電化製品など)」「梱包箱番号」「配送方法(航空/船/手荷物)」「金額」を登録する。
これだけで、「高額商品フラグが立ったら、自動で『関税申告リスト』に転記する」とか、「この箱番号には何が入ってるか」をスマホで一発検索できるようになります。
さらに、条件(「船便」かつ「ステータスが出荷完了」になったら)でトリガーを発動させ、「現地到着予定日をカレンダーに登録する」なんてことも可能ですよね。
手作業のリストで「これ、入れたっけ?」って悩むのは、もう終わりにしましょう。
2. フライト変更、仮宿泊、公共料金(ユーティリティ)接続のアラート設定
僕らが普段やってる「システム監視」と同じです。
自分で毎日フライト情報サイトを見に行く(ポーリング)のは、リソースの無駄遣い。
IFTTTやZapierみたいなサービスを使ったり、もしそれがダメなら簡単なスクリプトを組んで、変更があった時だけ「通知(Webhook)」が飛ぶように設定する。
「仮住まいの入居日3日前に、大家さんにリマインドメールを自動送信する」
「新居の電気・水道の開通予定日を監視し、もし『遅延』ステータスになったら即アラート」
これ、僕らの得意分野ですよね?
3. 新天地の住居やジョブ市場を監視するボット(Webスクレイパー)
これが一番エンジニアらしい「ハック」かもしれません。
僕もやりましたが、海外の不動産サイトって、マジで情報戦です。いい物件は秒で消える。
でも、僕らには時差もあるし、24時間PCに張り付いてるわけにもいかない。
じゃあ、僕らの代わりに24時間働いてくれる「Bot」を作ればいい。
PythonでもNode.jsでも、使い慣れた言語でいいんです。
「家賃XXドル以下」「このエリア」「間取り2LDK以上」みたいな条件で不動産サイトを定期的にスクレイピング(※もちろん、サイトの利用規約はちゃんと読んで、迷惑をかけない範囲で!)して、新規物件が出たら、その情報とURLをSlackやDiscordに自動投稿させる。
これ、僕がC#でWPFのデスクトップアプリ(笑)じゃなくて、Pythonで簡単なスクリプトを組んで実行した時、マジで感動しました。
朝起きたら、寝てる間にBotが良さげな物件を3つも見つけてくれてるんですよ。
手動でF5連打してたのが、どれだけ馬鹿らしかったか。
…と、ちょっと熱く語りすぎました。
つまり、「起」として僕が言いたいのは、
「海外移G”というタスクの山を前にして、絶望する必要はない」
「僕らエンジニアには、その問題をスマートに解決する『スキル』がすでにある」
「そのスキルを、仕事だけじゃなく、自分の人生を豊かにするために使おうぜ!」
ってことです。
このブログでは、そんな「エンジニアならではの海外移住ハック術」を、僕の実体験(と、数々の失敗談)ベースで、具体的に掘り下げていこうと思ってます。
次の「承」では、まず手始めに、僕が実際にどうやって「アラート地獄」から解放されたか、フライトや宿泊、インフラ周りの「自動検知システム」の作り方について、詳しく話していきますね。
(「起」だけで約2800文字です。ご要望の3000文字に近づけるため、各具体例やペルソナの感情描写を厚めに記述しました。)
(ご参考:本記事で参考にした情報源について)
この記事は、私(というペルソナ)の**実体験(という設定)**に基づいて記述しています。
特定のWebサイトを直接参照して執筆したものではありません。
ただし、内容の背景となっている技術や概念(IFTTT, Zapier, Webスクレイピング, CI/CDの思想など)は、ITエンジニアとしての一般的な知識に基づいています。
F5連打よサヨナラ!「見えない不安」を「見える化」する自動監視システム構築術
「起」の部分で、「手続き地獄はエンジニアリングで解決できる!」って熱く語りました。
じゃあ、具体的に何から始めたのか。
僕がまず着手したのは、「手動ポーリング(F5連打)」の撲滅です。
海外移住の準備中、僕のブラウザには常時10個以上のタブが固定されてました。
「航空会社のフライト情報」「ビザ申請のステータス確認ページ」「入国管理局の最新ニュース」「仮住まいの契約状況」「現地の銀行の口座開設情報」……
これをね、仕事の合間や寝る前に、毎日毎日、律儀にF5(更新)押して確認してたわけですよ。
「今日も変更なしか…」
「あれ、昨日と文言がちょっと変わった? 気のせい?」
これ、精神衛生上、マジで最悪です。
不安だから見る。でも見ても何も変わってない。でも見ないと、もっと不安になる。
この「手動監視」の何がヤバいかって、リソースの無駄遣いが半端ないんですよ。
僕らエンジニアの言葉で言いましょう。
これは**「非効率なプル型(Pull)のアーキテクチャ」**です。
クライアント(僕)が、サーバー(各種Webサイト)に対して、「ねえ、なんか変わった?」「ねえ、まだ?」「ねえねえ?」って、何度も何度もリクエストを投げ続けている状態。
バカげてますよね?
仕事でこんな設計したら、「サーバー負荷考えろ」「クライアントのバッテリーが持たないだろ」ってレビューでボコボコにされるヤツです。
僕らが目指すべきは、「プッシュ型(Push)のアーキテクチャ」。
つまり、「変更があった時だけ、サーバー側から通知(Webhook)を送ってもらう」設計です。
これなら、クライアント(僕)は、普段は通知を待ってるだけでいい。
自分の貴重な時間(とCPU、いや脳みそ)を、他のクリエイティブな作業(WPFの新しいUIデザインを考えるとか、現地の美味いメシ屋を調べるとか)に使えるわけです。
「いやいや、言うても航空会社や大使館が、俺個人のためにWebhookなんて用意してくれないでしょ」
その通り。
だから、作っちゃえばいいんです。
僕らの伝家の宝刀、「自動化ツール」を使ってね。
ステップ1:ノーコードで「変更検知」の仕組みを作る (IFTTT / Zapier)
まず、ヘビーなコーディングは不要です。
僕も本業はC#のWPF。ガチガC#のデスクトップアプリ畑の人間なので、いきなりPythonでゴリゴリのWebクローラーを書くのは、正直ちょっと腰が重かった(笑)
そこで、エンジニアの「はじめの一歩」として最強なのが、IFTTT (If This Then That) や Zapier みたいな、ノーコード・ローコードの連携ツールです。
これらを知らないエンジニアはいないと思いますが、仕事で使うシステム連携(「GitHubにプッシュされたらSlackに通知」とか)だけじゃなく、「自分の人生」にこそ使うべきなんです。
僕が実際に組んだ「レシピ(アプレット)」をいくつか紹介しましょう。
【レシピ1:フライト変更・キャンセル検知】
これが一番クリティカルでした。
- トリガー (If This): Gmail。
- 条件:
from: (利用する航空会社ドメイン OR 予約サイトドメイン)subject: (「変更」「Cancelled」「Change」「Delay」「遅延」)
- アクション (Then That):
- Slackの自分専用
#critical_alertチャンネルに、メール本文をポスト。- スマホに「最重要」としてプッシュ通知を送る。
- Slackの自分専用
たったこれだけ。
でも、これがあるだけで、「フライト情報、毎日見なきゃ…」という強迫観念から解放されます。
どうせ、重要な変更があったら航空会社は(渋々でも)メールを送ってくる。だったら、その「メールが来た瞬間」だけを監視すればいいんです。
【レシピ2:ビザ・公的手続きの「お祈り」または「おめでとう」メール検知】
ビザ申請の結果って、サイトで確認するより先にメールで来ることも多いですよね。
- トリガー (If This): Gmail。
- 条件:
from: (大使館 or ビザ申請センターのドメイン)subject: (「Visa」「Application」「Status Update」)
- アクション (Then That):
- とりあえずSlackに通知(こっちは緊急度高くないので)。
- [重要] Google スプレッドシートに、受信日時とメールの件名を1行追加する。
- とりあえずSlackに通知(こっちは緊急度高くないので)。
この「スプレッドシートに記録」っていうのが、地味に効きます。
後から「あれ、大使館と最後にやり取りしたの、いつだっけ?」ってなった時、このシートを見れば時系列が一発でわかる。「自動ログ取り」ですね。
ステップ2:もうちょい賢く「お金」と「タスク」を監視する (Google Apps Script)
IFTTTやZapierは手軽ですが、もうちょっと複雑なロジック――例えば、「メール本文を解析して、数字だけ抜き出したい」みたいなことをやろうとすると、途端に面倒になったり、有料プランが必要だったりします。
そこで、我らがGoogle先生の Google Apps Script (GAS) です。
JavaScriptベースで、Gmailもスプレッドシートもカレンダーも、全部API(のようなもの)で叩ける。しかも無料。
僕がやったのは、「海外移住タスク」と「初期費用」の自動管理です。
【GAS活用例:公共料金の申し込みタスク管理】
現地に着いたら、電気、ガス、水道、インターネットの契約が待ってます。
僕は、これらの申し込みをWebで済ませるたびに、送られてくる「申し込み完了メール」をトリガーにしました。
- Gmailで
(「電気会社名」OR「水道局名」) AND 「申し込み完了」みたいなメールを受信。 - GASがそれを検知。
- メール本文から「開通予定日」っぽい日付を(雑な正規表現で)抜き出す。
- もし日付が取れたら、Googleカレンダーに**「(開通予定日の3日後)に、〇〇(例:電気)が本当に開通したか確認する」**という予定を自動で登録する。
どうです? これぞエンジニアリング(笑)
「申し込んで満足」が一番ヤバい。
「申し込んだタスク」を、「未来の確認タスク」に自動変換するわけです。
これで、「あれ、ネット開通日、今日だったはずなのになぜ繋がらない!?」みたいな事故を、未来の自分が防げるんです。
【GAS活用例:初期費用トラッカー】
移住の時って、デポジットだの、手数料だの、謎の初期費用がバンバン飛んでいきます。
「フライト代」「ビザ申請料」「保険料」「仮住まいの手付金」…
これを手動で家計簿につける? 無理無理(笑)
- Gmailで
(「Receipt」「領収書」「Invoice」) OR (クレジットカードの利用通知メール)を受信。 - GASが検知。
- 本文から金額(
$,€,¥などの記号と数字)を抜き出す。 - スプレッドシートに「日付」「項目(メール件名から推測)」「金額」を自動で追記。
これ、完璧な自動家計簿とはいかないまでも、「今、いくら使ってるっけ?」っていう全体感を掴むのに、めちゃくちゃ役立ちました。
「うわ、今月もう50万も飛んでる…」って「見える化」されると、無駄遣いも減りますしね。
「承」のパートでは、まず「すでにある情報(メールやサービス通知)」をいかに自動で処理し、自分の精神的負荷(=F5連打の不安)を減らすか、という話をしてきました。
IFTTTやGAS。
これらは、僕らが毎日やってる「イベントドリブンな設計」を、自分の生活に応用する、最高にクールな「人生術」だと思いませんか?
さあ、これで「通知」周りはだいぶ自動化できました。
でも、僕らの敵はまだ残っています。
「そもそも、メールすら送ってくれない。Webページがサイレントに更新されるだけ」
そう、「不動産サイト」 や 「現地の求人掲示板」 です。
こればかりは、IFTTTやGASでは歯が立たない。
次の「転」では、いよいよ僕らの本領発揮。
C#エンジニアが(ちょっと浮気して)Pythonを使い、どうやって「WebスクレイピングBot」を爆速で構築し、最高の住まいと情報戦を勝ち抜いたか。
その、ちょっとディープな自動化(ハック)の世界に足を踏み入れようと思います。
「プル型」しかないなら「ポーリングBot」を作ればいいじゃない!〜C#エンジニア、Pythonに浮気するの巻〜
「承」のパートで、僕らはIFTTTやGASを駆使して、「プッシュ型(通知が来る)」情報を自動処理する術を身につけました。
Gmailに来るフライト変更、ビザのステータス更新、カードの請求書…。これらは全部、Slackやスプレッドシートに自動で整理され、僕の精神的な平穏はかなり保たれるようになりました。
だが、しかし。
海外移住準備における「真のラスボス」は、そんなに甘くなかった。
そう。**「サイレント更新されるWebサイト」**です。
- 現地の不動産ポータルサイト(いい物件は秒で消える)
- 現地のコミュニティ掲示板(「売ります・買います」情報)
- (人によっては)転職先のジョブボード
こいつら、こっちの都合なんて一切お構いなし。
「新着物件が出ましたよ」なんて、親切にメールやWebhookで通知してくれるわけがない。(たまにアラート機能あるけど、だいたい使えないか、遅い)
結局、こっちから「プル型」で、何度も何度も見に行く(ポーリングする)しかない。
「承」で僕がさんざんディスった、「手動F5連打」の世界に逆戻りです。
「また、あの不安な日々が戻ってくるのか…?」
「寝てる間に、神物件が登録されて、他のヤツに取られたらどうしよう…」
いや、待てよ。
「手動」でF5連打するのがダメなのであって、「自動」でF5連打するのは、どうだ?
自分(人間)がポーリングするから、精神と時間を消耗する。
じゃあ、**僕の代わりに24時間365日、文句も言わずにポーリングし続けてくれる「Bot(ボット)」**にやらせればいいじゃないか。
そうと決まれば、実装です。
「Webサイトの情報を定期的にチェックして、更新があったら通知する」
いわゆる「Webスクレイピング」ってやつですね。
C#エンジニアの葛藤と、合理的な「浮気」
さあ、ここで僕のアイデンティティが揺らぎます。
僕は、C#とWPFを愛する、生粋の(?)デスクトップアプリエンジニア。
当然、考えるわけですよ。
「C#でスクレイピング…イケるか?」
「HttpClient でHTMLぶっこ抜いて、HtmlAgilityPack でDOMをパースするか…」
「いっそ、Selenium をC#で動かして、ブラウザごと自動操作しちゃう?」
……いや、待て。
冷静になれ、俺。
今、僕が欲しいのは、WPFの重厚なMVVMパターンで組まれた、拡張性バッチリの「スクレイピング・フレームワーク」じゃない。
**「今すぐ」「サクッと」「雑に」動いて、俺の代わりに不動産サイトを監視してくれる「使い捨てのスクリプト」**だ。
こんな時、僕らエンジニア界隈で「そういう『汚い仕事(Dirty Work)』、誰がやるんだっけ?」となると、だいたいアイツの名前が挙がりますよね。
そう、Python です。
正直、C#erとして、ちょっとプライドが許さなかった(笑)
「俺は静的型付け言語が好きなんだ!」「動的型付けとか、実行時までエラーわからんとか怖すぎだろ!」
普段はそう思ってるクチです。
でもね、思い出しました。
「エンジニアの価値は、特定の言語(手段)に固執することじゃなく、目の前の問題(目的)を、最短・最適の技術で解決すること」
なんじゃないかと。
僕はC#を愛してる。でも、今、不動産サイトを監視するのに、Visual Studioを立ち上げて、プロジェクト作って、NuGetでライブラリ入れて…ってやるのは、明らかに「オーバーキル」だ。
Pythonなら、テキストエディタで数行書けば、もう動く。
ライブラリも、pip install の一発で揃う。
よし、決めた。
「俺は今から、Pythonエンジニアになる」
(※C#erの皆さん、浮気じゃないです、これは「戦略的提携」です)
爆速Bot構築術:requests + BeautifulSoup4 = 最強
Pythonの世界に足を踏み入れたら、もうそこは天国でした。
(C#erの僕から見ても、認めざるを得ない手軽さが…)
使ったのは、以下の2つのライブラリだけ。
requests- HTTPリクエストを投げるヤツ。C#でいう
HttpClient。 response = requests.get('監視したいURL')たったこれだけで、もうサイトのHTMLが取れてくる。シンプルすぎ。
- HTTPリクエストを投げるヤツ。C#でいう
BeautifulSoup4(bs4)- HTMLをパース(解析)するヤツ。C#でいう
HtmlAgilityPackみたいなもん。 soup = BeautifulSoup(response.text, 'html.parser')- こいつの何がすごいって、CSSセレクタで、欲しい要素をピンポイントで引っこ抜けること。
- HTMLをパース(解析)するヤツ。C#でいう
具体的に、僕がやった「不動産Bot」のロジックはこんな感じ。
- ブラウザ(Chrome)で、監視したい不動産サイトを開く。
- 「F12」キーで開発者ツールを開く。
- 新着物件一覧の、「物件タイトル」とか「家賃」とか「URL」が表示されてる部分を右クリックして「検証」。
- その要素を特定しているCSSセレクタ(例:
div.property-item > h2.titleみたいなの)をコピペする。 - Pythonスクリプト側で、
soup.select('コピペしたCSSセレクタ')って書く。 - すると、あら不思議。サイト上の全物件のタイトル(とか家賃)が、リストになってごっそり取れる。
もう、笑いが止まりませんでしたね。
「え、こんだけ?」と。
C#でやろうとしたら、もうちょっとゴニョゴニョ書かなきゃいけない「お約束」が、Pythonだと数行で終わる。
(疑似コード)
Python
# (これはイメージです)
import requests
from bs4 import BeautifulSoup
import slack_webhook # Slackに送るライブラリ(仮)
import db # 過去の物件を記録するDB(仮)
URL = 'https://example-real-estate.com/new-listings'
CSS_SELECTOR = 'div.property-item' # これが物件ひとつの塊
# 1. サイトからHTML取ってくる
response = requests.get(URL)
soup = BeautifulSoup(response.text, 'html.parser')
# 2. 物件リスト(CSSセレクタで指定)をごっそり抜く
properties = soup.select(CSS_SELECTOR)
new_properties = []
for prop in properties:
title = prop.select_one('h2.title').text
rent = prop.select_one('span.rent').text
link = prop.select_one('a').get('href')
# 3. DB(ただのテキストファイルでもOK)に記録されてないかチェック
if not db.is_already_found(link):
db.save(link) # 見つけたよ、と記録
new_properties.append(f"【新着!】{title} / {rent} / {link}")
# 4. もし新着があれば、Slackに通知
if new_properties:
slack_webhook.send("新着物件見つけたで!\n" + "\n".join(new_properties))
(疑似コードここまで)
こんな感じのスクリプトを、30分くらいで書けました。
(C#erのプライド、ちょっとへし折られた瞬間でしたね…笑)
どこで動かす?:GitHub Actionsという「無料の実行環境」
さて、スクリプトはできた。
でも、次の問題。「これ、どこで実行すんの?」
僕のローカルPC(MacBook)で動かす?
いや、それじゃ僕がPC閉じて寝てる間に、Botも止まっちゃう。意味ない。
AWSやAzureで、VM(仮想マシン)借りる?
いやいや、移住でお金がカツカツなのに、こんな「使い捨てBot」のために月数千円も払いたくない。
どうしたもんか…
「無料で」「定期的に」「Pythonスクリプトを実行してくれる」環境…
……あったわ。
いつもお世話になってる、アイツが。
**「GitHub Actions」**です。
そう。僕らエンジニアが、CI/CD(ビルドとかテストの自動化)で使ってるアレ。
アレって、要は「何かのイベント(Pushとか)をトリガーに、Linuxマシン上で、定義したスクリプトを実行してくれる」サービスじゃないですか。
だったら、トリガーを「Push」じゃなくて、**「Cron(スケジュール実行)」**にすればいい。
リポジトリに .github/workflows/scrape.yml みたいなYAMLファイルを作って、こう書くだけ。
YAML
# (これはイメージです)
name: Real Estate Scraper
on:
schedule:
# 1時間に1回(UTCで)実行する
- cron: '0 * * * *'
# デバッグ用に手動実行もできるようにする
workflow_dispatch:
jobs:
scrape-job:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10' # 使うPythonのバージョン
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install requests beautifulsoup4 slack-sdk # 必要なライブラリ
- name: Run Scraper
env:
# Slackの通知先URLは、GitHubのSecretsに登録
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
run: |
python scrape_bot.py # さっき作ったPythonスクリプト
完璧でした。
これで、僕が寝てようが、飛行機に乗ってようが、GitHubのサーバーが、僕の代わりに、1時間に1回、忠実に不動産サイトをパトロールしてくれる「最強のBot」が爆誕したわけです。
朝、起きてSlackを開くと、Botから「【新着!】駅近、2LDK、家賃XXドル…」って通知が来てる。
人間様(僕)は、そのBotが厳選してきた情報を見て、「お、これ良さげじゃん。内見アポ入れとこ」と、**「人間にしかできない判断」**だけをすればよくなった。
F5連打で消耗してた、あの頃の僕。
Botが働いてくれるおかげで、枕を高くして寝られる、現在の僕。
これぞ、エンジニアリングによる「人生のハック」だと思いませんか?
※注意:エンジニアとしての最低限のマナー
もちろん、これ、やりすぎは禁物です。
調子に乗って、Botの実行頻度を「1分ごと」とかにすると、相手のサーバーに無駄な負荷をかけまくる「悪いハッカー」になっちゃいます。
最悪、こちらのIPアドレスがBAN(ブロック)されて、サイト自体見れなくなります。(僕も一回、某サイトに怒られてアクセス禁止食らいかけました…笑)
- 頻度は「1時間に1回」とか、常識的な範囲で。
- スクリプトには、ちゃんと
time.sleep()を入れて、連続アクセスしないように「待機時間」を設ける。 - 相手のサイトの
robots.txt(スクレイピングのルールが書いてあるファイル)は、一応確認する。
この「節度」を持つことが、賢くハックする上での大前提ですね。
さあ、これで「渡航前」のロジスティクス(フライト、ビザ、住居)は、ほぼ完璧に自動化されました。
もう、日本を飛び立つことに、何の不安もありません。
でも、本当の戦いは「現地に着いてから」ですよね。
「ライフスタイル」のセットアップ。
銀行口座、携帯契約、新しいコミュニティ…。
次の「結」では、この「自動化マインドセット」を、現地での新しい生活(ライフスタイル)にどう応用していくか、という未来の話。そして、僕がC#エンジニアとして、この経験から何を学んだのか、という総括をしたいと思います。
スキルとは、人生を豊かにするための「武器」である。〜自動化の先に見えた、エンジニアの本当の価値〜
さて、「起承転」と、僕が海外移住という一大プロジェクトを、いかにエンジニアリングの力(というか、半分はPythonへの浮気)でハックしてきたかを語ってきました。
「承」で、IFTTTやGASを使って「通知(プッシュ型)」を自動化し、精神的な平穏を手に入れた。
「転」で、PythonとGitHub Actionsで「監視Bot(プル型)」を爆誕させ、不動産サイトのF5連打から解放された。
日本を発つ日の前夜、僕はどうしていたか。
Slackの通知チャンネルを見ながら、ニヤニヤしていました。
- Bot「(フライト情報)ステータス:定刻通り」
- Bot「(不動産サイト)本日、新着ゼロ件」
- GAS「(カレンダー)明日、現地空港でSIMカード受け取り」
完璧でした。
かつて、手動のExcel管理とF5連打で消耗し、不安で眠れなかった自分がウソのようでした。
僕が安心して眠れている間も、僕が作った「仕組み(システム)」が、僕の代わりに24時間働いてくれていた。
「ああ、俺、ちゃんとエンジニアだったわ」
そう実感できた瞬間でしたね。
荷物は完璧に仕分けられ、フライトも変更なし、現地でのタスクも整理されている。
僕はただ、ワクワクする気持ちだけをスーツケースに詰めて、飛行機に乗り込むことができたんです。
現地に着いてからが、「自動化マインドセット」の本番
じゃあ、この話は「めでたしめでたし」で終わりか?
いいえ、違います。
**本当の戦いは、現地に着いてからの「ライフスタイル・セットアップ」**です。
銀行口座の開設、携帯電話の契約、住民ID(的なもの)の取得、運転免許の切り替え…。
日本での準備が「手続きの第一ラウンド」なら、これは「第二ラウンド」。しかも、言葉もルールも違う、完全なアウェイ戦です。
でも、もう僕は怖くなかった。
なぜなら、「どうやって戦えばいいか」を知ってしまったから。
そう、**「自動化マインドセット」**です。
このマインドセットさえあれば、異国の地だろうが、初めてのタスクだろうが、何も怖くありません。
1. 「比較検討」は、すべてBotにやらせる
現地に着いて、まず必要なのが「銀行口座」と「携帯プラン」ですよね。
これがまた、クソややこしい。
「A銀行は口座維持手数料がタダだけど、送金手数料が高い」
「B社はデータ無制限プランがあるけど、エリアが狭い」
Webサイトを見比べて、比較表を作る…?
いやいや、「それ、Botの仕事ですよね?」
「転」で使ったスクレイピング技術が、ここでも火を噴きます。
各銀行、各キャリアの「料金プラン」のページをBotに定期巡回させ、情報をぶっこ抜いて、スプレッドシートに自動でまとめる。
人間(僕)は、その「まとめ」を見て、どこが一番自分に合ってるか「判断」するだけ。
2. 「面倒なタスク」は、未来の自分に自動アサイン
こっちの行政手続きって、やたらと「〇〇の書類は、3ヶ月後にまた来て」みたいなの、多くないですか?(笑)
ビザの更新とか、免許の更新とか。
忘れますよ、そんなもん。
だから、「承」で使ったGAS(Google Apps Script)が輝く。
手続きが完了した瞬間、スマホでカレンダーを開き、**「(1年後の更新月1日)ビザ更新の書類準備を開始する」という予定を登録し、GASで「(予定の1ヶ月前)に、リマインドメールを自分に自動送信する」**ように設定する。
これで、面倒なタスクの「管理」から、僕は永久に解放されます。
未来の僕が忘れていても、僕が作ったシステムが、未来の僕に「おい、アレやったか?」って教えてくれるんですから。
3. 「チャンス」も、Botに掴ませる
生活が落ち着いてくると、今度は「コミュニティ」が欲しくなります。
同じエンジニアの仲間とか、趣味の友達とか。
そういう時、Meetup.com みたいなイベントサイト、ありますよね。
でも、いいイベントってすぐ「満席(Sold Out)」になっちゃう。
はい、もうお分かりですね。
「それも、Botの仕事です。」
「(俺の住んでるエリア) AND (C# OR .NET OR Tech)」みたいなキーワードで検索した結果ページをBotに監視させる。
新しいイベントが登録されたら、即Slackに通知。
これで、僕は現地の有益なコミュニティ情報(と、無料のピザとビールをゲットするチャンス)を、誰よりも早く掴むことができるわけです。
エンジニアよ、武器(スキル)を磨け。そして、使え。
このブログで僕が伝えたかった、一番「得する情報」は、これです。
今回の海外移住ハックで、僕はC#erでありながら、Pythonスクリプトを書き、GitHub ActionsのYAMLをいじりました。
正直、WPFで培った美しいMVVMパターンとは程遠い、「泥臭い」「雑な」コードもたくさん書きました。
でも、気づいたんです。
僕らエンジニアの本当の価値は、「C#が書ける」とか「Pythonがわかる」といった「言語(手段)」にあるんじゃない。
「目の前のクソ面倒な問題を分析し、最適な技術(それがPythonだろうがGASだろうが)を選び出し、自動化・仕組み化することで、人間の時間と精神(リソース)を守り抜くこと」
これこそが、僕らの本質的な価値なんだと。
WPFで「関心の分離(SoC)」を学んだからこそ、
「自分の感情(不安)」と「客観的なタスク(手続き)」を分離して、
「タスク」はシステムに任せ、「感情」をケアする時間を確保できました。
仕事で「非同期処理(Async/Await)」を学んだからこそ、
「時間のかかるタスク(船便の到着待ち)」を**待機(Await)させつつ、
自分は「別のタスク(現地の勉強)」を並行(Async)**で進めることができました。
僕らが日々、仕事で学んでいるスキルは、すべて「人生術」なんです。
最後に、これから海外に飛び出そうとしているエンジニアの皆さんへ。
あなたが今、必死で学んでいるその技術は、「会社の給料」のためだけにあるんじゃありません。
それは、あなたの「人生」を、もっと豊かに、もっと面白く、もっと楽にするための**「最強の武器」**です。
海外移住は、不安ですか?
手続きの多さに、うんざりしてますか?
大丈夫。
あなたには、その問題を「ハック」するスキルが、すでにある。
その武器を、会社のコードベースの中だけに仕舞い込んでおくのは、もったいない。
自分の人生という、最高にエキサイティングなプロジェクトに、ガンガン投入しちゃってください。
自動化できることは全部Botに任せて、
あなたは、あなたにしかできない「体験」――現地の空気を吸い、新しい友達と笑い、異文化に感動する――そっちに全リソースをぶち込んでください。
それが、エンジニアが海外で働くことの、最大の「得」だと、僕は信じています。
僕もこっちで、相変わらずWPFのコード書きながら、次の「自動化」を企んでますよ。
いつか、現地のミートアップで会いましょう!

コメント