記事一覧
アキゾラソフトで公開している記事の一覧です。シリーズで通読、カテゴリ・タグで興味の方向から探索、いずれの読み方もできます。
シリーズで読む
テーマで束ねた連載記事。1つの分野を体系的に学べます。
初めて読む方へ
サイトの代表記事をピックアップしました。

銀の弾丸を求めて迷走した私の失敗談。個人開発でオーバーエンジニアリングして気づいた「技術のコスト」の話
本や記事で学んだ「理想の設計」を試すと思ったようにいかないことが多いです。実務で失敗すると多大なコストを支払うことになりますが、個人開発であれば安心して試せます。安心して試すことで技術の限界を学ぶことができ、結果的に実務で活かせる経験となります。
OSS開発の学び
OSSを公開したら使いにくかった話|ドッグフーディングで改善する
OSSライブラリ「SoundMaker」の開発を通じて、自分で使い倒す「ドッグフーディング」の重要性を痛感しました。利用者視点を理解しているつもりでも、実際に使ってみないと気づけない問題があるという体験談です。
AI活用
AIで個人開発の価値は死んだのか?
Claude Codeを活用して家計管理PWAを約1週間で開発した体験をもとに、AIで爆速開発できる時代における個人開発の価値や、エンジニアとして力を入れるべきポイントについて考えます。
すべての記事

2オペレータFM音源をC#で実装する|サイン波2本で音を作る最小構成
FM音源シリーズ第2回。前回の式 out = sin(2π·fc·t + I·sin(2π·fm·t)) を、そのままC#のコードに落とします。オペレータを「位相を進めてsinを引く1ユニット」として設計し、キャリアとモジュレータ2個だけを直列に繋いで、サンプル単位のループで1音を生成する最小構成を解説します。位相累算の仕組みと、周波数を比(レシオ)で持つ理由まで。

4オペレータFM音源をC#で実装する|アルゴリズム・フィードバック・ADSR
FM音源シリーズ最終回。前回までの概念を全部コードにします。PICOMの実装をもとに、FMOperatorクラス、4つのオペレータとアルゴリズム・フィードバックを持つFMParameters、Alg0〜7をswitchで切り替える波形生成ループ、OP1セルフフィードバック、各オペレータのADSRエンベロープを解説します。第2回の2オペレータ実装をどう一般化したかを辿り、動く4オペレータFM音源を完成させます。

4オペレータFM vs 2オペレータ|アルゴリズムとは何かを理解する
FM音源シリーズ第3回。2オペレータでは出せない音があるのはなぜか、オペレータを4個に増やすと何ができるのかを「接続の組み合わせ=アルゴリズム」という軸で解説します。OPNA準拠のAlg0〜7の接続パターンを図で紹介し、直列寄りは歪んだ複雑な音・並列寄りはオルガン的な加算合成という音色傾向を整理。接続の自由度・倍音の複雑さ・計算コストの3軸で2opと4opを比較します。

FM音源とは?なぜ1個のサイン波からあれだけ多彩な音色が出るのか
チップチューン音楽アプリPICOMで使っているFM音源(周波数変調合成)の原理を、数式1本だけで直感的に解説します。サイン波が単一倍音であること、変調で側帯波が生まれて倍音が増えること、変調指数と周波数比が音色をどう変えるかを、コードを使わず言葉で結びます。DX7やPC-98のOPNAといった歴史的文脈にも触れる、全4回シリーズの第1回です。

Blazor × Web Audio APIで音楽を切れ目なく再生する|scheduledTime活用術
Blazor WebAssemblyから生成した波形をJS interop経由でブラウザで再生するとき、切れ目なく次のバッファを繋げるにはWeb Audio APIのscheduledTimeを活用する必要があります。PICOMで採用したバッファチェイン方式と、AudioContextの再初期化の罠を紹介します。

SoundMakerでチップチューン音声パイプラインの作り方
自作OSSライブラリSoundMakerを使って、楽譜データからWAVバイナリを生成する音声合成パイプラインを解説します。サンプリングレートとテンポからサンプル位置を算出する基礎、バッファリング生成でBlazor WebAssemblyを固めない工夫、プレビュー音のキャッシュ戦略を紹介します。

Nuxt Content v2 で4ツール分のマニュアルサイトをスケールさせた設計
Nuxt Content v2 で構築したマニュアルサイトを、1ツール専用から4ツール対応にスケールさせたときの composable 抽象化と動的ルート構成の記録です。

大学で習った動的計画法で差分比較ツールを実装する|LCS + DP の行・文字二段差分
大学のアルゴリズム講義で習った動的計画法(DP)を実用ツールに落とし込みたくて、ブラウザ完結の差分比較ツールを LCS + DP で実装した記録です。どのように動作しているか設計をまとめます。

C#オブジェクトがIndexedDBに着くまで|Blazor WASM永続化のデータ形式の旅
Blazor WebAssembly で C# のオブジェクトを IndexedDB に保存する際、データは MessagePack バイナリや Uint8Array と形を変えながら各レイヤーを通過します。PICOMでの実装を例に、境界ごとの責務分担と keyPath なしストア設計を解説します。

軽量なツールの設計は「何をしないか」から始まる — Yomogi の具体例で考える
個人開発の軽量ツールでは、何を「できなくするか」を決めることが設計の本質になります。ドット絵エディタ Yomogi で実際に設けた制約と、その判断基準を具体的にまとめます。

Blazor WebAssemblyでマルチスレッドを有効化してUIフリーズを解消する
Blazor WebAssemblyでWasmEnableThreadsを有効化し、音楽生成をバックグラウンドスレッドにオフロードしてUIフリーズを解消した実例です。COOP/COEPの必要性、Channel<T>によるストリーミング再生、PeriodicTimerへの移行で踏んだ不具合も紹介します。

StackベースのUndo/RedoをC#で実装する|CompositeCommandで複数操作も一括取り消し
楽譜エディタのUndo/RedoをCommandパターンで実装した実例を紹介します。2本のStackで履歴を管理し、CompositeCommandで複数操作を1手としてまとめ、TrimHistoryで履歴上限を設ける方法を解説します。

【解説】Canvas で縦書き日本語組版を実装する!詠み人の描画方法
和歌・短歌・俳句を画像化するツール「詠み人」で、CSS writing-mode を使わず Canvas で縦書きを実装した理由と、句読点や括弧などの特殊文字の扱いをまとめます。

MessagePackで独自バイナリファイル形式(PIM)をバージョン管理対応で設計する
音楽作成アプリPICOMで独自のバイナリファイル形式「PIM」をMessagePackで実装しました。なぜJSONでなくMessagePackを選んだのか、`[Key]`番号の運用ルール、将来のフォーマット進化に備えるVersionフィールド戦略について解説します。

ObservableObjectとDiffDetectableObjectで「変更された?」を自動判定する
Blazor WebAssemblyで「保存ボタンを押すべきか」を自動判定する仕組みを、ObservableObjectとDiffDetectableObjectという2つのシンプルなクラスで実装しました。MVVM ToolkitのObservableObjectとの違いや、イベント駆動で状態フラグを同期させる設計のコツを解説します。

Azure Static Web Apps × Google AdSenseで所有権確認を通すまでにハマったこと
Nuxt SSGで構築したAzure Static Web AppsのサイトにGoogle AdSenseを導入しようとして、所有権確認でハマったポイントと解決策をまとめます。

OSSを公開したら使いにくかった話|ドッグフーディングで改善する
OSSライブラリ「SoundMaker」の開発を通じて、自分で使い倒す「ドッグフーディング」の重要性を痛感しました。利用者視点を理解しているつもりでも、実際に使ってみないと気づけない問題があるという体験談です。

多分SaaSは死なない — エンジニアから見た「SaaSの死」への違和感
SaaS不要論が広がりましたが、ガバナンス・責任・コスト・運用の観点からSaaSが死なない理由をエンジニア視点で考察します。

AIで個人開発の価値は死んだのか?
Claude Codeを活用して家計管理PWAを約1週間で開発した体験をもとに、AIで爆速開発できる時代における個人開発の価値や、エンジニアとして力を入れるべきポイントについて考えます。

銀の弾丸を求めて迷走した私の失敗談。個人開発でオーバーエンジニアリングして気づいた「技術のコスト」の話
本や記事で学んだ「理想の設計」を試すと思ったようにいかないことが多いです。実務で失敗すると多大なコストを支払うことになりますが、個人開発であれば安心して試せます。安心して試すことで技術の限界を学ぶことができ、結果的に実務で活かせる経験となります。