日記

日々のことと、Python/Django/PHP/Laravel/nodejs などソフトウェア開発のことを書き綴ります

フリーランスになって、7年が過ぎた

仕事の都合上、書ける話題が少なく、例年より遅めのログです。

昨年の記事はこちら。

tnamao.hatenablog.com

粛々と振り返ります。

7年目のお仕事

2021 年も前年に続いてコロナ禍の1年でしたが、ワクチン接種も広がり、前年の重々しい空気感は少し和らいだのかなと思います。

  • 某ゲームの公式サイト保守
    • タイミング的に去年の記事にも書いていましたが、2021 年の春頃で契約が終わりました。
    • 保守契約でしたが、その時の仕組みの枠の中では改善できることも、ほぼやり尽くした感じもあり、よくこれだけ長く契約していただけたな、と感謝🙏
  • 某社・業務システム
    • サーバサイドは何年ぶりだ?というくらいの Java で書いてました。
    • 契約継続の話もいただいてましたが、夏過ぎくらいで一区切りということで案件を離れました。
    • 無事に公開された模様ですが、詳細は書けません🤫 お世話になりました🙇‍♂️
  • NICTER NIRVANA 改の改修案件
    • 仕事の直接の契約先には、名前を出していいと言われていますが、いつの間にか消えていたら察してください🙇‍♂️
    • NICTER NIRVANA というシステムは、企業などのネットワークにて外部から攻撃を受けていないか、内部に怪しい動きをしている端末はいないか、などをパケットの可視化をするなどし、発見し、アラートなどを表示するものです。(もっと色々なことができるのかもしれませんが)ビジュアライザーのエフェクトがエヴァとか攻殻機動隊風で可視化されるので、Interop で最初に公開されたときは、ニュースサイトでも割と大きめの扱いをされていました。
    • ビジュアライザーの WebGL 版の改修案件で、NICTER のセンサーシステムから流れてくるパケットを良い塩梅に変換して、WebGL 版のクライアントに渡してあげるものの実装が主な担当でした
    • Ethernet / IP / TCP | UDP | ICMP のヘッダーを直接扱いごにょごにょして返しているわけですが、このレイヤーのヘッダーを直接扱うなんて、いつ依頼だ?などと思いながら開発してました。バイナリデータを扱うことも少ないので、逆に新鮮でした。
    • テスト用にキャプチャしておいた pcap ファイルのヘッダーを書き換えて、対象ホストに流すようなものを Go 書いたりもしました。pcap はパケット解析には使うけど、こういう使い方はなかなかしないよなぁ、と思いつつ…。
    • こちらの案件は予定よりも自分の担当分は区切りがついて、年初には案件からは離れました。

いま現在は時雨堂のお手伝いということで、Tobi というサービスを作ってます。

tobi.shiguredo.jp

まだフル機能ではありませんが、先日、アーリーアクセス版として、サービスが公開されました。 ある程度の帯域と同時接続数で、転送容量を気にする必要がなく、ほぼフルスペックの Sora を使えるのはハマるところにはハマりそうです。

技術的な話

Python

気がつけば、型ヒントは広範に使われるようになっているみたいで、Flask で Web API を実装するときに Pydantic は思った以上によかったです。 Pydantic は Fast API でも使われている、データバインディングとバリデーションのフレームワーク(ライブラリ?)です。

Django の Rest framework は、serializer がイマイチという話をよくしますが、それと比較すると型ヒントの上に成り立っている Pydantic はすごく使いやすい印象です。

Python 3.10 以降の高速化は結構良いみたいで、今後も期待してます。

Go

最近、サーバサイドのコードは Go です。ほぼ。

前述の Tobi では HTTP リクエストの受け口に Echo を使って、DB アクセスは sqlc を使っています。 sqlc は、SQL 文から Go のスタブを作ってくれるジェネレータです。 型安全なコードが生成されるので、その点は楽に使えます。 動的なクエリが必要になった時に、どうなるか未知数ですが、今のところは便利。

動的クエリまで考えると、S2Dao は偉大だったと改めて思い出すなど…。やっぱり SQL ファイルの中に分岐かけるのはずるい。

あと Tobi での Sora 監視の都合もあり、Sora Exporter というものを作りました。shiguredo 配下なので、一応オフィシャルということになります。

github.com

元は、johejo さんのリポジトリ でフォークさせてもらったものをメンテしています。

TypeScript

フロントエンドと言えばこれですが、事情が変わって来てます。

Tobi は Cloudflare Workers も上手く使っています。 Cloudflare Workers でサポートされるのが nodejs の環境であり、ほぼほぼサーバサイドの処理(エッジコンピューティング)も TypeScript になっています。

Tobi の場合は、Cloudflare Workers 上で Remix をフレームワークとして使い、システム管理画面を作っています。(エンドユーザー向けの画面ではなく、システム管理者向けの画面ですね) 普通に React のコンポーネントとステートを使いながら画面を作っているので、エッジで HTML が出力されています。新しい PHP みたいな感覚で考えたら大体大丈夫かなと思います。

エッジで実行されるので Fetch API をコード中で読んでも、ブラウザ上は直接バックエンドの API を呼ぶわけではありません。 Chrome の dev tools のネットワークタブに通信が表示されなくて、うーん?と悩んだ後に、Remix はそういうのじゃなかった、と脳が混乱するのが最近の悩みです。

インフラのこと

Tobi は色々なサービスを作って構築されており、何かわからないけど繋がらない時に、どこで問題が出ているか見つけることが困難です。 そのため、かなり細かくメトリクスを取り、監視をしています。

例えば、Sora API を呼ぶ時には…

  • Cloudflare の色々
  • Cloudflare Workers
  • アカウント確認のバックエンド API 呼び出しとして
  • Sora API の呼び出し
    • DataPacket の専有サーバ

大雑把に上記の流れを辿ってから、呼び出し元にレスポンスが返ります。 既に この流れの中にはいませんが、開発中に Vultr のマネージドロードバランサーが障害 で、1/3 でエラーを返すようになりました。 その時にどこで障害が起きているのか判明するまで結構時間がかかったのが教訓になっています。 (所謂、ゾンビ状態だったので本当にタチが悪かったです)

各サービスやインスタンスの監視には Victoria Metrics を利用しています。

victoriametrics.com

VictoriaMetrics は、簡単に言ってしまうと Prometheus のクローンということになります。 しかしただのクローンではなく、メトリクス保管用の時系列 DB がオリジナルより長く保持できるように設計されていたり、Prometheus のコンポーネントを分解し、個々のサービスとしても動かせるようにしたものです。 コンポーネントを分解することで、例えばメトリクスの収集部分を冗長化したり、ストレージ部分をクラスター化したりなどが行えるようになっています。

設定や PromQL も、Prometheus と大体一緒なので、そんなに巨大な Prometheus のノードでなければ置き換えはスムーズにできると思います。(でも非互換な箇所もあるよ)

Vultr の $6 のインスタンスで、50弱のターゲットからメトリクスを収集してますが、CPU 利用率も低いし、メモリ使用量も特段怪しいところもないので、安定して動いています。

この Tobi のインフラはまた別の機会に。

お金の話

収入

2021 年もほぼ途切れることなくお仕事をいただけて、無事に過ごせました🙏

2022 年は早々に案件の途切れ目とかもあったので、減収する見込みです。

税金など

  • 3月 所得税(確定申告時)
  • 3月 消費税(確定申告時)
  • 4月 国民年金保険料
  • 6月 住民税
  • 7月 国民健康保険
  • 7月 予定納税
  • 8月 個人事業税
  • 11月 予定納税

去年と変わりません。

会社員とは違い直接納税していることもあり、ここ最近、国税局職員が給付金詐欺をしていることにイラッとしております。

節税

変わらず退職金の積み立てと、iDeCo を継続しています。

iDeCo の運用益は、見なければ凹むこともないし、売らなければ損もしない、という精神をモットーにしてます (´;ω;`)

減ったなぁ…←

支出

MacBook Pro 14 インチが発表されて購入しました。それ以外は特に大きい買い物もなく…。

iPhone も新しくなり、WiFi 6 になったので、WiFi ルーターも書いました。初めて ASUS のを使ってみてますが、悪くないです。購入当初はなぜか切断されることが多かったのですが、いまは非常に安定して動作しています。あれはなんだったのか。

たまにはアフィリエイトリンクを使おうと思ったら、在庫切れ。

場所取らないし割と良いです。使われているチップも良さそうなことを確認してから購入してます🙆‍♂️

RC 構造で広い部屋に住んでる人は、もっと上のグレードとか、2 台置きとかがおすすめです。

と思っていたのですが… もしかして販売終了している…?結構良いアクセスポイントだと思っていたのに…。

生活のこと

2021 年の秋に引っ越しを考えていましたが、物件が恐ろしいほどに少なく(不動産屋に聞いても動きが少ないと)、とりあえず断念しました。

引っ越し先は比較的近隣か、東京にこだわらず首都圏郊外かな。大きい公園があるところが良いので、北浦和あたりどうなんだろう。

まとめ

  • 売り上げは前年よりも少し下がった
    • 2021 年も下がる見込み
    • 贅沢はしてないので、生活には困らないはず…。そんなにものは買わないはずなのに出費は増えているのだよなぁ…。
  • 経費
    • 大きいところでは MacBook Pro / iPhone を購入
    • 固定資産の償却費がだぶついて来ているので、物品購入は計画的に…。
  • 生活
    • 健康に気をつけよう(継続
    • 引越し先を見つけよう(継続
  • 仕事内容
    • ほどほどにがんばろう