テストでFactoryBotを使う理由・使わない理由

はじめに 先日、チームの若手エンジニアから「テストが成功しなくてデータがおかしい」という相談を受けました。 相談を受け一緒に調査を進めると、同じモデルに対してテストではFactoryBotでのデータ作成と、実際のアプリケーションでは作成ロジッククラス…

画面共有しながら使えるフローティングタイマー「Snack Time」を公開しました

オンラインミーティングで画面共有しながら使える、シンプルなタイマー拡張機能を公開しました。 chromewebstore.google.com まず初めにインストールの方法と使い方について紹介し、その後開発の経緯や今後の展望について紹介します。 インストール 上記のリ…

tmuxistを見直してv1リリースした話

個人でTmuxのセッション管理を行うためのツールとしてtmuxistというのを6年前から細々と開発・使用しています。 github.com 今回はそのtmuxistを区切りとしてv1リリースした話です。 TL;DR 設定ファイルの位置を変更 $HOME/.config/tmuxist/{PROFILE}.toml -…

RBSファイルを自動生成したい

最近はRBSが浸透しつつつあり、私もSteepを使った開発を行うことが増えてきています。 今回はそういったユースケースでrbs-inlineで定義を生成している場合にファイルに変更があったら自動で更新するような仕組みについての紹介です。 TL;DR rbs-inline推奨…

Railsプロジェクト向けの.devcontainer/Dockerfileの一例

未来の自分用のメモです。 ベースイメージが存在していないToyアプリなどで利用することが多いDockerfileについて紹介します。 Railsで動作させることが前提ですが、空行で表現しているグループごとに説明します。 Localeの設定 設定しないとrails consoleな…

IaCを利用したクラウドリソース管理の4つの壁

今回の話はポエム寄りの話になります。 クラウドリソースの管理において、Infrastructure as Code(IaC)は今や欠かせない存在となっています。 しかし、IaCの導入や学習には見えない壁が存在します。 今回は、この壁についての持論について述べていきたいと…

SwiftUIで言語とカラースキームを同時にプレビューするいい感じの方法

前回の記事では、SwiftUIでダークモードとライトモードを効率的にプレビューする方法を紹介しました。 今回は、さらに一歩進んで、言語設定も含めたプレビュー方法を解説します。 PreviewHelperの実装 まず、言語とカラースキームの両方を管理するPreviewHel…

SwiftUIでダークモード・ライトモードをいい感じにPreviewする方法

SwiftUIでダークモード・ライトモードをいい感じにPreviewする方法 SwiftUIでアプリを開発する際、ダークモードとライトモードの両方でUIをチェックすることは非常に重要です。 この記事では、SwiftUIのPreviewを使って両方のモードを効率的に表示する方法を…

VSCode拡張のScrapsの紹介

こんにちは、K@zuki. です。 今回は、私が開発したVSCodeの新しい拡張機能Scrapsをご紹介します。この拡張機能は、コードを書く際にちょっとしたメモを取りたい時に役立つ、非常に便利なツールです。 Scrapsとは Scrapsは、VSCodeのサイドバーにメモを書き込…

DartでDNSクエリを投げてみる

ゴールデンウィーク中に書いているコードで、DNSクエリを一から書いてみるかということで雑に実装したコードを残しておきます。 ちゃんとした仕様通りの実装をしているわけではないので解説はしませんが、UDP通信したい人や別のものを参考にする場合には利用…

WEB+DB Press総集編のファイル名をいい感じにする

WEB+DB PRESSが休刊してからしばらく経ち、総集編が販売開始されました。 gihyo.jp 今回はこのDVDに含まれるファイルの名前をPowerShellでいい感じに変更する話になります。 前提 DVDには、webdb_vol01.pdfのような形式でファイルが保存されています。 これ…

法人設立した話

先日法人を登記してきたので、その大まかな流れについてお話ししたいと思います。 法人設立を検討している方にとって、参考になる情報があれば幸いです。 TL;DR K@zuki. は、会社員 兼 個人事業主(茨谷企画) 兼 代表社員 の掛け持ち状態になっている 個人…

Docker Composeを使ってPalWorldのサーバを建てる

最近はPalWorldにどっぷりハマっています。 マルチプレイをする場合は、24時間起動し続けたいわけでなければ無理してサーバを建てるメリットはないんですが、 それでも建てたいかつ、比較的環境を汚したくない人向けの簡単な記事です。 ポート開放や正式な建…

Helm ChartでデプロイしているWordPressにads.txtを配置する

元々広告を設置しているWordPressのサイトがあったんですが、本格的にk8sクラスタへ移行するにあたってads.txtを配置する必要がでてきました。 今回はその備忘録になります。 TL;DR BitnamiのWordPressのChartを使っている場合の話に限る このイメージは /op…

個人開発したアプリをストア申請するまでの手順とハマりどころ

最近個人用にアプリを作っていたのですが、ついでにアプリストアに申請した時のハマりどころがあったのでメモとして残しておきます。 TL;DR 基本的に https://zenn.dev/moutend/articles/feebf0120dce6e6426fa に従って進めるでOK 5.5 inchのシミュレーター…

GitHub PagesとGoogle Formでアプリ申請に必要なページを最小限の労力で作成する

最近個人用にアプリを作っていたのですが、ついでにアプリストアリリースする気持ちになったので、そこで必要になるページをGitHub Pages+Google Formで作成した話です。 執筆時点ではまだ申請中なので、申請が却下されたり許可が通ったらしたら追記します。…

iOSアプリでファイル取得処理にRepositoryパターンを活用してPreviewする

年末にやっていた個人アプリ開発でアプリでのTipsの1つです。 他に良いやり方もあるかもしれませんが、Swift触り始めて4日目ぐらいの感想になります。 TL;DR Previewでドキュメントディレクトリにアクセスするとエラーが出る、もしくはクラッシュして2度と起…

2023年買ってよかったもの

2023年に買ってよかったものを書いておきます。 2023年も色々細かい買い物してたんですが、かなり印象に残ってるのは1つしかないので、それを書いておきます。 Cleer Arc 2 イヤホンは外耳炎になりがちなのでヘッドホンを使っていたんですが、これに切り替え…

SwiftDataで動的なキーワード検索を実装する

最近は自分向けのPDFリーダーアプリを開発しています。 このアプリではSwiftDataを使って読書履歴をモデル化して管理しているのですが、これを踏まえてちょっと自分のメモがてらにTODOアプリを例にしたメモを残しておきます。 Swiftを触り始めて3日目ぐらい…

Argo CD, Helm, Renovateを使ったコンポーネントの継続的アップデート

皆さん、こんにちは! この記事はSRE Advent Calendar 2023の16日目の記事になります。 今回の話は、k8sクラスタでのコンポーネントの継続的アップデートを行うための工夫についての紹介です。 SREとして信頼性や安定性を担保するためにアップデートの話は必…

おうちクラスタにCDIをデプロイしてUbuntuを動かす

前回の続きでContainerized Data Importer(以下、CDI)を導入してUbuntuの仮想マシンを動かします。 khasegawa.hatenablog.com マニフェストを用意する マニフェストの取得コマンドは省きしますが、マニフェストをkustomization.yamlから参照するように定義…

おうちクラスタにKubeVirtをデプロイする

おうちクラスタにKubeVirtをデプロイした時の話を書いておきます。 実際に変更したコミットは以下にあるので参考にしてください。 github.com マニフェストを用意する 公式のInstalling KubeVirt on Kubernetesを元に必要なファイルを書いていきます。 まず…

Rails 7.0.8でdatetimeなカラムの精度が修正された件について

はじめに 少し前にRails 7.0.8がリリースされましたが、その前のバージョンである7.0.7.2でマイグレーションした結果のdb/schema.rbが異なるということについて質問されたので、金曜夜に解説した内容を文章にまとめたものになります。 前提 Rails 7.0.7.2 ->…

Login with NotionをSinatraで実装する 

主に個人向けで作っているサービスでLogin with Notionを実装する必要があったので、その時の動作検証を行った時の作業ログです。 Login with Notionと仰々しく言っていますが、端的に言えばNotionと連携するためにOAuthを利用するだけの話です。 Public Int…

SRE NEXT 参加

先週末に開催されたSRE NEXTに参加してきました。 sre-next.dev 個人スポンサーとして参加していたのでノベルティもいただきました。 自宅に着いたのでSRE NEXTのステンレスマグで、会場で購入した脇屋珈琲のSRE NEXTブレンドを飲んでいます美味しい pic.twi…

おうちクラスタのcloudflaredをDaemonSetに変更する

おうちクラスタのcloudflaredはDeploymentとしてデプロイしていましたが、 DaemonSetとしてデプロイするように変更しました。 Why? これといった強い理由はないですが、おうちクラスタの特定のノードにcloudfalredのPodが偏ってデプロイされて、 かつそのノ…

Argo CDでCalicoをデプロイしているとmetadata.annotations: Too longエラーが出る

はじめに TL; DR Argo CDのApplicatoinのsyncOptionsにServerSideApply=trueを追加すれば良い github.com 問題 スクショを取っていなくて申し訳ないんですが、CalicoのHelm Chartをアップデートしたところ以下のようなエラーが出るようになりました。 Custom…

ルーターの設定ファイルをArgo WorkflowsでS3にバックアップする方法

はじめに 今回は、自宅で使用しているルーターの設定ファイルをArgo Workflowsを使ってS3にバックアップする方法について説明します。 Argo Workflowsとは Argo Workflowsは、ワークフローエンジンの1つであり、コンテナベースのジョブオーケストレーション…

revealerというデバッグ用Webアプリを公開しました

注意事項 この記事は、Notion AIに対して 問題と解決策の概要 例示用のコード を渡して生成した実験的な記事になります。 はじめに revealerというHTTPのリクエストデータを表示するWebアプリを公開しました。 revealerとは revealerは、アクセス元のIPアド…

1周回って個人のタスク管理はGoogle Tasksでもいいかもしれない

昔から自分のタスク管理方法について2,3年に1度見直していますが、1周回ってGoogle Tasksでいいのかもしれないと思い始めてきた。 以下の記事のように必要な機能を洗い出して、その機能が担保できるものを使ってきている。 khasegawa.hatenablog.com 現在はN…