Posts for: #2023/11

複数の kit アプリケーションを共存させる仕組みの考察

1時に寝て3時に起きて5時に起きて7時半に起きた。なんとなく布団に入らずにベッドの上でそのまま寝てた。それでもあまり寒くはなかった。

kit/vite アプリケーションのデバッグ

先日の続き の続き。

kit アプリケーションを kit アプリケーションに埋め込むといったことができないかどうかの調査をしている。いろいろ調べている中で kit の discussions でもそういった議論はいくつか行われている。マイクロフロントエンドというキーワードも出てくる。

これらの議論をみていても kit の ssr はそれ自体が1つのアプリケーションとして動かすことを前提にビルドされているため、kit アプリケーション内に別の kit アプリケーションを埋め込んだり、一部のコンポーネントを外部のアプリケーションと組み合わせて動かすことはなかなか難しいようにみえる。マイクロフロントエンドのような思想で設計されていない。しかし、既存のアプリケーションを動かしつつ、少しずつ kit アプリケーションへ移行するといった運用をしたいという世の中のニーズも根強いことが伺える。

ここで svelte.config.js でエントリーポイントを置き換えるぐらいはできる。デフォルトは / がエントリーポイントになるのを /myapp に置き換えるには次のように設定する。relative は es モジュールのインポートを相対パスで行うか、絶対パスにするかの設定も変更できる。これもデプロイ先のインフラの都合にあわせて調整できるようになっている。この設定を切り替えられるのだからエンドポイントをハックすること自体はそう難しくないのかもしれない。

kit: {
  paths: {
    relative: false,
    base: '/myapp'
  },
}

さらに調査していて、adapter-node を使ってビルドするとデフォルトでは polka というアプリケーションサーバーが起動するコードが生成される。

function polka (opts) {
	return new Polka(opts);
}

const path = env('SOCKET_PATH', false);
const host = env('HOST', '0.0.0.0');
const port = env('PORT', !path && '3000');

const server = polka().use(handler);

server.listen({ path, host, port }, () => {
	console.log(`Listening on ${path ? path : host + ':' + port}`);
});

ここで任意のアプリケーションサーバーを使いたいという issue があって、それに対する回答から adapter-node のドキュメントにカスタムサーバーについて書かれていることに気付く。

アダプタは、ビルドディレクトリにindex.jsとhandler.jsの2つのファイルを作成します。index.js を実行すると (デフォルトのビルドディレクトリを使用している場合は node ビルドなど)、設定されたポートでサーバが起動します。

あるいは、Express、Connect、Polka(あるいは組み込みのhttp.createServer)に適したハンドラをエクスポートするhandler.jsファイルをインポートして、独自のサーバをセットアップすることもできます。

handler.js さえインポートすればそのまま動くことはデバッグしていて知ってはいたのだけど、この自前のアプリケーションサーバーを hooks を使って起動すれば任意のサーバーに置き換えできると issue の中で回答されていた。kit アプリケーションは1つのサーバーが1つのシステムとして動かすことを前提に設計されているが、サーバーを複数起動することでそれらを共存できるのではないか?と考えた。検証のために node.js から子プロセスを生成するには次のようなコードで起動する。些事だけど adapter-node の生成したコードが shell を介しないとポート番号を設定できなかったので shell: true もセットしている。

import { spawn } from 'child_process';

export function start_server() {
  console.log('called start_server');
  const opts = {
    shell: true,
    env: {
      ...process.env,
      PORT: '3005',
        ORIGIN: 'http://localhost:5174',
      NODE_ENV: 'production'
    }
  };
  const node = spawn('node', ['apps/myapp/build/index.js'], opts);
  node.stdout.on('data', (data) => {
    console.log(data.toString());
  });

  node.stderr.on('data', (data) => {
    console.error(data.toString());
  });

  node.on('exit', (code) => {
    console.log(`Child exited with code ${code}`);
  });
}

この node.js の子プロセスを起動する処理を hooks で呼び出すことである kit アプリケーションを起動したときに、別の kit アプリケーションを提供するアプリケーションサーバーの node.js プロセスも起動できる。そしてパスを解決できるようにするため、さらに es モジュールのインポートパスにあわせたプロキシを実装する。

import { start_server } from '$lib/index';

start_server();

import type { Handle } from '@sveltejs/kit';

export const handle: Handle = async ({ event, resolve }) => {
  if (event.url.pathname.startsWith('/myapp')) {
    if (event.request.method == 'GET') {
      return fetch('http://localhost:3005' + event.url.pathname);
    } else if (event.request.method == 'POST') {
      const data = await event.request.formData();
      const endpoint = 'http://localhost:3005' + event.url.pathname + event.url.search;
      return fetch(endpoint, { method: 'POST', body: data });
    }
  }
  const response = await resolve(event);
  return response;
};

これは kit のデモアプリが動くことを確認するためだけに実装したプロキシで GET/POST のリクエストを localhost:3005 に起動した node.js のプロセスへプロキシしている。これで2つの kit アプリケーションが1つのサーバーで共存しているかのように振る舞うことは確認できた。この延長上に私のやりたいことが実現できるかどうかをさらに調査する必要がある。

気付きというスキル

2時に寝てあまり眠れなくて6時半に起きた。スマホで ゴブリンスレイヤーⅡをみてから寝た。

プロジェクトの進捗報告

出張したときの月例報告の12回目。前回の進捗報告はこちら

開発の中盤を過ぎて、これから追い込みへ入っていく。予定していたバックエンドの機能開発は完了した。私の頭の中ではもう完了までの見通しができていて、あとはフロントエンドの新規画面を構築したり、品質や堅牢性のための小さい改善をしていくといったことを残りの1ヶ月で行う。若いメンバーに経験を積んでもらうことも考慮しているため、サポートを最小限にしながらメンバーの成長を期待したいところ。見た目上の開発スケジュールは順調なのでマネージャーとしスケジュールの懸念はほとんどない。kit/vite アプリケーションの調査 を私が自らやっていて、これを一区切りつけないと次の作業に進めないところが、私の課題でもある。インターネットを検索してもみつからないことを、どのように考え、仮説を立て、調査して、意思決定していくかをメンバーに示したい。マネージャーが一連のワークフローについて業務の参考になるようものをみせることができればいいなと考えている。

以前 コミュニケーションのレベルについて考えたこと をベースにした方法論を社内の wiki にも書いてある。5段階のコミュニケーションのレベルがあり、多くの人たちはレベル4までしか到達しないのだけど、課題管理のスキルを身につけるとレベル5の「聞かなくてもわかる」というエスパーのような状態に達する。メンバーのうちの1人はこのレベルに片足を踏み入れていて、十分にうまく課題管理できているという話題も共有した。一方でレベル5に至るためのプラクティスや施策を、課題管理という文脈でもっとうまくできないか?というのはうちの会社のビジネスの中核でもある。とても難しい。いわば「気付き」を習得するための短期修行コースのようなものを作りたい、業務の中で。この話題を話し始めると、気付きの有無はその人の性格や動機づけにも関連するせいか、賛否両論の多様な議論に発散しやすい。私の立場としては、一定レベルまでは誰でも身につけられるスキルとして扱いたいが「気付き」が本当にスキルなのかどうか、実は確信がない。しかし、諦めることなく継続的に考えていきたい。

新規メンバーを受け入れないという意思決定

19時過ぎに帰って晩ご飯食べて、21時から0時過ぎまでオフィスで作業して、また帰ってから一休みして出張準備して、5時前に出掛けた。1ヶ月ぶりの出張。

出張前の朝ご飯

三ノ宮駅のすぐ近くに24時間営業のなか卯がある。うまく眠れなくて時間があるときはここで朝ご飯を食べながら一息つくのがよいのではないかと考えた。今回の実際のタイムスケジュールが次になる。市営地下鉄の駅が5時30分ぐらいにならないと開かないため、あまり早く行ってもやることなくて手持ち無沙汰になる。その隙間時間を埋める場所としてなか卯がよいことに気付いた。

  • 4:56 家を出る
  • 5:10 なか卯に着く
  • 5:11 親子丼を注文する
  • 5:16 親子丼食べ終わる
  • 5:30 なか卯を出る
  • 5:35 市営地下鉄三宮駅のホームに着く
  • 5:41 市営地下鉄の始発に乗って新神戸駅へ

マイルストーン定例

隔週の火曜日は開発状況の共有や進捗確認、設計レビューなどを行う定例会議。先月の定例会議 でも確認していたが、新規メンバーの参加がうまく進捗していない。機能開発を3ヶ月と見積もっているうちの、2ヶ月が過ぎた。さすがにここから開発に参加して追いつくのは厳しいので、新規メンバーの今後の兼務状況に関係なく、今回の開発からは外すという意思決定をした。五月雨式に2回遅れたところで私の中では開発運営の構想から外すように徐々に調整してきていたし、2週間のイテレーションの節目でも既存メンバーにタスクを再割当てするようにもしていた。そのため、いまの開発に大きく影響を与えるわけではない。しかし、参加する可能性も残ってはいたのであからさまに除外することもできなかった。3回に渡って「いついつからやります」と言いながら、(兼務の業務が忙しいとしても) 何もやっていないことに、この開発やチームに責任をもつ私の立場としては印象が悪かった。なによりも業務として責任を果たしていない状況を問題であると当事者が自覚しているようにはみえないところにも懸念があった。よくない開発文化の実例の1つに思えた。

sveltekit/vite アプリケーションの調査を再開

1時に寝て起きたか起きてないか覚えてない感じで6時に起きた。起きてちょっとゲームして気付いたら7時だった。

kit/vite アプリケーションのデバッグ

先週公開したテックブログ の続き。

vite アプリケーションのバックエンドインテグレーション の詳細を調査している。丸1日デバッグしていていくつか振る舞いがわかってきて、designer アプリケーションを作りたいという要件に対して、こうすればできるんじゃないかという仮説も立てられるようになった。いまやりたい要件は kit の ssr アプリケーションを埋め込みたい。これは要件に満たないが、kit の ssg アプリケーションならば static ディレクトリに置くだけで参照できるし、インポートパスさえ書き換えてやれば別の kit アプリに埋め込むこともできるのを確認した。意図した通りの振る舞い。

vite アプリケーションはビルドオプションで manifest.json を出力し、エントリーポイントやどのファイルがどのファイルをインポートしているかといった情報を管理している。sveltekit はこれらの manifest.json から rollup でバンドルするために manifest.js を生成している。厳密には、sveltekit では production ビルド向けのチューニングをしたビルドツールを adapter と呼び、vite のビルドをフックする場所に1つになっている。node.js サーバー向けに production ビルドするときは adapter-node を使う。この実装を読んでみると、vite がビルドした成果物に対して、再度 rollup でバンドルして成果物を作り直すといったことをしている。そして、vite の成果物 (manifest.json も含む) を抽象化したものが Builder となる。adapter は Builder のインスタンスを使ってビルドの成果物を制御できる。先の manifest.js もこのときに生成していて、rollup でバンドルするためのパラメーターの1つとして使っているようにみえる。しかし、rollup のドキュメントをみても直接的に manifest.js の説明はなく、rollup の拡張の仕組みで manifest.js を作っているというよりは、sveltekit の要件によるもののようにもみえる。ここの背景はまだよくわからない。

私はフロントエンドのことが全然わからないのでライブラリのソースコードを読みながら、ドキュメントとあわせて調べて、1つずつ理解を深めていくというアプローチで進めている。こういった調査のやり方もメンバーへ伝えていければと考えている。

小規模企業共済オンライン手続きポータル

2021年度から小規模企業共済 に加入している。今年から掛け金を7万円/月に変更した。年間で84万円の所得控除となる。ちょうど2023年9月1日からポータルサイトが作成されたらしい。いずれマイナポータルと紐付くのかもしれない。

利用登録しようと思って、メールアドレスを登録しようとしたら会社のメールアドレスはなぜかバリデーションエラーになって gmail のアドレスなら登録できた。その後も氏名の半角カナ入力を強制されたりしながら、マイナンバーカードを読み取って認証チェックして利用登録の申請はできた。しかし、自動で本登録されるわけではなく、おそらく申請内容が先方に届いてなんらかの運用があって本登録されるみたい。オンラインポータルのホームでも半角カナを使っていたり、<title> タグには「マイナ手続きポータル」とあったり、申請しただけでいくつも不備がわかるようなひどいサイトになっている。2023年にまともな開発者が作ったサイトとは思えない。デジタル庁に作り直してもらった方がよいと思う。

フルリモートとヒトリ

1時に寝て珍しく夜中起きずに7時ぐらいまで寝ていたかもしれない。午前中は昨日受け取ったスタンディングデスクを仮組みの状態からネジを締め付けて本組みした。ちょうど探していたものにぴったりはまる感じ。

友だちを探しに勉強会へ

もくもく会 に参加した。今日の参加者は6人とやや少なかったものの、初めて来られた方が2人いて、どちらもフルリモートで働いているものの、技術の話し相手や相談する場所がなくて、そういうものを求めて来ましたと話されていた。私も5年前に東京から神戸へ引っ越してきたとき、友だちがいないから探そうと思ってこのコミュニティへ来た。みんな同じところで落とし穴にはまるなと思って親近感を覚えた。以前 Python Boot Camp のお手伝い をしたときに知り合った、現地スタッフのにしたにさんが淡路島出身で、三ノ宮.dev にも関心があったようなので来られて挨拶した。そうやってつながりが増えていくのもまた嬉しい。

今後はフリーランスや個人事業主、マイクロ法人といった1人で働くスタイルがより増えていくと私は考えている。以前にも マイクロ法人のススメ を書いたが、1人で働くメリットは大きいものの、デメリットとして相談相手がいなかったり、困ったときに他者へ助けを求められないなどがある。コワーキングや勉強会コミュニティはそういった1人のデメリットを補う形で発展していくのではないかと想像している。そして、そのときのための準備を2年前ぐらいから始めている。

ストレッチ

土曜日に実家へ帰っていたのでストレッチを日曜日の夜に変更していた。昨日、車でジモティーのスタンディングデスクを引き取りに行ったり、実家との往復をしたので腰への負担が大きかった。それ以外は大きな疲労や張りなどはなかったと思う。勉強会後に飲み会へ行って、軽く1杯だけ飲んでやめとくつもりが、ビール2杯とハイボール1杯飲んでしまって、酒臭かったら悪いなぁと思いながらストレッチを受けていた。トレーナーさんはお酒の匂いしないと言ってくれてたけれど、本当のところはどうだったのか。ほろ酔いでストレッチを受けていた。今日の開脚幅は開始前152cmで、ストレッチ後157cmだった。

他人の言うことを聞かないと気付けない

23時に寝て1時に起きて4時過ぎに起きた。昨日、打ち合わせに来た親がうちに泊まっている。親がいると4時起きになる。

しくじり先生

たまたま元プロ野球選手の 森本稀哲 選手のしくじり先生をみた。日ハムで新庄選手が活躍していたときにブレークした選手としてしか私は知らなくて、その後、どうなったのかも知らなかったが、キャリアハイを迎えた後は期待された成績を残せず、苦労しながらも野球を続けて引退試合をしてもらえるぐらいには活躍された選手だったようだ。無名のまま引退するプロ野球選手もたくさんいる中で、本人も話していた通り、一時期レギュラーとして活躍して、16年3球団もプロ野球選手で入れたことは間違いなく幸せな選手の側だと思う。

病気のため、小さい頃からコンプレックスを抱えてきた人生の中、それが改善したり悪化したりもしながら、いまふりかえっているのは、人は共通してそういうところに陥ると思えて親近感もわく。いろいろなしくじりもあった中での私にとって気になったのは次の言葉だった。

うまくいっていないときに頑固で他人の言うことを聞かないから自分で悪い状態に気付けなかった。

マイクロ法人やフリーランスの一番の難しさはここにあると私も思う。1人だとキャリアに与える影響に自身の状態がかなり大きい。「無知の無知」への 3ステップ を常に私は意識していて、自分の誤りに自分で気付けていない状態が一番怖い。私にもいくつか成功体験があるから、自信過剰になるとこのやり方ならうまくいくはずと誤った方向に進んでしまう懸念は避けられない。周りにいる人たちに「それ、おかしいよ」とか「何をやっているのか理解できない」とか言ってもらう機会や制度設計に気を配っている。私も他人の言うことをあまり聞かない傾向があるので稀哲さんの頑固で失敗したという体験談は親身に思えた。

スタンディングデスク受け取り

ジモティーで引っ越しで処分していた「DEVAISE スタンディングデスク」を2000円で購入した。メーカーのサイトがどこかわからにので amazon のリンクを張っておく。これは実家の離れではなく、うちのマンションでホットクックを置く台として使う。お昼に東灘区まで引き取りに行ってきた。メッセージを送ると相手のレスポンスの早い方で20分以内には返信が届いていた。メッセージのやり取りだけでシステムに慣れた相手だというのがわかる。本当は引き取りも13時の予定だったのだけど、こっちの都合が変わったので11時頃に早くできない?と訪ねたら20分後には11時45分にいけるよと返ってきて早く引き取りした。

実家との往復

親を送るのと、実家コワーキングスペース化のための椅子を運ぶのと、親戚と打ち合わせの3つを兼ねて実家へ車で帰る。道中、姉の職場へ立ち寄り相続関連の書類を渡して、親戚の家にお邪魔して少し打ち合わせして、16時過ぎには実家へ着いた。カフーツのいとうさんから引き取った椅子4脚 をようやく実家の離れまで運んだ。2脚ずつで2回かかった。あとは机を1-2つ探してくればコワーキングスペースとして形は成り立ちそう。

それからまた神戸へ戻る。1日で神戸と実家を往復したのは初めてかもしれない。帰りは途中で眠くなって淡路 SA で休憩した。

家族信託の打ち合わせ

1時に寝て4時に起きてもう1度どこかで起きて7時半に起きた。

テックブログ公開

テックブログレビュー を終えて公開した。この機会に 個々の記事に目次 も追加した。はらさんレビューから修正をして2時間後に公開しますよと宣言して勝手に公開した。

家族信託の打ち合わせ

15時にお仕事を早退して、親と一緒に明石市にある弁護士さんの事務所へ訪問した。三ノ宮から車で向かって、ナビゲーションに従っていたら京橋から高速道路に入って若宮でおろされて、なんでこんな早く高速道路おりるんやろ?と不思議に思ったけど、須磨からの海岸線はそれほど渋滞せず信号も多くないから下道で行ってもそんなに時間はかからないという判断だったようにみえる。だいたい40-50分ほどで明石市の中心地に着いた。3分ほど遅刻して打ち合わせが始まった。

遺産を相続するとさまざまなリスクがある。大きなお金をもつというだけで詐欺のターゲットにされる。家族信託 (民事信託) という制度を使って、そのとき必要なお金のみを受け取るように運用する。構成要素は次の通り。

  • 委託者: 母
  • 受託者: 私と姉
  • 信託財産: 預金

受託者は最低2人必要で、うちは姉もいるのでよいのではないかと弁護士さんが話されていた。たしかに1人っ子なら誰かにお願いしないといけない。大雑把に言えば、母の貯金を子どもに管理してもらうような制度になる。但し、最初の契約書に記載された内容の範囲内でしか、受託者はお金を引き出せないのでその契約書をしっかり作ることが重要になる。契約書に記載していれば、資産運用もできるらしい。契約書の叩き台として、どういった内容を書いておくかを相談した。弁護士さん曰く、契約書に書いておかないとその用途に使えなくなるため、1%でも可能性があれば、書くだけ書いておいた方がよいとのこと。書いておいて、実際に使わないというのはなんの問題もない。

3人でブレストするような感じで項目を洗い出した。

  • 生活費
    • 冠婚葬祭で払うお金
      • 10万円以内なら生活費として引き出してもよい
      • 例えば30万円いるとして、建替え可能なら10万円/月を3ヶ月かけて引き出すでもよい
    • (お金に困った親戚がいたと仮定して) 親戚への資金援助
      • 生活費の範囲内でやればよいはず
  • 看護、療養といった通院も含めた医療費
  • 老人ホームの入居費用
  • 納税 (一時所得)
    • 太陽光発電で得た収益のうち、所得税をこの口座から引き出して支払うといったこともできる
  • 家の改築、修繕、取り壊しの費用
  • 農業のための費用
    • 農機具の購入や修理など
    • トラクターが一番高い、100万円〜1,000万円ぐらいとピンからキリまである
  • 土地 (田んぼ、宅地) の購入
  • 太陽光発電設備の撤去費用
  • 自家用車の購入費用
  • 生命保険の支払い
    • 死亡保険金は500万円 x 法定相続人数まで非課税なので相続税の節税になるらしい
      • 例) 母の死亡時に姉と私が500万円受け取るような生命保険に入る
    • 相続税の基礎控除が3,000万円 + 600万円 * 法定相続人数
      • 例) うちは私と姉で 3000 + 600 * 2 = 4,200万円が基礎控除となる
        • この金額を超える遺産があれば相続税の課税対象となる
        • 生命保険へ付け替えることで 4200 + 500 * 2 = 5,200万円まで非課税にできる?
  • 資産運用
    • 投資信託
      • 積み立て系の投資信託がもっとも望ましいのではないか
        • リスクヘッジとして大きなお金を1度に動かすのはなるべく避けたい
        • NISA 口座を開設できるかどうかは調べないとわからない
      • 信託口座とは別に証券口座も開設しないといけない
        • 受託者が預金口座からお金を引き出して証券口座へ振り込むような運用になる?
      • 具体的にどういった運用にするかは信託銀行と応相談になるかもしれない
        • なんらかの制約が課されるのではないかと推測される
    • 株式投資
      • 可能ではあるが、条件を指定しないといけないため、中長期での実運用は難しいのではないか

私が信託口座からお金を引き出すときに、一定金額以下の生活費 (例えば10万円) ならノーチェックだが、100万円とか大きなお金を引き出すときには銀行員からチェックがかかり、正当な使途なのかどうかを確認されるという。場合によっては見積もり書の提出なども必要かもしれないとのこと。それはとくに問題ない。契約書の作り直し自体は委託者が元気であればできる。しかし、手数料や手間暇もかかるため、実運用としては最初に作った契約書を変更するといったことはそうそう行われない。最初が大事。弁護士さんが契約書を作成するのに2-3週間かかる。その後に三井住友銀行さんで赤ペン先生のチェックが入る。契約内容の修正などのやり取りをしてその後手続きに進む。

思考実験として、詐欺にあって借金してしまった、または連帯保証人となって借金してしまった。その場合はどうなるか?というのも考えてみた。信託銀行に確認してみるとのことだったが、弁護士さんが言うには、家族信託の目的は財産を守ることにあるため、本来の使途ではないものへ支払いは抵抗があるかもしれないとのこと。その状況によって銀行員の判断次第かもしれないとのこと。

受託者は年に1回報告書 (帳簿) を作り、どのように運用したかを委託者へ報告する義務がある。これは家族間だけの話ではある。この手の情報処理 (データ処理) は私が得意とするのでそんなのすぐやりますと回答できた。弁護士さんによると、こういう事務作業を嫌がる受託者もいるという。スプレッドシートでちゃちゃっと作ればよいはず。

契約書を作成したら、それをもって委託者、受託者、弁護士の3人で 神戸公証役場 へ一緒に行く。その公正証書をもって三井住友信託銀行へ行って、母が口座を開設して、そこに弁護士さんが遺産を振り込むといった段取りになる。将来、委託者の健康を害して成年後見人がつく状況になったとしても家族信託の口座はそのまま受託者が管理できる。成年後見人に信託口座が移管されるようなことはない。

最後に契約書の条項をチェックしていて次の内容を教えてもらった。

弁護士業務の適正の確保

甲は、本件事件等の処理の依頼目的が犯罪収益移転に関わるものではないことを、表明し保証する。

「半社チェックのようなもの?」と聞いたらちょっと違っていて、弁護士は大きなお金を動かしても監査を受けないという特権 (信頼) があって、その特権はマネーロンダリングできてしまうという諸刃の剣でもあるらしい。今回のお金は遺産なので半社会的なものに該当しないが、契約書では弁護士が扱う業務がマネーロンダリングではないことをチェックする必要があるみたい。

帰りに 明石焼き ゴ というお店で明石焼きを買った。駐車場の近くにあったお店に立ち寄ってテイクアウトしたのだけど、とてもおいしかった。それで 食べログ の評価もみたら 3.49 とかなり高い。たまたま買ったところがよいお店だった。18時半頃に店内もほぼ満席だったと思う。また明石へ行く機会があれば寄ってみようと思う。

なにも手につかない休日

1時までオフィスで作業して3時に寝てやや吐き気で起きて9時前に起きた。夕方から「翔んで埼玉」の1作目をみた。想像した雰囲気とはちょっと違っていた。私が関東圏に関心がないからそれほど親近感はなかった。

呪術廻戦のスマホゲーム

コロナ禍明けから広告系の会社の株価が落ちている。サイバーの23年9月期、純利益78%減「ウマ娘」失速 にあるように、サイバーエージェントはとくにウマ娘のヒットが落ち着きあるようで、さらに株価が落ちていた。直近の高値2,441円から 半値八掛け二割引 で算出すると781円になる。

2441 * 0.5 * 0.8 * 0.8 ≠ 781 円

1年ぐらい前からサイバーエージェントの株価もたまたま観測していた。この計算式はだいたい1/3ぐらいと覚えていたので800円台が底値かなと目安にみていて、いま計算し直したら781円だった。そろそろ底値付近かなと少しずつ買っていた。直近の約定日の時系列の推移が次になる。

日付始値高値安値終値出来高調整後終値
2023-07-27959970900.4923.833,373,800923.8
2023-09-08900901.9851.7854.826,553,700854.8
2023-09-22790.6812.1787.4802.78,628,700802.7
2023-10-20782785.3775777.93,993,600777.9
2023-10-27768.7774.7758.2773.25,453,700773.2
2023-11-10815.6815.6792.4810.76,552,700810.7
2023-11-16847850.3824.2831.96,180,300831.9
2023-11-17831.9833.9817.3819.65,098,200819.6

ここ2-3日で気付いたら評価益が増えているなと気付いて調べたら 呪術廻戦 ファントムパレード というサイバーエージェントのグループ企業がゲームをリリースしてランキングが1位になっているらしい。一応チェックするかと思って、午前中はこのゲームをダウンロードして2-3時間やってみた。現時点ではソーシャル要素はほとんどなく、原作に忠実なキャラクターゲームという構成になっている。ストーリーのムービーはアニメの台詞をそのままをゲームの映像にあわせて流しているようなもの。私は原作をみたことがあるからスキップするけど、知らない人たちはこれをみながらストーリーを進めていくのだろうか。

全体として原作ファンならそこそこ楽しめると思う。五条悟が最強で領域展開しない限り攻撃が当たらない、しかし最強なので7ターンしたら戦闘離脱 (戦闘不能) するという設定になっている。ある程度、強い敵と連続的に戦闘しないといけないときは途中離脱してしまうのでそれでゲームバランスを調整している。最初のガチャだけ引き直しが出来て、自分の好きなキャラが出るまでやり直せる。それで五条悟が出るまで粘った。20回ぐらい引き直しした。

戦闘シーンもよく出来ているし、ムービーや声優さんの台詞もあり、大きな欠点のない普通のゲームといった印象。原因はわからないが、タップの操作を受け付けなくなるときがちらほらある。通信でブロックしているのか、イベントを処理できていないのか。プレイヤーだけでなく、アイテムやスキルにレベルを上げる要素があって、完凸を目指すような人は2-3年はやり続けるのかもしれない。ガチャで取得した五条悟の必殺技は術式反転「赫」になる。半年後のガチャでは虚式「茈」も実装されるのだろうと推測がつく。たしかに茈の戦闘シーンをみてみたい。出足からランキング1位でアクティブユーザーが多いなら予算もついて今後もゲームのコンテンツがパワーアップしていく可能性は高い。大ヒットしないまでも、普通のヒット作になって2-3年は続くのではないかと思えた。一方で私のような、ゲームも呪術廻戦の漫画 (アニメ) もにわかファンには、レベルをずっと上げ続けないといけないゲームはしんどいので、課金しないならそのうちに離脱してしまうと思う。時間がないから継続できない。

たまたまなのか、トレンド転換としてもよいタイミングなので順張りしながら様子をみてみようと思う。

テックブログレビュー

この前の テレ東の番組 に影響をうけて夜にファーストガンダムをみたりしていた。1時に寝て3時半に起きて何をしていたか覚えていないが、気付いたら5時半だった。その後、slack のメッセージに気付いて返信するために6時半に起きた。

テックブログ執筆

昨日の続き 。残り 1/3 の Vite についての調査内容を書いて昼過ぎにはレビュー依頼のマージリクエストを送った。といっても、お手伝い先の社内にはフロントエンドに詳しい開発者はほぼいないと推測される。はらさんにもお願いしていて、このレビューは実質的にはらさんが担当することになると想定される。はらさんの OK が出たらそのまま公開してしまおうと考えている。できれば金曜日中には公開してしまいたい。

学生の頃、物理の先生が言ったかどうか定かではないが「物体が動き出す直前が最も摩擦が大きい」という言葉を気に入っている。先週に大半を調べていた内容を、週末、月・火と4日もまたいで水曜日に記事を書き終えるというのが、私の職務レベルからすると怠慢と指摘されたら認めるしかない。金曜日の夜に能鑑賞して、土曜日はもくもく会へ行って、日曜日は深夜コワーキングをしていた。要は遊んでいた、楽しかったんだけど。加齢でモチベーションコントロールが難しいから土日の両方を遊んでしまうと、やらないといけないことがなにも進まないといった状況に陥ってしまう。そして、やらなくても誰からも怒られないというのが悲しい現実だ。

鶏もも肉 2kg まとめ買い

業務スーパーの買いもの の続き。17時にお仕事を終えて、時間があったので業務スーパーへ買いものへ行った。オフィスから近所の業務スーパーへ行くのは20分ほどかかることから、19時閉店のお店へ平日行くのはやや難しい。今日の目当ては鶏もも肉まとめ買い。2kg を買うと1,780円 (税抜き) で7つの肉片が入っていた。100g あたりに換算すると89円になる。さっそく炒めて食べてみたが、とくに調理や風味に問題はない。

(おそらく) 同じ鶏肉の肉片1枚入りに小分けした真空パックだと 100g 98円になる。通常の肉のパッキングの消費期限は2-3日といったところが、真空パックだと7日に延びる。この9円の差異を真空パック料金だと捉えることもできる。この前 KOHYO で購入した国産鶏もも肉は 100g 138円だった。格段に安い。

2kg も一度に消費できないので肉片の2つを冷蔵庫へ、5つは冷凍保存する。冷凍保存すると2-3週間はもつらしい。冷凍保存するためのラップで包んだり、解凍したりするのが面倒でもある。仮に1日で肉片1つを消費するとして7日分の食材になる。1枚入りの真空パックを3-4個買って冷蔵庫で保存して7日以内に食べるのでもよいかもしれない。

テックブログの書き始め

昨日は夜にいろいろ作業して、1時に寝て4時に起きて7時に起きた。

テックブログ執筆

先週から調査している内容 についてテックブログを書き始めた。マネジメントや実装をしていると筆が進まなくて書き始めるのが随分と遅くなってしまった。学校の試験前に、試験勉強やらずに部屋の掃除をやってしまったりするような感覚。午前中は昨日 go-ldap に送った pr がまとめてマージされた。その修正を取り込んだライブラリのバージョンで関連するところのコードをリファクタリングしていた。それでもようやく書き始めた。書き始めたら一気に 2/3 は書けた。本当は晩ご飯を食べた後にレビューできるところまで書いてしまおうと思っていたが、そこまで体力 (集中力) が続かなかった。なんとなく張り合いがなくて適当なところで妥協してしまう。

試行錯誤から学ぶ開発スタイル

たまたまみかけた記事でひどい内容の記事をみた。一読しただけでもやもやしていたのを知人と議論していて言語化できるようになったので書いてみる。

もっと前段にエンジニアが議論に参加する、なんなら議論をリードするくらいのことをしていく必要があるでしょう。

こういうこと言い出すマネージャー (PO) 多いし、意見そのものは一理あるんだけど、これをエンジニアがイニシアティブとってやっていたらマネージャーいらないでしょ?ということを自覚していない。もっと言うと、PO という責任のある立場の人が大変という理由で責任放棄しているようにみえてしまう。(翻訳) ビッグテックのプロジェクトマネジメントとスクラム不在の謎 という記事では実際にテックリードまたはエンジニアがプロジェクトのイニシアティブを取っていると書かれている。もしそうするなら、まず自身のスキル不足や未熟さを受け入れないといけない。

マネージャー (PO) にとって大きな役割は意思決定であって、仕様案や計画において技術的なところがわからないのであれば、エンジニアに委譲したり相談して事前にいくらでも調整できるはずだし、その調整作業そのものはマネージャーの仕事の1つと言える。そういった調整をマネージャーがやるからエンジニアは実開発の設計や実装に集中できる。結果的に生産性も上がる。この文章から伺えることはリファインメントや計画に臨んだときにダメ出しされてやり直すことを手戻り、大変、効率が悪いとネガティブに捉えている。逆に言えば、最初から完璧に仕様案を作れるはずだと思い込んでいるふしがある。

そして、誰もが知っていることだが、最初から完璧な仕様案や計画など作れるはずがなく、不確実性を許容しながらスクラムやアジャイル開発といった開発方法論の取り組みで調整していくというのが、モダンな開発のやり方である。その試行錯誤や手戻りは無駄なことではなく、チームやプロジェクトが学ぶべきことの1つだという考えがこの文章からは読み取れない。そして、自分が仕様案を適切に作れなかったのを自分のスキル不足だと認めず、チームのエンジニアが議論に参加していないからだと責任転嫁している。それはマネージャーが技術的に大事なことを理解できていなかったとふりかえり、計画を修正したり、次に計画するときは同じようなことが起こらないよう、努めていくというのがスクラム的なプロジェクトの進め方になるはずだ。手戻りはアンチパターンではなく、学びの過程や必要な試行錯誤であると認めて受け入れるところから始めるべき。

生活リズムが崩れた月曜日

1時に寝て2時半に起きて5時に起きて7時に起きた。朝から昼過ぎまで寝てたのでトータルでは睡眠時間をたくさん取っているのになんか疲れている。生活のリズムを崩すのがよくないのかも。

ガンダムに学ぶ経営学

教えてもらって寝る前にみたらおもしろかった。入山先生がガンダム大好きなことが伝わってくる。おもしろいのはそうだけど、まじレスすると、アニメの世界の組織や経済に学ぶというのは誤りで、当時の組織や経済のリアルを参考にして、ガンダムの世界観は作られていると推測する。だから入山先生はユーモアで盛り上げているのだと思うけれど、ガンダムから学ぶのではなく歴史から学べが正解だと思う。でも、ガンダムの世界観を知るよい番組だと思う。

go-ldap へのプルリクエスト

2週間ほど前に送った pr がまだレビューすらしてもらえていない。github actions のテストがいくつか落ちていて、この pr の修正によるものではないところでエラーになっている。メンテナーの1人が再実行してくれたんだけど、たくさんあるマトリックステストのどこかが落ちてまた再実行しないといけない。

それを待っている間に、テストがエラーになる本当の原因の問題を直そうと2-3日前に issue 登録していた。この issue の対応を本当は昨日やろうと思っていたのに、思いの外、寝てしまって、その後もいろいろ書きものをしていて時間を使ってしまってできていなかった。今朝からそれを片付けた。業務の一環なので日曜日にプルリクエストを送らなくてもよいのだけど、コントリビューションなので空き時間に終わらせて、業務の時間は別のことに使いたいという思いもあったりする。

さらに github actions のログに deprecated ワーニングが出ていたのでついでにそれも直した。

473, 474, 471 の順番にマージされていくのが望ましい。そろそろコミット権をくれたりしないかな?と思ったりもする。というのは、タイミングの問題で action の job が落ちたり、バージョン上げるだけの pr とか、自分でマージしてしまえばいいと思ったりする。

hugo で書いた記事に目次を生成する

お手伝い先のテックブログは hugo で運用されている。記事の目次がないなと気付いて追加してみた。hugo v0.60.0 以降のバージョンなら標準で目次生成の機能をもっている。

<aside>
  {{ .TableOfContents }}
</aside>

デフォルトはヘッダー2レベルより下の目次を生成する。レベル1も生成したい場合は config.toml に次の設定を追加する。

[markup]
  [markup.tableOfContents]
    startLevel = 1
    endLevel = 3