法人決算の続き

0時に寝て何度か起きて6時過ぎに起きた。休日は朝だらだらしてオフィスへ行くのが9-10時ぐらいになることが多いのだけど、今日は普通に8時過ぎに行けた。

法人決算

朝から法人決算の続き。昨日たまたま消費税の計算をして、祝日やのに e-tax 稼働しているんやと思いながら申告した。これまで休日や祝日は稼働していなかった気がするので時代の変化にあわせてシステムはなるべく24時間稼働するように少しずつ変わってきている。今日も法人決算の続きをやっていて、課税所得を確認して、カテゴリ的には3つに分類される法人3税と呼ばれる税金を算出した。具体的には6つの税金を算出しないといけない。

  • 法人税 (=> 国税 => e-tax)
    • 法人税
    • 地方法人税
  • 法人住民税 (=> 地方税 => eltax)
    • 法人県民税
    • 法人市民税
  • 法人事業税 (=> 地方税 => eltax)
    • 法人事業税
    • 特別法人事業税

過去の法人決算の経験からまず法人住民税と法人事業税を確定させてから法人決算の申告をすべきだというプラクティスがある。というのは、法人住民税と法人事業税の数値になんらかの誤りがあると法人決算で提出する別表の数字も修正しないといけないため、先に地方税を確定させた方が手戻りを少なくできる可能性が高い。電子申請するとそれぞれの書類の数値のバリデーションが機能するので手計算や手入力で誤りがあったときに発見できる可能性がある。これは電子申請をするメリットの1つでもある。

地方税を管轄するのが eltax で国税を管轄するのが e-tax で別システムになる。いまとなっては、事前にチェックしておけばよかったなと思うところだが、あとの祭り。e-tax は5月3-4日が稼働していて5-7日が休止している。eltax は5月3-5日が休止していて6-7日が稼働しているというスケジュールになっていた。双方のシステムが稼働していれば今日中に終えられたものが、なんともちぐはぐなスケジュールで申告を完了させるのは来週以降に持ち越すことになる。また来年やるときはこのそれぞれのシステムの稼働スケジュールを事前にチェックして法人決算の作業日程を決めるように法人決算の issue に書き込んでおいた。来年はもっとうまくやる。

今日のところは法人3税の税金を算出し終えて、それらと関係ない別表の大半を作成した。基本的には決算の試算表から数値を転記したり、特例措置の申請のための書類を作ったりでなにも難しくない。

iijmio と iphone で作るモバイル wifi ルーター

今年に入ってから 実家のオフィス化 の準備を着々と進めている。晩年は足が不自由だった祖父が生活できるよう、倉庫の一部を改築して車椅子でも生活できるような部屋になっていて、ある種の離れのようなスペースになっている。祖父が他界してからは誰も使っていない。トイレもお風呂もキッチンもついていて広さで言えば14畳ぐらいある。これまで使いにくかった理由は2つあってエアコンとインターネットがなかった。この前、母にお願いしてエアコンを購入してもらい、つい先日、設置が完了したらしい。

インターネットの回線をひくことも検討していたが、どうやら5000円/月ぐらいかかることがわかってきた。母はインターネットを必要としていないので月1回ぐらいしか使わないのに5000円も支払うのはもったいないなと一旦ストップしていた。スマートフォンのテザリングでお仕事できないわけではないから当初はそれでもいいかと考えていた。私の個人のスマホとインターネット回線は iijmio を使っていて iij さん好きなので同じように pocket wifi 的なものはないのかな?と調べたら正にそういう記事をみつけた。

よくよく考えたらデータ専用の sim を購入したらあとはモバイル wifi ルーターだけあればよいことに気付いて、それって iphone でできるやんということに気付いて、過去に使っていた古い iphone 11 を再利用できることに気付いた。さらにいまは esim という物理 sim を必要としないソフトウェアベースの sim もあるようで月額の料金も esim の方が安い。 音声通話なしのデータ専用プランで税込で次の金額になる。さらに使わなかったらデータ量は翌月以降に繰越できる。プランによって繰越できる期間が異なる。例えば2GiBなら翌月末まで繰越できる。繰越という概念はたまにしか使わない私の用途にぴったりでひとまず2GiBプランを選択してお試し運用してみることにした。

  • 1GiB: 165円/月
  • 2GiB: 440円/月
  • 5GiB: 660円/月
  • 10GiB: 1,100円/月
  • 20GiB: 1,650円/月

esim というソフトウェアベースのものだと、申し込みして5分後に設定できましたというメールが届き、すぐにアクティベートして iphone 11 に esim の設定をしたら10分後にはインターネットに接続できるようになった。その後 apn の設定を行ってテザリングもできるようになって、30分後には iphone 11 をモバイル wifi ルーターとして macbook からインターネットにアクセスできるかの疎通確認を終えた。

つまりソフトウェアベースで業務を行うことのワークフローの効率が半端なく高い。これが物理 sim なら数人の人手と待ち時間がかかることは容易に想像できる。物理的にしかできなかったことをソフトウェアベースにしてワークフローを洗練化させることの強力さを実感した。常々、私が課題管理の文脈でコミュニケーションコストを減らせれば生産性が上がると開発者に啓蒙していることと同じで自分がやろうとしていることの概念を追体験するような経験となった。ワークフローの効率を極端に落とすのは人間である。

第4期の法人決算に着手

0時に寝て何度か起きて7時に起きてドラクエタクトのランクマッチやってた。

法人決算

朝から着手した。過去の日記から 第3期の法人決算に着手した のは5月5日だったらしい。この情報だけでも昨年よりは体調がよく、いまの業務に集中できていることが伺える。過去3回分の法人決算のノウハウがあるから私にとって法人決算はなんら難しくない、ただの作業になる。しかし、こういった面倒なだけの事務手続きをいつ取り組めるかというのはモチベーション管理の視点からはとても大きな意味をもつように、年齢を重ねてから思うようになった。というのは本気を出せば数時間で終えるものの、あまり楽しい作業ではないので、他の楽しい開発や調べものに心を奪われがちになる。たった数時間なのだから先に事務手続きをやってから他の楽しいことやればいいやんと頭ではわかっているものの、それができるかどうかがモチベーション管理の難しいところ。連休の初日からそれができるのだから調子がよいのだろうと考えられる。

消費税の申告

法人決算と消費税の申告は同じタイミングで行うものの、それぞれの申告は独立している。消費税は未払金として決算書には記載する必要があるので普通にやると、法人決算の前に消費税の申告をやるという手順になるはず。昨年は3期目で免税事業者から課税事業者へと移り、初めての消費税申告でやや手間取ったが、今回は2回目なので昨年のノウハウがあって1.5時間もあれば完了した。昨年のメモを見返しながら課題管理システムに手順や要項をメモしながらやっているので実質1時間もあればできる。こうやって作業手順を洗練させていくのが課題管理的なやり方。昨年は消費税の算出と申告と会計処理を2日に分けて別々のタイミングで行っていた。会計システムに振替伝票を登録するやり方なども初めてでよくわからなかった。しかし、今年は全体像も手順もわかっているのでこれらの作業をまとめて完了できた。よい感じ。

パワーランチ

大学の同級生の友だちが実家に戻ってきた機会にオフィスを案内してお昼ご飯を食べて雑談してきた。本当は昨年末に予定していたが、年末休み前に 父の訃報 があって先送りしていた。引っ越してから知人がオフィスへ来た機会は初めてかな。お昼ご飯食べてカフェで雑談してなんやらかんやらで3時間ほど話していた。ざっくばらんに近況やキャリアや起業についての話しをしていた。友だちの会社は外資系なのでリストラが敢行されているが、その友だちはビジネスに近い方の業務をやっていて、そういう人たちはリストラされていないらしい。リストラされているのは新しいビジネスの種としてやってたプロジェクトのメンバーでそれはベテラン/新参に関係なくリストラされているそうなので外資の厳しさを伺える。あとはお仕事のパフォーマンスがよくない新参者がリストラされているのはそうらしい。

50歳のキャリアどうするといった話しをしていて、いまの会社でずっと働くという選択肢もある。一方で40歳を超えると転職はとても選択肢が限られるというのは私の経験からもそうで、おそらく50歳はさらに転職の選択肢が限定されるだろうと推測する。そうなると、起業するという選択肢もあるが、そういった将来のキャリア観をお互いに話していた。私からは誰にでも言っていることだけど、知り合いのスタートアップに転職するよりも自分で会社を作って好き勝手やるのが楽しいよとお奨めしておいた。

きんとん さんでシャトーブリアン定食 (2,600円) を食べた。ヒレの中心部分の柔らかい部分をシャトーブリアンと呼ぶらしい。とんかつの種類で言えばヒレカツに分類される。前から気になっていたメニューだったので祝日だし接待だしと良縁も重なって食べてきた。岩塩、わさび醤油、とんかつソースという3つのタレを使い分けられるところもよい。値が張るし、おいしかったし、見栄えもよいので接待にもよいメニューだと思う。食べログのとんかつ百名店[2022]の1つ。

これまで私はロースカツ派でヒレカツというのをあまり食べてこなかった。カツ丼も好きだが、通常はロースカツだと思う。東京へ出張したときに とん金 さんで食べたヒレカツがおいしかった。金曜日のランチがヒレカツ定食 (1,200円) になる。肉の暑さと柔らかさではきんとんさんのヒレカツに負けないインパクトがあったように思う。食べログの定食百名店[2021]の1つ。それ以来ヒレカツもおいしいなと思うようになってきた。加齢によって脂身をあまり食べられなくなったのもあるのかもしれない。

飛び石のお仕事

0時に寝て何度か起きて7時に起きた。休んでもよかったんだけど、休む理由がないので飛び石でお仕事することにした。

docker エコシステムの調査

少し前に docker をライブラリとして使って運用ツールを作った 。その内容をテックブログに書こうと思って docker のソフトウェアスタックやアーキテクチャの背景を調べ直していた。もっとたくさんいろんな記事を読んだのだけど、次の記事とそこから辿れるものを読むとよいだろうと思う。

コンテナに関して cri と oci という2つの標準化があることを学び、その実装として docker 社が使っているツールに関係があるのが次の3つになる。おもしろいことにすべて docker 社のリポジトリにはなく、oss として然るべき所管の organization にリポジトリがある。

すべて docker 社がオリジナルを作って、いまも moby は docker 社が主体となって開発を継続しているだろうけれど、コンテナの実行環境のプラットフォームは k8s に取って変わられ、cri のコンテナランタイムとしての containerd があれば moby は docker daemon や docker engine のためのツールでしかなくなっている。当初 docker と moby を分割したのは、docker を開発ツール、moby を infrastructure にするという判断の下、moby を k8s のようなプラットフォームにしたかったはずである。しかし、結果的にその標準化競争に破れ containerd があれば dockerd daemon は不要になったとも解釈できる。docker という名前はコンテナのエコシステムにおいて docker 社が提供するコマンドラインやプロダクトの総称としての名前でしかなくなってしまっていて、一世を風靡した docker というパッケージングシステムの開発元に同情してしまう感もある。いまの docker engine は docker daemon と containerd の2つの daemon を起動していて docker 社としては微妙なアーキテクチャになっているのではないかと推測する。とくに swarm なんか最早削除したいだろう。

こういった docker を取り巻くエコシステムやツールの背景を説明するだけでも1つの記事になりそうなことが1日調べていてわかった。

しくじり先生

たまたま 竹原慎二先生「50歳過ぎてもケンカを売られ続けてバリしんどい先生」 をみたらおもしろかった。ガチンコをリアルタイムでみていた世代なので竹原氏には好感をもっている。少し前に 【あの人の健康法】元プロボクサー・竹原慎二の膀胱(ぼうこう)がんとの闘い のような、闘病生活の記事もみかけていた。病気は克服してがんばっているといるようにみえる。よかった。もう51歳なのか。

この番組の中で若い頃に上京してボクシングジムへ通ったときに根性の定義が変わったという話しが出てくる。

殴られても耐えることを根性だと思っていた。そのときに初めて殴られようが何しようが毎日辛い練習を重ねるのが根性だと気付かされた。

地元で最強だったのが、ボクシングジムのヤンキーでもない先輩にまったく太刀打ちできなかったという。そのとき1番違うのはスタミナだったらしく、竹原氏は1分で息がきれるのに相手は軽く流すといった様相だった。この先輩にボコボコにされた経験を経てそれから心を改めて真面目になったと言う。その後ボクシングと真剣に向き合い、1995年に日本人初のミドル級世界チャンピオンになる。おそらく番組の主旨的に若ものへのメッセージとして「強さ」について話されていた。

「ケンカに強い」だけが「強さ」じゃない、「強さ」の意味を履き違えずに生きよう。大人になると、いろんな強さを知る。大切な人のために仕事をどれだけ頑張れるか、辛い状況でもじっと耐えることができるか。そういう強さもある。

私は誰かのために仕事をがんばったことないし、辛い状況を耐えるみたいなこともほぼやってなくて、嫌になったら仕事を辞めてて、こういう言葉にあうと自分を恥じてしまう。その後、喧嘩自慢で youtube 動画を検索していたらまさにそういうのがあった。竹原氏が「勝てるはずねぇだろ、お前らこんな茶番なことすんなよ」とぼやいていた。先の番組の中でも触れていたが、本当に真剣勝負したいと思って来ているのではなく、記念に戦ってみたいという不純な動機でやってくる人が多いらしい。たしかにそれは相手するのがしんどそう。

対外的なお仕事をお休みしてドライブ

対外的なお仕事をお休みしてドライブ

3時に寝て7時に起きた。翌日がお休みだと思うとはしゃいでうまく眠れなかった。午前中と夕方にオフィスへ行って作業していたので今日は day off じゃないけど、お出掛けする私用もあったのでお手伝い先のお仕事はお休みした。

明石までドライブ

11時半から車で明石市にある弁護士さんの事務所まで行ってきた。高速道路をわーっと走って明石市へ。ついでに明石市周辺も軽くドライブして浜辺なども走ってきた。毎週のように天気がよかったら車に乗ろうと思うものの、立体駐車場から車を出すのが面倒なのでなにか目的がないとなかなか乗る機会にならない。電車で明石へ行ってもほとんど時間は変わらないものの、ちょうどよい車を動かす機会だったのでドライブしてきた。昼間は天候もよくて気持ちよかった。戻ってきてから急に天気が崩れてちょうど雨が振り始める前のよい時間帯に走れた。たまにしか乗らないからかドライブするのもなかなか楽しい。お昼に焼き穴子丼定食を食べた。地元の食べものって感じで心地よかった。

弁護士さんと相続打ち合わせ

3-4月と私がいっぱいいっぱいで忙しいから相続の打ち合わせを遅らせてもらっていた。相続税を10カ月以内に支払わないと追徴課税になる。弁護士さんから直接会って話したいということで明石の事務所まで行ってきた。私との会話の雰囲気から温度感をみたかったと弁護士さんは話されていた。

母・姉・私の3人で法定相続を行う。表現はよくないが、うちの家族は相続なんかどうでもよくて誰も関心をもっていない。一方で弁護士さんは利害関係の調整人になるので細かい数字の詳細確認やところどころで経費がかかることへの承諾を求めてくる。税理士さん、司法書士さん、弁護士さんと士業揃い踏みで相続の書類を作ってもらっている。田舎なので相続する建てものが登記されていませんとか普通に起きる。3月の時点で私が大きな方針だけ伝えて詳細はすべて専門家に委譲して経費も然るべきものはすべて言い値でよいから勝手に進めてみたいな指示を出していた。弁護士さんからしたら本当にそんな投げやりでいいのか?みたいな最終確認に face to face で打ち合わせしたかったんだと思う。私がメールのやり取りでそっけない対応をし過ぎたのかもしれない。

例えば、不動産の価値を評価するにも3つの価格がある。

  • 固定資産税評価額
    • 自治体が決める
    • 弁護士はこの金額を使いたい
  • 路線価
    • 国税庁が決める
    • 税理士はこの金額を使いたい
  • 不動産屋さんの評価額
    • 市場が決める

不動産を評価するときに弁護士と税理士で扱う価格が異なると金額も変わってきてそれぞれの金額を、、、と話そうとするところで、私は複数の金額を調整とかしなくてよいので、シンプルでわかりやすい形でどれか1つの価格で評価してもらったらそれでよいですと突っ込む。母も姉も私も金額を計算し直すとかやらないし、それによる多少の損得があってもそんなのどうでもよいと弁護士さんへ伝える。家によっては、お墓や法事にかかる費用を誰が出すかで、相続とは別にその費用を相続のタイミングで多めにもらっておくといった手続きをすることもあるという。なるほど。うちは母がすべて出している。母が支払うので問題ないし、わざわざそんなことを文書で残さなくても大丈夫ですみたいなやり取りが必要になる。いまから書類を作って相続人にハンコを押してもらって手続きをを終えるのが9月頃の見込み。期限は10月中なのでいまからやってちょうどよい時期らしい。相続の手続きは大変。

自動車税の支払い

4月1日に自動車をもっていると5月末までに自動車税を納めないといけない。自動車税は県に対して支払う。社用車の初めての自動車税なので毎年の手続きを忘れないための社内手続きをしていた。言うても google カレンダーと jira に issue 登録するだけなんやけど。送られてきた納付書から pay-easy で即時支払い手続きをした。自動車税の勘定科目は租税公課か車両費のどちらかで会計システムに登録すればよいらしい。うちは租税公課で自動車税という品目を割り当てて会計処理している。また1つ税金について学びを得た。

輸入した機器の会計処理

昨日は夕方から天気が崩れるという話しを聞いて夕方から家に戻ってゆっくり過ごしていた。ドラクエタクトやったりアニメの Dr.ストーンを見返したりしていた。

海外から輸入したときの会計処理と税金

昨日に引き続き、yubikey bio の設定や検証を一通りやって issue や記事にまとめていた。それが終わった後に会計処理についても調べていた。yubico 社の日本代理店はあるものの、指紋認証ができる yubikey bio の在庫を取り扱っていなかった。そのため、直接 yubico のオンラインストアで購入して日本へ発送した。インターネットで買いものをしているとあまり実感がないけれど、この場合は輸入手続きをして税関で関税を支払わないといけない。一方で用途が個人使用か商用利用かで関税がかかる基準額が変わってくる。これまでも個人使用で輸入して関税を支払ったことがなかったのは1.6万円以下のものは関税がかからないからだったんだと理解した。技術書ぐらいしか買ったことないけど。

1万円以下の輸入については関税がかからない、且つ個人使用のものは商品代金の0.6掛けで金額を算出するという2つの法律の合わせ技で1.6万円みたいな中途半端な金額が基準になるらしい。当初は商用利用というのは自社ビジネスや転売のようなものを指すのかと考えいた。yubikey bio はうちの会社内で主に調査目的で使う。会社の経費で購入しているが、これは個人使用の範疇かと勘違いしていた。調べているとそれは誤りで 【輸入】個人使用と商用の線引き 法人輸入との違いは? によると、業務やオフィスで使うことを前提にしているものは商用利用となるらしい。商用利用の場合は0.6掛けで金額を算定できない。yubikey bio は1万円ちょっと超えているので関税を支払わないといけない。

オンラインストアでの決済時に yubico 社は関税や輸送費を徴収しないと書いてあって本体価格しか支払っていない。調べていると、郵便局または輸送業者が関税を立替ているので商品を受け取るときに支払うという記事が出てくる。しかし、うちの郵便受けに商品がレターボックスで届いていたので私は関税と輸送費をまだ支払っていない。あれー?と思ってなにか手続きを誤ったのかどうかを調べ直したりしていた。おそらく輸送業者からまた後日、関税と消費税と輸送費の支払いに関する請求書が送られてくるはず。まだ届いていないだけなんだと推測する。もう少し待ってみる。

輸入したときの会計処理も通常の取引登録とはまったく異なっていてまた1つ税金の勉強になるなと分かって楽しみにしている。また後日、輸送業者から請求書が届いたときに輸入したときの税金を精査してみる。

yubikey bio を触ってみた

3時半に寝て7時に起きた。リリース終えたので晩ご飯を食べてから自分の会社のお仕事をしていたら遅くなった。

ストレッチ

今週もリリース明けでそれほど座っている時間が長かったわけでもないため、腰の張りはあまりなく、負荷は低くなっているのではないかと推測する。今日の開脚幅は開始前156cmで、ストレッチ後158cmだった。右股関節周りの硬さは相変わらず大きく変化はないが、他がよくなった分、右ふともも前の筋を伸ばすと張りがきつくてしんどいように感じた。しばらく余裕のある生活ができるので歩いたりストレッチしたりする余裕が出てくるかもしれない。

yubikey bio を触ってみた

先日 yubikey bio をオンラインストアで購入 した。会社の経費で業務で使うことを目的に購入したのでこの場合は商用利用の輸入にあたる。また別途、輸入についての会計処理を書く。yubico はスウェーデンの会社でどうやら日本向けはスウェーデンの首都ストックホルムから発送されてきたらしい。安いエコノミープランで注文していた。発送メールを受け取ったのが 4/17 でオフィスの郵便受けに入っていることに気付いたのが 4/29 になる。12日で届いたことになる。船便にしては早いからなにかしら航空便の安いプランで届いたのだと推測する。

Economy - 10-20 Working Days - No tracking available

早速、接続していろいろ触ってみた。結論から言って ubuntu 22.04 で fido2 pin を設定して u2f を使って2要素認証のメソッドとして pam や web アプリケーションから問題なく使えた。ubuntu 向けのアプリケーションも ppa のリポジトリを追加して apt からインストールできる。

このドキュメントには次の4つのアプリケーションのインストールが書いてある。

  • YubiKey Manager (CLI): sudo apt install yubikey-manager
  • YubiKey Personalization Tool: sudo apt install yubikey-personalization-gui
  • libpam-yubico: sudo apt install libpam-yubico
  • libpam-u2f: sudo apt install libpam-u2f

yubikey は他にもいろいろな認証の用途に使えるらしい。今回は fido2 の設定のみを紹介する。fido2 pin を登録するには YubiKey Manager の GUI を使った方が簡単なので次のアプリケーションも一緒にインストールするとよい。

$ sudo apt install -y yubikey-manager-qt
$ ykman-gui

おそらく ykman の cli でも登録できると思うけど、yubikey や認証設定に慣れていない初心者は gui のナビゲーションに従って作業して結果を確認した方が安心だと思う。fido2 pin は ssh でいうところのパスフレーズのようなものなのかな?デバイスが盗まれるのを防ぐために pin があるという。一方で web アプリケーションが fido2 で認証するときに pin を要求するかどうかは任意になるらしい。よくあるパターンは初めて使うときは pin を要求して2回目以降はスキップするといった用途が多いのではないかと推測する。

この fido2 pin を使って Universal 2nd Factor (u2f) の設定を行う。

$ mkdir -p ~/.config/Yubico
$ pamu2fcfg > ~/.config/Yubico/u2f_keys
Enter PIN for /dev/hidraw3: ***  <= このときに yubikey manager で設定した fido2 pin を入力

この後 yubikey デバイスが点滅するので丸いセンサー部分を指でタッチすると完了する。このときに指紋登録しているのか、物理的にタッチすることを要求しているだけなのか、よくわかっていない。この前に chrome で指紋登録 をしていたのでそれが使われているのかもしれない。いま ykman で設定をみたら Fingerprints registered とあるのでどこかしらに指紋登録されているらしい。おそらく chrome じゃないかと推測する。

$ ykman fido info
WARNING: PC/SC not available. Smart card (CCID) protocols will not function.
PIN is set, with 8 attempt(s) remaining.
Fingerprints registered, with 3 attempt(s) remaining.
Always Require User Verification is turned on.

linux で認証時に u2f を使いたいときは pam_u2f.so を使って pam の設定をするとよい。ubuntu だと /etc/pam.d/ 配下にいろんな認証設定がある。例えば login 時に2要素認証をしたい場合は次のようにフックする。パスワード入力した後に yubikey のセンサーを物理的にタッチして指紋認証を行える。セキュリティに厳しい会社はこういった運用をしているのかもしれない。

$ sudo vi /etc/pam.d/login
...
# Standard Un*x authentication.
@include common-auth
auth       required    pam_u2f.so

パスワード認証の代替として使いたい場合は通常の認証の前に sufficient として呼び出せば指紋認証が成功したときにそれ以降の処理がスキップされる。

auth       sufficient    pam_u2f.so
@include common-auth

これらの設定を確認にするには pamtester というツールを使うと簡単にできる。認証の設定を誤るとログインできなくなってしまうので慎重にテストして振る舞いを確認した上で実際の運用を行うとよい。

$ pamtester login t2y authenticate  <= このときに yubikey デバイスが点滅するので指紋認証する
pamtester: successfully authenticated

せっかく購入したので 1password アカウントや github の2要素認証に設定してみた。ワンタイムパスワードの otp の代替として使える。ワンタイムパスワードを入力するより yubikey のセンサーをタッチする方が日々の運用としては少しお手軽と言える。設定していて otp と yubikey でお互いに2要素認証のバックアップを兼ねることに気付いた。認証方法が増えるのでセキュリティ的には脆弱になるけれど、サービスとセキュリティのトレードオフの考え方から、yubikey の分だけ脆弱になっても物理的なセキュリティを担保できるのであれば利便性を考慮してよいように私には思えた。

第4期のふりかえり

今週は19時に帰ってきてそれから晩ご飯を食べて家でくつろぐという生活に戻ってきた。生活に余裕をもてるようになってきた。

隔週の雑談

顧問のはらさんと隔週の打ち合わせ。先週はリリース前の余裕の無さからお休みしたので1ヶ月ぶり。今日の議題はこれら。

  • 第4期のふりかえり
  • デザイナーさん向けの発注や契約の話し

先週末にふりかえり資料の叩き台を作って洗練させた資料を説明していたら1時間ほどかかった。もう3年会社を経営したので財務や経営についてわかったことがたくさんある。会社の貯金もある程度貯まって財務が安定してきた。無知の無知が怖かったので創業以来、財務に注意を払ってきた。しかし、これから業務がプロダクト開発へ移行していくに当たって財務のことを気にかける必要はないと私は考えている。そんな油断をしていると足元をすくわれるのかもしれないが。

業務委託の契約の話をしていて、請負契約と準委任契約の違いについて話題になった。うちは創業以来、準委任契約でしか働いてきていない。ipa が公開している 情報システム・モデル取引・契約書(アジャイル開発版) でもアジャイル開発は準委任契約を推奨している。私も開発プロジェクトに入って柔軟に開発するスタイルを好むことから相性がよかった。うちの会社は準委任契約のメリットを十分に理解できている。

準委任契約のメリット

  • 成果物の取り決めがないので納期へのストレスや開発遅れに対するリスクが小さい
  • がんばって働けば人月単価の金額が毎月売上としてあがる

準委任契約のデメリット

  • 普通のサラリーマンと働き方がほぼ変わらない

はらさんと話していてとして請負契約の特徴として次のようなことが上がった。

請負契約のメリット

  • 請負契約の方が儲かる可能性がある
  • 自分たちが実際に作業しなくても協力会社に発注できる

請負契約のデメリット

  • 成果物ができないと売上が上がらず利益率が悪化したり、赤字になるリスクがある
  • 納品しないと売上が立たないので資金繰りが難しい

私の基本的な姿勢として協力会社に開発の業務を発注したくない。とくに品質レベルを知らない協力会社に発注することは100%ない。それは私が sier 出身なので他社へ開発を発注するときの難しさや管理のしんどさをよく知っているからだ。私が sier を辞めた理由の1つに自分がミスしたわけでもないのにお客さんに謝り続けるのが嫌になった。開発を他社へ依頼するとそこで発生した不具合やトラブルのすべての責任をもたないといけない。自分がミスして迷惑をかけて謝るのはなにも苦にならないが、他人がミスしたものを自分の責任として謝るのが当たり前の生活をやっていると、私の方がもっとうまくやれんじゃないかと考えてしまったりした。1人だと開発はスケールしないが、他人が品質の低いもの作ってしまうのと比べて開発の満足感が違う。

いずれにしても請負契約は双方に体力がないと資金繰りが厳しくなってお互いにリスクがある。

また資金調達の手段としてのクラウドファンディングは複数の側面があっていいんじゃないかという話題も少し盛り上がった。少し前に私もいとうさんのプロジェクトの応援のために支援した。800,000円という目標金額に対して残念ながら665,540円と未達ではあったものの、76人もの支援者がいることがわかる。私がクラウドファンディングのプロジェクトを作ってもおそらく支援者はよくて数人といったところだろう。いとうさんのメディア力であったり信用のすごさがわかる。クラウドファンディングやってますというのが支援することに関心がなくてもシェアするだけで開始前からマーケティングメッセージになる。そんなプロジェクトがあるんだというのを知ってもらうだけでも大きなことだと思う。

開発合宿の計画づくり

昨年度に workcation と称して行ってきたイベントを今年度も行う。いとうさんから2泊3日のようなちゃっちいイベントをワーケーションと呼んだりしないと教えてもらったので今年は開発合宿と呼ぶことにする。タグも新規に camp に付け替える。前回は6月という閑散期に行って空いててよかったのだけど、今年は最も賑わうという冬の繁忙期に行ってみたい。夏と冬だと情緒も変わるはずなので私にとってどちらがよいかも判断してみたい。身近な人たちから声をかけて、昨年は4人だったが、最大13名泊まれるそうなのでもう2-3人ほど増えてもいいんじゃないかと思ったりしている。まずは日程調整からしていかないといけない。

docker image のマルチプラットフォーム対応

22時に寝て0時に起きてやや吐き気で苦しんで4時に起きて7時に起きた。夜遅くに食べてないのに調子悪かった。

docker image のマルチプラットフォーム対応

やぎさんが docker buildx でマルチプラットフォームのイメージを作成する の記事を書いてて buildx プラグインがあることを知った。ちょうどいまお仕事でコンテナベースのプロダクトを開発している。まずはオンプレミス向けが対象なので amd64 でビルドしていた。今後はクラウド向けにも提供していくので arm64 ビルドもいずれ追加しないといけないと考えていた。ちょうどリリースを終えて調査時間の余裕があるのでこの機会に buildx について調べてみることにした。

Docker Engine 23.0 release notes をみると次のように書いてある。

  • Set Buildx and BuildKit as the default builder on Linux. moby/moby#43992
    • Alias docker build to docker buildx build. docker/cli#3314
    • The legacy builder can still be used by explicitly setting DOCKER_BUILDKIT=0.
    • There are differences in how BuildKit and the legacy builder handle multi-stage builds. For more information, see Multi-stage builds.

23 からデフォルトのビルダーとして buildx が使われるようになっているらしい。Building multi-platform images を一通り読んで試してみた。

buildx ではカスタムビルダーを定義して複数プラットフォーム向けの docker image を一緒にビルドできる。このとき個々のビルド環境を builder instance と呼び、ビルド環境を抽象した概念として扱われている。マルチプラットフォーム対応の文脈で言えば amd64 や arm64 のビルド環境をそれぞれに作る。例えば amd64 のマシン上で arm64 のビルド環境を作るときは qemu を使ってエミュレーションしたビルド環境を用意したりもできる。builder instance はカスタムビルダーで制御する。

$ docker buildx create --name mybuilder --platform linux/amd64,linux/arm64
$ docker buildx ls
NAME/NODE    DRIVER/ENDPOINT             STATUS   BUILDKIT PLATFORMS
mybuilder    docker-container
  mybuilder0 unix:///var/run/docker.sock inactive          linux/amd64*, linux/arm64*

ここで作ったカスタムビルダーの driver は、デフォルトビルダーの docker ではなく、docker-container になる。おそらく builder instance の実体であるビルド環境がコンテナ上に構築されるのだと思う。これらの builder instance を使ってビルドされる。カスタムビルダーをデフォルトで使うには次のように実行する。

$ docker buildx use mybuilder

このカスタムビルダーを使って docker image をビルドする。カスタムビルダー側にプラットフォームの設定をもっているので --platform は指定しなくてもよいけど、明示した方がわかりやすいだろう。

$ docker buildx build --platform linux/amd64,linux/arm64 -t myimage:latest .

ビルドの処理は進んでいたが、正常終了しなかったので途中でやめた。なにか設定の漏れがあるかもしれないが、だいたいの雰囲気はつかめた。

ここでいま gitlab ci/cd 環境では kaniko というツールを使って docker image をビルドしている。そもそも kaniko と buildx の違いもわからなくなって README を読み返すと次のようなことが書いてあった。

kaniko は Docker デーモンに依存せず、Dockerfile 内の各コマンドを完全にユーザースペースで実行します。これにより、標準的な Kubernetes クラスタのように、Docker デーモンを簡単かつ安全に実行できない環境でもコンテナイメージを構築することができます。

ローカルで検証しているとしばしば忘れてしまうが、docker cli を使うには docker daemon を起動しておかないといけない。ci/cd におけるビルド環境がそもそも dokcer で動いていたりすると docker daemon を使えるかどうか (dind: docker in docker) はセキュリティ上の大きな違いになってくる。ci/cd 環境によっては docker daemon が使えないという状況はありえる。そういった環境でも docker image をビルドできるのが kaniko のメリットと言える。

kaniko はマルチプラットフォーム対応なビルドができるのかどうか?issue でもそういった質問がいくつかみつかる。

結論から言うと、kaniko そのものはマルチプラットフォーム対応のビルド機能をもっていない。アーキテクチャごとのビルド環境があればそれぞれビルドするだけになる。しかし、マルチプラットフォーム対応の docker image というのは manifest list というのを作ってコンテナレジストリに push すればよいという仕組みらしい。この manifest を作るためのツールとして manifest-tool というのがある。このツールと組み合わせれば、kaniko でもマルチプラットフォーム対応の docker image をコンテナレジストリに登録できる。実際に試したわけではないので想像で書くが次のような手順だと推測する。

  1. kaniko でそれぞれのプラットフォームの docker image をビルドする
    1. amd64 向けにビルドする => latest-amd64
    2. arm64 向けにビルドする => latest-arm64
  2. ビルドされた複数プラットフォームの docker image に対して manifest-tool でコンテナレジストリに push する
    1. latest- prefix のタグをもつ docker image の manifest list を作る
    2. manifest list を使ってコンテナレジストリへ push する

ci/cd 環境でこういった手順のパイプライン処理やジョブを定義して実行すれば kaniko でもマルチプラットフォーム対応な docker image を push できると思う。

とりわけて書くことのない日

1時に寝て何度か起きて7時に起きた。昨日は23時半に帰ってきてから十割蕎麦を茹でて食べたけど、吐き気はなかった。蕎麦ぐらいなら大丈夫か。

開発方法論の見直し

開発が一区切りしたタイミングで開発方法論やガイドのドキュメントも見返して、過去に作ったときからみて現状の内容や気付き事項などを加筆修正していた。これを繰り返すうちに開発文化が言語化できていく雰囲気はする。その後は issue の洗い出しや1on1 やってインストール手順の検証やドキュメントの更新などをしていた。これと言って成果を出した一日ではなかったものの、wiki をあちこち更新して整理していたらいつの間にか時間が過ぎていたという所感。

歯科検診

17時から歯科検診へ行ってきた。いつも通り歯のお掃除をして1年ぶりに歯のレントゲンを撮ることになった。新たにレントゲンを撮る機械が導入されていて、台に顔を置くとカメラが顔周りを移動してレントゲンが撮られた。これまでは位置固定のための器具を噛んでパシャパシャ撮るやり方だったので面倒だったのが便利になっていた。帰りにカードリーダーが置いてあることに気付いて、受付の担当者さんに尋ねたら、マイナンバーカードに保険証を設定すれば使えることを教えてもらった。次回はマイナンバーカードで保険証提示をやってみたい。

プロダクトのリリース

0時に寝て6時半に起きた。朝起きてからドラクエタクトしてた。

リリース

今日がプロダクトのリリースとなる。先週前半にはテストを完了して開発作業も終えてインフラの整備やドキュメントの作成に注力してきたのでここ数日の様子をみれば無難に順調にリリースできたようにみえる。結果からみれば「余裕でしたね」とコメントされても大きく外れてはいない。6ヶ月でやってと言われた開発を、3ヶ月目に5ヶ月でできると勝手に短縮して、4ヶ月目にやっぱ間に合わないからもう1ヶ月待ってと6ヶ月に戻した。一人時間差攻撃みたいなマネジメントをして完了した。ここ2ヶ月ほど私がいくつか開発やデバッグを肩代わりをして開発の下支えをした。別に私がやったらいけないという制約はないけれど、メンバーの教育も含まれているプロジェクトなのでなるべくメンバーが経験を積んでスキルを磨くのが望ましい。この件はちょっとズルしましたと進捗報告している。まずはうまくいって安心した。

ともあれ、私がプロジェクトマネジャーという肩書きをもって臨んだプロジェクトで概ねスケジュール通りに開発を進捗させてお客さんの要件にあったプロダクトを作り上げたことそのものが、私のキャリアにおいても重要なことであるし、うちの会社では課題管理という分野をビジネスの中核にしていく上での最初の実績として大きな意義のあるプロジェクトだった。課題管理はチーム開発において強力な武器になる。これまでの自分と、そう大きく変わらない働き方をマネージャーでやっても結果を出せたことは自信にもつながる。

この後は6ヶ月間の大きなふりかえりも控えていて、課題管理に溜まったデータを分析して、次開発への改善などにもつなげていこうと思う。過去の経験則では課題管理の価値を実感してもらうのに半年はかかるというのが私の持論。それは比較的、最初から課題管理システムを使えていたうちのチームでも同じだと思う。私がやっている課題管理とメンバーのそれとの違い、その違いによる実際の業務における成果などを分析していくと示唆を与えられるのではないかと思う。

リリース前日

22時頃から寝て何度か起きて7時に起きた。久しぶりに夢をみた気がする。オフィスに着いた頃にはもう覚えていないけど。

リリース前日

プロダクトの開発、テスト、パッケージングとすべて完了していてドキュメントや社外に提供するためのインフラの仕組みの作業を行っている。これはリリースまでに出来ていなくてもプロダクトが動かないわけではないのでリリース後もしばらくは継続する。今日は運用ツールのちょっとしたリファクタリングをしたり、コードレビューをしたり、windows インストーラーの調査をしたりと、なんやらかんやらで忙しかった。

示唆を与えなければならない

ここ1ヶ月ほど私がクリティカルパスの作業を担ってきたのでメンバーの作業を落ち着いてみる余裕がなかった。たまたまというか、私がクリティカルパスから脱したことでメンバーのレビューやアドバイスを行うときの余裕も戻ってきた。CSK の新人研修で習うことに社是と経営理念とサービス精神という言葉がある。

サービス精神

  • お得意様にあくまでも満足していただく技術を提供しなければならない
  • 技術は高度で専門的でなければならない
  • 仕事は正確に、かつ迅速・効率的に行なわなければならない
  • 常に、お得意様の利益を考え、示唆を与えなければならない

新人研修ではこれらを暗唱して暗記させられる。20年以上経ったいまでも覚えている。もともと私の考え方にあっていたのか、それとも新人の頃に刷り込まれたのか、その両方なのか。いま見返すと私の課題管理の考え方とこのサービス精神には共通しているところもある。その上で最後の 「示唆を与えなければならない」 という言葉を、今日メンバーとやり取りしているときにふと思い出した。

アドバイスをしていると、なぜこの懸念を考えずに作業を継続してしまったのだろうか?と思う機会がちょくちょくある。そのときに質問してその背景を尋ねたり、効率や保守のための考え方を教えたりする。ふと私が指摘しなかったらそういった効率や品質の低い結果のまま進んだのだろうと推測される。当たり前の話しだが、意識的にしろ無意識にしろ、個人では気付けなかったフィードバックや示唆を与えてくれる人がいなかったら個人の能力では限界がある。気付きがないところに学びも改善もないから成長もしない。いまお手伝いしている会社はこれまで個人でやってきた働き方を、チームで協調して働くように変えていきたいという話しから始まった。私自身、どちらかと言えば個人主義の働き方をしてきた方でチームでの働き方をちゃんと教えられるか、当初はあまり自信がなかった。半年やってきて、チームで働く上で必要なことはメンバーのアウトプットに対して質問するだけでよかったんやと理解できるようになってきた。個人の視点しかない働き方と他者の視点から常にツッコミが入る働き方はまったく異なる。うちのメンバーをみていて、まだまだ道半ばではあるが、それまでの状況と私が啓蒙している課題管理は、おそらく根本的に働き方を変えてしまっていることにようやく私の理解が追いついてきた。