年パマンによるユニバーサルスタジオハリウッド解説2026

昨年

komajou.hatenablog.jp

今年の大まかな変更

  1. Fast & Furious Hollywood Driftがオープンしました
  2. 新ゲートが導入され、荷物検査場が変更になりました
  3. Take 2ストアがクローズしてPOPMARTになりました
  4. オデュッセイアのセットがスタジオツアーにちょろっと組み込まれました(期間限定かも)
  5. バックロットクラブが新設されました

変更一覧

Fast & Furious Hollywood Drift

全然映えないショット

遂にオープンしました、ワイスピコースター。
待ち時間目安は通常時で2~4時間。普通に入るとかなり待ちます。60分待ちはかなりラッキータイムです。 シングルライダーあります。シングルライダーだと4時間待ちに対して待ち時間30分くらい。
ライドの乗り心地は非常にスムーズですが、かなり刺激は強めだと思います。
エプコットにあるガーディアンズ・オブ・ギャラクシーのコースターとライドシステムは同じですが、こちらのほうが激しさは高めだと感じました。両腕を上げると遠心力で肩抜けそうになります。身体が!重い!

金属探知機

USHで初めて金属探知機ゲートを導入したアトラクションです。
アトラクション乗車前30分ぐらいの位置で全ての荷物を無料ロッカーに預けてポケットの中まで空にする必要があります。USJでも似たシステムがあるのでこれと同じだと思って頂ければ。
ただ、アクセサリーとかまでにうるさくは言われません。スマホ持ってなければ許される程度。
シングルライダーのロッカー~金属探知機間の距離が長いので、SRでNG出されるとなかなか悲惨です。

ロッカー

ロッカー

ロッカー。ポケットティッシュはサイズ比較のため

入り口側・出口側からの両サイド開きロッカー。ハリーポッター&マミーのロッカーより大きいです。リュックサックもらくらく入ります。

使い回されたロッカーチケット

ロッカールームに入る時にキャストから渡されるバーコードつきのロッカーチケットをロッカーのステーションにかざすとロッカーが開くシステムです。チケットは忘れずにポケットなどに入れて携帯しましょう。途中でなくさないように!
バーコードカードは荷物回収後にキャストメンバーに回収されます。

注意:ロッカートラブルについて
海外インフルエンサーから「ロッカーを開けられなくなった」報告が(稀ではありますが)複数件上がっています。
開けられなくなった場合、キャストが開錠を数回試し、それでもだめなら閉園後の一斉開錠を待つしかないという対応になるそうです。嘘だろ。ディズニーでももっといい対応だったぞ。
そのため、僕は乗る時は念の為、少額の現金とクレジットカード、身分証明書と家族の電話番号を書いたメモをポッケに入れて乗ってます。
ロッカー番号をきちんと覚えておくことも大切です。
念には念を入れることをおすすめします!

新ゲート

今まではパークの地球儀を囲むようにセキュリティゲートがありましたが、ユニバーサルシティに入る前にセキュリティゲートが設置されました。これにより混雑分散・ゲート通過時間が大幅に短くなりました。
Youtuberたちが動画を上げまくっていたので、どんな感じか見たい人はYoutubeで検索するといいと思います。

Take 2 -> POPMARTに

最愛の全品7割引きストア、Take 2が閉鎖されてしまいました。大変残念です。
代わりに、7割引き商品はいくつかのストアに分散して置かれています。
Universal Studio Store(ユニバーサルシティ+アッパーロット)にだいたいあります。
跡地はPOPMARTになりましたが、現在の通貨レートだと日本で買うよりだいたい4割高いです。

オデュッセイアのセットがスタジオツアーに

ふね

オデュッセウスが漕いでたボートがスタジオツアーの終わりに置かれました。期間限定かもしれません。
ほんとにボートがぽつんと置いてあるだけでそれ以上のものは特にありません。

バックロットクラブ

スマホアプリを使ってバーチャルスタンプラリーを楽しめるバックロットクラブが常設になりました。
以前まではイベント期間中だけ遊べるやつでした。
バックロットクラブのステーションはあちこちにありますので探してみてください。

プライベートなDiscord Botをサーバーにインストールする

いっっっっっつもこの方法を忘れるので備忘録。
自分だけが参照可能なDiscord Botを作り、サーバーにインストールする方法です。

操作はデベロッパーポータルから。 discord.com

  1. Botを作成する(ここは迷う要素ないので省略)
  2. 作成したアプリケーションを選択する
  3. 「Installation」を開き、Install Linkを「None」に設定し、設定を保存する
  4. 「Bot」を開き、「Public Bot」のトグルをオフにします。また、必要なIntentを選択して、設定を保存します。
  5. 「OAuth2」を開きます。「OAuth2 URL Generator」で「bot」にチェックを入れると、その下に「Bot Permissions」を選択するエリアが表示されます。欲しいBotの権限を選択してから、「Integration Type」で「Guild Install」(サーバーへのインストールを意味します)を選択し、生成されたURLを開きます。

レイオフを乗り越えて再就職に成功しました

レイオフから半年の無職期間を経て再就職に成功しました。
3月末からはヘルス系スタートアップでフルスタックをやります。わーい。
というわけで、お仕事が始まる前に、無職期間についての振り返りをやっておきます。

この半年間、マーケットはどうでした?

青キジかってくらい冷えてます。氷河時代!!
2025年に入り再び大規模レイオフが増え、GAFAをはじめとする大企業から10万人以上(この数字は諸説あるので調べてください)の優秀なエンジニアたちが放流されました。
そんなわけで飽和しきったジョブマーケット、求職者はどんなに華々しい経歴を持っていても半年で仕事が見つかれば良い方、一年かかっても次が見つからないこともざらな、完全運ゲーの世界になりました。
ただ、2026年に入り、2月ごろから若干、本当に若干ですが、マーケットが再び温まってきたかな、という気がします。周囲のエンジニアも「そんな気がしなくもない…」みたいな反応でした。
利率が下がったからですかね?アメリカ経済に起きた変化がテック業界に波及するまでに時間はかかったようです。
とはいえ、ここから先もどうなるか全く見通せない雰囲気です。どうなるんでしょう。

お前はどうしてたの

超!!!!しんどかったです!!!!!!!!!
失業給付は半年しかもらえないわけだし、これが貰い終わるまでに仕事を見つけたいな…のプレッシャーを感じまくりながら日々を過ごしていました。
最初の三か月くらいは本当に精神的にしんどかったです。前職で負ったプレッシャーと、仕事がない無力感、自分の至らなさなどなど、深く考えると落ち込む要素しかなかったです。このメンタル状態を立て直しながら就職活動に向き直っていくために結構時間がかかった気がします。
応募もしていましたが、お祈りメール以外全く何も来ないのでたまにガッツリ凹み、回復したらまた応募を再開し…というのを繰り返しているうちに年末。 結構真剣に、日本に帰ろうかな~仕事あるよな~なんて考えたりしていました。

風向きが変わったのは2月に入ってからです。
突然Linkedinを通じてリクルーターから声がかかるようになり(とはいえ人権低め契約社員)、応募した書類にもおへんじがちらほら来るようになりました。とはいえ100件に1件お返事が返ってくれば良い、って確率ではありますが。
それから怒涛の1週間に面接4連続+ホームワーク課題1本という確変ボーナスみたいな週が発生し、そのうちの1つの会社から内定を頂いて今に至っています。

最近の面接

結局、この半年間で面接は最初の電話でのスクリーニングを含めて8社くらい受けました。
そのうちいくつかは理由不明と地理条件が合わずにその後お返事なし、半分ほどは技術面接を受けたけれど技術スタックのミスマッチでその後お返事なし、になりました。

テキサスやニューヨーク、フロリダへの転居を要求する企業が多かったですし、ロサンゼルス圏の会社は「通勤できるか確認するために」という名目でオフィスでの対面面接を好む企業が多かったです。こういう会社は電話面接でこっちの住んでるところを確認した後に連絡が取れなくなってばかりだったので期待させるのやめちくり~って感じでした。

必要なスキル

給与面・必要スキル面では、正直どの求人もかなり買い叩いているなぁ。という印象です。大企業の契約社員の求人はそこそこありましたが、この金額でこの職務内容をやらせようとしている。ということは、どブラックなのでは…?
と一回思っちゃったら、受かるのもなんだかなぁ。胸やけするなぁ。って思いながらやってました。

たとえば最近はプログラミング用AIトレーナーの仕事が増えているみたいです。ですが、かなり広範囲・多種多様なプログラミング言語への知識やアルゴリズム力が求められるわりに、だいたい時給20ドルが関の山です。25ドルもらえたら良い方。
GAFAのプログラミング用AIトレーナーの面接を受けましたが、以下の2パートで構成されていました:

  1. GAFAの面接でありがちなLeetcodeのMediumレベルの中くらい~ちょっと難しめな問題
  2. 既存コードの中から10個のバグと潜在的なリスクを見つけて説明する

技術面接苦手雑魚ですが、正直本っっっっっっ当に難しくて見た瞬間に「終わった…」と冷めました。
これを!?!?時給25ドルで!?!?!?カリフォルニアでの25ドル、ハンバーガー屋の店員でももらえる額だが!?!?!?!?!?そいつぁいけねえ!!!!!

AI系のポジションもいくつか受けました(幸い、論文を出した実績があったのでお声はかかった)。AIポジションは実務経験がないととっても解ける感じではない問題でした。ただ、学術的なAIの知識と実務で使うAIの知識はかなり違うことがわかったので、面接を受けることでそれが理解できる良い機会になりました。
そしてまあ感想はお約束の、レベル感が高いなあ。しかしこれができる人材は今のソフトウェア業界では希少だからこの待遇では来てくれないのでは?です。
実際にどういう問題が出題されたか、どういう知識が必要とされているかは、次の技術書典20で頒布する本の中で話していますので、ぜひお読みいただけると幸いです(宣伝)。

最後にもう、論外アンド選外って感じですが、スタートアップでは「給与なし、会社が軌道に乗ったら数%のストックオプションをあげる」っていう条件で募集してるところもちらほらあり、お声をかけて頂いたこともありました。流石に給与なしは。流石にネ…。

どうやって仕事を探したか

普通にLinkedinの広告とかIndeedとか見てたらもうダメです。絶対返事来ません。あと詐欺広告が多すぎて、応募してからしばらく迷惑メールが来るようになる。
友達が多い人は知人ネットワークでお仕事を探しているようです。僕は友達がいないので地道に応募をしました。

最近のアメリカではAIが自動的に求人に応募してくれるサービスが増えています。有料なのですが、履歴書アップロードして放置しておくだけで勝手に応募しておいてくれて、書類選考通過したら通知をくれるというサービスで、これがかなり助かりました。というかこれで仕事見つけました。
前の本にも書いたのですが、結局数を打つしかないんですよね。前の就職活動では4桁件数応募してましたし、今回もゆるやかにやったとはいえ500は応募しました。最近はClawも増えてきていますし、100件出して1件返ってきたら上等だね、みたいな就活リズムは今後のアメリカに定着していくんじゃないかなあと思います。

あとはWellfoundを中心にスタートアップを攻めていました。YCombinatorも使ってましたが、YCで面接にたどり着けた企業は非常に要求スキル水準が高かったです。小手先では太刀打ちできる感じではありませんでした。

書きなぐりましたが

要求水準が高く/福利厚生が低い乱世でしたが、その中でもかなり条件のいい、人権ありまくり企業に拾って頂くことができました。マジ感謝。
強く生きていきます。

ユニバのハリポタマジカルワンドが劣化破損した話

何

杖は一生ものだって言ってたじゃないか!!!!
そんなことはなかった

  • 5年くらいで破損した
  • 買い替え割引あるけど高いので諦めた

破損に気付く

しばらく杖を持ってユニバに行っていなかったのですが、なんとなく持っていく気になったので連れて行った。
ところが、ワンドマジックで杖を振るが全然反応しない。
見かねてお兄さんが僕の代わりに杖を振ってくれたけどそれでも全然反応しない。
杖の先端を確認したお兄さんが衝撃の一言。
「あー、先端が黄色くなってますね。劣化しちゃってるからこれもう反応しないですよ。」

杖に劣化とか…あるの…!?!?!?

ワイズエーカー魔法用品店で無料で杖の検査をしてもらえるからそこに行けと言われました。トコトコ。

ワイズエーカーで

店先のお兄さんに事情を話して杖を預けると「ちょっと待ってて」と言われ5分程度お店をうろうろ。お兄さんはお店の裏でマジカルな何かをしてくれていたらしい。
戻ってきたお兄さんもやはり、「確認しましたが、やっぱり杖の先端が劣化しているのでこの杖はもう使えません」と。
杖、一生ものじゃなかったの!?!?!?

それでディスカウントのオファーを頂きました。代わりの杖を購入するなら25%オフで購入できますとのこと。
25%オフにしてもメチャメチャに高いんだよなぁ杖…。オフ後の値段をたしかめて、アッそれなら大丈夫です…と帰ってきました。

というわけで

マジカルワンドは壊れます。まぁまぁ雑に扱ってたしセンサーキャップとかも付けてなかったのでその報いではあります。だいたい5年くらいでした。
破損した場合25%オフで新しいものを購入できます。
以上が結論です。
号泣。まあいちいち持っていくのめんどいし困ることないんだけど…

K8sでのTektonの最小構成にはPVが必要という話

概要

これを参考にTektonの基本構成を動かそうとしたときにエラーになった。

github.com

KubernetesでのTektonの最小構成、このドキュメントにある通り、↓だけで動くと思ったんだけど、動かなかったので記録に残しておく。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - https://infra.tekton.dev/tekton-releases/operator/latest/release.yaml
  - https://raw.githubusercontent.com/tektoncd/operator/main/config/crs/kubernetes/config/all/operator_v1alpha1_config_cr.yaml

エラーと対策

Describe

  Warning  FailedScheduling  4m16s  default-scheduler  0/3 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling.

ログをみるとこんな感じでした

{"level":"warn","ts":1769900552.1823497,"caller":"api/main.go:149","msg":"Database ping failed (retrying in 10s): failed to connect to `user=result database=tekton-results`: 10.108.221.207:5432 (tekton-results-postgres-service.tekton-pipelines.svc.cluster.local): dial error: dial tcp 10.108.221.207:5432: connect: connection refused"}

というわけで、書いてある通りですが、Postgres用のPVが準備されていないと動かないようです。
とりあえずさっと動かしたいので自前PVを用意。
name=pv-tekton-results-postgres-0である必要があるようです。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-tekton-results-postgres-0
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: ""
  local:
    path: /mnt/tekton-data/postgres-0

  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - raspberrypi1

【Hytale】Linux用自動アップデート機能付き常駐サーバーのレシピ

概要

先日リリースしたHytale。WIP状態が多いのでリリースしてからいろいろ直す方針で、更新も結構頻繁みたいです。
手動で一度はサーバーを作って運用していたのですが、サーバー側ゲームデータの更新の事を全く考えていなかったので、先日の大型アップデートの際はちょっと手間取らされました。
毎回手動でファイルを入れ替えるのは大変なので、「サーバー起動時に最新版をチェックし、必要なら自動でアップデートしてから起動する」ようにセットアップしました。
この記事ではそのやり方をご紹介します。

環境

https://support.hytale.com/hc/en-us/articles/45326769420827-Hytale-Server-Manual

準備

ダウンローダーは初回に手動でのOauth認証が必要です。
自動化をする前に、まずは何らかのコマンドでサーバーにアクセスしてこの認証を済ませておきます。

./hytale-downloader-linux-amd64 -print-version

実行後、パスワードとOauth認証用ウェブページへのリンクが表示されるので、認証を行います。
一度認証が完了したら、 <現在のユーザー>/.hytale-downloader-credentials.json が生成されます。次回以降、ダウンローダーのオプションを通してこのjsonファイルを参照することで今後の認証を回避できます。

起動スクリプト

shファイルとして保存します。こんな感じです。パスや割り当てメモリサイズとかは必要に応じて変更してください。
シンプルに、アップデートチェックをしてからゲームサーバーを起動するだけです。
先程準備したクレデンシャルファイルは ./hytale-downloader-linux-amd64 -credentials-path "<クレデンシャルファイルのパス>" <実行したいコマンド> という形で参照されています。

gist.github.com

サービス化

先程保存した起動スクリプトをサービスに登録して、サーバーが起動したら自動でゲームが立ち上がってくれるようにしておきます。
認証にはインターネットが必要になるため、After=network-online.target を指定しています。

gist.github.com

さいごに

上記を仕込むだけでゲーム体験がらくらくになりました。快適!
また他にも考慮しなければいけないことがあったら適宜対応していこうと思います。

Discordのボイスチャンネル入退室をトリガーにしてAzure VMを起動・停止する

概要

Hytaleがリリースされましたね。マイクラを越えるマイクラです。
というわけでプレイを始めたのですが、マイクラ同様サーバーを立てて友達とプレイできるようです。
いつでも友達と世界を共有して自由に遊びたいので専用サーバーを立てることにしました。
ただ、24時間動かしっぱなしだとVM料金って結構高いんですよねぇ。というか全員ゆるゲーマーなので、おそらく多く見積もっても月30時間やるかやらないかです。飽きたら月10時間もやらないかも。
そこで、VM料金を最小限にするべく、「Discordのボイスチャンネルに誰かが入ったら自動でVMインスタンスを起動し、誰もいなくなったら自動でシャットダウンする」という、お財布に優しいBotを作成しました。

要件

というわけで、今回の要件は以下です。

  • Hytaleが快適にプレイできること(メモリ4GB以上。それ以上のインスタンスサイズを選ぶ必要)
  • 世界の主がいなくても、友人がいつでも自由にプレイできるようにしたい
  • しかし友人は非技術者なので、できる限り起動停止のハードルを低くする必要がある
  • サーバー料金は出来るだけ無料で運用したい。なので、事故課金も防ぐ必要がある

仕様技術と構成

Azureが無料で使えたので、登録して無料クレジットをいくらか頂きました。これと12か月無料枠で様子を見ます。
実は無料枠が強いってんでOracle Cloudも登録したのですが、無料枠の割り当てという概念があるんですね。先着なので、もう全然無料コンピューティングリソース拾えませんでした。諦めました。しょんぼり

  • ゲームサーバー:Standard D2as v5 (2 vcpu 数、8 GiB メモリ)スポットインスタンス
  • Botサーバー:Standard B2ats v2 (2 vcpu 数、1 GiB メモリ)オンデマンドインスタンス(720時間/月無料枠を利用)
  • Python 3.9

実装

詳細はこの記事の最下部に貼っているGistをご覧ください。
Botの処理は非常にシンプルです。ボイスチャンネルを監視して、以下の処理を行います。

この際、以下のガード処理を入れています。

  • 誤入室・誤退室の防止
    • 入室時は10秒待って、もう一度チャンネル内の人数を確認します。「間違って入っちゃったけどゲームするつもりではなかったよ!」を防止するためです。
    • 退室時は1分待ちます。なんらかのトラブルでDiscordから蹴りだされちゃった場合などを想定して、ゲームに戻る時間を余裕を持って取りました。
  • 確実に停止検知をする
    • 余計なお金を払いたくないという強い意志。停止命令から3分後にもう一度ステータス確認をし、停止が行われていなかったらもう一度停止処理をします。
  • トラブルの早期検出
    • 何らかのエラーが出た場合は、このBotを作った僕にメンションをするようにしています。自分の財布がかかってるのですぐにチェックをしますとも。
  • 二重処理防止
    • VMは何らかの状態変更処理をしている最中に、さらに状態変更の処理を受けるとそれを無視してしまいます。エッジケースが多いので完全な防御は諦めましたが、フラグ導入などでできる限り処理の無視が走るのを防いでいます。まぁ少人数のサーバーだしこれで良いだろう。

デプロイ

Hytaleゲームサーバーのデプロイ方法は公式ドキュメントをご覧ください。

support.hytale.com

このサーバーが既にインスタンスとして存在すると前提して、DiscordBot用のインスタンスのデプロイだけ説明します。 今回はコンテナとか使わないシンプルサーバー構築をやっています。

Azure側

まず、DiscordBotを運用する側のインスタンスに、「仮想マシン共同作成者」のロールが必要です。これがあると他のインスタンスを起動したり終了したりができるようになります。

  1. インスタンスの詳細を開く
  2. 左側のメニューからセキュリティ→IDを選択
  3. システム割り当てマネージドIDの状態を「オン」にする
  4. 「Azureロールの割り当て」をクリック
  5. 「ロールの割り当ての追加」をクリック
  6. スコープに「リソースグループ」、リソースグループにゲームサーバーがあるリソースグループを選択して、「仮想マシン共同作成者」のロールを追加。保存をクリック。

DiscordBot側

サーバー内で仮想環境を作り、必要なライブラリをインストールします。 main.py を置いた場所で以下を実行します。

python3 -m venv .venv
source .venv/bin/activate
pip install discord.py azure-mgmt-compute azure-identity

次に、Gistの中に含まれる discord-bot.service をサービスとして登録します。これでインスタンスに何かあっても常にBotが自動起動するようになります。
エディタを開いてコピペしてください。

sudo nano /etc/systemd/system/discord-bot.service

その後は読み込み。

sudo systemctl daemon-reload
sudo systemctl start discord-bot
sudo systemctl enable discord-bot
sudo systemctl status discord-bot

これでうまくいけばOKです。問題があったらログはこのコマンドで確認できます。

sudo journalctl -u discord-bot -f

まとめ

Discordボイスチャットを使ったDiscordOps的な方法を紹介しました。
Azureは無料期間がありますが長くは持たないと思うので、今後の料金を見つつどこかにお引越しも視野に入れていきたいと思います。

Gist

ソースコードはこちらです。

gist.github.com