学び直しと就職に関して

非常に狭い範囲での観測で恐縮なのですが、いま僕の周りでは一度ドロップアウトや就職してからの大学復学、大学院進学などの「学び直し」が空前のブームとなっております。これに関しては非常に喜ばしく感じている一方、我々どうしても食っていかねばなりませんから、

  1. 働きながら夜間・休日に修学できる環境で学ぶ
  2. 腹をくくってフルタイム就学し、その後再就職する

という人が大部分かと存じます。これに関して個人的に思うところがあり、ちょっと筆を執りました。本エントリでは次の話題をカバーしたいです。

  1. 実際に「学び直し」てみてどうか
  2. ソフトウェア技術者として再就職するにはどうすればよいか

1に関しては個人的に率直に感じていることを取り留めもなく書きたいと思いますので興味のある方はお読みいただいても構いませんし、就職の部分だけを読みたい方は全部飛ばしてそちらから読んでいただくとよいと思います。
2を書きたい理由が「やりたい夢が見つかったので大学に進学したものの、卒業する頃には30近くなってしまっている。自分の興味のある分野で新たに職を探すことは無理なのか…?」という悩みを複数拝見したからです。これは、もし興味のある分野がソフトウェア産業であれば、端的に言って何とかなると個人的に考えています。僕の就業経験はいずれもソフトウェア開発関連なので、もとよりそれ以外のことはお話しできませんが、該当する方には何らかの示唆になるかも知れません。

実際に「学び直し」てみてどうか

最初に自己紹介をさせてください。現在37歳のソフトウェア技術者です。米国に本社のある会社の日本法人でソフトウェアを開発しています。学部では情報科学とは似ても似つかない英文学を専攻していましたが中退し、5年ほど大学の先輩の会社でインフラエンジニア/ソフトウェアエンジニア見習いとして働いていました。その後、思うところあって26歳ごろ復学し、1年半かけて卒業し、また同じソフトウェア産業で10年近く仕事していました。ただ、ソフトウェアエンジニアとしてもう一段回成長したいと考えるにつれ、アカデミックな知識がすっぽり抜けていることを足かせに感じ、昨年36歳のときに情報科学系の大学院に進学しました。今日現在で単位はほぼ取り終えて、あとは修士研究をやりきれば修士号に手が届くところまで来ています。修了後も変わらずソフトウェア産業で働きますが、大学院で学んだ専門をより活かせる形を模索するかも知れません。

大学院は実際にどうだったかというと、これはもう素晴らしい経験でした(まだ在学中ですけど)。今は不況で状況が変わってきているかも知れませんが、僕が現役の学部生だった頃はまさに「大学全入時代」で、確たる夢や目標を持って大学に進学する人の方がもしかしたら少数派だったかもしれません。少なくとも僕はそうで、目が覚めたらまずビールのフタを開けてから、いま窓の外に差し込んでいるのが朝日なのか夕日なのか確認するような自堕落な生活を送っていました。これに対して、学び直しはモチベーションからしてそもそも違いますよね。身銭を切って、なんとか時間を捻出してから勉強するわけなので、取り組み方がまったく異なると思います。不思議なもので、大学は常にそこにあり、同じものを提供しているのです。学ぶ人の姿勢一つで大学は有益にも無益にもなるわけです。大学無用論は、おそらく大学から大したものを持ち帰れなかったのでしょう。とにかく、触れるものすべてが新鮮で、新しく知ることすべてが瑞々しく、自分の脳のホコリを被っていた部分に新たな水が注がれているのを感じることができます。

それから、大学は職業訓練校ではないという点も紹介しておきたいです。僕の現在の専攻は情報科学ですが、ここで学べる内容はたとえばプログラミングスクールとは大きく異なっています。たとえばI217 関数プログラミングという授業1では、関数型言語を使って何か作ってこれをメシのタネにするということは主眼ではありません。型システムを使った数学的抽象データ構造の表現であったり、評価順と無限数列の考察、計算可能性などアカデミックな内容を扱います。これがすぐに日々の仕事に活かせるかと言うと、そうでもないのですが、さりとて「大学の内容は仕事には使えない」かというと、これはまったく正しくありません。僕は同じく大学で学んだCPUのパイプライン処理などはすぐに業務で活かすことができました。知識というのは道具箱のようなもので、すぐに使う10mm, 12mmレンチだけ持っていればよいというものではなく、使用頻度が少ないものも含めて道具箱すべてを使って最終的に何を成せるかということが大事だと考えています。大学はそういう知識が身につく場所だと思います。

ソフトウェア技術者として再就職するにはどうすればよいか

いよいよ本題に入りたいと思います。読んでくださる方の時間の無駄にならないように再掲させていただきますが、ここではソフトウェア産業に限って話させていただきます。残念ながら僕はソフトウェア産業でしか就労経験がなく、たとえば考古学の学位を取った後にどのような就職をすればよいかというような知識を持ち合わせていません。

大学に行きたいという動機は人それぞれで、それが情報科学でも考古学でも純数学でもどれも等しく素晴らしいです。中々歯がゆいのが、学問の純粋な喜びとは裏腹に、我々の多くは卒業・修了後は口に糊するために働かねばなりません。「学び直し」の後に働くパターンは大きく分けて次の2つがあると考えています。

  1. すでにある分野や産業で職歴があり、知識を「強化して」元の産業に戻る
  2. ある分野や産業に興味を抱いて就学し、卒業・修了後に初めてその産業で就業する

このうち、1が問題になることはほぼないでしょう。すでに産業経験があり、人によっては就労を継続しながら勉強できます。しかも現在の知識を強化して同じ業界に戻ってくるわけですから、これはイージーモードです。これに関しては一切触れないことにします。

さて、大変なのは2です。誰しも、本来大部分の人が学部・院を卒業する年齢から10年20年経ってからほぼ未経験で新たに職探しをするのは不安でしょう。しかし、敢えて安心させるために言い切ってしまいますが、ことソフトウェア産業において、大学のドロップアウトや専攻変えからほぼ未経験でソフトウェアエンジニアとして就職することは、端的に言って可能だと考えています。むしろ、それができる数少ない業種だと認識しています。
僕はドロップアウトしてから学部を卒業(この時点では英文学士)した時点で27歳でした。たしかに先輩の会社で5年ほど見習いとして働かせてもらっていましたが、このときの僕はまともにプログラミングなどできていなかったと思います。実際に、「ああだいぶコードレビューで指摘されることが少なくなってきたな…」という程度にコードが書けるようになったのはほんの5年前ぐらいだと思います。これは卵が先か鶏が先かという話になるのですが、やはりソフトウェア技術者として力をつけるにはどうしたってある程度それを仕事として毎日書く必要があると思います。ただそのためにはソフトウェア産業で就職する必要がある。ソフトウェア産業で就職するためにはソフトウェアが書けることを示す必要がある。なんとかして最初の就労先を捻出する必要がある。それをどうするか。

今から書くことは、僕が実際にやったことです。人によってはこれを読んで、なんて無神経で傲岸不遜な人間だと不愉快に感じるかも知れない。また、たかがN=1であり、再現性などないと思われるかも知れない。しかしながら、僕はこれは今でも有効な方法だと思っています。10年前の僕が2020年に放り込まれても同じことをやれる自信があります。

さて、最初の就職をどうするか。これはどんな方法を使ってもよいので、次の条件を満たす会社に200個ぐらい応募してみる。

  1. 経験や職歴に関わらずすぐに手を動かしてソフトウェア開発ができる
  2. それなりに有名(できたらマザーズ上場)

これが満たされるならばSIerでもいわゆるウェブ系企業でも大丈夫です。理由を述べます。
まず、すぐに手を動かせることは必須条件です。ソフトウェア技術者の存在理由はソフトウェアの開発であり、スタート時点でビハインドがある以上、この能力を一刻も早く身につけなくては生存に関わります。先に述べた通り、どれだけ大学で勉強しても、自宅で手を動かしても、ソフトウェア開発の現場でしか身につかない力というのは間違いなくあります。もし最初の職場でエクセル仕様書を書く職務に就いてしまうと致命的な遅れになりえます。

次に、それなりに有名な会社に入ることは非常に多くのメリットがあります。こういった会社には仙人のようなソフトウェア技術者が必ず洞窟の奥に控えており、彼らはその深い知識と洞察で必ずあなたをソフトウェアエンジニアとしてひとつ上の段階に引き上げてくれます。彼らと一緒にするプロダクト開発が、彼らのコードレビューのひとつひとつがあなたに新しい力を授けてくれます。これを読んで、「未経験でいきなりマザーズ上場企業に就職できる前提かよ?解散!」と思われた方はちょっと待ってください。マザーズ上場企業って、思ったよりずっとたくさんあるんですよ。売上高を見ると、荒稼ぎしている個人商店と大差ないような少し寂しい売上の会社なんかも含まれています。不思議なことに、仙人のような素晴らしいソフトウェア技術者のいくらかの割合は、会社がかつての輝きを失ってもずっとその会社に鎮座している例をいくつも目撃しています。このような会社は狙い目です。露骨な言い方をすると、落ち目の上場企業に必要最低限の報酬で入社でよいなら、本当に50も100も応募できる根性があれば絶対にどこかには引っかかります。まったく同じ会社でも、経験10年で700万のソフトウェアエンジニアは雇えないが、経験0〜2年で400万なら雇えるという例は数え切れないほどあります。ここに何とか潜り込んで、数年間給料をもらいながら修行をするといいと思います。あとはもう、何とでもなります。大学の学位、数年間の産業経験、企業での職歴、これらすべてで次にどんな会社にステップアップしようとも何も阻むものはありません。

これらの条件を満たすには、必然的に東京に来るのがよい選択になると思います。「どうせ東京の話でしょ?地方の俺には関係ない話だな、解散!」と思われた方、ちょっと待ってください。東京に来るのってそんなに大層なブロッカーですかね。昔パチスロ雑誌で「いつもいつも東京の話題ばかりで参考にならない。地方では東京のような好条件の店がない」という読者の苦情に対してプロの人が「なんで好条件と分かってる土地に来る程度の努力ができないんでしょう?来れば解決すると分かってるなら、それは僕には問題ですらないんですよね😅」と回答していて、これはまあパチスロの話ではあるけど僕の行動哲学に大きな影響を与えたのですよね。僕は京都の大学だったのですが、学部卒業後はすぐに東京に出ていきました。

それから、コミュニティの力を借りると良いと思います。ある言語、フレームワーク、ツールキット、何でもいいのですがそのコミュニティの熱心な参加者になる。そしてあるニッチで他の駆け出しよりも深い知識を身につける。プレゼンスも出す。そういうコミュニティを経由して会社に入り込む例も数え切れないほど目撃しています。僕はスクールで通り一遍の勉強をした後は著名なフレームワークの写経でポートフォリオを作るみたいなのよりは、ある特定分野を掘り下げた強みを作るほうが履歴書や面接で目を引く可能性が高いと考えています。

それから、面接はあくまで面接というテストなのでそれ用の対策をすれば本当に何十回でもめげずに挑戦できる人はすぐにコツを掴むと思います。外国の企業だとそれはコーディングクイズだったりするでしょうし、日本の企業だと「ブラウザにURLを打ち込んで結果が表示されるまでに何が起こっているかを詳細に述べてください」かもしれません。とにかく敵を知り己を知るだけのことです。必ずうまくいきます。

ここまでがスタート地点です。ここからはすべてあなた次第です。僕はどうしても、駆け出しエンジニアを扇動する人たちに比べて夢がないなあと自分でも思うのですが、結局ソフトウェアエンジニアに王道なしというのを信じているからだと思います。優れたソフトウェアエンジニアになるには近道というのはなくて、まあ多少効率の良いやり方ぐらいはあるかもしれませんが、とにかくソフトウェアがどうやって作られててどうやって動いているのか自分で調べて、書いて、勉強し続けるより他にないのだと思っています。ただ、それを身につける上で環境の力というのはとても大事で、だからこそいま学び直しをしようと思っているような気骨のある人にはできるだけ最短で環境の良い会社で働いてもらいたいなと思ってこのような駄文を書きました。自分の経験上、面白い仕事とよい給料はトレードオフの関係ではまったくなくて、むしろよい会社ほど充実した仕事内容と高い報酬の総取りで、そうでない会社はどちらもダメみたいなことの方が多いです。人より少しだけ遅れて再スタートを切った人が、なんとかうまいこと幸せなソフトウェア開発人生を送って欲しくてまったく恥ずかしながら自分の前半生を元に書かせていただきました。何かの参考になれば嬉しいです。

おまけ:海外企業で働くには

ここまで書いた内容は主に日本の東京でのことです。海外でソフトウェアエンジニアをやるにはかなり状況が違うと考えています。僕は米国本社の会社で働いているので、少し認知に歪みがあるかもわかりませんが、端的に言って米国のエンジニア就労は日本よりずっと厳しいです。学位と就職が密接に関わっているので、新卒やインターンの人はカーネギーメロン大学修士だとかMITの博士だとか、もう目が回るような高学歴の人たちばかりです。ここに裸で挑戦するのは中々難しいものがあります。

ひとつだけ良いニュースとして、日本はソフトウェアエンジニアに(少なくとも現状は)気軽になれるので、経験を積みやすいということが挙げられます。前述の通り、米国の大手テック企業ではソフトウェアエンジニアになることそのものが高い壁となっているので、経験を積むことすら高い壁を超える必要があるように見受けられます。繰り返しになりますが、現場でしか身につかない能力というのは非常に多くあるので、これを幸いと捉えて日本で就職し、5年10年の経験を積んでから海外へ挑戦するというのは大いにありだと思います。

海外企業のインタビューを突破するにはCracking the Coding Interviewという書籍が非常に有名です。世界で闘うプログラミング力を鍛える本という名前で和訳もされているので、興味のある方は一度ご覧になるとよいと思います。

また、次のサイトなどは問題や面接の内容を把握するのに役立つと思います。

tnanjo.net

1kohei1.com

長々と失礼しました。勉強も就職もうまくいって欲しいです…!


  1. 余談ですが、この授業はすべての講義資料が世界に公開されているので、興味のある方はぜひLecture Noteを読んでみてください

凡人は論理的思考すべし

登 大遊 (Daiyuu Nobori)さんの論理的思考の放棄というエントリが時を超えて話題になった。

softether.hatenadiary.org

これは氏の類まれな才能あってなされることで、僕を含む凡百のプログラマはこれを読んで(あるいはタイトルだけ見て内容すら読まずに)論理的思考を放棄してプログラムを書くのは危険である。

当該エントリおよび氏の過去のエントリを拝読する限りにおいて、氏が才気あふれるソフトウェア技術者であることは自明であるように思われる。氏が筑波大学に入学しソフトイーサ社を立ち上げる過程を軽妙に綴った次のエントリなどは、ユーモアに溢れ、優れた技術者は文章もうまいのかと嘆息してしまった。

futureship.sec.tsukuba.ac.jp

また僕が普段から敬愛する素晴らしいエンジニアによる証言も氏の大きな才能を裏付けている。

本題に入る。多くのプログラマにとって論理的思考は必要である。というか、当該エントリを拝読する限り、表現方法が異なるだけで論理的思考を放棄していないようにすら思われる。冒頭で触れたように、タイトルだけ見て中身を読んでいない人は一度最後まで当該エントリを読んで欲しい。

まず、だいたいこういうソフトウェアがあればいいなあとか、このような機能を付ける必要があるなとかいった、とても抽象的なことを思い浮かべる。この際、「絶対に論理的に考えないこと」が必要である。論理的に少しでも考えてしまうと、途中までうまくいっても、それが壊れてしまい、最初からやり直しになるので注意する。感覚的な思考でもってこれを行うのである。

次に、だいたいイメージができたところで、心の中に、ソフトウェアの設計図やデータ構造といったものを思い起こす。ここで注意するのは、「絶対に論理的に考えて設計をしないこと」である。徹底して、感覚的な思考でもって設計する。

彼がここで言っているのは抽象化である。コンピュータの論理にとらわれず、まず実社会で実現したい形を思い浮かべ、実装の細部に気をそらされることなく設計せよと主張しているように思われる。氏のエントリを拝読するに、低レイヤの理解と実装力にめっぽう強みがありそうであるから、氏が指す論理的思考とはCPU命令と一対一で紐づくアセンブリレベルの命令列、あるいは仮にもう少し高次元の想定だとしても、libcのシステムコールレベルでの論理をもって「論理的思考」とおっしゃっているのではないかと拝察する。

そも、ソフトウェアコンポーネントを高度に抽象的な概念として捉えて設計することは、僕の語彙では「論理的思考」である。表現方法が違うだけなのだ。氏は当該エントリで

ここで「論理的な思考」の定義を細かくすることはしない。そもそも、細かく定義しようとすること自体がすなわち「論理的な思考」である (論理的に、厳密に定義しないので、あなたの頭の中で、「論理的な思考」というイメージを自在に思い浮かべれば良い)。

と明言しているので、彼の考える論理的な思考と世間一般でそれと考えられている論理的な思考に乖離があったとして、何ら不思議でない。

折しも、次のようなエントリが先ごろ話題となった

nazology.net

曰く、プログラミング時には脳内で数学や論理を思考するときに活性化する部分ではなく、むしろ会話時と同じような部分に活性化がみられたという記事である。

これは個人的な経験にも近い。僕はプログラミングのロジックを読む・組む際に、そこに流れを意識している。このような名前のコンポーネントがあり、このようなAPIが外部に公開されているのだから、このように使われることを想定されているのだろう。このChange Setsで、これまで別のExecutorでパラレルに実行されていた処理が単一のExecutorに積まれるように変更されたということは、これは順序に意味があるということなのだろう。挙げるときりがないが、多くのプログラマはこのように処理の流れにストーリーを感じているはずだ。なので、熟練のプログラマの差分は名前、処理、コミットの単位にすら強いメッセージを感じるし、自分が何を書いているのかも理解していないプログラマの差分はレビュワーにもひどく読みづらい。もうお分かりかと思うが、この一連の流れは論理的思考そのものである。

論理は、自分たちが思いも寄らない状況に置かれた際の道しるべとなる。巨大なプロジェクトに突然放り込まれたとき、難解なバグに対峙したとき、我々はまずどこかに取っかかりをみつけ、それから論理の流れを追って二分探索してゆく。凡人は論理的思考を絶対に放棄してはならない。

最後に、僕も彼の境地にいつか達してみたいという思いはある。なかなか、頭の中で大きな設計ができた後も、

コンピュータの前に座って、キーボードの上に両手を置けば、後はあまり考える必要はない。自動的に手がキーボードを打ち、プログラムを入力して完成させてくれる。

とはいかない。どのくらい書けばここに至るのか。精進をつづけたい。

月が綺麗ですね

新しい職場で仕事がはじまって、毎日英語に悩まされています。必要とされる会話能力にここまでギャップがあるとは…もはやチームでは僕だけ小学生扱いです。何とか技術の方で信頼をリカバリするしかありません。

もっと早くこう、人類が第2・第3言語を覚えることなくコミュニケーションを取れる時代は来ないものでしょうか。ほんやくコンニャクというんですか?令和時代にはもっとよい例えがあるかも知れませんが、とにかくお互いにそれと意識しなくとも意思疎通を図りたい。

もっと言うなれば、それぞれの言語でそのまま伝えてそれを各自翻訳というのがそもそもまどろっこしい。言葉として伝達する以上、情報のロスや誤解の余地があったりするわけですね。なんとか意思というか情念そのものを伝えられないだろうかと思います。これは適切な喩えではないかも知れませんが、プログラミング言語にも抽象構文木というものがありますね。各言語の細かい文法や作法を取り払い、意味情報のみを抽象化した木構造です。これをそのまま伝えてそのまま解釈してもらえたら誤解の余地はかなり減るのではないか、などと思うわけですね。

凄く古いのですが、僕が高校生のときにファイナルファンタジーXというゲームがありました。そのエンディングで、主人公ティーダが消えてしまう前に、ヒロインのユウナに向かって

「ザナルカンド案内できなくて、ごめんな」

っていうと、ユウナが

「…ありがとう」

って答えて、そのまま抱きしめるシーンがあるんですが、制作陣のインタビューによれば、北米版が出る際にアメリカ人スタッフに

「ここは "Thank you" はおかしいです」

と指摘されて "I love you" と訳されるんですね。これに対してプロデューサーが

「あの『ありがとう』はそういう意味なので、これでよい」

とOKを出すんです。これは僕の中で非常に強い印象として残っています。言葉や表現はまったく異なるのに、伝えたい情感は同じなんですね。 この「ありがとう」から "I love you" は、2020年の素晴らしい機械翻訳をもってしても出てこないのではないかと考えます。

qiita.com

何年か前にこの記事を拝読して、最近ではディープラーニングを使った機械翻訳がホットな話題であると知りました。 僕は自然言語処理はまったく専門ではないので、正しく理解できているか甚だ疑問ではありますが、色々なサイトを読む限り、このRNNというのは入力層と出力層の間の中間層の結果も一緒に次の入力に伝えることで、いわば「コンテキスト」を理解した上で次に出現する可能性の高い単語を選ぶことができるものなのかなと考えました。

そうするとやはり、このAIから "I love you" を引き出すためには、この会話をしている二人の関係性、話している状況、お互いの感情の高まりなどをコンテキストとして伝えなくてはなりません。そのようなことは現実的に可能なのでしょうか。それともすでに先行した研究があるのだろうか。

折しも、大学院の単位はほとんど取りきってこれから1年と数ヶ月使って修士研究に取り掛かるところで、出願時に教授と話したテーマとこの1年弱で学んできたことを総合してテーマを絞ろうかという時期であります。かねてより機械学習にも自然言語処理にも興味があったので、当初考えていた研究テーマにこのような要素を加えてみても面白いかもしれないな、などと考えておりました。気になったキーワードで論文を調べてみようと思います。

コンパイラ自然言語処理ディープラーニングも専門ではない大学院生の妄想でした。おかしなことを申していたらご指摘ください。ほいでは。

AmazonのSoftware Development Engineerになった

AmazonのSoftware Development Engineerになりました。

久しぶりにプログラミングが職責の第一義であるロールに戻ってまいりました。クビにならないように必死で頑張りたいと思います。詳しいことはまた追々。

コープデリの宅食よいです

TL;DR

コープデリデイリーコープとてもよいので、ごはんを作る暇がない人、外に出たくない人は活用しまくるとよいと思いました。

ロックダウンやばい

緊急事態宣言からひと月が経ちました。我が家は6歳と2歳のふたりの子供の面倒をみながら、夫婦とも在宅勤務しています。これがまあヤバイ。成立してないです。気が狂いそうです。

在宅勤務それ自体は問題ではありません。我がチームは元々裁量労働で、特に必要性のないときは1年前から積極的にWFHしていました。ただそれは、あくまで子供たちが家に居ないから成立していたわけですね。いまは、早起きして人気がまばらなうちに子供らを散歩につれていき、日中はひたすら仕事。夕方早めに切り上げられる日には夕食前にもう一度お散歩にいく。それ以外はひたすら家にこもる生活です。

子供たちも不満ですね。「はい!起きて!走って!(パッジェーロ…パッジェーロ)」って、犬じゃないんだから。もっとこう、ムードってもんがあるでしょうと。なので折角外出しようと言っても「今日は行かない!」とヘソを曲げ、案の定2時間後には「おぞどいぎだああい😭」と発狂するわけです。ところがどっこい、我らは勤務中なんですよね。以前と変わらぬお給料をいただいているので必死です。子供らにいちいち構っていられないので、求められるままに、YouTubeで誰かがアンパンマンを動かすだけの虚無を一日中流すことになります。うーん、困った。

子供らのごはんがやばい

不思議でしょうがないんですが、完全WFHになったことで以前より却って忙しくなりました。これは仮に子供らがいなくても、です。

なんででしょうね。起きて即始業して終業時間ギリギリまで働けるから?MTG10秒前まで前のMTG出られるから?とにかく忙しい。そこで困るのが子供たちのごはんです。とにかく針の穴を通すようなスケジュールで仕事をしているので、子供たちのごはんを作る暇がありません。毎日西友のみなさんのお墨付きカップ焼きそばを食わすわけにもいきません。Uber Eatsでもいいんですが、ファミレスやマクドばかりは飽きちゃうし、塩分とか心配です。何より時間が非常にコントロールしづらい。

コープデリ

はい!前置きが長くなりました。そこでコープデリです。簡単にいうと、生協の宅食サービスです。これがすごい。

f:id:fushiroyama:20200505142012p:plain
デイリーコープ

これが実際の画面です。見てください。いくつかあるメニューから、好きなおかずやお弁当を、好きな日(月〜金)、好きな個数で選んで注文することができます。 お気づきかもしれませんが、今週はゴールデンウィークであるにも関わらず月〜金ならいつもどおりお弁当を届けてくれます。

これが実際のお弁当です。おかずが多い!野菜が多い!てかうまい! 我が家では「デイリーコープ」という、毎日でも注文できる1プランを使っています。お弁当は「舞菜おかず」「舞菜しっかりおかず」「舞菜御膳」「生野菜サラダ」をそれぞれ1つずつ、計4種類を月〜金までお願いしています。我が家では取っていませんが、減塩メニューもあるので嬉しいですね。うちは毎日午前11時ごろ届けに来てくれるので、お弁当の数を×2にしたら晩ごはんも作らなくてよいかもしれません2

お値段は、おかずが500〜600円ほど、これにサラダで一日あたり2000円ぐらいです。これを高いとみるか安いとみるかはご家庭によると思いますが3、我が家には非常にありがたいです。これで、夫婦共働きしつつ栄養バランスも塩分濃度もきちんとしたものをチンするだけで出せるわけですから。お昼ごはんを食べさせるときの罪悪感がなくなりました。

加入が鬼門

ということで興味を持った人は是非利用してみてください。共働きに限らず、このご時世ひとり暮らしでもガンガン利用すべきだと思います。

で、加入がちょっと面倒です。僕は次のステップで加入しましたが、これより効率的なフローももしかしたらあるかもしれません。

  1. デイリーコープの「組合員でない方へ」から資料請求へ飛んで、コメントに組合員になりたい旨書いて送信する4
  2. 電話がかかってくる。「ご自宅に伺って説明を…」と言われるので拒否すると加入フォームが送られてくる
  3. 500円組合費をデポジットし、数日すると組合員カードが送られてくる
  4. インターネットから注文するためにeフレンズに加入する
  5. ログインしても、なぜか数日間デイリーコープにジャンプできない5
  6. デイリーコープが押せるようになっても、そこから資料請求のページにしか行けないので、今度は組合員番号を入れてデイリーコープに加入したいとコメントを送る…
  7. 電話がかかってくる。「ご自宅に伺って説明を…」と言われるので拒否すると「じゃあこれで加入としますね」と言われる。良いのかよ。
  8. 翌週になるとeフレンズから注文ができるようになっている
  9. 翌々週から届く

一応公式のフローはこれっぽいです。

とにかく、2回も電話がかかってきて飲みサーの大学生ばりに直接会いたがってくるので、それは「時勢柄、対面で人と会うのを避けておりますので…」とか何とか言っておくと次のイベントに進むことができますので耐えましょう。

まとめ

とにかく、届き始めたら大満足です。最初に一週間の配送スケジュールを立てると、特に変更がない限りそのスケジュールで次の週からずっと届きます。お弁当は発泡スチロールに保冷剤入りで、さらに発泡スチロールを保冷バッグで保護した上で届けられます。うちはオートロックですが、管理人さんに声をかけて玄関先に前日の発泡スチロールを出しておけば、勝手にコミュニケーションして玄関先で交換しておいてくれます。お弁当を作ってくれている方、配送員さんに感謝ですね!

望むらくは、コープデリのシステムを運営しておられる方がこれを目にしたら、すべてのフローをオンライン化してくださるとありがたいです。


  1. 毎日注文しなければならないわけではありません。週3から利用可能と書いてあるようです。

  2. 何時に来るというのは保証されていないそうです。飽くまでサービスとしては「夕食宅配」らしいので注意してください。

  3. 正直、マクドすき家でも家族分注文すると2600円ぐらいかかっていたので、金銭的にも普通に安いと思っています。

  4. どうしても直接加入申し込みをする手順が見当たらなかった…

  5. FAQによると加入直後に選べないのは仕様っぽいので、週次バッチが走っているのか、ひょっとすると人力で有効化しているのかもしれない…

ネットが遅いのでIPv6 IPoE + DS-Liteにした

TL;DR

BB.exciteコネクト(IPoE接続プラン)1DS-Lite対応ルータで月額700円(税抜)でインターネットが速くなったのでフレッツ光が遅い人は試してみてください。

IPv4 PPPoEが遅い

本格的に在宅勤務が始まったが、自宅のネットが遅すぎて業務に支障をきたしていた。

どうもIPv4 PPPoEが詰まっているようだ。PPPoEはネットワーク終端装置という部分で輻輳しやすいらしい。 いまはIPv6 IPoEというものが利用可能で、これはGWR(GateWay Router)を介してインターネットに出ていくいわばLANそのものであり高速だとか2。 "PPPoE IPoE" とかでググるとそれっぽいポンチ絵が出てくるので見てみてください。

IPv6 IPoEを契約する

電話したり契約書を郵送したりしなくてもIPoEを試せるプロバイダはBB.exciteINTERLINKを見つけた。他にもあると思うので自分だけのプロバイダを見つけるんじゃ。

PPPoEのように接続認証が利用できないのでどうするのかと思ったら、フレッツ光ネクストが開通したときに郵送されてくる「お客さまID」と「アクセスキー」をプロバイダに通知することで直接接続できるようだ。的外れな例えかもしれないけど、CATVインターネット接続はWAN側インタフェースに直接IPが割り当てられるのでプロバイダにMACアドレスを通知すると思うんだけど、あんな感じのイメージで捉えた。 で、郵送でしか送られてこない書類なんてもちろん失くしてしまったので116116に電話して再度郵送してもらった。今度はちゃんとスキャンしてDropboxに保存しておいた。

無事お客さまIDとアクセスキーが届いたらプロバイダでIPoE契約をする。1時間〜半日ほどで使えるようになるようだ。待っている間も開通後も既存のPPPoE接続に一切の影響がないので気軽に申し込むことが可能。

DS-Lite (IPv4 over IPv6)でIPv4も利用する

IPoEが開通した時点でIPv6でサービス提供しているサービスはすべて利用できる。YouTubeNetflixIPv6で利用できるし凄く速い。 ただ、IPv4でしか利用できないサービスは一切利用できない。ここでDS-Liteという技術を利用して、IPv6パケットはそのままIPv6インターネットへ、IPv4パケットはIPv6カプセル化されてAFTRと呼ばれる出口でNAT変換されてIPv4インターネットへ出ていくようにすることができる。つまりきちんと設定さえしてしまえば、利用側はIPv6だのIPv4だの意識することなくインターネットに接続できるわけだ。これはGeekなページのDS-Liteの仕組みが図もあってわかりやすかった。

DS-Liteを利用するには対応ルータが必要となる。プロバイダのIPoE契約時に必ず対応ルータの一覧があると思うけど、手持ちのRTX1100/RTX1200ともにDS-LiteのためのIPIPトンネル設定が可能だったので追加コストゼロだった。まだ持ってなくてYAMAHAルータの設定に抵抗がない方は、RTX1100は中古で3000円ほど、RTX1200は中古で10000円ほどで手に入ったりするのでオススメ(ホンマか?)

ということで非常に速くなりました!朝から晩まで、これまで特に使い物にならなかった夜9-12時ぐらいのピークタイムも含めて上下とも安定して70Mbps以上出ます3

RTX1100/RTX1200でDS-Liteの設定

以下、RTX1100/RTX1200での設定例。いずれでも動作確認した。非常に簡単。

[RTX1200] # show config
# RTX1200 Rev.10.01.78 (Wed Nov 13 16:29:42 2019)
# Memory 128Mbytes, 3LAN, 1BRI
# main:  RTX1200 ver=b0
# Reporting Date: Apr 7 23:35:59 2020
administrator password *
login user xxxx *
security class 2 off off off
console character ascii
console prompt "[RTX1200] "
ip route default gateway tunnel 1
ipv6 prefix 1 ra-prefix@lan2::/64
ip lan1 address 192.168.11.1/24
ipv6 lan1 address ra-prefix@lan2::1/64
ipv6 lan1 rtadv send 1 o_flag=on
ipv6 lan1 dhcp service server
ipv6 lan2 secure filter in 1010 1011 1012 2000
ipv6 lan2 secure filter out 3000 dynamic 100 101 102 103 104 105 106
ipv6 lan2 dhcp service client ir=on
tunnel select 1
 tunnel name DS-Lite
 tunnel encapsulation ipip
 tunnel endpoint address 2404:8e00::feed:100
 tunnel enable 1
ipv6 filter 1010 pass * * icmp6 * *
ipv6 filter 1011 pass * * tcp * ident
ipv6 filter 1012 pass * * udp * 546
ipv6 filter 2000 reject * * * * *
ipv6 filter 3000 pass * * * * *
ipv6 filter dynamic 100 * * ftp
ipv6 filter dynamic 101 * * domain
ipv6 filter dynamic 102 * * www
ipv6 filter dynamic 103 * * smtp
ipv6 filter dynamic 104 * * pop3
ipv6 filter dynamic 105 * * tcp
ipv6 filter dynamic 106 * * udp
telnetd service off
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.11.100-192.168.11.199/24 expire 12:00 maxexpire 12:00
dns server dhcp lan2
sshd service on
sshd host lan1
sshd host key generate *

ほとんどそのままフレッツ光ネクスト インターネット(IPv6 IPoE)接続 : コマンド設定DS-Lite(transix)でインターネット接続 : コマンド設定あたりから持ってきただけ。例によって、これは情報提供のみを目的としているので自己責任でご利用ください。

「AFTRのアドレス」という部分はインターリンクのFAQが参考になるけど、NTT東日本エリアかNTT西日本エリアかによって接続先が違う。このIPv6アドレスからInternet Multifeedのtransixを経由してIPv4に出ていく。診断くんとかで確かめるとtransixのsharedなIPv4アドレスに変換されていることが確認できる。

AFTRのアドレスは2つ掲載されているが、RTX1100とDS-Liteで高速化(ひかり電話なし)というサイトでkeepaliveを使って8.8.8.8へのpingの反応をみてもう片方にフォールバックする方法が書かれていて、これはオシャレだと思った。まあ片方だけでも特段困ることはないでしょう。

拠点間VPN自宅サーバをどうするか

で、今更気付いたけど、IPoE + DS-LiteではこれまでのようにネットボランチDNS4を利用できない。

これまではPPPoE接続してWAN側にIPv4グローバルIPを割り当てるppインタフェースをnetvolante-dnsでホスト名に紐付けることで名前解決していた。このホスト名をCNAMEレコードでエイリアスし、ルータの内側にあるホストにStatic NATでパケットを向けてやると、あたかも固定IPの自宅サーバのようなことが安価に実現できていたのだ。

ところが前述の通り、DS-LiteではtransixのNAT経由でIPv4インターネットに接続するので、サーバとしてIPv4の接続を受け入れるのが不可能になる。素晴らしいことに、ネットボランチDNS自体はすでにIPv6対応をしているが、利用できるのはRTX1210等の一部ルータのみに限られる。手持ちのRTX1100/RTX1200とも非対象機種となっている。誠に残念だ…

あいや、IPoEだけではなくてPPPoE契約も残して、IPoE + DS-LiteしつつPPPoE接続もして要するにこれまと全く同じ方法でネットボランチDNSを利用することは可能だ。ただ、自宅サーバの目的のため"だけ"にPPPoEの料金を支払いつづけるのはちょっともったいない気がする。とはいえ、自宅サーバはどうでもいいとして、実家と東京、東京と米国の拠点間VPNは紛れもなくこのネットボランチDNSを使って互いのホストを指定していたので、これが利用できなくなるのはかなりの痛手だ。

IPv6の固定IPを利用できるサービスなどもあるらしいと教えていただいたので、良い方法がないかもう少し色々考えてみたい。いいアイデアがあったら是非教えてください。


  1. 別にINTERLINKのZOOT NATIVEでもよい。こちらは月額1000円(税抜)

  2. 結局今は利用者が少ないから速いだけということなのか?専門家ではないので細かいところは許してくだされ。

  3. うちはVDSLなので100Mbpsで頭打ちになっている。その分安いので不満はない。

  4. YAMAHAが提供するDynamic DNSのようなサービス。これを無料で使わせてもらえるのもYAMAHAルータを使う大きな魅力。

AWS Japanで1年経った

4月1日でAWS Japanに入って1年が経ちました。とても早かったです。

ネットワークエンジニアとしてキャリアが始まり、自宅サーバに固定IPを8本引いてXenKVMで仮想インスタンスをホストして知人に有料で貸してたら海の向こうからやってきたEC2の登場に腰を抜かし、その後バックエンドエンジニアになり、Androidエンジニアになり、10年の時を経てAWSを使ったお仕事をしているのは感慨深いものがあります。

AWS Japanで働いていてよかったことは沢山ありますが、これまでとは比較にならない深度でAWSのことを理解し、様々な生のユースケースに触れられるところです。AWSのスキルは言ってしまえばいちクラウドベンダの知識に過ぎませんが、それが世界中で使われているので事実上世界で通用するスキルを身に着けていることになるのは素晴らしいことです。

僕のキャリアはスタートアップといわゆるウェブ系企業を渡り歩いてきたので、比較的シンプルな構成のアプリケーションに関わることが多かったですが、AWS Japanの技術者として色々なお客様と仕事をしていると、かつての自分には想像もつかなかったような難しい要件を求められることが少なくありません。その時に、どんな難しい場所にもぴったり合うブロックのピースを見つけられるのは、今なおAWSをおいて他にないというべき境地にあると感じます。

21世紀も20年代に突入し、エンジニアとクラウドの関わり方もまた少しずつ変わりつつあります。今年はぜひとも、自分の最大の強みであるモバイル開発の観点からもAWSの良さを伝えていけたらなと考えています。今年も宜しくお願いいたします!

そうそう、僕のチームは次の2ポジションを熱烈募集しています。ご興味のお有りの方は是非お声がけください!それでは。

www.amazon.jobs

www.amazon.jobs