りんごとバナナとエンジニア

エンジニア修行の記録

【kubernetes】last-applied-configurationの役割とConfigMapのマージ戦略

先日、テスト環境上のKubernetesで、アプリケーションがDBに急に接続できなくなってしまった。GitHubのmasterブランチで管理している設定ファイルには全く変更がなかったので、原因をどう調べようか迷っていたところ、まずConfigmapのlast-applied-configura…

【Scala】再帰処理を末尾最適化するための考え方をSICPに学ぶ

Scala関数型デザイン&プログラミングでScalaと関数型プログラミングに慣れようとしている。最初の練習問題はn番目のフィボナッチ数を出力する関数を作るというもの。 はじめは以下のように書いた。 object Main { //@annotation.tailrec def fib(n: Int): In…

【Kubernetes】nodeSelectorでPodがassignされるNodeを指定する

会社のアプリケーションをローカルの開発環境で走らせようとして、manifestファイルを開発環境のClusterにapplyしたのだが、いつまで待ってもPendingのまま。 kubectl describe で調べてみると、Event欄に以下の表示が出ていた。 0/9 nodes are available: 3…

【CircleCI】Pull Requestを出した時のみビルドを動かす

先日チームでのリリースフローが変わり、それに合わせてCircleCIの設定を変えようとしていた。やりたいことは、Pull Requestを作成・更新した場合と、masterブランチにタグを打ったときのみビルドを走らせることだったのだが、公式ドキュメントを見てworkflo…

【Git】過去のコミットのメールアドレスを全て変える

Git

先日、開発に使う用のメールアドレスを新しく作ったのだが、今コミットしている自分の個人用レポジトリを git log で見ると、プライベート用のメールアドレスも混じってしまっていた。なんとなく気持ち悪いというだけなのだが、統一する方法はないかと調べて…

【Spring Boot】OpenAPI GeneratorのType Mappingで自作のドメインオブジェクトを使用する

Spring Boot + OpenAPI GeneratorでTodoリストのAPIサーバを作っている。OpenAPIでエンドポイントやリクエスト・レスポンスを定義するところは楽だったが、 OpenAPIで定義したリクエスト・レスポンスの型は自動で生成されたコードの中に定義されることがわか…

【Scala】Futureの落とし穴と参照透過性

最近同じチームのメンバーからScalaを教えてもらっている。この前は並列処理について教えてもらう機会があったが、彼はScalaの教本で最初に出てくるFutureはなるべく使いたくないという。なぜだろうと思っていたが、実際に小さなサーバをチームで実装してみ…

dotfilesのためのmake入門

最近自分のdotfilesを整備しているのだが、強い人たちのdotfilesを見ると、 make コマンドで実行するようになっているものが多いことに気がついた。 make は難しそうで敬遠していたが、少し調べてみるとdotfilesを作る時にとても便利であることがわかった。 …

【Kafka】--bootstrap-serverと--zookeeperの違い

Kafkaのコマンドを扱っていると、コマンドの種類によって --bootstrap-server を指定する場合と --zookeeper を使う場合とがあって少し混乱する。どう違うのかを調べてみた。 bootstrap-serverとは bootstrap-serverとして指定するのは、他でもないKafkaのbr…

KubernetesのServiceAccountを触って学ぶ

udomomo.hatenablog.com 以前RBACについての記事を書いたが、Rolebindingで権限を付与できる対象は複数ある。以前の記事では人に対して与えられるUser Accountについて書いたが、Pod内で動くコンテナのプロセスに対して与えられるService Accountというもの…

OpenAPIでRestfulAPIの仕様を定義する

一時期会社の他チームで、OpenAPIを取り入れようと検討されていた時期があった。結局他の開発業務が立て込んだため採用はされなかったのだが、API開発の一手法として興味があったのでちょっと使ってみた。 OpenAPIとは OpenAPIは、RestfulAPIのインターフェ…

tmux 3.0でコピーモードの設定を行う

先日、tmuxを久しぶりに使う機会があった。 tmux.conf の中身は、以前ネットで拾ってきたものをそのまま使っていたのだが、設定内容を全然使いこなせていないうえ、あまりに久しぶりすぎて中身の意味もわからない状態になってしまっていた。そこで、思い切っ…

Kafkaのメッセージング方式の特長を学び直した

自社サービスでKafkaを使っており、自分でも少し触ったことがあるのだが、Kafkaというのがメッセージングにおいてどんな特長を持ったサービスなのかについては、topicを介してproducerとconsumerがメッセージをやり取りする、という程度の理解しかなかった。…

【Java】雰囲気でmockしていた自分のためのMockito再入門

Mockitoはテストの際に何度も使ったことがあるが、mockやspy, injectmocks等の用語の意味をなんとなくでしか理解しておらず、使う際に何度も詰まってしまっていた。このたび、公式ドキュメントを改めて読み直してみたのでまとめておく。 javadoc.io mockとは…

約1年間ブログを続けられている理由を振り返る

この記事は、write-blog-every-week Advent Calendar 2019の20日目の記事です。 ブログを定期的に書くようになって大体1年くらい経つ。このブログを作ったのは2017年のことだが、最初の頃はほとんど更新せず、2018年は月1回未満のペースだった。しかし2019年…

minikube Clusterをdeleteしたらkubectlが使えなくなった

ローカル環境でKubernetesのClusterを動かす方法はいろいろある。よく紹介されているのはminikubeを使う方法だが、自分の場合Docker Desktopを使っている。Docker DesktopにはKubernetesが付属しており、追加のインストールなしでClusterを立ててkubectlで操…

KubernetesのRBACを触って学ぶ

先日Kubernetesの特定のnamespaceでJobを実行しようとしたところ、権限がなかったため、まずClusterの管理者に権限を申請するところから始める必要があった。これを機会に、KubernetesのRBACについて学んでみた。 RBACとは RBACとは、Role-based access cont…

gitのdiff-highlightを使い始めた

Git

git log -p や git diff などで差分を見るとき、行単位での追加/削除は表示されるが、行の中のどこが変わったのかは表示してくれない。例えば行の中の一単語を書き換えただけで、しかもその行が長い場合、どこに差分があるのか目で探すのが結構大変だった。 …

JJUG CCC 2019 Fallに参加しました

ccc2019fall.java-users.jp 半年に一度のJavaカンファレンスです。個人的にこの半年は扱う技術範囲が広がり、自分の興味や課題意識も大きくなったので、今回は気になるセッションが増えました。 参加したのは以下の3つです。 入門 例外 github.com 例外処理…

KubernetesのServiceを触って学ぶ

仕事でKubernetesを扱うことが不可欠になりつつあるので、最近重点的に学んでいる。Podの立て方は理解したが、Serviceというものが何をするのかわからなかったので、実際に動かして学んでみる。 今回使っているのは、Docker DesktopのKubernetes。Docker Des…

大量のファイルを一気に消したい時はxargsを使う

先日、テスト実行で生成された大量のログファイルを消そうとしてうまくいかず、少し時間を使ってしまったので書いておく。仮に log0000.json から log9999.json まで10,000ファイルあるとする。 これらを一気に消そうと思い普通にrmを使ったところ、実行に失…

styled-componentsが反映されないときは詳細度を調べてみよう

CSS

React + TypeScriptで作られたコードにstyled-componentsを適用する作業を進めている。基本はSCSSファイルで指定されたデザインをそのままstyled-componentsに移すだけなのだが、正しく移植したはずなのにデザインが乱れることが最近よく起こっていた。 //元…

【Python】動的計画法をやってみる

動的計画法のアルゴリズムには前から興味があったが、なかなか身につかなかった。どのようなものか理解するために単純な問題を動的計画法で解いてみることにする。 動的計画法とは 動的計画法は、決まったアルゴリズムを指すものではなく、より広い概念であ…

Brewfile作成の際に知っておきたいHomebrewまわりの機能

自分のdotfilesをメンテナンスするにあたって、他の人のを参考にしていたら、Brewfile上で知らないコマンドがいろいろ使われていたのでまとめる。これらをうまく使えば、インストール作業の自動化の幅が広がりそうだ。 Tap TapはHomebrewに登録されていない…

AWS Budget + AWS Chatbotで使用料金のアラートをSlackに飛ばす

AWS

以前EKS上のClusterを一月以上に渡って止め忘れ、大変な請求が来てしまったことがある。 個人練習用のEKS Clusterを落とし忘れてて5万溶ける悲劇が起きました。これを教訓に請求アラームを設定することにしよう。— どもも (@Udomomo) August 13, 2019 二度と…

YAMLでハッシュの入れ子を作りたい時

先日CircleCIの設定ファイルを書いていたとき、思うように読み取ってくれず詰まったのでメモ。 YAMLのインデントは、ファイルの中で統一されてさえいれば任意の数で良いのだが、一つ意識しなければいけない場合がある。 下のようなyamlを書くと連想配列とみ…

スクラム未経験者が初めてスクラムチームに入るときに必要な考え方

先月から、スクラムチームに入って仕事をするようになった。スクラムというやり方自体が会社としてほとんど前例のない取り組みであったため、うまくいっている所もあれば、チーム外に非常に迷惑をかけてしまっている部分もある。 個人的には、1人とか2-3人で…

「GitHub実践入門」でGitHub Flowを学び直した

gihyo.jp GitHubは普段の開発でよく使っているので基本的な操作は問題ないと思っていたが、今後恥をかきたくないと思い改めて学ぶことにした。 この本はgitコマンドの基本的な使い方から始まり、GitHubのコンソールの機能の紹介、hubコマンドやいくつかのCI…

【Python】heapqで優先度つきキューを理解する

先日のAtCoder Beginners Contest 141に参加したのだが、問題Dを解くことができなかった。 この問題を言い換えると、要は「数値型の要素で構成される配列において、最も値が大きいものを1/2にするという作業を繰り返し、最終的な要素の合計を求める」という…

TDDワイワイ会でテスト駆動開発に再挑戦しました

tddyyx.connpass.com 最近会社のチームでTDDをやり始めたばかりなのですが、チームの先輩に誘われてTDDをやってみるイベントに参加してみました。TDD本は読んだことがあるのですが、あまり腹落ちしきっておらず、もう一度読まないといけないかなと思っていた…