開発ノート

2026

開発ノート

測定が目標になるとき:窓税からPull Request数まで

かつて僕は小さなツールを自作し、四半期で自分がどれだけPRに貢献したか、レビューコメントをどれだけ残したか、チケットをどれだけ消化したかを集計して、上司にアウトプットを証明しようとしたことがある。上司は淡々と、評価はアウトプットだけで見るものではないと言った。数年後、僕はようやく理解した――測定が目標になるとき、それはもはや良い測定ではなくなるのだ。英国の窓税、ハノイのネズミ駆除の報奨金から、現代のPR数による開発者評価に至るまで、そのメカニズムはまったく同じだ。

開発ノート

Cloudflare Images を画像ストレージ・変換ソリューションとして使う

ウェブページに画像を1枚置くのはフロントエンドにとって最も簡単なことだが、リサイズや各種フォーマットの生成、さらにはトラフィックの負荷に耐えることまで完璧にやろうとすると、実際には一つの包括的なソリューションが必要になる。僕はその後、すべて Cloudflare Images に任せるようになり、オリジナル画像1枚だけを渡すようにしている。

2024

2023

2022

2021

開発ノート

Amazon Polly - テキスト音声変換のクオリティが驚くほど高い

Polly は Amazon のクラウドプラットフォームが提供するサービスの1つで、テキストを音声に変換(TTS)できる。テキスト音声変換自体は珍しいものではないが、Polly は文構造に応じて極めて自然な音声を生成できるため、語学学習者にとって大きな福音となる。それだけでなく、字幕の音声化、台本、ナレーション、対話、さらには Podcast の収録に直接 Polly を使うことすら十分可能であり、応用範囲は非常に広い。

開発ノート

メンタルモデルがプログラミング言語の学習に与える影響

メンタルモデルとは、物事がどう進展するか、あるいは物事がどのように機能するかを予測する認知プロセスのことだ。少し学術的に聞こえるかもしれないが、例えば画面上でボタンのUIを見たとき、僕たちはそのUIがクリック可能であり、クリック後には一連のイベントが発生すると予想する。そのため、ユーザーはそのUIが期待通りに動作しないと混乱を覚える。

開発ノート

会社でサーバーを構築するのは僕が想像していたほど簡単ではなかった

今回のプロジェクト開発において、従来の純粋な静的ランディングページに対して、企画側からAPIを叩いてデータを動的に取得・更新したいという要望が出た。さらにページのインタラクションも増えてきたため、従来のpug+webpack+jQueryによる純粋な静的ページでは対応しきれなくなり、僕たちは新バージョンの開発でnext.jsを導入した。そして、サーバー構築における試行錯誤の旅が始まった。

2020

開発ノート

Kotlinから学んだこと:Kotlin DSLとAnnotation

最近、日常のタスクを管理するちょっとしたツールをKotlinで開発した。主にバックエンドの同僚たちにも一緒にメンテしてもらいたいという思いがあり、また新しい言語を学ぶことで常に新しい刺激やアイデアが得られること、そして社内のJavaやJVMの達人たちから知識を吸収する良い機会でもあったからだ。

開発ノート

プロジェクトに GitHub Actions を導入する方法

かつて CI を導入する際、チーム内では CircleCI、DroneCI、Jenkins などのソリューションをめぐって議論(あるいは喧嘩)に時間を費やしていたかもしれない。だが、チームのコードが GitHub でホスティングされているなら、GitHub と簡単に CI を統合できる。万能薬や決定打とまでは言えないかもしれないが、テストの実行や push and deploy といった一般的なシナリオであれば、かなり手軽に実現できると僕は思っている。以下で詳しく紹介しよう。

2019

開発ノート

プロジェクトに環境変数を設定する - VIPER

数ヶ月前、Golangで環境変数を設定する方法についての記事を書いた。環境変数をいかにエレガントに設定するかは非常に重要なことなので、それを実現するための簡単な関数を書いた。当時の考えはシンプルで、対応するconfigファイルが提供されていれば、その中のkey/valueをos.Setenvで設定するというものだった。その後、アプリ全体で…

開発ノート

Goworker 入門 — Redis と組み合わせた worker の実装

最近、プロジェクトを Ruby on Rails から Go 言語へと徐々に移行している。少し不恰好な構文を書いてみてどんな感じか試してみたいというのもあるし、Go 言語の威力や、既存のフレームワークがない状況でどのようにコードを構成すべきかを体感してみたいという思いもある。今回は goworker を紹介する。これを選んだ理由は「go worker」で検索して…

開発ノート

あるデバッグの記録 — connection refused

数か月前あたりから、僕の Google Chrome で原因不明の connection refused が頻繁に発生するようになった。特定のウェブページが開かないことがあるのに、他の端末から開くと正常に表示される。変だなとは思いつつも、サーバー側の設定の問題かもしれないし、そこまで大きな困り事でもなかったので、そのまま使い続けていた。カスタムドメインを設定…

2018

開発ノート

Golangプロジェクトで環境変数を設定する方法

プロジェクト開発では異なる環境を切り替えることがよくあり、そのため通常は環境変数を設定する。だが、コード内に直接ハードコードしてしまうと毎回修正するのが非常に面倒だ。動的に環境変数を渡すことができれば、不要な修正を大幅に減らせてコードも比較的クリーンになる。golangでは一般的にflagパッケージを利用して…

開発ノート

makeとnewの違い

Golangにはmakeとnewという2つの予約語があり、Goを学び始めた頃に混同しやすいところでもあるため、ここに簡単なメモを残しておく。newは型のメモリを割り当てて初期化し、ポインタ(メモリアドレス)を返す。そのため通常はポインタ変数でnewされた型を受け取る。特に注意すべき点として、newは自動的にゼロ値(zeroed value)で初期化するため…

2017

開発ノート

PostgreSQL ノート — INDEX 編

データベースにおいて、クエリ効率を向上させるため、データ量が多いときにはインデックスを作成することでデータベースの検索効率を高速化できる。本記事では PostgreSQL の index について探求する。大半の状況では、直接 `CREATE INDEX` 構文を使用するだけで一般的な開発シナリオに対応できるが、PostgreSQL では実は多くの異なる index type が提供されている。

開発ノート

Railsアプリの自動デプロイ - hubotとheaven

現在所属している会社では、ローカルのターミナルで直接 cap staging deploy コマンドを実行している。capistranoは自動デプロイツールとして非常に便利だが、いくつかの問題に直面することが避けられない:チームの全員が同じ環境を持っているわけではない、みんながデプロイした結果、staging環境に今どのブランチがあるのか完全に分からなくなる…