30歳からのプログラミング

30歳無職から独学でプログラミングを開始した人間の記録。

I/O 多重化で TCP サーバの並行処理能力を改善する

I/O とはデータの入出力のことであり、ネットワークプログラミングの文脈では「ネットワーク経由でのデータの送受信」を指すことが多い。そして、サーバが複数のクライアントの対応を同時に行う場合、複数の I/O を上手く処理する必要がある。これがまずいと…

素朴なイベントループを書いて epoll を理解する

epoll は様々な「イベント」の発生を検知できるようにするためのシステムコール。これを使うことで、「リスニングソケットに接続要求が来た」「ソケットにデータが到着した」などのイベントの発生を、カーネルが検知し通知してくれるようになる。 そして複数…

Kubernetes クラスタでホスティングしている Metabase が出力するログを JSON 形式にする

ウェブアプリケーションのモニタリングやオブザーバビリティを実現していくための要素のひとつに、ログがある。 現在ではログファイルなどを直接見ることは稀で、 Datadog などのサービスを使うことが多い。そういったサービスには様々な機能があり、ただロ…

Pod が配置される Node を Taint と Toleration で制御する

Kubernetes には Taint と Toleration という仕組みがあり、これらを使うことで Pod が配置される Node を制御できる。この Node にはこの Pod しか配置を許可しない、といった指定が可能になる。この記事では Taint と Toleration の基本的な使い方を見てい…

『WEB+DB PRESS Vol.55』の「モダンネットワークプログラミング入門」を読んだ

ネットワークプログラミングの基本的な用語や概念、 I/O 戦略の代表的なパターン、について書かれた特集記事。 15 年前の特集記事で、執筆者は古橋貞之氏。 業務でデータパイプラインのお守りをしている私にとっては「Embulk を作った人」というイメージが強…

短いサイクルで意思決定を繰り返してデータガバナンスを漸進的に改善していく

自分の現在の主業務はデータプラットフォームの構築や運用だが、その文脈でここ数ヶ月取り組んでいたことのひとつに、データガバナンスがある。 データを利活用したい人がより安全かつ便利に利活用できるようにしていくこと、データ利活用体験を向上させてい…

Google Cloud のデータプロファイル機能で BigQuery のデータを継続的に検査する

Google Cloud の Sensitive Data Protection には「データプロファイル」と呼ばれる機能がある。 この機能を使うことで、機密情報が入ってしまっていないかなどの検査を、大量のデータに対して実施できる。 この記事では、データプロファイルを利用するにあ…

『ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道』を読んだ

いわゆる「システムプログラミング」の入門書。 タイトル通り Linux の仕組みを学びながら、実際に C 言語でコマンドや HTTP サーバを実装していく。 本当に初学者向けの入門書であり、カーネルとは、システムコールとは、というところから説明していく。 そ…

データ領域の Platform Engineering と「データ利活用体験」の向上

ソフトウェア開発をよりよいものにしていくための取り組みのひとつとして Platform Engineering という考え方がある。 厳密な定義は存在しないようだが、概ね、社内の開発者向けにプラットフォームやツールを提供したり、それらに対するイネーブルメントを行…

BigQuery ポリシータグによるカラム単位でのアクセス制御と dbt によるポリシータグの付与

BigQuery にはポリシータグという仕組みがあり、これを使うことで BigQuery のリソースに対してきめ細やかなアクセス制御を行うことができる。 この記事では、ポリシータグを使って任意のカラムに対するアクセス制御を実現する方法を紹介する。 ポリシータグ…

Claude Code(Claude Sonnet 4) に Google Cloud + dbt のデータパイプラインを作らせてみる

自分ではコーディングやコマンドの実行などを行わずプロンプトによる指示だけで進める、いわゆる「バイブコーディング」で開発を行った。 Cloud Storage に csv ファイルが入っているだけの状態から、 BigQuery Data Transfer Service の定期実行で BigQuery…

Cloud DLP を使って BigQuery に入っている個人情報を検知する

Cloud Data Loss Prevention (以下 Cloud DLP) は機密データを保護するための Google Cloud のサービス。渡したデータや指定したストレージに入っているデータに対して、機密データが含まれていないか検査したり、含まれていた場合に匿名化を行ったりするこ…

データエンジニアリングって何が面白いんだ?

最近『データエンジニアリングの基礎』という本を読み始めた。 この本の冒頭で、データエンジニアリングやデータエンジニアの定義は曖昧で、人によって言っていることがバラバラだという話が出てくる。そこで著者たちは自分たちなりの定義を示し、それに則っ…

dbt の Python model を Dataproc クラスタで実行する

dbt には Python model という仕組みがある。これを使うことで SQL ではなく Python で model を書くことができ、SQL では不可能な処理が可能になる。 データウェアハウスとして BigQuery を使っている場合、 Dataproc を利用して Python model を動かすのが…

Dataproc クラスタで PySpark ジョブを実行して学ぶサービスアカウントの初歩

Dataproc は Google Cloud が提供しているサービスのひとつ。Dataproc を使うことで、Apache Spark や Hadoop を利用するためのインフラを簡単に用意することができる。 そして Python で Apache Spark を使うための仕組みが PySpark 。 Dataproc を利用する…

『GitLabに学ぶ 世界最先端のリモート組織のつくりかた ドキュメントの活用でオフィスなしでも最大の成果を出すグローバル企業のしくみ』を読んだ

現職はリモートワーク可能であり、自分はフルリモートで働いている。 そのためフルリモートでどうやって生産性を高めていくとよいのかに関心があり、本書を手に取った。 個々の取り組みについては斬新なことや目新しいことは特になく、必要なのは「やるべき…

Google Cloud クライアントライブラリがアクセスするプロジェクトはどのように決まるのか

Google Cloud のクライアントライブラリを使うと API を通して Google Cloud のリソースにアクセスすることができる。 そして多くの場合どのプロジェクトのリソースにアクセスするのかを指定する必要があるが、その指定方法は複数ある。 この記事では、プロ…

gcloud auth application-default login は何をしているのか

dbt でデータウェアハウスとして BigQuery を使う際、ローカル開発においては OAuth 方式を使うことが推奨されている。 そしてその場合はgcloud auth application-default loginコマンドを実行する必要がある。 確かにこのコマンドを実行すると BigQuery と…

gcloud CLI の認証とプロパティと構成

gcloud CLI は Google Cloud のリソースを管理するための CLI ツールだが、これを使ってリソースにアクセスするためには当然、アカウントの認証を行わなければならない。そして gcloud CLI では様々な操作を行えるが、その挙動を自分の意図した通りに制御す…

『マンガでやさしくわかる知識創造』を読んだ

野中郁次郎らが提唱した知識創造理論の入門書。 知識創造とはどのようなものか、そしてそれがなぜイノベーションにつながるのか、具体例を用いながら平易な文章で解説されている。 pub.jmam.co.jp 知識創造理論については存在も知らず、現職の同僚との 1on1 …

もうすぐ 40 歳になるが労働を 3 年以上続けられたことがない IT エンジニアの話

「30歳からのプログラミング」と題したこのブログを書き始めたのが 2016 年 3 月。 そこから月日が立ち、立派なアラフォーとなったわけだが、私はこれまで 3 年以上継続して働いたことがない。プログラマに転身する前も含めて、である。一度もない。 3 年経…

target や config を理解して dbt model の出力先を制御できるようになる

dbt

dbt を使おうとすると、profile や target、config、property など、様々な概念が出てくる。 それらをあまり理解できていなくても、何となく動かすことはできるかもしれない。 しかし、これらの概念を理解していないと、意図した通りに動かしたり他者が記述…

Embulk に入門して Amazon RDS にあるデータを BigQuery に転送する

この記事では、Embulk を使ってデータ転送を行う方法について述べていく。 今回は題材として Amazon RDS から Google Cloud の BigQuery にデータを転送する。Embulk の実行はローカルマシンで行う。 使っている Embulk のバージョンは0.9.25。 0.10や0.11だ…

Terraform で GitHub の Branch protection rule を定義する

Terraform では GitHub の Branch protection rule を管理する resource が提供されている。この記事ではそれを使って rule を定義する方法について扱う。 動作確認は Terraform のv1.7.4で行った。 Branch protection rule は、指定したブランチに対してル…

『AWSネットワーク入門 第2版』を読んだ

AWS でネットワークを構築しウェブサーバを公開する手順を解説した入門書。 丁寧かつ簡潔な説明で、初心者でもスムーズに進めていくことができる。 tatsu-zine.com Kubernetes を勉強していた時、ローカル環境である程度動かすことができたので、次はより実…

『Software Design 2022年1月号』の「TerraformではじめるAWS構成管理 インフラを自動で構築&コードで管理」を読んだ

Terraform 何も分からん、取り敢えず概要を知りたいなと思い、手に取った。 雑誌の特集のひとつであるためコンパクトであり(41 ページ)、手っ取り早く雰囲気を掴むのにちょうどよかった。 gihyo.jp 私のような初心者を対象としていると思われ、かなり初歩…

Restart Policy と Probe を使った Pod の管理

Kubernetes には Restart Policy や Probe という設定や仕組みがある。 これらを適切に使うことで、コンテナが意図した通りに動いているのか、再起動させる必要はないのか、といったことを Kubernetes が継続的にチェックしてくれるようになる。そしてそれだ…

Docker Desktop を使って学ぶ Kubernetes の基本的な仕組み

この記事では Docker Desktop 上で Kubernetes クラスタを作り、実際に動かしながら、Kubernetes の基本的な仕組みについて説明していく。 動作確認は以下の環境で行った。 Docker Desktop 4.22.1 Kubernetes 1.27.2 事前準備 Kubernetes の有効化 Docker De…

『Cプログラミング入門以前 [第3版]』を読んだ

プログラミングを学び始める前に押さえておくべき基礎知識を学べる一冊。 コンピュータやプログラムが動く仕組みをちゃんと理解しなければいけないと感じており、その一環で読んだ。 tatsu-zine.com 著者が執筆した『基礎からわかるTCP/IP ネットワークコン…

『なるほどUnixプロセス―Rubyで学ぶUnixの基礎』を読んだ

Unix プロセスとはどのようなもので、どのような特徴を持つのか、平易な文章と簡潔なコードを使って解説していく一冊。 tatsu-zine.com プロセスID、プロセスの親子関係、標準ストリームといった、プロセスに関する基本的な概念について説明していきながら、…