Posts for: #2022/03

第3期の年度末

0時に寝て6時に起きた。昨日に引き続き、日中はフロントエンドのバグ修正をやって午後は本番リリースの守り神みたいなことをやって、夜は請求書を作ってた。

年度末

今年度最後の請求処理をして本当に四半期が終わるんだなぁとしみじみと感傷に浸ってた。財務の試算表と貸借対照表を軽く眺めてた。今期は赤字なので別によいところはないんだけど、また振り返りをやろうとは考えている。貸借対照表を「ちんしゃくたいしょうひょう」と読んでいて間違ってますよとツッコミもらった。なぜか素で間違えた。お仕事終えてから焼き鳥屋さんに寄ってマスターと2時間ほど雑談して帰ってきた。

暇つぶしのフロントエンド開発

0時に寝て4時に起きた。起きてから sns のタイムラインを眺めてぼーっとしてた。

フロントエンド開発

先週からタスクがなくて (社員さんが多忙で今スプリントのタスク洗い出しができていない) だらだらしていて、来週から引き取ろうと思っている cdk 周りのインフラ構築の調査を事前に始めようかと考えていた。そういう話を社員さんにしたらフロントエンドの開発を手伝ってほしいと言われた。

種々雑多なフロントエンドの ui に関する改善要望が十数個あがっていて対応できないのでちょっとでもやってほしいという依頼。少し前に 初めてフロントエンド開発 に着手して、4つほど PR を送ってマージされた。にも関わらず、社員さんに「開発環境の作り方わかりますか?」と質問を受けた。ちょっときょとんとして「前に PR をいくつか送りましたが、なにか他にやらないといけないことがありますか?」と質問に質問で返した。社員さんもテンパっているのか、過去に私がフロントエンドの PR を出していたことを認識してなかったみたい。vue.js も nuxt も全くわからないので開発スタイルも以前のまま。

全然わからない。俺たちは雰囲気で開発している。

5つほど ui 改善のチケットを fix した。難しいことはわからないので私でもできそうな簡単なものから選択して直していった。そしたら、翌日のデイリースクラムで業務の人たちからすごい勢いで直してくれてるみたいにめっちゃ感謝された。もともと社員さんが他のタスクに忙しくていまできないって業務の人たちに前日断っていたタスク群を、いま手持ちのタスクが何もないので暇を持て余してますという私が fix しているんだから、世の中、訳がわからない。私は普段バックエンド開発している人間だから業務の人たちに感謝されることはおろか、やっていることさえ理解されない方なんだけど、たまに ui とか改善すると感謝されて嬉しいという気持ちは他の開発者よりも強いかもしれない。

backlog の認可の仕組み

0時に寝て6時に起きた。

backlog の oauth 2.0 の仕組み

ユーザー単位の API キーの他、oauth 2.0 の認可の仕組みもある。OAuth Grant Types は Authorization Code と Refresh Token の2つをサポートしている。

手順はざっくりこんな感じ。

開発者向けのサイトからアプリケーションを作成して認可コードのリクエストを送る。

https://YOUR-SPACE.backlog.com/OAuth2AccessRequest.action?response_type=code&client_id=xxx&redirect_uri=http://localhost:18080/callback

リダイレクト先に query='code=zzz' な認可コードが届く。それを使ってアクセストークンを取得する。

{'access_token': 'xxx',
 'expires_in': 3599,
 'refresh_token': 'xxx',
 'token_type': 'Bearer'}

有効期限が1時間のアクセストークンを取得できる。次のようにして認証をパスできる。

$ curl -s -H "Authorization: Bearer xxx" 'https://YOUR-SPACE.backlog.com/api/v2/space' 

基本的にはユーザー単位の認証しかなくてアプリケーションアカウントの運用はできないみたい。backlog の課金プランをみると、基本的にはユーザー無制限っぽいのでアプリケーションアカウントを一般ユーザーで作成すれば、運用上問題にならないからアプリケーションアカウントを設けていないのではないかと思う。お手伝い先の管理者にインテグレーション向けの専用ユーザーを作成して API キーを github の secrets に登録してほしいという依頼を出した。

backlog-github-integration-action を運用し始めた

2時に寝て6時半に起きた。

backlog と github のインテグレーション action の試験運用

昨日作った backlog-github-integration-action を早速お手伝い先の github リポジトリと backlog に導入した。いま暇な時期というのもあって、誰からもクレームが出なかった。この閑散とした間隙を「乗るしかない、このビッグウェーブに」というノリで導入して運用して既成事実を作る。ses でお手伝いに行って課題管理のツールを作っているというのは頭おかしいと思うけど、周りからクレームが出る前に電光石火で運用にのせてしまう。実際に運用で使うといくつかバグがあって、いま latest の docker イメージを使ってカスタム action が動いている。バグがあったら修正して、./gradlew jib (docker push) で新しい docker イメージを gihtub packages に push して、不具合があった pr のジョブを再実行すれば再現環境でテストもできる。いくつかバグ修正をした。実際の運用のデータを使うとばらばらとバグがみつかる。運用で実際に使われていないツールはダメ、絶対。

backlog-github-integration-action を作った

0時に寝て7時に起きた。丸一日開発していた。構想1ヶ月、実装2日といったところか。

backlog と github のインテグレーション action

お手伝い先が backlog を課題管理システムとして使っている。backlog は git 連携 の機能をもっているが、これは nulab 社のクラウド上に git リポジトリを構築したものと連携する機能であって、github と連携する機能ではない。そこで github と backlog と連携するためのカスタム github action を作った。

カスタム github action を java で開発するのは普通にはやらないと思うが、いくつか理由があってお手伝い先が java しかできないというのと、nulab 社が提供している公式クライアント nulab/backlog4j が java しかないから。最初は go で実装しようと思って go のクライアントを試したんだけど、サンプルコードをかいたら一部の処理でエラーになって、そのエラーがよくわからなくてやる気がなくなってしまった。最新の rest api の仕様にそってメンテナンスされていないのかな?と思って、やっぱり公式クライアントしかないなと。他にも次のライブラリを使っている。

これまでは commons-cli を使ってきたけど、サブコマンドの機能を提供していない。もうメンテされてないかも?サブコマンドの機能をもつ argument parser がほしくて picocli を選択した。初めて使っていて、実装してみたらわりと私の好みでよく出来ていると思う。今後は cli ライブラリとして picocli を使っていこうと思う。

まん延防止等重点措置解除後の飲み会

0時に寝て2時に起きて5時に起きた。日中は昨日から着手したカスタム github action の開発をしていた。

ストレッチ

今日の開脚幅は開始前161cmで、ストレッチ後165cmだった。今日は右股関節の違和感と左の腰の張りが強かった。今週は少しだけストレッチをやった。お仕事が落ち着いてきて次の課題への谷間で気力が削がれていてメリハリがなくなっている。また生活を見直しつつ運動やストレッチに時間を割くようにしていきたい。

会員制バーで雑談

1月に行って からの再訪。前回はまん延防止等重点措置が実施される前だったのでお客さんはうちら2人だけだった。今回は解除された直後だったせいか、うちらの他に4人お客さんがいた。バーのマスターと友だちというわけではないけど、同じ経営者として経営がうまくいくといいなと思ってしまうのでお客さんが入っていると嬉しく思う。地域コミュニティを主催しているすみよしさんと一緒に行ってきた。今回はコースではなく、適当に料理も頼みながら普通に飲んでた。電話で予約をとったときに食べものについて確認したせいか、マスターも気をきかせて前菜を用意してくれていたみたい。前菜とパスタとおつまみでわりとお腹がふくれて、あとはお酒を飲んでた。

すみよしさんとは2020年から勉強会に参加したりしていたのでもう2年ぐらいの付き合いになる。わりと仲良くなってコミュニティの在り方とか、神戸界隈のベンチャー情報とか、新しい技術のあれこれとかを話したりしている。飲みながらざっくばらんにそういった雑談をしていた。

カスタム github action 開発に着手

0時に寝て6時に起きた。

歯科検診

3ヶ月ごとの定期検診。本音は行くのが面倒くさいのだけど、こういう機会がないと検診に行かないので健康のためと思って通い続けている。基本的には30分強ぐらいで歯の掃除?みたいなことをやるだけ。下の歯の親知らずをまだ抜いていなくて、歯磨きでは届かないスポットがあって、そこが虫歯になりやすいのかな?3ヶ月に1回は掃除してもらえるのでたぶん役に立っているのだろう。今回は前にレントゲンをとって2年経ったので取り直ししましょうということで歯のレントゲンもとった。この歯医者さんにきてから2年経ったんだなということを実感した。よい歯医者さんだと思っているのでこれからも通うだろう。

カスタム github action 開発

前からやろうやろうと思っていて、他のことに時間を割かれてできていなかったことに着手した。久しぶりに gradle を触ったら使い方や設定方法を忘れてしまってドキュメントを読みながら再入門した。1つのアプリケーションであってもマルチプロジェクト構成がデフォルトになったみたい。これによってディレクトリの階層構造も変わっている。

今日のところは gradle 設定と main 関数と config のコードだけ書いた。java のバージョンも17を使うことにした。週末にある程度動くものを作りきれるかどうか。着手するまでが一番時間がかかので着手すればすぐにできそうな見通しはある。

spring boot の環境とログ設定

0時に寝て4時に起きて6時に起きた。

spring のプロファイル設定

spring の Profiles の仕組みを使って環境ごとの設定を作る。デプロイは k8s で管理しているため、spring boot の Externalized Configuration の仕組みを使って、環境変数から application.yml に定義された設定を書き換える。k8s は kustomize で管理していて prod, test, dev の3つの環境で任意の設定を記述できる。

問題はログ出力の設定を環境ごとに変えたい。具体的には datadog に連携されるログは構造化ログ (json lines) を、ローカルの開発ではコンソールログをみたい。Log4j Spring Boot Support によると、1つの設定ファイルに複数のプロファイル設定を記述できるようにもみえるけど、実際にやってみたらうまく動かなかった。xml ではなく yml を使っているせいかもしれないし、私の記述方法が誤っているのかもしれない。いずれにしても yml で複数のプロファイルを設定しているサンプルをみつけられなかった。

そこで Different Log4j2 Configurations per Spring Profile をみて、環境ごとにログ設定ファイルも分割することにした。application.yml には次のように記述する。

spring:
  profiles:
    active: dev

logging:
  config: classpath:log4j2-${spring.profiles.active}.yml

ローカル開発向けの lgo4j2-dev.yml は次のようになる。

Configuration:
  status: warn
  name: YAMLConfig
  appenders:
    Console:
      name: STDOUT
      target: SYSTEM_OUT
      PatternLayout:
        Pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS}[%t]%-5level %logger{36} - %msg%n"

k8s のマニフェストで環境変数を次のように定義すれば prod というプロファイルが設定される。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-service
spec:
  template:
    spec:
      containers:
      - name: my-service
        env:
        - name: spring.profiles.active
          value: "prod"

クラウド環境向けの log4j2-prod.yml は次のようになる。

Configuration:
  status: warn
  name: YAMLConfig
  appenders:
    Console:
      name: STDOUT
      target: SYSTEM_OUT
      EcsLayout:
        serviceName: my-service
        serviceNodeName: null
        includeMarkers: true
        KeyValuePair:
        - key: type
          value: app

暇な一日

23時に寝て3時に起きて5時までだらだらしててそのまま起きた。

タスクがない

開発のロードマップ全体の計画が遅れているのに私のタスクが全くないみたいな状態になっている。昨日、開発のリーダーにタスクがないので適当なタスクをアサインしてくださいとお願いして、すぐアサインされるんだと思ってたら1日待ってもアサインされなかった。現スプリントのチケットはたくさんあるのにアサイン可能なチケットがないのか、アサインしなくても他の開発者で間に合うのか、その両方なのか、開発チームは5人いて、そのうち4人が外部の協力会社になる。私の感覚的には2人は余剰でタイミングが悪いとタスクがないみたいな状況になる。期限までにやらないといけないことは溜まっているのに。

workrooms 雑談

月に1回の はんなりPython メタバース会 #4 に参加した。workrooms で雑談会するのもだいぶ慣れてきた。毎月1-2回はやっている。Brave というプライバシーを重視したブラウザがよいみたいな話しがあって、とくに Brave Talk のビデオ通話がよく出来ているという話しがあった。課金しないと4人まで参加できて、$7/月でプレミアムプランになるみたい。コミュニティ用途なら zoom から Brave Talk に移行した方がよいとまで言ってたので、そんなによいものなのか、また後日触ってみたいと思う。

イベント登壇のススメ

1時に寝て7時に起きた。今日も雨。雨降りの日が増えると春が来たなって感じがしてきた。

cfp のススメ

先日、過去に私が jjug ccc に登壇した資料を紹介していて、そう言えば jjug ccc とかいまぐらいの時期かな?と思って調べたら、ちょうど3月27日が cfp の締め切りになる。「ぼくのかんがえたさいきょうのでぷろい」は java アプリケーション開発の基本には沿っていないやり方なので発表したらおもしろいかもしれないと、slack に軽く書き込んだらわりといいねが付いたので社員さんに cfp 送ったら?と勧めた。その社員さんは島根県在住なのでリモートで登壇できるならいいかも?という話しになってイベントの要項を確認したらオンライン開催なので大丈夫そう。

今日がスクラムのプランニングだったのでチームに共有して業務として cfp を送るための工数も確保した。私が発表してもよいのだけど、なるべく若い人がイベントに登壇すべきだし、業務でやったことはその会社の人が発表すべきだろうというのもあって、私はバックアップにまわって発表は社員さんに任せようと思う。今月末に事例紹介させてほしいという交渉をする予定なので、それがうまくいったら、技術協力として当社のクレジットだけスライドに入れてもらえればみたいところが私の狙い。いずれにしても cfp が採択されないとその展望もないので cfp 作りにも協力していきたい。

github actions の課金金額

2時に寝て何度か起きてだらだらしながら10時に起きた。

gihtub-api-tools のリファクタリングとデータ分析

実際に使ってみながらリファクタリングしたり、足りない機能を追加したりした。ツールに拡張した機能が使えるかどうかの検証のため、お仕事のプライベートリポジトリのデータを使って分析をし始めて、気付いたら分析ならびに分析結果の資料まで作ってしまった。軽く半日ぐらいのお仕事をやってしまっていた。過去5ヶ月分の課金時間の合計を算出し、単体テストの実行を github actions に追加することで増える課金時間の見積もりと金額を算出した。月間でいまより3時間30分、全体の課金時間に対して20%弱程度の追加が見込まれる。それによる課金金額を算出すると 210 * $0.008 = $1.68 になる。いままで無料枠を超えないように運用してきたわけだが、こんな200円程度の金額を節約するために github actions 上でテスト実行しないといった判断がくだされていた。開発者は誰も実際の課金金額を知らなかったし、課金金額を算出するとあほらしくなった。あと github actions はめちゃくちゃ安い。