2020年の目標 - 4月まとめ

早いもので1年がもう1/3も終わってしまった……まで書いて先月のエントリを見直してみたら同じような始まり方だった。なんなら先々月もそうだった。日々何もできていないことがわかる。

osak.hatenablog.jp

相変わらずStay home令が発動中なのでひきこもりをエンジョイしている。テキサス州知事は5月から徐々に経済活動を再開させていくと言っていたけど、感染者数がリニアに増え続けている(ArcGIS Dashboards)中でやるのは正直意味がわからん……。経済が動かないと困るのはそうだけど、このタイミングで再開したら感染数が爆発してしまうと思う。経済が止まるのが予想以上に辛かったのでノーガード戦法に移行するということなんだろうか。


ゲーム。ライザのアトリエは2週間で70時間くらいプレイして、DLCのクリアと錬金レシピ・素材図鑑埋めまで完了したので一応満足した。自分で使うアイテムを自分で作るシステムはやっぱり面白くて、アイテムに付与したい効果と特性の組み合わせを考えて試行錯誤しているとあっという間に時間が経っていく。DLCボスに負けた後はちょっと面倒になったので攻略サイトを見て、賢者の石を使った無限ジェム稼ぎと手抜き錬成に逃げてしまったけど……。

ライザの次にプレイするべきアトリエシリーズを聞いたところ、Mastodonで識者(@toshi_a)に詳細なプロファイリングを受け、フィリス・ソフィー・トトリの順に推薦を受けた。ソフィーとフィリスは同じシリーズの1作目とと2作目らしいのでソフィーからプレイすることにした。

social.mikutter.hachune.net

ソフィーのアトリエは錬金システムがライザと違い、グリッド状の盤面にポリオミノを敷き詰めていくことで品質やアイテムの効果を上げていく仕組みで、グラフをたどっていくライザのシステムよりも好きな感じだった。ゲーム中で特定の行動を取ると錬金レシピを思いつくというシステムも面白い。あとソフィーが普通にかわいい。ライザみたいに暴力的なえっちさではなく、正統派にかわいくてすごく好き。

ストーリーはちゃんとあるけど存在感は弱めで、10人くらいいる主要キャラの個別シナリオを好きなタイミングで進めていくのがメインの体験という感じ。結構早い段階で仲間とマップが増えるので、中盤あたりでは進められるものが多すぎて正しく進行しているのかちょっと不安になったけど、全体的にはキャラ魅力にフォーカスしたゆるいゲームという雰囲気で良い。特に、メインシナリオの戦闘にソフィー以外が強く絡んでこない構成が個人的には評価が高い。パーティが自由に決められるゲームで、○○と共闘して敵をやっつけよう!みたいなイベント戦闘にそのキャラが参加しないことに強く違和感を覚えてしまうタイプなので……。

現時点で40時間くらいプレイして、ラスボスを倒すところまで進んだ。今はクリア後シナリオを遊んでいる。サクッと終わるという話だったけど、普通にライザと同じくらいのプレイ時間になりそう……。


線を引いたけど引き続きゲーム(アトリエの話が長くなりすぎたので)。日本で定期的にMagic: the Gatheringのドラフトをやってたメンバーと、MTG Arenaでイコリアのシールド戦をやった。最近は全然マジックをやってなかったけど、久しぶりにやると結構楽しかった。変容はオーラみたいなものだと思って過小評価していたけど、変容するたびに起動する能力がどんどん積み上がっていくので思った以上に強かった。

MTGシールドの後、流れでPrismataをやった。これも勧められて以来、2年くらい積まれてたゲーム。

store.steampowered.com

やってみるとめちゃくちゃ面白い。ターン制の拡大再生産ゲーなんだけど、ランダム要素がまったくなく、プレイヤー視点で不確定要素になるのはAIの思考だけ。しかも敵の行動結果に対しても、攻撃のダメージをどのように割り振るかなどある程度介入できたり、無限にUndoができたりするなど、自由度が高めのパズルゲームという体のデザインになっている。実際に高難易度では、ある瞬間での最適手を諦めて全体最適を達成するような手順が求められるステージもある。

アトリエシリーズが一段落するまではあんまり触れないと思うが、どう考えても面白いゲームなので早めに消化しておきたい。


株。普通のゲームで忙しかったのと、コロナウイルスの状況が全然改善していないのに株価が上がっていくのが完全に意味不明だったので、4月は定期的に資産状況を見る以外はほとんど何もしなかった。WTI原油先物が負の価格になったのはちょっと予想外ですごかった……。実物があれば0を割ることはないだろうから価格崩壊したら買ったもん勝ちだと思っていたけど、保管コストでやられるんですねぇ。


体重。62kg後半をキープしている。今年の初めと比べると1kgぐらい増えたところで安定しているんだけど、どう考えてもコロナの影響で運動しなくなったせいだよね……。明らかに筋肉が落ちたことによる体調の悪さを感じるので、たまに思い出したらスクワットと腕立て伏せをしている。


新しい技術。起きてて仕事してない時間は全部アトリエに注ぎ込んでいたのでなにも進んでいない。ロギングの話と例外ハンドリングの話でブログを書きたいと思って幾星霜……。というか、在宅といえども仕事が終わると精神力が尽きていて、こういう集中して思想を練るアクティビティが全然できない。つらい。

コンピュータの技術の話ではないが、家にずっといるという利点を活かしてラーメンを作った。豚骨スープの写真しか残ってないけど、昆布と煮干しダシも合わせたトンコツ煮干しラーメン。

ラーメンスープ作り 自作ラーメン

初めてにしては意外とうまくできた。特にオースティンでは煮干しラーメンというものが食べられないので、煮干しの味が身体にしみる……。店で食べると油っぽかったり塩味が強かったりするけど、自作なら味付けを自分好みに調整できるのもポイントが高い。トンコツは8時間くらいひたすら煮込んでいたけど、仕事しながら1時間毎に水位を見てお湯を足すだけなので楽だった(火を使っているので昼寝ができないのは少し辛い)。麺は最初はスーパーで売ってた細麺を使っていたけど、その後で試しにやってみたフェットチーネ重曹で茹でた麺もかなり中華麺っぽくておいしかった。縮れ麺にこだわりがなければ重曹スパゲッティで十分戦えると思う。

餃子も作った。既製品の冷凍餃子もいくつか買って試してみたけど、どれも味がいまいちだったので自作するしかないなと思った。

焼く前の餃子 焼いた餃子

生のまま冷凍しても日持ちするし、凍ったまま蒸し焼きにするだけで手軽に焼けるので便利。しかも市販品より遥かにうまいので、常備菜にしようと思う。


中国語。2〜3日に1回のペースでAnkiをやっている。本来は毎日やるべきだけど、継続しているのでまあよし。


本。Twitterで見かけて以来好きだったけんさんの「雑な生活」を読んだ。この人の漫画は思考のスキマを突いてくるというか、日常的に経験しているけど深くは考えないような絶妙な存在感のものを、いかにも大切そうに切り取って見せてくるので、シュールだけど納得もしてしまうという面白い感覚になる。

https://www.amazon.co.jp/dp/product/4047360783

(なんか知らんがAmazonが書影付きのリンクを生成してくれない)

Database Internalsは進んでない。


アトリエに時間を吸われた月だった。5月もほぼほぼ吸われる予定。まあなんもしないよりはゲームしてる方がよっぽど有意義でしょう……。

ところで、1ヶ月毎にまとめを書く形式だと結構忘れてしまっているイベントがありそうな気がしてきた。ログを残したいなら頻繁にブログを書いたほうが良さそう。

2020年の目標 - 3月まとめ

(注意:この記事は前半部分にライザのアトリエのネタバレを含みます)

早いものでもう2020年も3ヶ月終わってしまった。

osak.hatenablog.jp

ゲーム。ハナノパズル2は33面あたりで詰まって放置している。時間をかければ解けるタイプのパズルではあるけど、やる気が一度落ちてしまうと難しい。それから1ヶ月くらいはまた株の攻略法を考えていた……。株は気にしないって先月のまとめで書いたはずなのになあ。

3月末になって、さすがに仕事と株のことばっかり考えてると人生損してるなあという気持ちになったので、一念発起してライザのアトリエを始めた。アトリエシリーズはmikutter界隈とかあのへんの百合過激派が騒いでいるのでずっと興味があったものの、流れてくる話は百合の話ばっかりでゲーム内容が全然分からなかったので始めるきっかけがなかった。いざ始めてみると、アイテムを収集して錬金術で加工するというコアシステムが案外面白い。自分で装備品を作れて、しかも作り方によって性能が変わるので自然と凝りたくなってしまう。標準の難易度だと戦闘は比較的ぬるめなのでこってもあんまり意味はないのかもしれないけど……。戦闘は初見だと操作が煩雑な上にFF式の半リアルタイムで複雑すぎるかと思ったけど、慣れてくると自然と操作キャラを切り替えたり、クイックアクションで追い打ちをかけたりと自由に動かせるようになってきた。錬金術も戦闘もストーリーが進むにつれてどんどん新しいシステムが解禁されるようになっていて飽きない。ゲーム全体の雰囲気や錬金術というシステムも相まって、コアゲーマー向けに調整されたドラクエ8のように感じている。

現時点で20時間くらいプレイしていて、アンペルさんが仲間になるところまで進んだ。ひょろいオタクがプレイアブルだと嬉しくなってしまう(ひょろいオタクなので)。魔法使い(というか遠距離攻撃使い)なのもいい。あとライザかわいい。モーションがかわいいので移動するとき無意味にジャンプしたりしている。


株。値動きの気持ちがなんも分からんので、分野のプロであるところの投資信託に入れておくのが一番良いのでは……?という気持ちになってきたため、投資信託の選び方とかを色々調べていた。ファンドに突っ込んだ資金はファンドのものであり税金関係の処理はファンドで行われるものだと思っていたけど、どうもファンドが金融商品を売却してキャピタルゲインを得ると、それは投資家に直接還元されて投資家の所得に計上されるらしい。このシステムはキャピタルゲインをそのまま再投資する設定にしても変わらない。よって、頻繁にポートフォリオの売買をしているファンドに投資すると、資産は増えてないのに所得税が爆発することがあるらしい。こわい。

そもそも株価の決まるメカニズムが未だによく分かっていない。企業が利益を上げると自社株買いと配当による株主への還元が増えるという理屈は分かっているものの、実際の株価はそれ以上の何かを織り込んで変動しているか、もしくは深く考えず直近の取引に影響されて変動しているように見える。株価の妥当性はまったくわからん。金融理論の本を読む必要がありそう。

今日の記事だけど、コロナショックで企業が自社株買いを控え始めてるから株価はそんなに上がらないんちゃう?という主張をWall Street Journalで見て、なるほどそうだよねと思った。

www.wsj.com

目標を決めないと最適な戦略も決まらないので、とりあえず$1,000,000を稼ぐことを目標に据えた。これだけあれば適切な株を買って配当金で生きていけると思われるので……。しかしこの目標を達成するためには随分アグレッシブに戦う必要がありそう。


体重は全然変わっていないけど、体脂肪率だけじわじわと上がってきた。どういうことなんだろう。運動してないから筋肉が落ちてるのかな。


新しい技術。完全に在宅勤務になり、ちょっと興味が出てきたのでリモートに開発環境を置くということについて考えた。結局リモート環境は使ってないけど、どんなセットアップが必要で何を期待できるのかはだいたいイメージが掴めたと思う。

osak.hatenablog.jp

これに関連して、VSCodeを使い始めた。直接のきっかけはIntelliJ上でHaskellの補完がいまいちだったことだけど、リモート環境を調べる過程でVSCode Remote Development Pluginがどうやって動いているか納得感のあるメンタルモデルを構築できていたので、haskell-ide-engineの導入ガイドに従ってRemote Development Plugin経由でDockerに入りHaskellを書く環境を整えた。これが驚くほどシームレスで、UI上ではあたかも全てがローカルにあるかのように動いており(実際物理的には全部ローカルなんだけど)、補完もサクサクと動くし、エディタ内で開いたターミナル上なら実行もできる。しばらくは趣味のコードはVSCodeで書いてみようと思う。


中国語。DuolingoをやめてAnkiを始めた。文法を覚えたいので、今はChinese Grammar WikiのDeckを進めている。

ankiweb.net


本は読んでないな……。Database Internalsを読みかけで放置している。


3月末から4月頭にかけて、コロナウイルスっぽい症状で一週間くらいずっと体調が悪かった。最初は普通に季節の変わり目で体調を崩したのかと思っていたけど、37℃くらいの微熱が出たり下がったりを繰り返していて、発熱の低さの割に身体がだるく変だなあと思っていた。3/31〜4/3あたりは特に悪く、起きた時は平気だけど昼〜夕方頃になると熱っぽさを感じてくるという状態で、特に4/2は仕事を休んで寝ていた。微熱しか出ない風邪にしては治りが遅かったし、軽い咳や神経痛に似た後頭部の痛みもあったので、まあコロナウイルスなんじゃないかと思う。幸いにして今は回復した感覚がある。CDCによれば治ってから3日は出歩くなということなので、水曜日あたりまでは自宅謹慎することにする(元から買い物以外で出歩いてないけど)。

www.cdc.gov

これがコロナウイルスの症状だとしたら、Twitterで流れてきた以下の記事は正確に症状を描写してると思う。自分はずっと軽かったけど、定性的には似たような症状が出ていた。

note.com


今月はライザのアトリエをクリアするのが目標です。クリアしたら他のアトリエシリーズもやりたい。Database Internalsも読み終えたい。株はもうちょっとまともに市場のモデルを理解したい。アドホックに戦略を考えていても根拠が示せないので実質的にルーレットと変わらない。

リモート開発環境で何ができるのか

コロナウイルスの影響で、Indeedも3/3付で完全リモートワークに切り替えられた。

press.indeed.com

自分は会社支給の強いLinux laptopに全てを入れているので、開発環境に関しては特に普段と変わるところはない。しかし社内には、オフィスに置いてあるLinux workstationにsshして開発を続けている人もいるらしい。こういった環境構築系の話題は泥沼なので普段はあまり深入りしないようにしているけど、いいタイミングだしリモートに開発環境を置くということについて考えてみたいと思う。

この記事では純粋にプログラムを開発するために必要なセットアップについてだけ考える。物理的に一箇所に集まらない状態でチームとして動くテクニックの話はしないので、チームワークについて知りたい人はGitLab Handbookでも読んでください。

about.gitlab.com

リモート環境構築の動機と環境の再現性

そもそもなぜリモートに開発環境を構築したいのか。ざっくり考えると以下のようなケースが思いつく。

  • 自宅と会社等、2箇所以上で開発する必要があり環境を使いまわしたい
  • AWSとかで強力なサーバを借りて超並列ビルドをしたい
  • 強力なサーバを借りて巨大データをtry & errorでスクリプト書きながらいじりたい

このうち最初のケースでは常にサーバを立ち上げっぱなしにしておきたいが、他2つは必要に応じて立ち上げたり落としたりするワークフローが想定される。

1つめのケースは、会社に置いとけるワークステーションや、外からsshできる自宅サーバなどがあると考えると、基本的には一度構築した環境をずっと使い続けつつ、何かを更新したければその都度インストールしていけばいい。例外は新しくサーバを作った、HDDがクラッシュした等の理由でOSをクリーンインストールする時で、このときはゼロから環境構築をやりなおす必要が出てくる。強力なサーバを必要に応じて立ち上げる場合は、その都度ゼロから手動でセットアップするのは面倒なので、イメージファイルを作っておいたりAnsible等で環境設定をコード化しておくなどといった対応がほぼ必須になる。もちろん1つ目のケースでも、AnsibleのようなInfrastructure as Codeの枠組みで自動化すると管理しやすくはなる。

毎回Ansibleを走らせて環境を作るのではなく、必要なものを焼き込んだイメージを作っておくという方針だと、AMIのように構築済みの環境のスナップショットを直接サーバにマウントする方針と、DockerやVirtualBoxのように仮想マシンのイメージを作っておいてサーバ上で環境構築済みのコンテナやVMを走らせるという方針の2通りが考えられる。このどちらを選ぶかは、運用方針によってほぼ一意に決まるんじゃないかと思う。開発者1人につき1台EC2インスタンスを与えるという運用で開発環境が頻繁に変わらないなら前者がやりやすいだろうし、開発環境が頻繁に更新されたり、サーバ以外の環境(Windowsラップトップとか)でも開発環境を立ち上げたいという要望があるならVMイメージの方がいいだろう。

AMIやVirtualBoxのイメージの場合はともかく、Dockerの場合はイメージの管理が煩雑になる可能性がある。特定のアプリケーションのバージョンを上げることを考えると、おそらくDockerfileに手を加えることになるので、それ以降のコマンドはキャッシュが使えず全部やり直しになる。AMIやVMのスナップショットを配布する場合は、そのスナップショットから仮想マシンなりサーバなりを起動して、手動でアップデートを掛けることで部分的に更新するという戦略が可能になる。ただしこれも、何を変更したか管理するためにAnsibleやPuppetで管理したくなるだろうから、本質的には毎回Ansibleを走らせる方針と変わらなくなってくる。

リモート開発環境の使い方

リモート開発環境が構築できたとして、実際にはどう使うことになるのか。言語や抽象化レベルの違いによって多少の差異はあるだろうが、おおむね以下のような手順になると思われる。

  • ソースコードをローカルで編集する
  • 編集したソースコードをリモート環境にアップロードする
  • リモート環境でビルド・実行する
  • 出力結果等をローカルへコピーする(または何らかの手段でリアルタイムに共有する。たとえばDBの中身なら簡単にリモートアクセスできるし、Webサーバならブラウザでリモートマシンにアクセスすれば良い)
  • デバッガを使いたい場合、リモートでデバッガを走らせるか、ローカルのIDEからTCP経由でアタッチする

一連の操作をシーケンシャルに実行してくれるスクリプトIDEの補助無しでこの手順を踏もうとすると、間違いなくいくつかのポイントでハマるであろうことが容易に想像できる。

  • ソースコードをアップロードしないままビルド・実行してしまい、結果が予想と食い違う
  • 出力結果をローカルへコピーし忘れ、古いログを参照してしまう
  • ターミナルをローカルとリモートの2枚開いていて、間違った方でコマンドを実行しようとして失敗する
  • 普段はGUIのデバッガを使っているのに、リモートではCLIのデバッガしか使えない
  • リモートで動いているプロセスにアタッチできるようなGUIベースのデバッガが提供されていない

はじめの3つのポイントについては、これらを順番に実行するスクリプトを書いたり、IDEに任せることで解決できる。IDEの場合、たとえばIntelliJはRemote Developmentといって適切なタイミングでリモートにソースコードを送ってくれる機能があるし、VSCodeのRemote Development extension packはサーバ側とクライアント側の両方でVSCodeを走らせてそれらが通信することで、ローカルから透過的にリモート環境が触れるようになる。

www.jetbrains.com

code.visualstudio.com

後半2つに関しては、VSCodeはリモート側でもVSCode本体が動いているようなアーキテクチャなので、これも解決できるらしい(確認はしてない)。ローカルのVSCodeはリモートを操作するガワのように振る舞うので、ローカルのIDEでアクションをを実行するとリモートで実行されるが、使い勝手はあたかもローカルで全てが動いているかのようという都合の良いシステムになる。IntelliJにはこういう機能はない。言語によってはリモートで動いているアプリケーションにアタッチできるようなデバッガを提供していることがあるので、運良くそういう言語を使っており、GUIがリモートアタッチに対応していれば一応ローカル側のGUI経由でリモートのプロセスのデバッグはできる。IntelliJでは(少なくとも)Java, Go, Python, Ruby, Node.jsの各言語に対して、それぞれの言語が提供しているリモートデバッガを扱えるようになっているが、リモート側でプロセスが立ち上がってからアタッチする必要があるため、実行が高速に終わってしまうプロセスや、最初の方でちょっとだけ実行されるコード等ををデバッグするのは難しくなる(Java等ではプロセス側からリモートのデバッガに繋ぎにいくオプションもあるっぽい)。

また、IDEの利点として、ファイルツリーから特定のファイルだけを選んでテストを実行するといった機能がある。VSCodeでは(おそらく)普通に実行できる。IntelliJのようにリモート側でIDE本体を動かさない仕組みの場合は実装依存になるが、少なくともIntelliJの場合はテストの実行はIntelliJが走っている環境内でしか行えないため、リモート開発環境では使えない。自力で特定のテストケースだけを実行するようなコマンドを叩くことになる。また、IntelliJはテストを走らせた後にコードカバレッジをインラインで色つけ表示したり、テストの実行中にもブレークポイントを仕掛けて実行を止めたりできるが、こういった機能もリモート開発環境では使えないか、大幅に制限されることになる。

エディタがGUIである事にこだわらず、EmacsVim等でガリガリ開発できる場合には、エディタもリモート環境で起動することでローカル環境のことを一切考えずに開発することができる。この場合、間にネットワークが挟まることによる多少の不安定さを除けば、ローカル環境での開発と大差ない状況になる。全てがリモートで動いている状態でX転送やVNCを使うことでGUIも使えなくはないが、回線が細い場合は描画が遅くて使い物にならないと思う。

ローカルとリモートの住み分け

ローカルとリモートのそれぞれにどういったファイルやアプリケーションを置けばいいのかを考える。

リモート側は開発環境なので、当然コンパイラや各種ライブラリ、ビルドツール等が入る。DBやDockerなど、開発しているアプリケーションが依存しているアプリケーションもリモート側になる。構成によってはデプロイ用のツールチェインや秘密鍵もリモート側に置くことになるかもしれない(特に常設型の開発サーバを作る場合)。

一方のローカル側では、まずリモート環境に接続するための機構が必要になる。リモート環境がサーバやVMならssh, scp (rsync)と秘密鍵くらいが最低限必要になる。IDEを始めとしたGUIベースのアプリケーションを使いたい場合は、これも基本的にローカル側に置いておくことになる。逆に言えば、それ以外のアプリケーションはローカルで動かす必要がない。

リモート環境ではできないこと

リモートでどんなに高性能なマシンが用意できるとしても、本質的にリモートではできない、もしくはとても難しいタイプの作業も存在する。ここまでで何回か挙げたように、ネイティブGUI(ブラウザではないもの)の比重が大きいアプリケーションは、リモートで動かすことは困難なので、必然的にローカルで動かすことになる。分かりやすい例としては画像や音声の編集ソフトがある。

また、モバイルアプリや組み込みシステムなど、プログラムを動かすために別のハードウェアが必要な作業もリモート環境とは相性が悪い。多くの場合はプログラムを転送するためにLANやUSB、シリアルケーブル経由で接続する必要がある。開発用リモートマシンと自分が物理的に同じ家にいるならいいが、リモートマシンをクラウドに載せるには多少なりとも困難が伴うし、開発マシンから端末へデバッガをアタッチしたい時などはほぼ確実に有線での接続が求められる。

こういった作業が避けられない場合は、ローカルとリモートという分け方ではなく、その時手元にあるマシンだけで作業できるように環境を整えることが重要になる。

まとめ

  • 開発環境はAnsible等、Infrastructure as Codeで管理することがほぼ必須と言って良い。Playbookさえあれば、それを直接サーバに適用するかイメージの構築に使うかは好きにに選ぶことができる。
  • 開発プロセスは、ビルドや実行に関わるコマンドはすべてリモートで実行されることを念頭に置く必要がある。IDEによって差異が吸収される部分もある。特にVSCodeを使う場合、ローカル環境で閉じているときとほぼ同じ感覚で開発することができる(と思われる)。
  • ローカル開発環境にはリモート環境に接続するためのツール群と、GUIベースのアプリケーションを入れる。それ以外はすべてリモート環境に配置する。
  • GUI主体の画像いじりや、物理的な接続を要求されるモバイルアプリ開発はリモート開発環境と相性が悪い。そういう時は諦めて手元のマシンを増強したほうが良い。

2020年の目標 - 2月まとめ

3月になって一週間も経ってしまった。風化しないうちに2月分のまとめを書く。

osak.hatenablog.jp

これで毎月振り返る目標は2/12達成した。楽でいいね。なんだって達成すればいいってもんでもないが……。

ゲームはハナノパズル2を始めた。有名だけどやってなかったので……。現在33面。ゼリーよりは変な手筋が少なくて考えやすいが、それでもこんな動かし方あるのか!という驚きがずっと続くのですごい。

qrostar.skr.jp


株。自分の資金を投入し始めたので当事者意識が生まれ色々調べてまとめた。長期でどう考えるのかはそこそこイメージが掴めたので答え合わせ待ち。短期の値動きは全然分からん。先物とかチャンスレベル以上のパフォーマンスを出せる気がしない。

osak.hatenablog.jp

ウォール街のランダム・ウォーカーは巷で話題になるだけあっていい本だった。ランダムウォーク理論だけでなく、市場がどういう仕組みで動いているのかを大まかに見通せるのが良い。名前を知ってる将来性のありそうな株を買ってみていたら、コロナウイルスの打撃を受けて軒並み株価が下がり、うおーこれが暴落かという気持ちになった。3/8現在では含み損7%くらいになっている。明らかに動きがおかしいので素人が首を突っ込むと危ないだろうなあとは思いつつ、こんな面白い状況はなかなか経験できないだろうからとりあえず動いとこうと思って、めぼしい銘柄を見繕って監視することにした。で、底値かと思って買ったらまだ下がる、というパターンを2回やった。とりあえず遊べて満足したので少なくともあと半月は様子見でいいかな……。分析の過程で、自分が分かるようなS&P 500のコンポーネント(要するにIT系や超大手チェーン)はS&P 500インデックスと同じような動きをしているので、個別のコンポーネントに手を出すくらいならインデックスファンドに突っ込んだ方が安定度高いし考えること少なくていいなという気付きを得た。よっぽど高いリターンが見えるなら別だけど……。

旅行や飲食はともかくIT系株とかが落ちてるのはあんまり理由が分かってないが、コロナウイルスを口実にしてバブル気味だった市場が元に戻ろうとしているという分析をどこかで見た。本当かは分からんけど、会社そのものではなく株取引自体に値段が付いている雰囲気は確かに感じるので、まあなんか口実は必要なんだろうなとは思った。


体重は変わってない。相変わらず62kgくらい。頑張ると減らせそうな気もするが、変な病気が流行ってる時に体調のバランスを崩すようなことをするのもなあと思って頑張るのは止めている。


新しい技術。はなんもやってないな……。株式関連の情報を自動収集しようと思って、Alpha Vantageという無料で叩けるAPIのクローラをHaskellで書いてみたものの、Shares outstandingやReturn on Investmentのような自分の見たい情報が取れないので諦めてしまった。そういう情報をAPIで提供しているとこはそれなりに存在するが、どこも月$50以上の費用がかかるので、趣味で適当にやるだけの出費としてはちょっと辛い。FidelityのQuoteでは一応見たいものが全部見れるのでそこをクロールするのが一番いいような気もするが、やっていいのかな……。


中国語。Duolingoは初めの方はよかったけど、1ヶ月くらいするとアプリの粗が目立ってきて不満が多く、気が向いたらちょっとやるくらいになってしまった。大きく不満な点としては

  • 中文英訳問題で冠詞を抜かすと誤答判定されたり、中国語の微妙なニュアンスを変な訳し方で訳さないといけない(妹妹はsisterではなくyounger sisterとか)など、本質的でないことで時間と思考リソースを食う
  • 知らなかったり忘れたりした単語を調べたくても、Duolingoの機能の範囲内でピンインが表示できないので入力できない
  • フリーテキスト入力の問題が鬱陶しい上、やっぱりテンプレートに則って訳さないと誤答判定される

といったあたり。反復練習するためのプラットフォームとしてはそこそこいいんだけど……。雰囲気は掴めたので、Ankiかなんかで文法と単語を詰め込んでWebサイトを読むようにシフトしたほうがよさそう。……というような感想が先月のまとめにも書いてあった。今月やります。


本。1月に読んだ「いま世界の哲学者が考えていること」で紹介されていた、マルクス・ガブリエルの「なぜ世界は存在しないのか」と「『私』は脳ではない」を読んだ。

読書メーターの感想。

bookmeter.com bookmeter.com

「なぜ世界は存在しないのか」では、物理的な物と抽象的な思考をひとまとめに扱う道具として「意味の場」を考え、個人個人のもつコンテキストに応じて「意味の場」を通して観察されたものの積集合のところに「実存」が確かに存在するという、素朴実在論構築主義を合わせたような世界観を提示している。直感的には納得しやすいし、多様化する価値観をどう擦り合わせるかを問題とする現代においては確かに大切な考え方だと思う。一方で、これは日常生活を生きるために必要な考え方を提供する実用向けの哲学であって、世界を解き明かすというハードな用途には合ってないなとも思った。実際に2冊目の「『私』は脳ではない」では、精神の実在性に固執するあまり、自然科学的なアプローチでの定義(日常的なモノとしては精神を定義しづらくなる)に短絡的な難癖を付ける方向に向かってしまっており、あまり得られるものがなかった。

文体はとっつきやすいし、議論に必要な哲学的概念は逐一説明してくれるタイプの本なので、初心者でも読みやすい。実際自分も初心者だし……。とりあえずあまり構えずに読んでみると何かしら得られるタイプの本だと思う。


映画化して話題になっていたので、致命的なネタバレを踏む前にと思い、ようやくメイドインアビスを読んだ。

断片的な情報からグロテスクでダークな作品だとは知っていたが、予想の数倍ダークだったし、そういった簡単に耳目を集める演出だけでもない、硬派で密度の高い冒険ものでもあった。一周目だと何がなんだか分からなかった箇所もあったが、この前二週目を読み返したら全体像がすっと入ってきた。異種族レビュアーズもそうだけど、世界観が作り込まれている作品は読んでて楽しい。


そういえば、2月半ばにあまりにも疲れてもうだめぽみたいな気持ちになったので、Chase Sapphire Reserveのアホみたいに貯まるポイントを使ってダラスのKing Spaにまた行ってきた。ポイントはUnitedにマイルを送って航空券を取ったんだけど、Unitedはオースティン―ダラス間に直行便がなく、ヒューストンで乗り継いで3時間くらいかかる。本を読んだりPCしたりで時間は使えるからまあそれでもいいかなと当初は思っていたけど、やってみると面倒なので、やっぱり直行便だなと思った。United以外でもカード会員向けサイトから旅行を予約すると1ポイント1ドル以上のレートで使えるっぽいので、今後はそっちを使うか、アップグレードのために貯めるかかな……。

今回はマジで静養だけが目的だったので、IrvingのLake CarolynのほとりにあるMarriottに泊まった。部屋でなんか生産的なことできるかと思って、一応湖の見えるいい感じの部屋を取ったけど、結局ホテルでは何もせず、King Spaで風呂に入ってはリラックスルームで寝るのを3回くらい繰り返してだらだらしていた。

goo.gl

あとLyftのおっちゃんに、スパ行きたいならSpa Castleのほうが大きくていいよとおすすめされた。今度はそっちも行ってみたい。というかダラス以外でもいい温泉地やスパがあったら行きたいので情報を募集しています。


こんな感じかなあ。2月は仕事がちょっと立て込んでいて精神が終わり気味だったり、日本から同僚が来ていたので遊び回っていたり、株価が動いているのを眺めながら何が起きているのか考えたり(数値が変化するのは見ていて楽しい(数字って言うと警察に摘発される))していたので、他のことに割く元気があまり残っていなかった。3月は株はひとまずあんまり気にしないことにする。コロナウイルスの影響で在宅勤務になり、集中力が切れやすくなったからか相対的に疲れにくくなったので、この余剰分をうまく使って人生を進めたい。

株式投資についての覚え書き

株を買い始めて2週間くらい経ったので、調べたり考えたりして分かったことをメモしておく。

株式に対するリターンの源泉

投資家が株式を購入する際には、以下のリターンを期待しているか、もしくはそのようなリターンを期待している別の投資家に売ることができると期待している。小売と卸売の関係と同じく、後者の形態の投資家はそれ自身を買い手と想定することもできるため、メタ構造を形成する。

  • 配当金が得られる。これは純利益の増大に伴って増加すると考えられるため、企業が小さい(=倒産リスクが高く、株価が安い)時期に買っておくと、購入額に対して大きな割合の配当が受け取れるようになる。
    • 配当金は株価の1%〜3%程度が相場なので、株価が落ちないのであれば銀行に預けておくよりも利回りが良い。
  • 企業が自社株買いをする。自社株買いのモチベーションには次のようなものがある。
    • 必要のない株式を回収し、自社の経営権に対するコントロール度合いを増やす。
    • 新規株式を発行することなく、従業員へのストックオプションを確保する。
    • 株主の利益を保証するため、株価や指標を調整する(これは因果と結果がループしているので、定常状態になったメタ構造に対する説明としては有効だが、源泉としては弱い)。

参考: kabukiso.com www.investopedia.com

インデックスファンド

株式投資の話をすると、大抵の人はすぐインデックスファンドを勧めてくる。インデックスファンドのインデックスとは、複数の銘柄からなんらかの方法で算出される指数(インデックス)である。これは単純な株価の平均でもいいし、S&P社のように株式に対して重み付き和を取ったものでもよい(参考:S&P Dow Jones Indices, Float Adjustment Methodology)。インデックスファンドとは、複数銘柄のセットであり、それらに対する指数が市場に対する指数と同じ動きをするように構成されたものである。市場に対する指数としては、日経平均株価とか、S&P 500といったものがある。

複数の銘柄を束ねているため、市場の指数に追随するようなポートフォリオが一度組めれば、不確定要素によるブレが少なくなる。すなわち、個々の株式は無視して、代表値として指数だけを見て運用すれば良くなる。中心極限定理のような理由だと理解しているが、単一銘柄に対する指数の分布が一定の性質を満たすことや、指数が加法的であることなどの条件が必要だと思われる。

もちろん市場として指数が悪化すれば、インデックスファンドからの利益も低くなる。常に勝てる銀の弾丸ではない。市場の指数が景気をよく表しているのであれば、インデックスファンドを買うことは景気に賭けているのとほぼ同じことになる。

これも大抵の人が勧めてくる「ウォール街のランダム・ウォーカー」を読むと大体の気持ちがわかる。ページ数は多いが、興味のあるところだけ適当に拾って読めばいい類の本だと思う。

株価の妥当性

株を買いたい人に株を売るために株を買うというメタ構造が入ってしまうため、株価の妥当性は今ひとつよく分からない。P/E Ratioという指標を目安にするのがよくある手筋っぽい。これは株価を単位株あたりの純利益で割ったもので、投資家がその企業の株式にどれだけ期待しているかの指標……とされている。一見それっぽい説明だが、そもそも企業の元手は株式だけでなく資本金もあるので、企業に対する指標としてはP/E Ratioがいったい何を示しているのか謎である。

株価の絶対的な妥当性は決めるのが難しそうだが、相対的な妥当性なら、おそらく同じ業種でROE (Return on Equity、自己資本利益率)の近い企業と比較するのが良いのではないかと思う。ROEは純利益を純資産で割ったものなので、純粋にどれだけ金を回すのが上手いかという指標になる。純資産の代わりに総資産を使ったReturn on Assetsや、売上を投資額で割ったReturn on Investmentという亜種ももちろんある。ただし、たぶん効率の上がり方は資産に対して線形ではないので、規模等も適宜揃える必要があると思われるし、株式の発行数も影響してくる。これもう何もわからんな。

追記 2020/02/23:買収などに際して行われる企業価値評価というプロセスが、まさにこの妥当な株価を計算するものだと教えてもらった。評価を行う会社や状況によって算出方法は異なるが、基本的には総資産に将来の成長を加味したものを企業価値と想定して、それを単純に株式発行数で割るものらしい。参考:企業価値評価とは?M&Aで使用される企業価値の算出方法 | FUNDBOOK(ファンドブック )M&A仲介サービス

一つの企業を時間軸で見ると、長期的なスパン(1年〜)で成長した企業は株価が上がっているとは言えそう。その逆が言えるかは謎(偽っぽい印象はある)。短期での動きは完全に謎。

参考: www.investopedia.com www.investopedia.com www.investopedia.com https://fundbook.co.jp/valuation/

戦略

以上を踏まえると、投資戦略はいくつかにに大別される。

  • インデックスファンドを買って、総合的な長期の成長に賭ける。
  • 1年〜数年のスパンで成長しそう&成長の余地がある株を予想して買う。
  • あまり値動きしなさそうな株を配当目当てで買う。

どの戦略を取るにせよ、一度株式を買ったら買値を含めて過去にやったことは覚えておく必要はなく、現在持っている株式だけを見てその都度売り買いを判断すれば良い。買値から10%落ちたら損切りするなどと言っている指南書もそこそこあるので初見だと混乱するが、よく考えると過去の売買には干渉できない条件で総資産を最大化する問題なので、過去を気にしなくて良いのは当たり前。ただし、株価の急落は将来の成長率に影響するような何かが引き金になっている可能性もあるので、アラートとしては監視する価値がある。

2020年の目標 - 1月

目標に関してなんも覚えてなかったけど、1ヶ月に1回くらい振り返るとモチベーション維持に良さそうと思ったのはかろうじて覚えていたので振り返りに来た。

osak.hatenablog.jp

毎月振り返るの目標の1つになってるやんけ。Twitterかなんかで雑につぶやいただけだと思っていた。

ゲームは特にしてない。あっいや、なんか流行ってたのでBacon - The Gameをちょっとだけやった。57面のピサの斜塔で詰まって飽きたのでもう一生やらないと思う。

Bacon – The Game

Bacon – The Game

  • Philipp Stollenmayer
  • Games
  • Free
apps.apple.com

あとゲーム的な話としては、Tax returnして一時的に意識が高まったので、Fidelityに証券口座を開いて株式投資を始めた。株についてちょっと調べたけど値動きする理由とか全然わからんのと、そもそも座学だけだとあんまり理解が深まらないタイプなので、とりあえず何が起きるのか肌で感じてみようという気持ち。人々は資金あるならインデックス投資やれやとか勧めてくるけど、インデックスはブラックボックス部が大きすぎて株式市場で起きる現象の理解には使えなさそう……(そうでないなら教えて頂けると助かります)。まあ安定して儲けるパートは今の所目標ではないので別に資金溶けてもいいやくらいの気持ちではある。知識無しで突っ込むというのはそういうことだし……。


体重は61.5〜62.5kgの間を振動している。標準体重は59.9kgらしいので、特に減らす必要はなく、これを維持できればいいということでいいのかなぁ。食生活をあんまり変えてないのに初期と比べて明らかに下がらなくなったし……。


新しい技術。GoでWebクローラを書いた(多分近いうちにリファクタリングする)。 github.com このフレームワーク上でいくつかクローラを作って、余ってたThinkpadを使った自宅サーバで動かしている。定期的に走らせるためにsystemd.timerを勉強して使った。超便利。

色々なWebサービスMastodonへの自動ポストをしてくれないので、IFTTT経由でAWS Lambdaを叩いてクロスポストするやつを作った。今のところFoursquareのチェックインと読書メーターに対応している。 github.com AWS LambdaはNode.jsとかPythonのようなちょっと長期メンテはしたくないです……という感じの言語で書く印象が強くて敬遠していたけど、Goで書けることを知ったのでこれが未来か……となってサクッと書いた。AWSは神。これをAmazon API Gatewayで適当にREST API化すると一瞬でWebhookになる。AWSは神。

あとこのリポジトリを開発してる過程でGo Modulesの存在を知った。名前はTwitterでよく見てたしIntelliJにもGo Modulesというのがあって何だろうとずっと思っていたけど、要するにGOPATHからリポジトリを切り離して普通の言語っぽいパッケージマネージャを実現するやつだった。これはマジで世界が変わる。

業務では相変わらずKotlinを結構ヘビーに使っており、リフレクションで遊んでJavaと比べてあまりの使いやすさに感動したり、良いプロジェクト構造への知見が溜まったりした。こういうのいつかpublicに書きたいですねえ。そもそも社内ブログ用にまとめろよって話でもあるが……。


中国語。Duolingoは毎日続いている。最初は英語でやっていたけど、日本語でもサポートされてることに気付いて途中から移行した……ところ、日本語はコースが途中までしか作成されてないことに最後まで行ってから気付き、また英語に戻した。中文英訳問題で英文法を間違えて❌判定されるのが地味に精神に来る。基礎能力が上がっている気はするが、運用能力が上がっている感じはあまりしないので、中国語の文章をネットで読むとかしたほうが良さそう。漢字の読みも覚えないとPCで打てないので、会話する気がなくても地味に重要。


本。異種族レビュアーズを読んだ。アニメは観てない(最近アニメを観る気力が出ない)。天原作品の世界観にハマって、Pixivに上がってるイラストを読破して、貞操逆転世界シリーズと33歳独身女騎士隊長を買った。

www.dlsite.com

この人、現実とは違う人の思考ロジックをトレースして出力するのが異常にうまくてすごい。何が世界観に影響するのかをピンポイントで把握して出力している感じがする……。

9月末に日本で買って積んでた「いま世界の哲学者が考えていること」も読んだ。この本はかなり読み口が軽く、何がキーになっているかの最低限の理解を得て、次に読む本を決めるための本という感じ。実在論の話がかなり琴線に触れたので、参照されてた本を4冊ほど買った。


なんかこうやって書くといろいろやってるように見えるな。2月もちゃんと人生できるといいですね。

グリーンカード取得の記録

晴れてグリーンカードを取ったので、今後誰かの参考になればと思って何をやったかの記録を残しておく。自分も他の人のブログで色々調べたりしたので……。

  • 2018年8月頃:会社がスポンサーになってグリーンカード取れるけどどうする?とマネージャーに聞かれたので、とりあえず手続きを進めてもらうようにお願いする。
  • 2018年9月頃:簡単な履歴書、大学の学位証明(日本語のを出したら、アメリカの調査機関でアメリカの学位と同じであることを保証する証明書を作ってもらった)、マネージャーからの推薦状的なもの(中身は自分で書いた)を会社のGlobal Mobilityチームに提出する(あんまり覚えてない)。
  • 2018年11月頃:PERM Labor Certificationを発行できるか確認するため、会社指定のフォームでスキルリストを提出する。
  • 2018年12月頃:I-140アメリカでの雇用に基づいた永住権申請書)作成のため、会社が作った雇用証明書のテンプレートに自分の業務内容を書いて提出する。
  • 2019年1月頃:ETA 9089(PERM Labor Certificationの申請書)ができたという通知が来たので、Work historyや最新のI-94情報が正しいか確認する。
  • 2019/01/18:ETA-9089を提出したという連絡が来る。
  • 2019/04/24:PERMが発行されたという連絡が来る。
  • 2019年5月頃:I-140のために必要な追加書類のスキャンを提出するよう連絡が来る。移民に関係しそうな個人情報は全部要求される。パスポートの出入国スタンプ全部とか、最新のI-94とか、Birth Certificateとか。Birth Certificateは戸籍謄本を翻訳してもらうことで作成可能っぽいが、手元になかったので6月末に日本に行くタイミングで持ってくることにする。
  • 2019/07/19:ヒューストンの日本総領事館で戸籍謄本を翻訳してBirth Certificateにしてもらう。現金で$15くらいを釣り銭無しで払う必要があるので注意が必要。あとで聞いた話によると、自分をTranslatorとして自力翻訳したものでもいいっぽい?(未検証)
  • 2019/07/22:Birth Certificateの取得状況を伝えてなかったので、はよ書類出せやという催促がGlobal Mobilityチームから届く。すみません……。書類は揃ってたので即提出する。
  • 2019/07/24:I-140はできたから、I-485アメリカ在住のステータスを永住権に変換する申請書)とI-131グリーンカード申請中のReentry permit申請書)、I-765(Employment Authorizationの発行申請書)も提出するねということになり、I-485のために両親の出生地を教えてくれと言われる。Reentry permitというのは、ビザの種類によってはI-485を出した時点で失効してしまうので、その状態でもアメリカに入国できるようにするための書類。自分はL-1で入国していたので関係ないっぽいが、万が一のための保障としてでやっとくねとのこと。しかしI-131処理中にアメリカを出国すると却下されることがあるらしく、9月に日本に行く予定があったので、I-131はとりあえずそれまで延期してもらうことにする。
  • 2019/08/23:I-485が受理されたとの連絡が来る。同時にメディカルチェックを受けてI-693(移民用の健康診断+ワクチン接種証明書)をもらっといてねと言われる。これを発行できるのはCivil Surgeonという特殊な資格がある人だけらしい。これを発行できる病院はUSCISのサイトで検索できる
  • 2019/08/28:I-693のための検診を受けに行く。予防接種はTdap(三種混合)、Measles(はしか)、Mumps(おたふくかぜ)、Rubeola(風疹)(これらはアメリカだとMMRという名前で接種するらしい)、Varicella(水疱瘡)が要求される(年齢や時期によって異なる)。母子手帳の予防接種記録を自分で翻訳してもいいっぽいよとTwitterで聞いたので持っていこうとするも、当日忘れる(は?)。内容は覚えていたが、母子手帳に水痘と書いてあったのを水疱瘡だと分からず(は??)、水疱瘡は受けてないと思うと医師に言ったところ、じゃあ接種してCertificate持ってきてねと言われる。それとは別に他の結核や梅毒等の検査のため血液を取られる。結核ツベルクリン注射をするもんだと思っていたら、最近は血液検査で分かるらしい。この検診は$400くらいかかった。
  • 2019/08/30:4月に普通の健康診断を受けたAustin Regional Clinicで相談すると、とりあえず抗体があるか血液検査でチェックしようかという事になる。そしたら全部抗体があった(Tdapは4月に接種してた)。証明書だけもらって提出する。検査は$50くらいだった。
  • 2019/08/27:Biometricsを取るから指定のUSCISオフィスに9/6に行ってねという連絡が来る。これは車で15分くらいの近所だった。
  • 2019/09/06:Biometricsを取りに行く。写真を撮って指紋を取って終わり。
  • 2019/10/02:I-765が受理されてEAD Cardが届く。
  • 2019/10/30:I-140が受理されて、最終面接が12/02にセットアップされる。というか10月頭にアメリカに帰国してたけど、結局I-131を提出してもらうのは忘れていた。特にこれから出国する予定もないのでまあ結果オーライとする。
  • 2019/12/02:今までに提出した書類のコピーを持って最終面接のためSan AntonioのUSCISオフィスへ行く。真実を話しますという宣誓をしたあと、I-140に書いてある個人情報と質問リスト(基本的にはヤバいことやってない・やるつもりないよねという確認)を確認して終わり。もっと面倒なことを聞かれるかと思ったけど簡単でよかった。今までになんかPenalty受けたことある?と聞かれたとき、なんもないと答えたら質問を理解してないと思われたのか、交通違反の切符もそうだよと念を押された(本当にない)。1週間くらいで結果の通知が来て、大丈夫なら2〜3週間でグリーンカードが届くよと言われる。
  • 2019/12/05:面接に通ったという通知が来る。
  • 2019/12/11:グリーンカードが会社に届く。思ったよりずっと早い。思えば運転免許証も言われたよりずっと早く届いた。

雑多な情報

  • グリーンカードの申請キューの状態はVisa Bulletinで見ることができるが、日本人は申請したら(お役所時間で)待ち時間なく処理できるCクラスなので見てもあんまり意味がない。中国やインドは数年〜十年待ちになっていてヤバさがある。
  • グリーンカードはWork authorizationを兼ねるので、I-131を同時に出さないなら別にEAD Cardもいらなかった説はある……。そもそもI-131が却下されても、Reentry permitがもらえない以上のデメリットはないっぽいので申請するだけ得な気はする。