INITIALIZING_
N.W. — 業務システムの設計と構築

めんどうな作業が、
心底嫌いです。

だから、消す方法ばかり考えてきました。

$

1998年からこの仕事をしている
9本設計した業務システム
7つ渡ってきた現場
¥100,000 → ¥0毎月のしくみ代
SCROLL
00 / 速くならないところ

AIで速くなったのは、
作るところだけでした。

受注データの変換は、ひとりで作れば1年以上かかる見込みでした。AIを使ったら、数週間でできました。

でも、取引先ごとの流れを理解するのは、速くなりませんでした。担当者も理由を知らないまま続けている手順があって、自分で取り込んで、データがどう変わるかを1回ずつ見て、やっと分かる。最初は1社に2週間かかりました。

そこを速くしたのは、AIではありません。その日届いた受注を残しておいて、担当者が実際に取り込んだ結果と突き合わせる。毎日の仕事がそのまま「正解」になるので、いまはデータがそろえば1社1日です。

AIで速くなった
  • 受注データの変換を作る1年以上の見込みが、数週間に
  • 一時しのぎの変換約2日
速くならなかった
  • 何を作るかを見つける
  • 現場の誰に、何を聞くかを決める
  • 担当者も理由を知らない手順を、自分でやって確かめる
  • 「問題ない」と言うベンダーに、不具合の条件を突き止めて認めてもらう
自分で速くした
  • 毎日の受注を残して、実際に取り込まれた結果と突き合わせる1社2週間が、データがそろえば1日に

作るのが速くなったぶん、何を作るかを間違えると、間違ったものが速くできあがります。だから、速くならないところに時間を使っています。

01 / about

「できない」で終わらせたことが、
ありません。

困りごとを聞いて、いまあるデータで届くのかを見る。届かなければ、まずデータが取れる形にする。そこまで整えば、たいていのことは動くしくみにできます。

ゲーム、組み込みの開発、機械の制御、Linuxのサーバー、工場のライン、そしていまはAI。専門学校でC言語に出会ってから、渡ってきた畑は、毎回まるで違いました。

技術は毎回変わったのに、やっていることは一度も変わっていません。その場のめんどうな作業を見つけて、しくみで消す。それだけ。だから自分にあるのは「この技術が得意」ではなく、知らない場所に放り込まれても、覚えて、動くものを作って、回すところまで持っていける ── たぶん、これがこの仕事でついた強みです。

いまはそこにAIが乗って、同じことがずっと速くなりました。設計と判断は自分、実装はAI。この「どこでも立ち上がる」を、まだ道具が届いていない場所へ持っていけたら、と思っています。

02 / skills

道具箱の中身。

ぜんぶ「使えます」と書くと嘘っぽいので、いまの付き合いの深さで正直に分けました。

実務でよく使う// daily
Python業務システムの本体
FastAPI / Uvicorn9本ぶんの土台
SQLAlchemyDBとのやりとり
React / Vite操作の複雑な画面
Jinja2単純な画面はこちら
Dockerアプリを1本ずつ分ける
nginx振り分け
Claude / AI毎日の相棒
C#前職の業務システムで
Excel VBA自動化の得意
PostgreSQLいまの主力
SQL Server長く使ってきた
Linux (Ubuntu)サーバまわり
Hyper-V仮想環境を構築
ネットワーク拠点をまたいで
バッチ処理夜間の自動処理
Gitふだんの道具
作って、動かしたもの// shipped
TypeScript個人の作品で
Next.jsこのサイト
Node.js道具づくりに
Blazor社内アプリを1本
シェル / bash環境構築の手順を実行できる形に
これまで触れてきた// experienced
C / C++組み込み開発
Java経験あり
Ruby工場のシステムで
Kotlinハンディ端末で
JavaScriptむかしのWeb
VB最初の言語
ASP.NETC#でWeb
Oracle前のお仕事
System i工場の基幹に接続
AutoCAD機械の図面時代
3DCG専門学校
03 / works

つくったもの。

畑はバラバラですが、やっていることはぜんぶ同じ ── めんどうを見つけて、しくみで消す。その実物です。題名を押すと、何が分からなくて、どうやって分かったかまで開きます。

実装にはAIを使いますが、任せてはいません。構成と判断は自分で決めて、出てきたコードは自分で読んで直します。 AIをどう扱っているかは 考えていること に書きました。

いまの会社でつくったもの01 — 05
概要

受注データの変換、品番の変換、客先カレンダー、売上照合、設備の管理、ラインの製造所要時間の計測、アプリとDBの死活監視、内示の遷移、生産管理システムのDBビューワー。必要になったものから順に作って、9本が同じ土台の上に乗っています。いま7本が現場で動いていて、残りの2本は完成して運用開始待ち。ほかに、グループウェア、棚卸、発注管理の3本を開発中です。設計から運用まで、ひとりで見ています。

システム構成
自前のLinuxサーバーHyper-V上・Ubuntu
→
アプリを1本ずつ分離Docker
→
振り分けnginx
Python 約479ファイル / FastAPI + Uvicorn + SQLAlchemy で統一 / PostgreSQL / 基幹システムへは読み取り専用で接続
どこから生まれたか
作っている途中で、次の1本が要ると分かった
受注データの変換を作ったら、週や月の単位で届く内示を日に直すのに、客先カレンダーが要った。取引先の品番を社内の品番に直すのに、品番の変換が要った。製造所要時間の計測を作ったときは、Excelでもらった設備の情報を、変わるたびに取り込み直すのが手間だったので、設備の管理を作った。
動かしてみて、要ると分かった
アプリとDBの死活監視。
一回きりの依頼を、次も使える形に
「このデータを見たい」と頼まれて見せたあと、また同じ依頼が来ると思って、DBビューワーにした。
頼まれたもの
製造所要時間の計測、内示の遷移、売上照合、発注管理。どれも言われた内容は漠然としていて、中身は試行錯誤して詰めた。
決めたことと、その理由
Linuxで、土台から作り直す
最初は受注データの変換をWindowsの上で作っていた。1年以上かかる見込みが、AIを使ったら数週間でできた。そこまで速く作れるなら、土台から作り直したほうがいい。AIは「Linux(おすすめ)か、Windowsに直接置くか」の二択を出してきたが、どちらも選ばずに、先に「やりたいことに対して、この構成で本当に合っているのか」を確かめさせた。問題がないと分かってから、Linuxに決めた。
バックエンドをPythonで統一
9本もあると、アプリごとに書き方が違えば自分でも読めなくなる。土台を1つに決めて、どれを開いても迷わないようにした。
画面は2系統を使い分け
操作の複雑な2本はReactで作り、残りはPython側でHTMLを組み立てる方式にした。全部Reactにすると、直すたびにビルドが要る。画面が単純なものには、その手間が割に合わない。
Dockerで1本ずつ分ける
1本が壊れても、他は止まらない。入れ替えも1本ずつできる。
基幹システムへは読み取り専用
書き込みはパッケージの仕組みに任せ、こちらからは触らない。壊さないための線引き。
起動・配置・バックアップはスクリプトに
環境を作り直す手順を、人の記憶ではなく実行できる形で残すため。
稼働状況の監視は自作
サーバー上で動くアプリを見張って、様子がおかしくなったらチャットに飛ぶようにした。ひとりで見ているので、気づくのが遅れることが一番こわい。
対応状況はRedmineに全部残す
取引先ごとに1件のタスクにして、どこまで終わったかを自分の記憶の外に置いた。確認にはAIも使っている。
むずかしかったこと・工夫

ひとりで9本を保守するので、判断の基準は「自分が忘れても直せるか」。構成をそろえ、手順をスクリプトにして、記憶に頼らない形にしている。

動かしはじめてから

動かしはじめてから、業務が止まった障害は起きていません。想定と違う挙動は数件ありましたが、運用の範囲で直しています。止まらないようにしているのは、根性ではなく作りのほうです ── アプリを1本ずつ分けてあるので1本の不調が他に伝わらない、基幹システムには書き込まないので壊しようがない、環境を作り直す手順はスクリプトにしてあるので最悪でも立て直せる。おかしくなったらチャットに飛ぶので、人が見張り続ける必要もありません。

概要

毎日、何人もの手を止めている入力作業があります。始まりは「生産管理の業務改善を進めてほしい」という広い依頼で、それまでの調べから、受注の取り込みが重いことが分かっていました。これを「取ってくる → 変換する → 登録する」の三段に分けて、順番に自動へ置き換えています。真ん中の変換は、2026年6月から動いています。これは、その前後の段まで広げていく話です。

システム構成
外から届くデータ取得: API連携/RPA
→
取引先ごとの変換Python・稼働中
→
社内の基幹システムへ登録RPA
展開対象 約50社 / データがそろった取引先は、すべて本番で稼働中 ── 2026年6月稼働
分からなかったことと、どう分かったか
誰が、どの取引先を、どうやって取り込んでいるのか
生産管理の担当者一人ずつに、チャットで聞いた。聞いたのは4つ ── 担当している取引先、取引先から届くデータ、それが電子データかどうか、その取引先ならではの処理があるか。分かったのは、取り込みが人に張りついていて、その人しか対応できないことだった。
どの取引先にも使える変換は、作れるのか
まず約2日で、一時しのぎの変換を作ってみた(03)。取引先ごとに、データの形がまったく違った。週や月の単位で届く内示を、日にならす必要があるもの。いくつかのファイルを合わせて読んで、はじめて意味が分かるもの。共通の変換は無理で、1社ずつ組むしかないと見切った。
担当者も、その手順の理由を知らない
ある取引先では、理由が分からないまま2回取り込んでいた。自分で実際に取り込んで、1回ごとにデータがどう変わるかをDBで確かめ、流れを読み解いてから、変換の形を決めた。
作った変換が、正しいのか
それまで誰もしていなかった、その日届いた受注データを残すことを始めた。担当者がその日に実際に取り込んだ結果と、変換の結果を突き合わせる。毎日の仕事が、そのまま答え合わせの「正解」になる。食い違いが出たら、担当者に聞いて確かめる。
決めたことと、その理由
Python(FastAPI)── 業務処理
取引先ごとに変換の決まりが違い、広げる先が約50社ある。1社ぶんを1つの部品として足していける形にした。50社ぶんを1本の処理に詰め込むと、1社直すたびに全社を止めて確かめることになる。増えても、動いているものに触らずに済む形が要る。
React ── 管理画面
処理の状況と、取り込めなかったデータを、担当者が自分の画面で確かめられるようにした。
PostgreSQL / Linux
Windows Server上にHyper-Vで立てた自前のLinuxで動かしている。外部サービスをやめて固定費をなくすのが目的だったため、外に依存させない。
シェルとSQLの移行手順
環境を作り直す手順を、人の記憶ではなく実行できる形で残す。担当が変わっても同じものが立つように。
三段に分ける
一度に全部やろうとすると、どこかで止まったときに全部止まる。段ごとに切り分けて、動いたところから置き換える。
紙の受注は、少ないものは紙のまま
電子データがない取引先は、できるだけデータにする。ただ、少ない受注まで無理に自動にはしない。
むずかしかったこと・工夫

最初は、面倒な取引先だと1社に2週間かかった。AIで書くのは速い。遅かったのは、流れを理解するところだった。突き合わせのしくみができてからは、データがそろえば、どの取引先でも1日で組めるようになった。それでも、食い違いが出たら担当者に聞くので、最後は答えが返ってくる速さで決まる。

動かしはじめてから

データがそろった取引先は、すべて本番で動いている。残りは紙でやりとりしている少量の受注。

1日1社ぶん 2週間 → データがそろえば1日
概要

外のサービスに毎月10万円以上払って動かしていた、受注のしくみがありました。RPAで動いていて、週に1回以上止まる。1社ぶんしか扱えない。仕様が変わると追いつけない。直せる人もいない。まず約2日で一時しのぎの変換を作って置き換え、費用を止めました。以来、毎月の請求書は来ていません。

システム構成
外から届くデータファイル / 連携
→
一時しのぎの変換Windows・Python
→
社内の基幹システム担当者が画面で確認
before: 外部サービス ¥100,000 / 月 → after: ¥0 ── いまは02の土台(Linux)へ移行済み
分からなかったことと、どう分かったか
2日で作ったものを、そのまま本番の土台にしてよいか
早すぎると判断した。一時しのぎとして使い、土台は別に作り直した(01・02)。
どの取引先にも使える変換は、作れるのか
この2日の試しで、取引先ごとにデータの形がまったく違うと分かった。1社ずつ組む、という02の形は、ここで決まった。
決めたことと、その理由
費用を先に止めて、土台はあとで
急ぐことと、正しく作ることを分けた。
自前で動かす
毎月の固定費をゼロにするのが一番の目的だったため、外部依存を断った。
むずかしかったこと・工夫

2日で作れたのは、AIのおかげ。ただ、作れたことと、本番に出してよいことは別だった。2日の試しは、費用を止めるためだけでなく、次に何を作るかを決める材料になった。

¥0月10万円 → ゼロ
概要

月に一度、数百件の単価の更新を、人の手で丸一日以上かけて打ち直していました。長く手つかずだったものを、入社してすぐ、営業から頼まれて引き受けました。パッケージの生産管理システムに、ベンダーの手で一括更新の機能を足してもらい、いまは数分で終わります。

システム構成
更新データ月に一度
→
一括更新の機能ベンダーと仕様調整
→
社内の基幹システム反映
before: 丸1日以上 × 月1回 → after: 数分
分からなかったことと、どう分かったか
DBを直接直してよいか
ベンダーに聞いた。直接さわると、サポートの対象から外れる。だから、機能を足してもらう道にした。
ベンダーの設計書で足りるか
粗かった。自分で要件をまとめて渡し、認識にずれがないかを確かめた。
受け入れテストは通ったのに、現場で問題が出た。どこが悪いのか
ベンダーに伝えても「システムに問題はない」と断られた。テストケースをたくさん作って一つずつつぶし、「単価登録」と「予約単価登録」を組み合わせたときにエラーが出ると突き止めた。現場は、この二つを組み合わせて登録していた。それを示して、ようやくベンダーに認めてもらい、直してもらった。
決めたことと、その理由
直接さわらない
サポートの対象から外れる近道は使わない。
要件は自分で書く
ベンダーの設計書が粗かったため。
組み合わせの数だけテストする
現場の使い方に合わせて。
むずかしかったこと・工夫

ベンダーは、一つずつ確かめていた。現場は、組み合わせて使っていた。現場がどう使っているかを知らないと、このテストは作れない。AIで開発を始める前の仕事だけれど、たくさんのケースで確かめて条件を突き止めるやり方は、いまも変わっていない。自分で作るか、作らせるか ── その判断も仕事のうちだと思っている。

数分丸1日以上 → 数分
概要

仕事の進み具合を、みんなで見られる場所がほしくなりました。用意されるのを待つより、作ったほうが早い。サーバーを立てて、Redmineを入れて、誰が何をどこまでやっているかが分かるようにしました。

システム構成
サーバー構築自前ホスティング
→
Redmineタスク管理
→
チームで共有可視化
決めたことと、その理由
Redmine / Linux
無料で自前運用でき、必要な機能がそろっている。外部サービスの費用も増やさない。
むずかしかったこと・工夫

環境が整うのを待たずに、まず動くものを置く。使ってもらいながら形を決めていくほうが、話し合いを重ねるより早いことが多い。

それより前の仕事06 — 08
概要

手で漕ぐ機械の高さを、シリアル通信でリアルタイムに拾ってグラフにしました。先に採っておいた職人の波形と重ねて、そのズレを点数にします。どれくらい職人と同じ動きができているかが、その場で目に見える。二人ぶんを同時に重ねられるので、職人と新人が並んで、違いをその場で確かめることもできます。

システム構成
手漕ぎ機械の高さシリアル通信で取得
→
リアルタイムでグラフ化波形にする
→
職人の波形と重ねるズレを点数に
決めたことと、その理由
シリアル通信でのリアルタイム取得
叩いている最中に見えないと意味がない。あとから集計するのではなく、その場で波形が伸びていく形にした。
職人の波形を基準に、ズレで採点
「もっと強く」「もっと速く」では伝わらない感覚を、基準と差として見せられるようにした。
二人ぶんを同時に重ねる
職人と新人が並んで、同じ画面で違いを見られる。教える側も、自分の動きを初めて外から見ることになる。
むずかしかったこと・工夫

教える側も、自分の感覚を言葉にできていない。何を測れば「同じ」と言えるのかを、現場と話しながら決めていった。答えは「高さの変化」だった。

概要

鋳造の分析結果を見るしくみが、古くて。ソースコードも残っていない、置き場もすぐ一杯、決まった数台のパソコンでしか開けない。作り直して、社内ならどのパソコンからでもブラウザで見られるようにしました。現場の「こういうのも欲しい」を聞いて、少しずつ足していったやつです。

システム構成
分析装置測定データ
→
自動でDB登録C#
→
社内DBSQL Server
→
ブラウザで閲覧ASP.NET
決めたことと、その理由
C# / SQL Server
社内の他のしくみと道具をそろえて、一人でも保守を回せるようにした。
ASP.NET / Web
専用ソフトを配らなくても、ブラウザさえあればどの席からでも見られる形にした。
むずかしかったこと・工夫

元のしくみは中身が分からない(ソースも無い)状態からのスタート。データの出どころと形を一つずつ確かめて、置き換えても現場が困らないように組み直した。

概要

機械の仕様書のチェック欄を読んで、必要な部品を自動で選び出します。現場が毎日使っているExcelの上に作ったので、誰も使い方を覚える必要がありませんでした。20年前の作品ですが、いまの自分の原点です。

システム構成
仕様書 (Excel)オプションのチェック
→
VBAで条件判定ルール化
→
必要部品リスト自動出力
決めたことと、その理由
Excel VBA
現場がすでにExcelで運用していたため、その上に乗せれば導入の壁がほぼゼロだった。
むずかしかったこと・工夫

仕様の「このオプションがあるならこの部品」という判断を、人の頭の中からルールとして取り出して、条件分岐に落とし込んだ。手作業をコンピューターに肩代わりさせる気持ちよさを、初めて知った仕事。

個人でつくったもの09 — 17

仕事で作ったシステムは見せられないので、触って確かめられるものを置いています。

概要

古い時代の人物を題材にした歴史ものです。作るうえで難しかったのは、記録によって書いてあることが食い違う点でした。そこで一行ごとに「どの資料に書かれているか」と「事実からどれだけ離れているか」を別々に持たせ、確かでないものには必ず断りが並ぶようにしています。

システム構成
資料のデータ出典 / 隔たりを別々に
→
記述の組み立て年表と所属から生成
→
画面canvasに直接描画
TypeScript + Vite / 84ファイル・約24,000行 / 素材ファイルなし
決めたことと、その理由
出典と「事実からの隔たり」を分ける
同じ「確かでない」でも、下敷きのある話とまったくの作り話では意味が違う。ひとつの軸で持つと、その差が消えてしまう。
索引を持たない
本文から名前を拾う作りにしたので、記述を書き足せば、そこに出てくる人物への道が勝手に通る。
素材ファイルを持たない
絵はcanvasの線と面、音はWebAudioの合成。配布も権利も詰まらせない。
むずかしかったこと・工夫

「分からないことを、分かっているように書かない」を掟にした。資料に無いものは、無いと書く。そのために、情報の確からしさを型として持たせる必要があった。

概要

落ち物パズルを、AIでどこまで作れるか・どこまで変えられるかを確かめるために作りました。ルールが世に知られているものを選んだので、出来の良し悪しが自分以外にも分かります。1台のキーボードで最大4人まで、2Dと3Dを混ぜて対戦できます。

システム構成
操作の数値config に集約
→
ゲーム進行1人ぶん
→
対戦の管理お邪魔の受け渡し
素のJavaScript / 依存ゼロ・ビルド不要 / 約4,900行
決めたことと、その理由
手触りを数値で外に出す
押しっぱなしで動き出すまでの時間、接地してから固定されるまでの猶予 ── この手のゲームの気持ちよさは、ほぼここで決まる。いじれる形にした。
固定を遅らせられる回数に上限
上限が無いと、接地したまま動かし続けて永久に固定されない。
お邪魔は「溜める上限」と「一度に降る量」を分ける
一度に全部降らせると復帰できない。負けを確定させないため。
むずかしかったこと・工夫

知っているものを作ると、「動いた」では済まない。触った人が「これは違う」と分かってしまうので、数値を詰めるところが本番だった。

概要

自分では曲がれません。曲がるのは道のほうで、その分岐を切り替えて進路を作ります。しかも分岐は他の走者と共有しているので、切り替えれば相手の流れも変わります。電車・車・飛行機・船の4種類は別々のゲームではなく、同じ仕組みの設定違いです。

システム構成
コース生成環状路+ランプ
→
到達できるか検算生成後に確かめる
→
走行と交通同じ分岐に従う
素のJavaScript / 依存ゼロ・ビルド不要 / 約2,400行
決めたことと、その理由
交差点を作らない
格子を揺らしただけの道は直角だらけになり、ずっとブレーキ待ちになる。実際の高速道路に交差点は無く、あるのは分岐と合流だけ。
生成したコースを検算する
環状路とランプだけでは、どこにいても方向転換できないことが実測で分かった(有向の道4,080本すべてで逆向きに行けなかった)。転回路を足して直した。
速度超過で即死させない
実際に曲がれないときも、普通は滑るだけで脱線はしない。罰は「死ぬこと」ではなく「進路を選べなくなること」にした。
むずかしかったこと・工夫

案内を入れる前は、クリアできたのが16回中0〜1回だった。どの道がどこへ繋がるかは走っている本人に分からないので、案内が無いと本題(ぶつからないこと)が消えてしまう。

概要

数独・カックロ・倉庫番・ラッシュアワーなどのパズルから、五目ならべ・チェス・将棋・囲碁、落ちものまで、ブラウザで遊べるものを55本まとめました。問題はすべてその場で自動生成しています。盤のゲームはCPUと対戦でき、端末どうしをつないでのオンライン対戦もできます。

システム構成
問題の自動生成パズルごとに作り方を変える
→
55本のゲーム共通の土台に登録する
→
オンライン対戦端末どうしを直接つなぐ
素のJavaScript / ビルド不要 / 48ファイル
決めたことと、その理由
答えが1つに決まる問題だけを出す
数独やカックロは、答えが複数あると、論理で詰めていく遊びが成り立たない。答えが1つに決まるものだけを選んで出している。
完成形から崩して作る
倉庫番・ナンバーリンク・橋をかけろなどは、解けた形から崩して問題にしている。だから必ず解ける。
通信を1か所に閉じ込める
55本のゲームはどれも、通信の仕組みに直接触らない。家のWi-Fiで中継する形と、端末どうしを直接つなぐ形を、ゲームを1本も直さずに切り替えている。
むずかしかったこと・工夫

ラッシュアワーや氷の上をすべるパズルなどは、全部の手を調べて最短手数を出し、難しさに合う問題を選んでいる。ヒントも、いつも最短の手を指す。「解ける」だけでなく、どれくらい難しいかまで決めて出すところまでやった。

概要

画面を触ると、光る生き物が生まれます。指でつかんで動かせて、生き物どうしをくっつけると合体して次の世代になります。世代が上がるほど、目が増えたり光の輪がついたりします。マイクに向かって「あー」と声を出すと、生き物が大きくなります。

システム構成
触る・つかむ指の操作
→
合体と世代くっつくと次の世代へ
→
声マイクの音の大きさで育つ
HTML 1ファイル / canvas / 外部ライブラリなし
決めたことと、その理由
HTML 1ファイル
サーバーもビルドも要らない。開けば、そのまま動く。
世代ごとに見た目を足す
2世代目から光の輪、3世代目からきらめきがつく。合体したことが、見ただけで分かる。
声を入力に使う
ブラウザのマイク機能で声の大きさを取り、生き物の育ち方に使っている。
概要

覚えておきたい出費だけを記録して、あとで「あー、あの時の」と思い出すための家計簿です。毎日つける必要はなく、1件目から役に立ち、抜けがあっても壊れません。記録も写真も、使っている端末の中にだけ保存されます。

システム構成
記録する残したいときだけ
→
思い出させる1日あたり/答え合わせ
→
保存端末の中だけ(IndexedDB)
React + TypeScript + Vite / ホーム画面に置けるWebアプリ / テスト64件
決めたことと、その理由
義務をなくす
家計簿が続かない原因は、金額でもカテゴリでもなく「全部つけなきゃ」という義務感。1日サボると破綻して、そのまま開かなくなる。だから、義務のない作りにした。
「1日あたり」と「答え合わせ」を分ける
服や日用品のように手元に残るものは「1日あたりいくらだったか」、高い外食や旅行は「買ってよかった?」の答え合わせ。支出の種類で見せ方を変えている。
サーバーもアカウントもない
記録も写真も端末の中だけに置く。動かし続けるサーバーも、登録の手間も要らない。
むずかしかったこと・工夫

実際の記録を流してみると、家賃のような固定費は「1日あたり」にしても何の発見もなく、「買ってよかった?」と聞く意味もなかった。全部に同じ見せ方をすると、意味のない数字が並ぶ。どの支出にどの見せ方を当てるかを、分けて決めた。

概要

家族が趣味で布を扱っていて、「何をどれだけ持っているか分からなくなる」と言うので作りました。在庫の数だけでなく、布代と作業時間から原価を出して、掛け率を選ぶと販売価格が並ぶところまで入れています。数えるためではなく、決めるための道具にしたかったからです。

システム構成
画面ブラウザだけで動く1ファイル
→
データGoogleスプレッドシート
→
画像Googleドライブ
サーバーなし・月々かかるものなし / 認証は Google の OAuth
決めたことと、その理由
サーバーを立てない
家族が使うだけの道具に、動かし続けるサーバーは要らない。止まったとき直すのも自分なので、動き続けるものを減らした。
スプレッドシートをデータ置き場に
アプリが壊れても、データはスプレッドシートとしてそのまま開ける。「アプリが動かないと何も見られない」状態を作らないため。
原価と価格まで入れる
在庫の数が分かっても、実際に困るのは「いくらで売るか」のほう。そこまで来て、はじめて道具になる。
むずかしかったこと・工夫

使う人はプログラムを触らない。だから、こちらが手を入れなくても動き続けること、そして万一動かなくなってもデータだけは取り出せることを、先に決めてから作った。

概要

いま業務アプリを新しく作るなら、どういう構成になるか。それを一本通して確かめるために作りました。追加・編集・削除、状態と優先度、期限の残り日数、絞り込み、集計 ── 業務システムでよく要るものを、ひと通り入れてあります。絞り込みの条件はURLに入るので、そのまま人に送れます。

システム構成
画面React / Next.js(App Router)
→
サーバー側の処理Server Actions
→
DBPrisma / SQLite
TypeScript / 約200ファイル / clone して3コマンドで動く状態
決めたことと、その理由
Next.js(App Router)
画面とサーバー側の処理を1つの場所に置けるので、一人で作って一人で直すには都合がいい。
Prisma / SQLite
ファイル1つで完結するので、環境を用意する手間が要らない。読む人がすぐ動かせることを優先した。
絞り込みの条件をURLに持たせる
画面の中に隠すと、その状態を人に渡せない。URLに入れておけば、そのまま共有もブックマークもできる。
むずかしかったこと・工夫

READMEに「Next.jsが向いていないもの」も書いた。図を大量に描くツールやゲームには要らないし、APIだけなら他のほうが軽い。何にでも同じ道具を使わないための線引きを、自分の中で持っておきたかった。

概要

Rubyの特性を活かして、家計簿をRubyのコードで書く仕組み、RSpec風のテストの道具、テキストアドベンチャー、Sinatra風のWebフレームワークの4本を作りました。外部のgemは使っていません。サーバーで動かす作りのまま、ブラウザの中のRubyで動かしています。

システム構成
ブラウザリンクとフォームを受ける
→
つなぎリクエストをRubyに渡す
→
4本のアプリサーバー版と同じコード
Ruby 3.4・標準ライブラリだけ / ブラウザ用のRuby(ruby.wasm) / テスト125件
決めたことと、その理由
「受ける部分」だけを置き換える
4本とも、リクエストを受けて画面を返す同じ形で作ってあった。だから受け口をブラウザに差し替えるだけで、アプリの処理には手を入れずに動いた。
テストは別のRubyで走らせる
サーバー版は、テストを別のプロセスで走らせて本体の状態を汚さない作り。ブラウザでは別のプロセスを起こせないので、もう1つ別のRubyを起こして同じことをしている。
標準ライブラリだけで作る
外部のgemを使わないので、HTTPサーバーの中身まで、何がどう動いているかを全部コードで追える。
むずかしかったこと・工夫

ブラウザのRubyには、ネットワークで待ち受ける部品が無く、一時フォルダも見つけられなかった。使っている部品を1つずつ読み込んで試し、足りないものを洗い出してから、差を埋める小さなファイルをブラウザ版にだけ足した。

このサイト18
概要

設計と方針は自分、実装はAIと役割分担で作りました。地図のページは、外の地図サービスを借りずに、公開データから日本地図そのものを描き起こしています。借り物を減らすと、止まったときも仕様が変わったときも、こちらでどうにかできます。

システム構成
Next.js / App Router画面
→
静的書き出しビルド
→
ホスティング無料・高速
決めたことと、その理由
Next.js / TypeScript
静的に書き出して速く・無料で公開できる。型で崩れにくくする。
設計は自分 / 実装はAI
「自分で全部書く」より、最適なやり方で確実に動かすことを優先した役割分担。
地図の自作(公開データ → SVG)
外部サービスに頼ると、止まったときも料金が変わったときも、こちらでは何もできない。自分で描けば全部手の内に入る。
むずかしかったこと・工夫

見た目の心地よさ(微細な動き・余白)と、読みやすさの両立。飾りのための飾りは入れず、意味のある動きだけを残した。

04 / fields

渡ってきた現場。

順番も場所も、あえて伏せています。いつどこで、より、何をしてきたか。 年数だけ添えました。社名を含む詳しい時系列は、職務経歴書でお出しします。

組み込み約1年
巨大な既存ソースと格闘 / C++
人の書いた膨大なコードを読み解いて、思い通りに動かす楽しさを覚えた。一番夢中だった時期です。
工場約2年
ラインとフォークリフト
プログラムから離れて、現場で働いていた数年。現場仕事の大変さは、体で覚えました。
システムエンジニア約1年
AIを相棒に業務改善
外部に払っていた月々の費用をゼロに。手入力を自動に。いまが一番、力を出せています。
メーカー約2年半
自動化の原点
仕様書から部品を自動で選ぶしくみをExcelで。手作業を肩代わりさせる快感を、ここで知りました。
はじまり2年
専門学校
C言語のHello Worldと、3DCGで形をつくる楽しさ。ここから全部はじまりました。
受託約6年
いろんなプロジェクトとリーダー
最大10名のチームでリーダーを任され、複数の案件を回していました。お客さまと仕様を詰め、メンバーに割り振り、抜けを潰して形にする。難しい仕事でも、食らいつけば最後は形にできる。そう思えるようになった数年です。
システムエンジニア約7年
250台のPCを、ひとりで
複数拠点のネットワークも、社内のしくみも。止まるとみんなが困るやつを、全部。
05 / off

仕事じゃないほうの自分。

体は年をとったのに、考え方は中学生のころのままな気がします。

予定を立てずに、出かける

休みの日は、だいたい車で出かけています。しかも予定を決めずに出るので、たいてい大旅行になります。「山形まで」のつもりが、そのまま秋田・青森・岩手・宮城と回って、車中泊で東北を一周して帰ってきたり。山梨に住んでいたころは、年末に思いつきで出たら、初日の出の名所を目指して琵琶湖まで行ってしまったり。またそういう旅がしたいと思っています。

一人の車では、大声で歌う

流すのは、学生のころに聴いていた邦楽ロックやバラードばかり。ときどき洋楽のロック。誰も乗っていないのをいいことに、本気で歌っています。

ゲームは、いまでも

アクションRPGと、格闘ゲーム。こういうところは、たぶん一生直りません。

漫画は、なんでも読む

バトルもの、日常もの、転生もの。ジャンルはあまり選びません。

ラーメン(いまは我慢中)

ダイエット中なので控えていますが、むかし食べた一杯を、もう一度食べたい。「我慢して無理にダイエットして、人生楽しいのか?」とも思います。ただ、疲れやすくなってきたので、そこは気をつけたい。

言うことを聞かない相手には、聞く相手から言ってもらう

小さい子どもが、こちらの言うことをまるで聞きません。ただ、テレビの中のヒーローの言うことなら聞く。それなら本人から言ってもらおう、と思って、そういう仕組みを作りました。別の端末から操作して、ヒーロー側から声が出ます。いまのところ、けっこう効いています。

はじめて作ったCGは、処刑台でした

専門学校で3DCGを習ったとき、課題で何を作ってもよかったので、なぜか処刑台を作りました。目鼻のない人が階段を上っていって、手には鎌、その先にひざまずく人がいる。いま思うと、なかなかの学生です。

「悪くないな」と思うとき
  • 家族と、くだらない話をしているとき
  • 運転していて、誰かに道をゆずれたとき
  • おいしいものを食べたとき(そのあと少し後悔する)
  • ドラマやアニメを、なにも考えずに見ているとき
  • 思いっきり笑ったとき
  • ぐっすり眠れたとき

並べてみたら、ほとんどが家族のことと、誰かに優しくできたときでした。

必要なところに、必要なものを置く。誰かに指図されたから作るのでも、誰かに気に入られるために作るのでもありません。

何が必要かは、自分の頭の中では決まりません。会社の方針として業務の改善を進めたい、という話を聞き、実際の業務をヒアリングしてみたら、時間がかかっているところが分かった。だから、そこにメスを入れました。古いシステムを作り直したときも、いま何が使われているのかを見てから、必要な機能だけを抜き出しています。ヒアリングをして、業務を見て、できることを形にする。そういう進め方です。

だからか、手柄を立てたいという気持ちも、あまりないようです。「こういうものがあったらいいのかな」と考えて、作って、動いたら、もう次のことを考えている。褒められることに慣れていないからか、できあがったものを褒められると、正直、少し困ってしまいます。

人を、まず信用してしまうところもあります。疑うところから入れない性格で、仕事でも、それ以外でも同じです。そのぶん、損もしてきました。

それでも、後悔はしていません。疑わずにいられる自分のほうを、これからも裏切らずにいたいと思っています。

06 / contact

話しかけてください。

仕事の相談でも、ただの雑談でも。「これ自動にならない?」みたいな話は、とくに好物です。

いま
在職中です。引き継ぎを終えてから動きたいので、時期はご相談させてください
働き方
フルリモート希望。福島県在住のため、打ち合わせでの出社は相談させてください
進め方
決めたことも、その理由も、文書に落として渡します。口で説明するより、書いたものを読んでもらうほうが速いたちです。 仕様も設計も Markdown で残しながら作るので、あとから経緯をたどれます
探している仕事
現場の困りごとを聞くところから、設計・開発・運用まで。そこを任せてもらえる仕事を探しています。任せてもらえるのであれば、働き方の形は問いません