働きながら修士課程1年目を終えて

本エントリは社会人学生 Advent Calendar 2020の19日目です。ただ今月の後半は個人的事情で非常に忙しいことが予想されるので、本日書いてしまってまだ筆の熱が残っている内に公開してしまおうと思います。

改めて自己紹介をさせてください。37歳の職業ソフトウェア技術者です。現在フルタイムで働きながら、北陸先端科学技術大学院大学(通称JAIST)の博士前期課程で情報科学を専攻しています。実は本アドベントカレンダーは去年も参加しました。そちらには進学の動機や入学したばかりの初々しい気持ちが表明されているような気がします。

fushiroyama.hatenablog.com

さて、本エントリで何を書こうか少し悩みました。考えた結果、前半で「1年目を終えた率直な感想」を、後半で「JAISTで社会人大学院生をやること」について書こうと思います。特に後半には、この1年でのべ100人ぐらいに聞かれたFAQについてまとめておこうと思うので、興味がある方はそちらだけお読みいただいてもよいと思います。ぶっちゃけJAISTどうなん?という部分も個人的感想を述べておきます。

修士課程1年目を終えて

いや〜〜〜〜、大変でした。想像以上でした。

現在のステータスは、あと修士論文を提出すれば修士号が取れるところまで来ています。JAISTはざっくり言うと

  • 授業で必要な単位を取る(20-26単位)
  • 副テーマ研究を終える
  • 主テーマ研究(修士論文 or 課題研究)を終える

と博士前期課程を修了(修士号)することができます。

このうち単位を取り終えて副テーマ研究も完了してすでに成績が付きました。やはり一番大変なのが単位を集めることでした。

JAIST東京サテライトの情報科学の授業は原則として土日にしか開講しません。修了単位を20-26単位集めるには4半期ごとに3-4教科ずつ履修する必要があります(JAISTは4学期制)。 石川本校の学生が平日をフルに使って受けるのと同じ授業を土日だけで賄うので、1日で1コマ100分を2コマ連続で合計7-8週(全15回)受けることになります。これに中間・期末試験です。100分2コマは端的に言うと、土日どちらかを半日差し出すことを意味するので、もしこれを1学期に3教科履修すると、土日の3/4が授業だけで取られることがご理解いただけると思います。

しかも理系科目が1日に一気に2コマ進むので、予習復習が想像を絶するほど大変でした。それに加えて課題も重い。毎週5-6時間は常に何かの宿題を夜中にゲボ吐きながらやっていた気がします。それでいて、基本的に成績は中間・期末試験の一発勝負で決まる。情報科学では出席点やレポートなどの救済措置がある科目のほうが例外的でした。3ヶ月これだけ苦しい思いをして授業を受けたのに、この試験で失敗したら水の泡かと思うと、テストの前は手が震えるような思いをしたのを覚えています。実際、2教科も力及ばず落としました。いや〜厳しかった。

同級生には理系の学部・院を卒業した人もたくさんいるので彼らに聞いた感じだと、JAISTの授業の難易度そのものは押しなべて一般的な国立大学理系院とそれほど差がないようです。なのでこれを読まれた方が必要以上に恐れる必要は無いと思いますが、甘いものではまったくないのは伝わるのではないかと思います。

まあこの地獄の日々もなんとか終わり、修了単位はすべて揃えることができました。内容はかなり満足しています(この辺は後半にちょっと書こうと思います)。

やはり家族には随分迷惑をかけました。履修は細心の注意を払って「基本的に土日のどちらかは丸一日空くようにする」ことを心がけました。これは子供との時間を作ることが最大の目的です。 しかしながらこれも正直に言ってそんなに甘いものではありませんでした。授業は、カリキュラムや先生の都合など複数の要因によって毎週一定の時間には行われるとは限りません。同じ授業でもある週は土曜日の午前だったり、また別の週は日曜の午後だったりします。これは避けようのないことではあるのですが、家族には予定の読めなさで随分ストレスをかけました(時間割はもちろん事前に分かっているのですが、家族はそんなの知ったことではないですよね)。JAISTで社会人大学院に進学しようと考えておられる方で家庭を持っておられる方はこの点をゆめゆめご認識いただければと思います。

授業を取る合間に、副テーマ研究も終えました。JAISTは研究に幅広い視野を与える目的で、すべての学生に主テーマ研究の他に副テーマ研究を課しています。主テーマ研究とは必ずしも関連している必要はなく、学生がそれぞれ自由に先生にアポを取って承諾をもらい、1-3ヶ月程度で完了できる研究をやります。僕は自然言語処理の先生に師事して、日本語コーパスの極性判定における言語ドメインの違いが及ぼす影響について研究しました。自分の能力の幅が広がって非常によい経験でした。

残すは修士論文だけです。正直、残りたった1年で修士研究を出来るのか?という不安はかなり大きいです。しかしJAIST大学院大学で学部を持たないため、幅広いバックグラウンドの学生を均一に鍛え上げるためにM1は比較的がっつりコースワークを頑張って2年目に研究を、というスタンスのようです。僕の主テーマ研究は、アドホックネットワークにおけるゴシップアルゴリズムを使った効率的情報伝達と、それを応用した行動支援というものになる予定です。年明けぐらいまでは周辺分野の論文を読みまくって研究の新規性や筋を見極め、春から夏にかけて実験、夏に2-3ヶ月かけて論文を仕上げて2021年秋の修了を目指します。

また来年の社会人学生 Advent Calendarでお会いできるのを楽しみにしています!

JAISTで社会人大学院生をやること

いや〜〜〜お疲れさまでした!ここからが本番ですね!

ちょっと話は変わるんですが僕はそくめん君というプラットフォームを使って僕と話してみたいと言ってくださる方々と時々1:1をしています。

sokumenkun.com

で、ここで一番聞かれるのがやはり社会人大学院のことなんですけど、共通して聞かれる項目があるので、せっかくなのでここでFAQ形式でまとめようと思います。JAISTの受験を考えておられる方には参考になるかもしれません。

Q. コンピュータ・サイエンスを体系的に学びたいと考えているがJAISTに進学することはどうか?

A. 正直悪くない選択です!ただ、大学は職業訓練校ではないです!

これ、大変もっともな質問だと思いますし気持ちとても分かります。前半でもちょっと書いたのですが、JAIST大学院大学で学部を持っていません。日本のその他の大学院はJAISTに比べてもっと研究色が強いと聞いております。これは、学部でがっつり勉強していることは担保できるので大学院では研究を…ということと理解しております。JAISTは学部がないので非常に多種多様な学生が集まります。なので、みんな一様に修士一年目はしっかり勉強せえよとばかりに勉強することになります。必要な単位は必修の他に自由選択で、修論を書く学生は20単位、課題研究の学生は26単位取る必要があります。これって大学院としては結構多いですよね。

しかし、とはいえたかが26単位です!2単位教科で13科目です。たった13科目。これでコンピュータ・サイエンスのすべてが味わえるはずもない。ごく限られた分野のほんの一端を垣間見るのが関の山でしょう。もし"コンピュータ・サイエンスを体系的に学びたい"のならば、それこそ学部をやり直すのにまさる勉強はないのではないでしょうか?僕は電気通信大学の情報理工学部の夜間などはかなり注目しています。

なお、JAISTの授業は本当に素晴らしいです。僕は履修したすべての授業が(結局落としたものも含め)本当にタメになりました。大学の勉強は、例えばRuby on Railsの使い方を覚えてウェブアプリを作りましょう!というものではまったくありません。大学は職業訓練校ではないのです。学んだことが即何かに使えるかというと、必ずしもそういうものではないと思います。ただし、まったく使わないかというとそれは全然そんなことはありません。大学で体系的に学んだ知識は必ず自分の血肉となって、まだ見ぬ課題に立ち向かう際に「もしかしてアレとアレを組み合わせると対処できるのではないか?」というような場面で力を発揮すると思います。なので、JAISTで学ばれることを全く否定するものではありません。

Q. 文系出身なのだがJAISTの授業についていけるか?

A. 授業と人によります!しかしそれなりの覚悟が必要です!

これも非常によく受ける質問です。これは本当にその人次第だし授業にもよるので一言で回答するのが難しいです。ただ、情報科学の分野で数学をまったく使わないものはほとんど皆無と言ってもよいと思います。自分が受けた中では次の例みたいな感覚だったので参考にしてみてください。

  • 情報理論や信号処理、解析系の授業…学部程度の数学力(高校数学では到底足りない)がないと授業で何が起こっているのかも理解できないし単位を取るのも無理です。
  • 形式手法、ソフトウェア設計、関数プログラミングなど…離散数学の基礎の上に成り立っている分野が多いが、職業ソフトウェアエンジニアは頑張ればついていける可能性がある。ただし、業務で行うプログラミングと情報科学の授業のプログラミングで扱われれる内容はかなり毛色が違うので手も足も出ない人もいるかもしれません。
  • ネットワーク、オペレーティングシステムなど…四則演算以上の数学を使うことはあまり多くないが、当然この分野特有の難しさがある。頑張れば何とかなるかもしれない。

自分が受けた情報科学の教科の中で「あ、これは楽勝」みたいな科目はただの一つもありませんでした。文系・理系に関わらず、覚悟を持って臨む必要があります。覚悟さえあれば…夜中に歯を食いしばって講義動画を見直して毎週毎週苦しい課題を出し続ける覚悟があれば、きっと大丈夫ですよ!

Q. JAISTの入試の小論文どんな感じで用意した?何をすれば受かる?

A. 考えているテーマで3本ほど論文を読み、その上で指導教員(予定)にアポを取ってアドバイスもらってはどうでしょう。

JAISTに入学したいけどどうやったら受かりますか?というのもよく受ける質問です。これも僕が入試を担当しているわけではないのでまったくわかりませんが、少なくともどういったフォーマットで行われているかは認識しています。JAISTの入試では小論文を提出して、面接ではそれに対するプレゼンを行う必要があります。これは、言うなれば修士研究をきちんとできる素地があるかどうか見られているのだと僕は理解しています。入試の時点で修士論文のように新規性や厳密なファクトチェックは求められません。その代わり、論理的思考やプレゼンの内容の事実確認のアプローチは見られていると思います。

自分が何かやりたいテーマがあったとして、Google Scholarなどで調べると論文は山程出てくるでしょう。図書館などではこれをダウンロードできると思うので、とりあえずそれを読んでみてください。すると参考文献に更に大事な関連情報が見つかるので、それを読んでいく。最低でも3つぐらい読めば、先生に「…それ事前に調べました?」とか呆れられることはかなり少なくなると思います。あとは自分のやりたい内容に関して

  • 現状の問題は何なのか
  • 自分の提示する手法は何を解決するのか
  • どのように仮説を立て、それを検証するのか
  • 結果はどのようになり、それは何を意味するのか
  • この研究でカバーできないこと、この先の展望

など書いていくともう論文の体裁になると思います。あとは人事を尽くして天命を待ちましょう!

で、JAISTは定期的に大学説明会をやっているので、そこで席主のおじさん(エライ先生だよ)に「こういうことやりたいんですけど」と伝えると、必ず「○○先生にコンタクト取ってみたらどうですか?」と教えてくれます。その先生とオンライン面談でもして読んだ論文の内容を伝えると次のステップを教えてくれると思います。Good luck!

ぶっちゃけJAISTどうですか

さて、本エントリ最後の内容です。ここではJAISTに関して思っていることを率直に書こうと思います。

まず、JAIST社会人の良いところ。これは沢山ありますけど、一番素晴らしいと思うのがやはり優れた同級生です。一緒に勉強している仲間には日本を代表する会社の研究職の方や、上場企業のCTO、医師や弁護士などの専門職者、他大学の教授までいます。こんな優れた人たちと、高いモチベーションで勉強できる場所はちょっと他にあまり思いつかないです。みんな仕事や家庭のある中なんとか時間を作って勉強や研究をしています。これまでさんざん書いてきたように、働きながら勉強するのは本当にキツイです。でもJAIST社会人のSlackでみんなで苦しみを吐き出しながら、提出した課題を褒め合いながら、なんとか励まし合ってみんな前に進んでいます。素晴らしい場所です。

次に、長期履修制度は非常によいです。JAISTは長期履修制度というのがあって、修士課程の学生は2年分の学費で3年間、博士課程は3年分の学費で4年間勉強できます。実質1年無料で延長できるんですね。国立大学なので1年の学費は53万円。これが長期履修制度を組み合わせると30万円台まで下がります。年間ですよ年間!JAISTのようなレベルの高い研究大学でこの学費で学べるというのは驚異的なことです。実質無料ですね。

今度は微妙な点。JAIST社会人は、COVIDの今でこそ完全オンラインですけど、本来は品川キャンパスに先生方が直接きて授業をしてくださいます。JAISTはあくまで石川が本校なので、品川で履修できる科目は決して多くはありません。情報科学の場合、4半期ごとに履修できる科目はわずかに4教科程です。年間で16-20教科ほど。これはお世辞にも多いとは言えませんよね。もちろん、その内容はかなり厳選されたもので、どれを選んでも損をさせない素晴らしい授業ばかりですが、それでも本校と同等の教育を受けるのは中々難しいです。COVIDが大きな転機となって、本校の授業をもっと気軽にオンラインで取れるようになったら、あるいはもっともっと素晴らしい大学院になるかもしれません。

最後に、JAIST社会人のちょっと面白い所を紹介して終わりにしたいと思います。現在のJAISTでは「情報科学」というのは学部ではありません。専攻は「先端科学技術研究科 先端科学技術専攻」の1本があるのみです。その下に知識科学系、情報科学系などの「学系」が並んでいます。これが何を意味するか?学生はある程度自由に学系を行き来して授業を取ることができます。 もちろん、違う学系の授業を取れると言ってもまったく自分の専攻と関係ないものは単位認定されません。シラバスを眺めながら、自分が修了したい学位と教科の表を見て単位として認められるものを選んでいくのが基本的な履修方法になります。面白いのが、情報科学で学位を取る場合でも単位認定される他学系の授業はちょこちょこあるという点です。

極論してしまえば、自分の学系と違う授業ばかりかき集めても「情報科学」として学位を取ることは可能なのです。自分が他学系の授業を受けた感じ、率直に言って情報系の授業で単位を取るより50倍は楽だなと感じたものすらあります。しかしそれは全て本人の選択なのです。自分が大学院で何を得たいのか?勉強して学力を身に着けたいのか。それとも研究がしたいからさっさと単位を取ってしまうのか。すべて自由です。大学は常にそこにあり、同じ内容を提供している。それを得て自分が何に活かすのか?それはすべて学生の自主性に委ねられています。この自由がJAIST社会人の非常によい点だと思いました。

いま、日本でもリカレント教育という言葉が聞かれるようになってきました。若い学生の減少とは裏腹に、社会人大学院はこれからどんどん盛り上がっていくのではないかと個人的に考えています。JAISTはその旗手としてこれからも勉強したい社会人に門戸を開き続けていくことを強く期待しています。これを読んでJAISTに興味を持ってくださった方、一緒に勉強しましょう!それでは。

学び直しと就職に関して

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

  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ルータを使う大きな魅力。