人生シーケンスブレイク

シーケンスブレイク(Sequence breaking、シークエンスブレイクとも)とは、テレビゲームにおいて開発が想定している攻略ルートを逸脱し、ショートカットする行為のことである。

30歳でワーキングホリデーに行ってきた話と帰ってきた話

ミクシィのエンジニアによるex-mixi Advent Calendar 2018の11日目です。

自己紹介と、この記事について

株式会社ミクシィには2011年から2014年までの在籍でした。

2016年にワーキングホリデー制度(以下、ワーホリ)を利用してカナダへ渡航。帰国後はとあるジョイントベンチャーにWebエンジニアとして就職し現在に至ります。

ワーホリで渡航してきたは2年前の事柄ではありますが、この機会に当時の体験や感想をまとめてみようと思います。ただし、2016年の話なので例えばビザ発行が先着から抽選になっていたり、大麻が合法化されていたりと大きく変わっている点があることにご留意ください。

最新情報については下記をご参照ください。

渡航のきっかけ

元々20代半ばに、英語の習熟を兼ねてワーホリで海外に行ってみたいなぁと漠然と考えていた時期があったのですが、その時には当時勤めていた企業を退職しての渡航や滞在費用のことを考えると現実的ではなく、暫くワーホリのことを忘れておりました。

が、その後30歳を目前とした時に、年収も貯蓄も充分ではないものの20代半ばに比べれば多少の余裕はできるようになったことと、ワーホリが利用できる最期の年齢であることに気づき、折角なので渡航してみることにしました。

渡航先の国や地域をどこにするかは、個人の志向に大きく左右されるので気候やインフラや地域性をみて好きに選べばいいと思います。私はカナダのバンクーバーを選びました。

f:id:ShineSpark:20181209222631j:plain
ちょうどポケモンGoがリリースされた頃でした

情報収集方針

主に下記の3つを利用して情報収集を行いました。

  • インターネット
  • 留学・ワーホリのサポートを主な業務とする一般社団法人
  • 友人・知人

インターネットについては、ワーホリの最新情報は毎年変わり得るので現在も有効であるかどうかの確認が必要です。

ワーホリのサポートを主な業務とする一般社団法人は複数存在しています。私もとある法人を利用しました。
流石は業務としてワーホリを扱っているので情報には一定の信頼度があり、英語を全然話せない学生でも留学までしっかりサポートしますと謳っている通りの手厚いサポートが整っていました。
一方で、n = 1の感想ですが、依頼していた内容が忘れ去られていたり、個人情報の取り違えがあったりなどの杜撰な対応の他、海外留学向けの利息や手数料の高いプリペイドカードの勧誘なども受けますので、その辺りを踏まえて自分の判断で利用する必要があります。

友人・知人については、これは私の失敗なのですが、帰国後になって初めて「実はワーホリでカナダへ行ったことがある。」「私はオーストラリアへ行ったことがある。」と話を聞く機会が多くありました。
現代において、自分がこれから行こうとしている海外の国・地域・都市に既に滞在経験がある友人が身近にいるということはそう珍しいことではなかったようです。
実経験のある友人・知人の情報が最も有用でしたので、ぜひ事前に聞いてみましょう。

Vim
カナダで見つけたVim

出国準備

一人暮らしの社会人が退職直後にワーホリで渡航しようとした際には、概ね以下のような手続きが必要になります。

  • 行政手続き
  • 引越手続き
    • 電気・ガス・水道・インターネット解約
    • 物件引き払い
    • 粗大ごみ回収申し込み
    • 転送届
  • 渡航手続き
    • 現地の当面の住居の確保
    • フライト日の決定
    • 海外旅行保険の加入
    • 国際送金方法の確立
  • 渡航後の手続き
    • 現地でSIM契約
    • 語学学校探し
    • 現地の銀行口座
    • Social Insurance Numberの発行
    • 外国人在留届
  • その他
    • クレジットカード
    • 歯医者・虫歯の治療
    • (渡航後に)日本の携帯電話解約

順番を誤ると詰みタスクが満載です。私はTrelloで管理しました。

概ねインターネットなどでも既に語られていることも多いのでそれぞれの細かい手続きについては割愛しますが、注釈するとすれば以下が要注意です。

日本の携帯電話解約

日本で契約していた携帯電話の解約は、渡航前の手続きや渡航直後のトラブルに備えて出来る限り遅い方が良いです。

私は当時ドコモと契約していたのですが、解約の委任状を予め用意し、代理人を通して渡航後に解約しました。 渡航直後のみ海外ローミングサービスを利用しつつ、現地でSIMを購入した後に解約すればシームレスにインターネット利用可能なまま移行できます。

同意書・委任状のダウンロード | お客様サポート | NTTドコモ

国際送金方法の確立

メガバンクやゆうちょ銀行の窓口に赴き相談したのですが、

  • 本人名義の口座 -> 海外の本人名義の口座に送金するには、基本的に本人が窓口に来ないとNG
  • 本人以外が送金する場合には、委任状が必要
    • 海外送金する回数、金額は事前に分かりかねる
      • 委任状を出国前に必要枚数分用意するのは難しい

ということで、身内(親)が健在で一時的な滞在の場合には、海外送金は身内に頼るのが楽です。

身内に依頼する場合には、下記の流れで送金が完了します。

  • 送金してもらう金額相当を、国内の自分名義の口座から身内名義の口座へWeb経由で送金する
  • 国内在住の身内名義の口座 -> 海外で開設した自分名義の口座へ海外送金をしてもらう

上記であれば委任状不要で完結するようになります。

いずれにしても国際送金書類のフォーマットは見慣れない記入項目が多くので、事前に自分で赴いて申請フローやフォーマットについて予め確認しておいた方が親へ記入項目を伝達する際にスムーズでしょう。

なお、住信SBI銀行のVisa + デビットカードであれば、現地ATMからカナダドルで引き落とし可能です。が、住信SBI銀行は国内居住者しか契約を認めておらず、1年以上海外に滞在する場合には解約する必要があるとなっています。一方で、1年未満の滞在であれば海外旅行同等の扱いになるのか、解約の必要は特に規定はされていません。

ワーホリでの滞在の場合には1年未満に限定されるので、その前提で自分が利用している銀行のお金を現地で如何に下ろすかは直接確認しておいた方がよいでしょう。

クレジットカード

カナダは2016年当時でもクレジットカード社会でした。
コンビニやラーメン屋での支払いでもクレジットカード決済が一般的でした。 万が一、現地で急遽現金が必要になった場合には手数料が掛かるもののキャッシングも有効ですので1枚はあった方がよいでしょう。

私は渡航直後からクレジットカードを利用していたのですが、語学学校授業料の数十万円の請求が原因で、カード会社からは高額の不正な海外からの請求ということでクレジットカードが使えなくなりました。

解除の為日本のコールセンターに電話をする必要がありましたが、電話料金に気を使ってくれてコールセンターの方からコレクトコール(料金受信人払い)での掛け直しを促してくれたりするので上手く使いましょう。

康一くんの気持ちにちょっとだけなれました。

語学学校

私は英語が堪能ではないので、現地で語学学校に通うことにしました。

前述の社団法人や現地での話を聞く限りでは、語学学校は出国前にパンフレットなどの情報を基に選ぶことが多いそうですが、現地で探すこともオススメです。

現地で語学学校を探せば、大抵の学校では体験入学を実施しているので直接授業の内容を体験してから選ぶことができます。 体験入学自体が語学勉強に繋がりますし、各校への移動も現地の街並みを知るいいきっかけになります。

我々30代は社会の荒波に揉まれてタフになっているので、市街地を歩いていて語学学校の看板を見掛けたらバンバン入って行きましょう。
主要な都市であれば10校は語学学校があるのでタダでその分の英語学習ができますし、自分に最も見合った語学学校が見つかることでしょう。

ブリティッシュコロンビア大学にある新渡戸稲造像: Nitobe Memorial Garden

滞在期間中の話

語学学校

語学学校は現地の体験入学を通し、クラスメイトと対話練習の多い学校を選びました。 10代や20代のクラスメイトも多いですが、日本人の30歳は若く見えるので気にする必要はなかったです。

就職活動

語学学校を終えた後には現地でWebエンジニアとして働ければと思い、英語レジュメを作り片っ端から応募しまくりました。 ワーホリには就労制限と呼ばれるものがあり、国ごとに働ける職種・時間などに制限があります。

フルタイム相当で働くためには、やはり将来的に就労ビザを発行してもらえる企業を求めて就職活動をするのですが、30社に1社ほどレスポンスがあれば良い方で殆どが全く反応がありませんでした。

当時痛感したのですが、日系企業でもない限り海外では日本語が話せるというのは何のアドバンテージもないですね。向こうからすれば「英語はまだ不自由で就労ビザもないけど雇ってくれ」と突然言ってきた外国人を雇う理由が全くないですね。 逆に日本では海外在住経験があるというだけで割と歓迎されてしまうので、日本に戻って働くという選択肢も生存戦略としては良いのかも知れません。

最終的に2社話が進んだのですが、それらは条件が難しかった他、私個人のやむを得ない都合の為、断念せざるを得ませんでした。

カナダの観光地では日本語のスタッフ募集広告が...

帰国後の話

なんやかんやあって帰国してきた後にも困難が待ち受けていたのでその話もします。

帰国初日通信手段がない問題

出国中にドコモを解約してしまっていたので、帰国直後に通信手段がありません。
帰国日にもすぐさま回線契約できる手筈を整えておく必要があります。

無職は賃貸契約できない問題

帰国後、東京での再就職にあたって住居を契約しようと、不動産に行って物件下見していざ契約...という所で、無職の人は賃貸契約の審査は通らないと断られてしまいました。 もちろん物件に依るのでしょうが、貯蓄があってもそこではお断りされ、大きめのシェアハウスでもお断りされてしまいました。

複数の企業をマジメに就職活動するとなるとどうしても1, 2ヶ月は掛かってしまう為、結局若干のヒモ生活になりました。

国民健康保険入ってない期間に尿路結石になった問題

就職活動に多少の期間を要する為、就職活動と併行で副業をしていたのですが、その為に2徹した際に突然腹痛に襲われて救急車で運ばれた所、尿路結石でした。帰国直後で保険に入る前の期間でしたので10割負担で3万円でした。

総じて帰国後お金がない問題

ワーホリに必要な費用というと、渡航費用 + 滞在費用のみを算出するケースが多いですが、帰国してから再就職するまでの生活費用も考えると最低でもさらに50万円は必要です。就職活動に2ヶ月として、そこから初任給が出るまでの1ヶ月とすると3ヶ月は掛かるので、それらも考慮して見積もっておいた方がよいです。

以上、30歳と遅めのタイミングでワーホリに行ってきた体験談でした。

海外で長期滞在する初の経験ということもあり、ここに書ききれない失敗も多く、現地での就職活動もままなりませんでしたが、それでも「行かない方が良かった」と思ったことは一度も無く「遅かったが行ってきてよかった」と思える経験でした。

欲を言えば、

  • 事前にもっと英語を身に着けておけばよかった
  • 語学学習と就職活動は分けてやった方がよかった

とは思っているので、今後も英語についてはオンライン英会話で緩めですが勉強し続けていく所存です。

明日は imaizume さんです。

f:id:ShineSpark:20181210001030j:plain

オマケ

当時の市街地のバス停前のお店です。

f:id:ShineSpark:20181209230700j:plain
バス停前の店

B16 地球の歩き方 カナダ 2017~2018

B16 地球の歩き方 カナダ 2017~2018

MedBeer -Rails開発での技術的負債との付き合い方- レポート #medbeer

MedBeer -Rails開発での技術的負債との付き合い方- に行ってきたので今更ながらメモ。

概要

medpeer.connpass.com

外部資料

オープニング

speakerdeck.com

Rails Good Parts, Bad Parts

speakerdeck.com

Classiでの負債返却への取り組み

  • 整地部という活動
    • 2時間/週 で部活的な感じで
    • PRにも 整地部 タグをつけて活動を可視化

メドピアにおけるライブラリアップデート

speakerdeck.com

ライブラリアップデート[Gem編]

Bundle Update Flow の導入

  • 毎月1日に bundle update の自動PRをつくる
  • bundle updateの 担当者を3名でわりふる
  • circleci-bundle-update-pr というので自動でcronでPRつくれる
    • 最初月2回だったが、きついので月1回になった
  • 担当者3人集めてみんなでやる。
    • 各自で確認はたいていやられない
  • テスト環境に1週間つけて確認
    • cron周りの確認
    • 想定してなかった不具合の発見
  • リリース

感想

  • 毎月だからそんなに重くならない
  • 3人なら負担が軽い
  • いい感じに回り始めた。
    • -> 仕組み大事

ライブラリアップデート[npmYarn編]

Yarn Update Flow の導入。

  • 流れはbundle update flowと一緒
  • ci-yarn-update
  • 導入途中。だけどいいかんじ

クックパッドの巨大 Rails アプリケーションの改善

speakerdeck.com

cookpad_all の話。リンク先を読むと絶対よい。

Jupyter Notebookでトークンとパスワード認証をスキップする

動機

Docker上でJupyter Notebookを使いたかったのでトークンとパスワード認証をスキップしたかった。

公式で NOT RECOMMENDED とされており、Macの場合Firewallを無効にしている場合にはネットワーク経由で不正にアクセスされる危険性が高いので自己責任で。

環境

やり方

Security in the Jupyter notebook server — Jupyter Notebook 7.0.0.dev0 documentation の通り、 jupyter_notebook_config.py を編集する。*1

c.NotebookApp.token = ''
c.NotebookApp.password = ''

これ以降はは http://localhost:8888 だけでアクセス可能になる。

補足

一応Docker Compose上で動作するJupyter Notebookリポジトリを作ったことがあるので貼っときます。
jupyter_notebook_config.py は初回アクセス時に作成される為、このリポジトリにはトークンとパスワード認証をスキップする設定は未反映です。

github.com

*1:Docker上なら/home/jovyan/.jupyter/jupyter_notebook_config.py

Mercari Corporate Solutions Engineering Meetup #2 レポート

mercari.connpass.com に行ってきたので今更ながらメモ。

カヤックの組織課題を解決する人事データベースシステム

カヤック紹介

  • カヤックの社員構成はディレクター, エンジニア, デザイナーで9割を占める
  • カヤックの制度紹介
    • スマイル給
      • 毎月相互FBを送り合う
    • おもしろ指数
      • 社員が楽しく働けているか評価

課題

  • 社員情報が一元管理されていない
  • 社員マスタが複数ある

解決策

  • 人事データベース案件
  • まず SmartHRと連携して動くシステムを開発(MVP: Minimum Viable Product)
    • API充実
    • 入退場もSmartHRで管理
    • 労務管理ソフトウェア
    • なのでSmartHRを従業員情報をマスタにすると楽。

成果物

  • SmartHR webhookと夜間バッチでデータ同期
  • 管理画面からポイポチ
  • 入出力はスプレッドシート
  • ロールによる権限管理, システム管理者、名簿管理者, データ編集者

環境

  • Rails, ECS(app, worker), MySQL, SQS, S3 + cloudfront

体制

ディレクター1, エンジニア1.5 で1ヶ月で作る。=> だめでした。

大変

  • webhookのリトライ回数が3日間で最大17回
  • rate limit自体を取得するAPIがないので監視がしにくいのが課題

We are "Corporate Solutions Engineers

speakerdeck.com

「経営課題をエンジニアリングで解決する」のがミッション

  • 経営課題例

    • 事業の成長に伴い増え続けるオペレーション
    • マネジメントの具体化
    • あらゆる作業の効率化と精度の向上
  • 現在のワークフローを整理

  • あるべきワークフローの構築
  • 国内外でも統一の実現を目指す

プロダクト

最近の動き

Corporate Solutions Engineering という名前

  • 最初は Corporate Engineering という名前
    • 業務フローそのものの見直しや、あるべき姿の追求をすべき。
    • -> Corporate Solutions Engineering になった。

Zapier

  • Corporate Solutions Engineering を広げて行きましょう!

メルカリ  希代のスタートアップ、野心と焦りと挑戦の5年間

メルカリ 希代のスタートアップ、野心と焦りと挑戦の5年間

Gmailを"メッセージと連絡先のインポート"でないやり方で引っ越しをした

なんで?

Googleのアカウントが気がついたら7アカウントぐらいあったのでGmailを整理しようとした。

が、 メッセージと連絡先のインポート でのShuttleCloudを使った引っ越しでは件数が多いのか途中で失敗したので。

やり方

昔ながらのPOP3 Gmailのメールを別なGmailのアドレスに移行する方法 | マイナビニュース を踏襲する形で引っ越す。

事前準備

引越し元の2段階認証を一時的にオフにする

引っ越しの際にオンだと途中で何度も失敗したので、https://myaccount.google.com/u/0/security から2段階認証を一時的にオフにする。

f:id:ShineSpark:20181127172719p:plain

安全性の低いアプリからのアクセスを一時的に有効にする

引っ越しの際に無効だとエラーが出て取り込めなかったので、 https://myaccount.google.com/u/0/lesssecureapps から一時的に有効にする。

f:id:ShineSpark:20181127172704p:plain

引っ越し

1. 引っ越し元のPOPを有効にする

Gmailの設定 > メール転送と POP/IMAP からすべてのメールでPOPを有効にする。

f:id:ShineSpark:20181127172949j:plain

2. 引っ越し先でメールアカウントを追加する

Gmailの設定 > アカウントとインポートから、 メールアカウントを追加するをクリックして、引越し元のメールアドレスを取り込む。

f:id:ShineSpark:20181127174835j:plain

f:id:ShineSpark:20181127173435p:plain

f:id:ShineSpark:20181127173528j:plain

自分は2万件ほどメールが溜まっていたが一晩程で引っ越しできました。

オマケ: フィルタのエクスポート / インポート

ここからフィルタもエクスポートできたので、引越し先でインポートすればOK。

f:id:ShineSpark:20181127173754p:plain

同報@メール5 /R.2 通常版

同報@メール5 /R.2 通常版

Engineering Manager Drink Meetup #1 レポート

mercari.connpass.com を今更ながらメモ。

VPoE挨拶

エンジニア1000人採用するとすると... エンジニアマネージャー100人 VPoE 10人必要

・明日からできるアクションを探す

メルカリのEM / PM体制

Project Owner体制の課題

  • すべての負荷がPOに集中していた

EM / PM 体制とは

  • 責務の明確化でスケールできる組織
  • 専門性を特化し、組織や個人としての強みを強化する

EM / PM 体制とは

縦横にProjectと領域がクロスしたマトリクス上の画像

PM: 従来どおり EM: Backend , iOS, Androidみたいな領域ごとのマネジメント EMはEngineering Manager TL: テックリード、幾つかのマス目の中で存在。

各ロールの役割

PM: Whatのプロフェッショナル Engineer: Howのプロフェッショナル EM: Howの最大化のプロフェッショナル Tech Lead: 役割と責任のみ定義。個別の行動はプロジェクトごとに考える

パネルディスカッション

All about engineering Manager in mercari

メモ

機械学習について

  • 全自動化はまだ難しいが、進んではいる
  • 属人化を撤廃する努力は大事。
  • 日々変わり続けるモデルの管理をどうするか
    • 極力アップデート処理を自動化する
    • 特定の人に持たせない

メルカリは3つのバリュー

  • Go Bold
  • All for One
  • Be Professional

エンジニアはBe Profetssonalを更に細分化し3つに分けている

メルカリ  希代のスタートアップ、野心と焦りと挑戦の5年間

メルカリ 希代のスタートアップ、野心と焦りと挑戦の5年間

さくらVPSにCentOS7の初期設定(sshd, zsh, yum-cron他)を行う

Dockerを動かす箱が欲しかった。

sshdの設定を行う

Web上には様々なドキュメントがあるが、ここは公式ドキュメント チュートリアル:CentOS 7(さくらのVPS)サーバ作成直後に設定しておくべき初期セキュリティ設定 – さくらのVPSニュース が最も適切だと判断して以下の設定を行う。

なお、さくらVPSでの初期設定は、クリップボードからのペーストが必要な為、さくらのVPS シリアルコンソール - β版 がオススメ。

ユーザーの作成とsudo権限の付与

# sshで接続するユーザーの作成とパスワードのセット
$ useradd <username>
$ passwd <username>

# 作成したユーザーをwheelグループに追加し、sudo可能にする
$ usermod -G wheel <username>

sshdの設定

sshdの設定は規定ポート22で尚且つパスワードでのログインが有効となっており、ブルートフォースアタックが可能な為安全とは言い切れない為、鍵認証のみに設定を変更する。

$ vi /etc/ssh/sshd_config

# 以下を編集する
Port 10022 # 10000以上の任意の番号に変更する(10022は例)
PermitRootLogin no # rootユーザーのsshログイン禁止
PasswordAuthentication no # パスワードでのsshログイン禁止

sshdの設定適用と起動の確認

$ sudo systemctl restart sshd
$ sudo systemctl status sshd

firewalldの設定も変更する

sshdのポート変更しただけでは、変更したポートが開いていない為、firewalldの設定も変更し、ポートを開く。

$ vi /usr/lib/firewalld/services/ssh.xml

# <port protocol="tcp" port="22"/> 部分を変更する
<port protocol="tcp" port="10022"/>

$ sudo firewall-cmd --reload
success

鍵の登録

ホストOSの鍵はGitHubとかで既に所有していると思うので省略。 Generating a new SSH key and adding it to the ssh-agent - User Documentation

ホストOSにて、自分の公開鍵をクリップボードにコピーする。

$ pbcopy < ~/.ssh/id_rsa.pub

次にVPS側で、authorized_keysに先程の公開鍵をペーストする

$ cd /home/<username>
$ mkdir .ssh
$ chmod 700 .ssh
$ vi .ssh/authorized_keys

# ここで先程のid_rsa.pubの内容をペーストして保存する

# 終わったらpermissionを変更する
$ chmod 600 .ssh/authorized_keys

ssh接続を試みる

諸々設定が終わったら、

$ ssh <hostname> -p <設定したポート番号>

で接続できるようになる。

ホストOSにて、.ssh/config で楽に接続できるようにする

.ssh/config に以下のような設定を書く

ForwardAgent yes
IdentityFile ~/.ssh/id_rsa
AddKeysToAgent yes
UseKeychain yes

Host sakura
  HostName <hostname(xxx.vs.sakura.ne.jpみたいなやつ>
  User <username>
  Port <sshdに設定したポート>

と、以後は

$ ssh sakura

で接続できる。

zshを利用する

$ sudo yum install zsh
$ sudo usermod -s /bin/zsh <username>

yum-cronで自動yumアップデート

$ sudo yum install yum-cron.noarch

# yum-cron.confを編集する
$ vi /etc/yum/yum-cron.conf

# yum-cron.conf内のapply_updates = yes に変更し、アップデートを有効にする。
apply_updates = yes

# yum-cronの自動起動を有効にしつつ、サービスを開始する
$ sudo systemctl enable yum-cron
$ sudo systemctl start yum-cron

他にも初期設定が必要だったら追記する。

zsh最強シェル入門

zsh最強シェル入門