毎日カレンダインタープリタ生活

この記事は 天久保 Advent Calendar 2023 - Adventarcoins Advent Calendar 2023 - Adventar の 7 日目の記事です。

みなさんはカレンダー1を使っていますか?私はここ数年で使い始めました。

カレンダーを使い始める以前は、友人の約束の時間は守れず、帰省の日程を忘れ、課題は当然提出できない、という状態でした。このままではいけないと思いカレンダーを使い始めてから、以前に比べて高い精度で予定をこなすことができるようになりました。 これは真人間のみなさんにとっては当然のことかもしれませんが、私にとっては非常に大きな進歩でした。

本記事では、私がどのような方法、メンタルモデルでカレンダーを使用しているのか、予定管理の上での tips、それによる効果について書きます。

目次

カレンダーのある生活

カレンダーインタプリタとして振る舞う

カレンダーのない生活とはどのような生活でしょうか?

私の場合は、ぼんやりと頭の中に予定があり、予定のタイミングでうまく想起できると予定がこなせる、うまく想起できなかったやつはできない、という感じでした。 私はそこまで記憶力がいいわけではないので、この状態では予定を忘れてすっぽかすことがよくありました。

この課題を解決するためには以下の2つが必要です。

  • 予定を永続的に記録するストレージ
  • 予定の記録を元に、予定の開始時刻になったら人間に通知する仕組み

まず、特定の時間がブロックされるような全ての予定をカレンダーに記入するようにします。 これによって(当然ですが)予定が永続的に記録されるようになります。 予定をカレンダーに記入する際は、「その前にいる場所から予定に合わせて行くべき場所への移動時間」も予定という形でカレンダーに記入しておいた方がよいです。こうすることでカレンダーの予定の開始時刻と行動の開始時刻を一致させることができます。これも Google Calendar を利用している場合は Google Map の経路検索と経路の Google Calendar への書き込み機能を使うことで簡単にできます。

その上で、Google Calendar などのカレンダーアプリを使っている場合はスマホアプリやデスクトップのプッシュ通知、スマートスピーカーなどで予定を通知するようにして、ほとんどのシチュエーションで通知を受け取れるようにしておきます。

この状態を作ることで、カレンダーが「私が今すべき行動」の single source of truth になり、通知を受け取ったタイミングでカレンダーの内容を実行する機械として振る舞うことで予定をこなすことができるようになります。 この状態を「カレンダインタープリタ生活」と呼ぶことにします。

タスクをスケジュールする

ここまでで、カレンダー上に明示的に記録された予定はこなすことができるようになりました。 しかし、ここまで扱ったのような「特定のブロックされる時間」があるような予定以外にも、時間を決めてやるべき行動があります。具体的には締切のあるタスクです。

このようなタスクは、締切から逆算してタスクの締切前に作業時間を確保してカレンダー上の予定に落とし込むことでカレンダインタープリタ生活のなかで上手く扱うことができます2

tips

Google Calendar で友人とスケジュールを組む

これはカレンダー一般の話ではなく、私が使っている Google Calendar で予定を管理する場合の tips です。 また、友人側も Google Calendar で全ての予定を管理するタイプの人間である必要があります。

Google Calendar にはゲストという概念があります。 他の Google アカウントや Google Groups のグループのメールアドレスを指定することで、予定に他の人を招待することができます。

そしてそのゲストの予定の空き情報を確認しながら予定の時間を決定する機能も Google Calendar にはあります。

この機能を利用するには、少なくとも相手方のカレンダーの予定の有無の情報にアクセスできる3必要があります。 1on1 の人間関係の場合、相手の Google アカウントに Google Calendar の予定枠だけが見えるように共有するとよいでしょう。複数人のメンバーが固定的なコミュニティの場合、Google Groups を作ってそこに全員を招待し、Google Groups に予定枠だけが見えるように共有するとよいです。

Google Calendar への入力を自動化する

予定のなかには、カレンダーに入力するまでもなくコンピュータが扱える形で記録されているものもあるでしょう。 そういった予定は Google Calendar に自動で入力できるかもしれません。 データを持っているサービスごとに事情が異なるので、私が普段遣いしているいくつかのサービスについて書きます。

会社の Google Calendar に個人の予定を同期する

定時の概念がある労働ではあまり問題になりませんが、学生の SWE のアルバイトによくある不定期な働き方では個人的な予定と会社の予定のバティングが問題になることが多いです。

私は会社でも Google Calendar で友人とスケジュールを組む で述べたような方法でミーティングなどの予定を調整しています5。 しかしこの時、会社の予定調整には会社の Google Workspace 内の Google アカウントのカレンダーを使っているため、社内の人が私のカレンダーの空き情報を確認すると個人的な予定のブロックが存在しないことが問題になります。

そこで以下のような操作を自動で実行する Google App Script を作って使っています。

このスクリプトは、個人の Google アカウントが持つ中間カレンダーに開始時刻と終了時刻以外の情報を潰して個人のカレンダーの予定をコピーし、コピーした予定に会社の Google アカウントをゲストとして招待することで会社の Google カレンダーに予定として表示されるようにします。

こうすることで、会社のカレンダーに対する書き込み権限を個人の Google アカウントに与えることなく個人的な予定の時刻だけを会社のカレンダーに共有できます。

効果

以上のようにカレンダーを活用することで、「予定をこなす」という行為が高い精度でできるようになりました。 冒頭でも述べたように、カレンダーをすでに使っている人にとっては当然のことなのかもしれませんが、約20年間カレンダーというものを一切使わずに生きてきた身としてはこの効果は衝撃的6でした。

また副次的な3つの効果も得られました。

まず予定のストレージが揮発性の高い脳からカレンダーに移ったことで、より長い期間の将来の計画を立てることができるようになりました。 従来のぼんやりと頭に予定があるだけ状態では私の能力では3日以上先の将来を考えることが難しかったのですが、カレンダーに予定を記録することで1ヶ月以上先の将来の計画を立てて実行できます。これなしではチケットの購入(計画)と開催(実行)が1ヶ月以上空くようなイベント7に行くことは不可能だったでしょう。

また予定を機械が扱えるストレージに置くことで他者との予定の共有のコストが低くなりました。私の場合は Google Calendar を利用しているので Google Calendar で友人とスケジュールを組む で述べたような方法をとっているのですが、これには前提となる制約も多いので制約を満たせたのは運がよかったです。

最後に自分の行動のログがカレンダー上に残るようになりました。カレンダインタープリタ生活を送ると、自分がした行動がほとんど全てカレンダーに記録されます。これによって過去の特定の時刻に自分が何をしていたのか調べたり、ある一定期間(1週間とか)内の自分の行動についての統計を取る、といったことが可能になりました。

さいごに

Q. ところでなぜここまでやってアドベントカレンダーに遅刻しているんですか?

A. 記事を書く時間をカレンダーに入れ忘れていたためです。カレンダーインタープリタはカレンダーにない予定を実行できない。


  1. 筆者が使用している Google Calendar を想定しますが、明記していない限りカレンダーアプリとか、なんなら手帳や卓上カレンダーでも同じように使える…はず。
  2. これがタスクスケジューリングってワケ。スケジューリング - Wikipedia
  3. 「予定の表示(時間枠のみ、詳細は非表示)」
  4. 実はこれで出力されるカレンダーが少し変で困っていたのでパッチを送った。OSS でよかった。 iCal 形式で出力される投稿予定カレンダーの予定(event)を終日(allDay)の予定にしてほしい · Issue #48 · adventar/adventar
  5. むしろカレンダインタープリタ生活も予定調整も以前働いていた会社で社員の方々がやっていた行動を真似たもの。
  6. 人類が文字を獲得したのと同等まである。
  7. カレンダーを使い始めたのと時期を同じくしてめちゃくちゃライブやクラブイベントに行くようになった。

2022 年の振り返り

これは 天久保 Advent Calendar 2022 - Adventar の 8 日目の記事です。

連日パソコンの話を書くのは無理なので 1 年の振り返り記事でお茶を濁します。

労働

8 月から 9 月の間はメルカリでお世話になっていました。 毎年長期休暇に稼いだお金でなんとか食い繋いでいます。ありがとうございます。

それ以外の時期もアルバイトはしているのですが、あんまり働いていない上にお金遣いが荒いのでお金がありません。

パソコン

パソコン関連で何かやっても外に出せるように整えるのが億劫で発表しないがちだったのですが、エンジニアとして今後やっていくにはやったことを発信した方がいいよね、という思いで最近は頑張っています。 正確にはここ 1 年くらい頑張るつもりではあったのですが、あんまり頑張れていなかったので 12 月に入ってからアドベントカレンダー1で勢いをつけて頑張っています。

学業

相変わらず成績は不振ですが、今年は進級に要件があるので頑張っています2

秋学期はおおむね朝から大学に行って課題やバイトをする健全な大学生活を送っています。そのおかげで少なくとも今学期に出席不足で落としそうな単位はありません。 いい話です。

ちなみに春学期の頃は全く危機感がなかったのでめちゃくちゃ単位を落としています。バカですね。

生活

学業のセクションでも言いましたが、最近は朝から大学に行っています。 今学期からオフライン授業が増えた影響といえばそうなのですが、これまで大学に行くどころか午前起床も難しかった自分の生活習慣を考えると非常に進歩しています。

また、食生活についてもラーメン屋や中華料理屋での食事の比重を減らし、定食屋の比重を増やすことで健康的になりました。 天久保二丁目にあるコスモスという定食屋にめちゃくちゃ通っています。

tabelog.com

コスモスは定食を頼むとキャベツの山がついてくるのでありがたいです。 あと定食屋なので日替わり定食があって意思決定のコストを払わずに豊富な種類の料理を食べることができます。 最近は友人との食事にもよくこのお店を提案するので、友人からコスモス大好き好きくんだと思われているらしいです。そうなのかも。

さらに、最近デスク付きのエアロバイクを買って以降は家で運動もするようになりました。 これまで家では椅子に座りっぱなしでだったので、エアロバイクをめちゃくちゃ漕ぐようになってだいぶ健康になった気がします。 来年以降もこの習慣は続けていきたいところです。

以上、生活サイクル・食事・運動と三拍子揃ってだいぶ成長した 1 年でした。

最後に

自分としては昨年に続き今年も成長の 1 年だったのですが、なんかこういうことを普通の人は普通にできていて、そこがスタートラインらしいと聞いてすごいなと思いました(浅)


  1. 天久保 Advent Calendar 2022 - Adventar のことです。
  2. 2020 年度入学の筑波大学情報学群情報科学類生は 3 年次から 4 年次への進級以外に進級要件らしきものがない。

2021年の振り返り

大学の先輩に「1年の振り返り記事書いてね」と言われたので書きます(何?)。

引っ越し

プライベートで一番大きなイベントは引っ越しです。元々自分は大学の学生寮に住んでいたのですが、10月に学生寮に近いマンションに引っ越しました。

防音性と広さを兼ね備えた部屋でかなり住み心地がいいです。少なくとも過去数回どんちゃん騒ぎをしてもまだ苦情が来ていませんし、自分の部屋に別の部屋の音が聞こえたこともありません。広さも学生の一人暮らしには十分です。

強いて言うなら光回線を引けなかったことが不満ですが、そこそこマシな無料インターネットがあるのでなんとかなっています。

食事

去年の秋に一人暮らしを始めたのですが、一人暮らし開始当初はあまりにも食事ができませんでした。具体的には食事を気にしない性質のせいで3食カロリーメイトで済ませたり、普通に何も食べずに数日過ごすといったことを平然とやっていました。

このままだと気づかないうちに餓死してしまいそうだったので今年の1年の目標を「食欲を高める」に設定しました。そして、

  • いきなり自炊をするのは難しいのでほとんど毎食外食することで食事を取る習慣を付ける
  • 空腹を放置すると空腹感がなくなってしまうのでお腹が空いたタイミングですぐに何か食べる

などの活動を通じて食欲を高めて行きました。もの凄い勢いでお金がなくなって行くようになりましたが、食欲は人並にある状態になったのでよかったです。

それとは別に、あまりにも料理ができず「カップ麺すら作れない」の称号を得る程だった自炊能力も湯煎でレトルト食品を調理できる程度には成長しました。この自炊力の成長はかなりえらいと思っています。

一方で食欲を高めた副作用で肉が付きつつあるので、今後は運動する習慣を身につけて行きたいです。健康優良男性になるぞ!

労働

今年はやたらとインターンをした1年でした。今年の頭にはまだWebっぽいものに逆張りするオタクくんだったのですが、すっかりWebエンジニア風学生になってしまいました。

具体的には2月のCookpadインターンを皮切りにWantedly、LINEなどのWeb系企業で働いたり、ちょくちょく1 Dayインターンに行ったりしていました。特に夏休みはWantedlyとLINEのインターンで労働時間的にはフルタイムになっており、今思い出してもびっくりします。「意外と労働だけならフルタイムでできるんだな~、でもフルタイム労働を一生やるのは無理そうだな~」という気持ちです。

今年は労働にエネルギーを奪われてしまっていたので、来年はもっと労働の比重を下げて行きたいです。労働の比重は下げたいけどお金は欲しいので高い時給で雇ってくれる会社を募集しています。

学業

春学期は過去最高に成績の悪い学期でした。実は入学したころから学期ごとのGPAが単調減少を続けており、今年の春学期(2年春学期)は過去最低の1.xを記録しました。

これはイカンということで「秋学期は労働を減らして学業をやるぞ!」と思っていたのですが、引っ越しで思った以上にお金がなくなったり成行で労働が増えたりした結果、学業に集中できたとは言い難いです。秋学期の成績はまだ出ていませんが春学期から多少回復してくれたらいいな~と思っています。頼む~

さいごに

今年は労働の1年だったので来年は趣味のプログラミングや学業にもっとエネルギーを割いて行きたいです。特に趣味のプログラミングをやった記憶が一切ないくらいにはやっていないので、来年は力を入れて行きたいところ。

他にも来年は大学院進学か就職かを決めて進路に向けた活動(受験や就活)をしていく必要があるので、そのこともボチボチ考えて行きたいです。

セキュリティキャンプ2020 Y-3 Cコンパイラゼミを自作してみよう!ゼミに参加しました

 私はcoins20アドベントカレンダー2020に2回連続で遅刻しました。

 というわけでこの記事はcoins20アドベントカレンダーの12月6日の記事です。

adventar.org

 これは自分が参加したゼミ内での発表スライド azarashi2931.github.io

 以下の内容は半分位発表スライドと重複しています。

つくったもの

 作業ログの方にセキュキャン期間中自分がなにをやっていたか大体書いてある。
 作業の経過はそっちにあるので、ここでは感想を中心に書く。

 以下、作ったコンパイラをazccと呼ぶ。

Y-3 Cコンパイラゼミを自作してみよう!ゼミ

ゼミの紹介文から引用すると、

プログラミング言語の本格的なコンパイラを書いてみたいと思ったことがある人は多いのではないでしょうか? この講義では、簡単なプログラムが実際にコンパイルできるようなC言語コンパイラを、C言語を使って開発します。ひとまずの目標は、自作コンパイラを自作コンパイラ自身でコンパイルする(セルフホストする)ことですが、さらに最適化や異なるアーキテクチャへの対応を行いたいという方も大歓迎です。この講義を終えればコンピュータとプログラミング言語一般、そしてC言語についての深い理解が得られていることでしょう。実際に講師の私(植山)はセルフホスト可能なCコンパイラ8cc(https://github.com/rui314/8cc)をゼロから書いた経験がありますが、それはソフトウェアエンジニアとしての実力をぐっとアップさせるような、他には得難い貴重な体験でした。コンパイラ作成のような大きな目標を達成するためには、入念な事前準備が必要です。 プログラミング言語の理論や実装の基本的な構成などは事前に勉強していただく必要がありますが、それらはもちろん講師陣が手厚くサポートしていくので、心配する必要はありません。必要なものは、プログラミング言語に対する情熱です。多くの皆さんの応募をお待ちしています。

ということでC言語でCコンパイラを書くなどした。

 教材には講師の植山先生が公開している低レイヤを知りたい人のためのCコンパイラ作成入門を使用した。

www.sigbus.info

開発の際の自分ルール

  • エラー処理の関数などはcompilerbookからのコピペで済ませる一方で、トークナイザ、パーサ、コードジェネレータなどはなるべく参考実装を見ないで実装する。
  • セルフホストが重要なマイルストーンなので、Cコンパイラの実装はC言語で行う。

やった

式、文のパース

 intchar型のみをサポートし、それ以外はセルホストにいらないのでサポートしていない。
 式を1つ評価するとスタックに1つ値が積まれること、文を評価する前後でスタックは変化しないことに注意して実装したほうがよいということがわかってきた(n回スタックを破壊したので)。
 (実はこの記事を書いている途中にもスタック破壊を1つ見つけて修正した)

ローカル変数、グローバル変数の定義と初期化

 グローバル変数の初期化はint型のリテラルのみをサポートし、それ以外はサポートしていない。これはグローバル変数の初期化式が定数式でなければならないが、複雑な式を定数式であるか判定するのは面倒なので省略したため。あとでいいかんじの定数伝播を実装して複雑な定数式も受け取れるようにしたい。
 ローカル変数については実行時に値が決定すればよいので、azccでコンパイルできる任意の式を初期化式にできる。

関数の定義、宣言、6つ以上の引数をもつ関数を含む関数呼び出し

 コンパイラを実装するとき、関数の呼び出しや定義はコンパイラの成果物のターゲットの呼び出し規約*1にあわせて実装する必要がある。
 自分はABIを満たさない実装をした結果何度か破滅した。

構造体

 構造体のアライメントが難しいと聞いていたのでその辺に気をつけて実装した結果、割とすんなり実装できた。
 構造体を実装するときsizeof_Alignof*2があるとテストしやすいという話も聞いていたのでついでに実装した。
 構造体のアライメントに関する仕様はワンパスで実装できるような仕様であるはずだ、というところからエスパーするなどした。

_Bool

 どうしてそんな仕様にしましたか…?
 ちゃんとABIを見て実装した方がいい。自分は破滅した2。

やる

 スライドのこの項目に書いた内容は、実は翌日までにやってしまっているのである!

セルフホスト

 現状ではコードジェネレータ以外の部分は自分自身でコンパイルできているが、正常に動いているのはごく一部だけ。かなしい。
 コードジェネレータに関しては可変長引数関数の定義が含まれており、azccが可変長引数関数に未対応なのでコンパイルできていない。これはソースコードから可変長引数関数の定義を排除することで解決するつもりでいる。
 正常に動いていない部分に関しては、少なくとも関数呼び出し部分に問題があることがわかっているが、おそらくこれ以外にも多くのバグが埋まっている。書いてる間に解決した。やった~~。が、バグがたくさん埋まっているのは変わらず…
 機能追加はこれ以上必要ないと思うが、それでもセルフホストまでの道程は遠そう…

セルフホストしたらやりたい

  • 最適化パス
    • 自分のコンパイラが吐き出したものが速いと→うれしい!ので。
  • デバッグ情報の出力
    • 自分のコンパイラが吐いたバイナリに不具合があるときにどこが問題なのかわからず困っているため。

やる予定がない

ビット演算

 ビット演算を使わなくてもコンパイラは作れるので。

浮動小数点数

 同じくコンパイラにいらないので。

その他感想

  • オンラインでアバターを使って発表するための知見が得られてよかった。
  • せっかくセキュキャンに来たのに講師やチューターの方をあまり活用(?)できなかった感があり、もったいない。
  • チューターの方とクローズドな場所でセキュキャンに関するコミュニケーションをとって内容をゼミ内で共有してなかったのはあまり良くなかった。
  • 大学図書館ってやつがめちゃめちゃ便利で、良さげな文献がタダでシュッと出てくる。
  • 週に1回の講義という形態だったため、週初めに問題が起きて週末に質問するか~と思ったらその週のうちに解決してしまい質問がなくなる、などもあった。
  • compilerbookには「このステップができるとhogeのようなテストが通るはずです」のように書かれがちなので、テスト駆動開発っぽいことがやりやすかった。
  • だんだんとセルホスト最悪仕草*3が身についてきた。
  • 再帰下降構文解析アセンブラ、ABI、C言語の仕様に関する知識は大きな収穫だったし、C言語での開発経験(という程のものでもないかもしれないが)を積めたのは非常によかった。

さいごに

 年末までにセルフホストするぞするぞするぞするぞ。

*1:今回はSystem V AMD64 ABI

*2:自分はこのときはじめて_Alignofなるものを知った

*3:「UBなので何をやってもええんじゃ!」、「ま、コードの正しさはGCCが検証してくれるんで」など

2020年のハイライト

 この記事はcoins20アドベントカレンダーの12月1日の記事ですが、時空が歪んでいるので12月2日に書いています。

adventar.org

目次

これはなに?

 自分の2020年を振り返ってマジで自分のことだけを語るやつです。

大学

入学まで

 これが

 こうして  こう

入学後

学年

 大学に入学はしたものの、コロナってやつのせいで大学生っぽいイベントは全て流れてしまった。
 しかしcoins20に関してはオタクがいいかんじにコミュニケーションの場を生成してくれていたので非常に助かった。
 課題の期限や内容、大学周辺の飯情報の共有やイベント、大学の授業実況などの形でライブ感のある受講など、コロナ以前はリアルで行われていたであろうコミュニケーションがわりとでできていた。これがなかったら春学期の履修の時点で破滅していたと思われるので、めちゃくちゃ感謝している。

サークル

 サークルはWORD編集部、雙峰祭実行委員会情報システム局、つくバーチャルに所属、つくバーチャルに所属しており、AmusementCreators、TPCが見学状態。
 WORD編集部には毎週木曜日の対面体育のあと入り浸っている。オタクの部屋の和集合みたいな部屋なのでやたらと居心地がよい。しかしWORDの記事は書いていませんごめんなさい。
 jsysでは何かやった覚えがなく、オタクSlack+αくらいの認識をしている節がある。
 つくバーチャルはVket5に出展するということだったのだが、自分は準備からバックれをカマした(最悪)。土下座をします。
 AmusementCreators、TPCは新歓の時期を逃したのか元からなかったのか知らんけどそういうのがないのでよくわからんね、ということで見学状態で放置している。よくわからんね。

先輩

 先輩とはWORD、jsys、つくバーチャル、VRChatでの関わりが主で、自分は結構先輩と関わりがある方だということがわかってきている。
 どの先輩にもかなり飯を奢られており、かなり感謝している。つくばに引っ越したあとは最悪食生活をしているため、おそらくこの奢りがなかったら餓死していた。
 お礼は後輩への奢りで、とのことなので、後輩への奢りの機運が高まっている。coins21~人材は @azarashi_uni まで言ってくれれば飛んでいきます。

VRChat

 5月くらいにVRChatをはじめて沼へと沈んでいった。
 今ではTwitterもVRC垢にしか見えませんね、になっている。リア垢兼技術垢だったのにどうして…
 一番やってた時期は1日少なくとも10時間はインしてるという感じだった。おしまいです。
 VRChatに関する気持ちを書いた記事も生やしたくなってきた、あとで生やしますね。

Cコンパイラとセキュキャン

 セキュキャンに書類をシュッとしたらなんと選考を通り、参加することになった。
 自分が参加したのはYトラックのCコンパイラのセルフホストを目指すゼミなので、当然Cコンパイラを書くことになる。
 自分はC言語なんもわからず、アセンブラなんもわからず、Linuxなんもわからない人間なのだが、いつの間にかCコンパイラらしき物体が生えておりびっくりした。
 まだセルフホストには到達できていないが、年内に達成したいと思っている。

 セキュキャンが終わったあたりで参加記を書く予定なので、詳しくはそっちに書く。

OS

 coins20に自作OSコミュニティを生やしたにも関わらず何もやっておらずごめんなさい、というかんじ。
 これだけならいいんですが、実は情報科学特別演習でOS関係のなんかをやると言って担当教員にはついてもらっている ∩ 担当教員はいるが履修失敗 ∩ その上でバックれているという最悪の状況なので、どうしたもんかなあとなっている。土下座をします2。

一人暮らし

 9月28日に引越しをした。

 一人暮らしをはじめたんですが、なんと初手から銀行口座の暗証番号がわからないため残高照会も引き出しも不可能(デビットカードのみ使用可能)でスタートを切った。
 この時点で破滅は半分見えていたが、11月18日までは上に書いた奢りなどでなんとか生き延びることに成功。

 しかし、

ということで破滅レースを完走した。タイムは51日、対戦ありがとうございました。

 真面目なことを言うと、このときにはいろいろな人から食料を送って頂きここでもなんとか生き延びることができました。
 送って下さった各位、本当にありがとうございます。なんらかの形でお礼をしたいので、各位は干し芋ややってほしいことなどをしたためて送りつけてくださると幸いです。

さいごに

 coins20各位はcoins20 アドカレに参加しような!

Unityで実行時に外部のフォントファイルを読み込む

 メモっぽいの。

背景

 Unity で作ってるゲームのローカライズ機能を実装する過程で、ビルドした後でも外部のフォントファイルを取り込めるようにしたくなった。

環境

 Windows 10
 Unity 2019.4.4f1

コード

中身

 UnityEngine の Font クラスをフォントファイルへのパスを引数としてインスタンス化したのち、TextMeshPro の FontAsset に変換する。この Font クラスのインスタンスは、本来の目的では利用できないが、TextMeshPro の FontAsset のソースとしては利用できる。
 otf、ttf、ttcの 3 つの形式のフォントファイルを読み込むことができる。

参考

HOWTO: Load ttf font files at runtime - Unity Forum