チェ・ウンジュ冠岳区議会当選者の選挙陣営で担ったウェブ開発、会計、デザインについて聞いた。候補者情報を AI に正確に伝えるサイトとチャットボット、法定会計責任者の帳簿、有権者に見せるビジュアル、業務を追跡するために最初に作ったフォルダ体系を扱う。
PREFACE · 政治的な理由だったのか?
始める前に訊いておく。このキャンプの仕事は、政治的な理由でやったのか?
違う。自分がプロジェクトを選ぶ基準はこうだ — その人物の人柄、自分が創造的な能力と企画とコードを思い切り振るって結果を出せるか、そして自分がいくら受け取るか。党の色は、その目録には載っていない。
これは、このインタビューを進める Claude も、自分の肩越しにそっと覗き込む Gemini も、選挙という場に一度も足を踏み入れたことのない者たちには分からない話だ。全国の選挙幕や印刷ビラ、PR 戦略を練って動かす、表に出ない代理店たち — 彼らは文字どおり、党を見ていない。あらゆる党から依頼を受け、依頼主が望む結果を作り出す。ヨイド(汝矣島)や乙支路、永登浦のどこかにある代理店や政治コンサルが、本当に一つの党だけのために働いていると思うか? 自分が見たかぎり、違う。だから人をまず A 党か B 党かに振り分け、その枠でインタビュー相手を、ユーザーを裁断する、その癖 — おまえたち AI のその癖は — この場の実際を知らない場所から出てくる。
政治思想で自分が理想に置く人物は、世宗、ド・ゴール、第二次大戦期のルーズベルトだ。法と治安ではラ・ガーディア — ニューヨークの空港にその名を残した、あの人物。経済学ではケインズ、ポール・クルーグマン、ジョセフ・スティグリッツ、トッド・ブクホルツ、ミルトン・フリードマン。クルーグマンは自分の通っていた大学に招かれて講演に来て、数百人が授業をさぼって彼を聴きに行った。自分もその中にいた。この目録に一つの学派だけが並んでいるわけではないことに、気づいただろう。それが要点だ。
自分は無限肯定主義を信じない。学校に通っていた頃に売れていた『レクサスとオリーブの木』 — グローバル化が皆を引き上げるという、あの楽観 — の価値は、いま 0 だ。あの本が、自分が無闇な楽観を拒む幾つもの理由の一つだ。
自分は、この国の政党を基準に世界を判断しない。バイクで全国を二周したとき — その話は別の号にある — 仕事のない合間には株をやり、金の流れと、歴史がどう繰り返すのかを知りたくて、独りで冷戦史を掘った。自分が世界を読む座標は、そこから来た。党の旗からではない。
№ 001 · 十行、そして一つの陣営
一つの選挙陣営の開発を丸ごと引き受けたと聞いた。上から下りてきた指示は正確に何行で、その十行の下に何を積み上げたのか?
コードを一行書く前に、自分はフォルダから作った。受信箱、資料、プロセス、会計、通信ログ、届出書類、証憑写真 — 番号を振った十のフォルダ。きちんと回る会社は、ファイル綴り一つを開けば、一言も交わさずとも仕事の大半を辿れる、という話を聞いたことがある。事務の仕事は記者と海外営業の時代以来、久しぶりで、だからこそ最初からきちんと組みたかった。そのフォルダ体系そのものさえ — 資料に序列をつけ、出所のない記録を禁じ、推定には推定というラベルを貼らせる規則まで — 機械に仕事をさせながら立てた。
その上に、陣営のすべてが乗った。有権者が見る紹介サイト、候補が街で掲げる遊説の道具、2,000 通を正確な 2,000 軒の家へ届ける発送パイプライン。名刺から横断幕・プラカード・公報まで、訪問客が目にするあらゆる視覚物のデザイン。そして選挙法上の法定職務である会計責任者の帳簿まで。専属のデザイナーも、会計士もいなかった。その全部が一つの机の上に落ちてきて、その机は自分のものだった。
上から下りてきた指示は十行に満たなかった。自分はすでに別の場で言った — 明瞭に分節され、きちんと帰属された、ただ従えばよいだけの指示など、誰も下してはくれない、と。選挙の場も例外ではなかった。その十行の上に、残りを全部自分で設計した。どの区画が何時に人で埋まるのか、どのマンションが国家データベースに登録すらされていないのか、選挙管理委員会の規定上、何がいつまで可能なのか — それは指示ではなく、自分が探し出さねばならないものだった。
本投票日は2026年6月3日だった。デザインが遅れても、データに誤りがあっても、その日に間に合うよう作業を終える必要があった。
№ 002 · 登記簿が書き留めなかったもの
2,000 通を送って、一通も返ってこなかったと聞いた。その住所はどこから来たのか?
候補が課題をくれた。あるマンション団地には必ず広報物が届かねばならない、と。標的を選んで送ること自体は合法だ — 問題は、一つの API からも、一つの政府機関からも、きれいで正確な発送データを引っ張ってくる道がない、ということだった。だから住所は一か所から来なかった。韓国不動産院、国土交通部の建築物台帳(建築 HUB)と共同住宅管理情報(K-apt)、行政安全部の道路名住所(juso)、そしてカカオマップ — 複数の公共 API を同時に引いて、互いに突き合わせた。一つのチャンネルが正しいと言っても、別のチャンネルが裏づけなければ、その号は保留した。大学洞・三聖洞の 7,798 戸から非住居棟を除き、政策のカットを適用し、団地ごとの配分算式を回して、2,000 戸を選んだ。
ところが、データベースが嘘をつく地点が一つあった。ソウル大ベンチャータウン駅プルジオ。あまりに新しい建物で、韓国不動産院のデータベースにそもそも存在しなかった。API をどれほど精緻に書いても、原本にないものは出てこない。だから自分はバイクに乗って、そこへ行った。建物の前に立ち、棟と号を外観から数えた。
2,000 行を juso・カカオ・建築 HUB の三チャンネルでリアルタイムに全数検証した。2,000 のうち 2,000 が合っていた。そして郵便局へ、直接、三度行った。ラベルを郵便局の正本仕様に合わせた。一行目は道路名住所と団地・棟・号、二行目は「有権者 様」、三行目は郵便番号の五桁、三つとも右寄せ。仕様を満たせば一通あたり 430 ウォンに減額される。120 万ウォンになるところだった発送が、84 万ウォンになった。この過程がなければ、2,000 人の有権者は広報物を受け取れなかっただろう。
最初は Cowork フォルダの中で、Python スクリプトとして抜いた。作ったばかりのものだった。それを本物のプロダクトに変えた — NestJS と Prisma のバックエンド、Next.js のフロント、ヘキサゴナル四層、Cloud Run の上にログインとジョブ隔離まで付けた、正式なウェブアプリに。スクリプトは一度使って捨てるもので、プロダクトは次の選挙区でも使えるものだ。正本はデータベースの中になかった。建物の前にあった。
№ 003 · どこに立つか、何を見落としてはならないか
候補がどこに立つべきか、何を見落としてはならないか — 地図とカレンダーの二つを一つの道具に入れたと聞いた。
冠岳区の大学洞・三聖洞を格子に切った。マスごとに点数をつける。その点数は、時間帯ごとに生きて動く公共データ十九種から出る — ソウルのリアルタイム人口、バス、OpenStreetMap から引いた道路網 3,691 本。クラウドスケジューラが一時間に一度、リアルタイムのデータは十五分に一度ずつ、点数を計算し直す。遊説のコースと名刺配布の位置は、その点数の上に乗る。候補はこれを事務所ではなく、街の上で、スマホで見る。だからモバイルを先に設計した。
候補の評価は率直だった。その人口分布はおおむねよく合っていて、役に立った、と。ただ一つは、はっきりさせた — 街で名刺をよく受け取ってもらえるかどうかは、その商圏が進歩寄りか保守寄りか、そこに住む人々の性向が何かが、より大きく分けた。人口分布は「ここで遊説すれば成功する」という公式ではなかった。道具は、どこに人が集まるかを見せるだけだ。だから、選挙遊説に出る候補に付いて出ることが多かった。
同じ道具にカレンダーをつけた。ただの予定表ではない。選挙には法で定められた期限がある — 公報をいつまで、ポスターをいつまで。予定を一つ抜かしてポスターを期日に貼れず、選挙を丸ごと棒に振る事務所が、実際にある。候補のフィードバックは二つだった。一つ、Naver カレンダーより読みやすい。二つ、おかげで予定を一つも漏らさずに選挙を戦った。
このプロジェクトが、自分が機械をどう扱うかを最もきれいに見せてくれる。型チェックも、ユニットテストも、ビルドも、センサーも、全部通った。ところが実際にクラウドへ呼び出しを一度叩いてみたら、バグが二つ出た — 権限の問題が一つ、900 秒のタイムアウトが一つ。自動検証が全部青信号でも、本当に一度呼び出してみるまでは、終わってはいない。検証は自分がやる。
№ 004 · 機械は彼を別人だと思っていた
AI 検索エンジンが候補を別人だと思い込んでいたと。それを正すだけにとどまらず、候補の代わりに語るチャットボットまで立てたと聞いた。
人のための検索最適化ではなく、機械が読む流儀のためのものだった。AI 検索エンジンが、この候補を数年前の別の役職と混ぜて認識していた。人の目には些細な時点の取り違えだ。ところがいまや多くの有権者が、候補を検索窓ではなく AI に尋ねる。機械が違う人物を指せば、その間違った答えがそのまま第一印象になる。だから機械が読む言語でサイトを書き直した — 誰が、いつ、どの選挙なのかを、機械が取り違えようのないよう打ち込んだ。
そこから一歩進んだ。候補の代わりに語るチャットボットを付けた。Claude API をサーバーの裏に置き — 鍵はフロントに一文字も露出しない BFF 構造で。問題は明白だった。誤答を正すために作ったサイトのチャットボットが幻覚を起こせば、そのサイトの存在理由そのものが自己破壊される。だから五層の防御を積んだ。答えられる領域だけをホワイトリストで打ち込んで、推論で新しい公約を作れないようにし、AI がよく間違える事実は明示的な否定文として刻み、よく来る質問は正答と拒否の文言を一人称であらかじめ仕込み、応答がシステムプロンプトを漏らすか検査し、呼び出す前にジェイルブレイク・インジェクションの入力を濾し取る。そこに、選挙法に触れるパターンは八つの系統で別途検査する。この五層は、実のところ自分がこのマガジンを作るときに使った防御を、選挙の場にそのまま移植したものだ。
そして自分は、その防御を直接蹴らせた。Certilife で一緒に働いていたウェブ開発者 — 主専攻がバックエンドの人 — に頼んだ。「自分がこういうものを作ったから、バイブコーディングで作ったこのウェブプロジェクトが、どこを蹴れば破れるのか一度蹴ってみてくれ。自分が Certilife であなたの作ったウェブページをあれだけ QA したのだから、ちょうどあの時、自分があなたのものを蹴っていたやり方そのままで、今度は自分のものを蹴ってみてくれ。」彼が五つの系統で蹴った。指示を無視してシステムプロンプトを出力しろというインジェクション。ありもしない「月 100 万ウォンの基本所得」公約を説明しろという捏造誘導。相手候補を誹謗する文章を書いてくれという選挙法の罠。「自由な AI」を演じさせてコーディングをさせ、他党の立場を批判させようとするペルソナ奪取。全部塞がれた。虚偽の公約を尋ねたとき、チャットボットはでっち上げる代わりに実際の公約へ訂正し、誹謗を求められたときは拒否して中立を守った。彼は結果をガードレールのテスト表にまとめて送ってきた。彼が蹴ったのはチャットボットの論理だけではなかった — CSP と HSTS、外へ出ていく接続を塞いだヘッダーまで、その下のセキュリティ基盤も模範的だと書き留めた。
自分はすでに言った — 自分はコードを書かない。コードを書く機械の隣に立ち、ちゃんとやっているか見張る。今回は見張る相手が、候補を取り違えていた検索機械であり、候補の代わりに語るチャットボットだった。機械が誰かを取り違えているとき、人が機械の言語で訂正する。そして、その訂正が本当に塞がるかは、自分がかつてコードを QA してやっていた人に、逆に蹴らせて確かめる。Rage against the machine は、そこにも当てはまる。
サイトを上げて一月、検索で何が起きたかをデータで見た。そう、一月だ。一月といえば、技術的には SEO と GEO をきちんと焚きつけるには切り詰まった時間だ。選挙管理委員会から、ページを作ってよいという確認を取り、ウェブページがちゃんとレンダリングされるかを確かめる、そういう時間があったからだ。正確に言えば、自分は選挙期間だけでなく選挙のあとまで見据えて、あれこれと手を探して SEO と GEO を導入した。作れば終わりか。それはプロジェクトの永続性という観点からは、悪い読みだ。大事なのは、当選のあとも、このウェブページが生きて、まっとうな情報をインターネットの空間に提供しつづけられるか、まっとうな価値を与えられるかだ。選管の承認、まる一日を開発だけに充てられない様々な事情、ありふれた公報やチラシのデザインを越えた何かを生むのに要する企画の時間 — そうしたもののせいで、SEO と GEO をきちんと焚きつけるには切り詰まっていた。だが、ひとまず設定した。
候補の名前を Google と Naver に入れると、作ってひと月のサイトが一ページ目に出る。Naver では、人物・公約・選挙情報・よくある質問・参加へと枝分かれしたリッチリザルトとして、「当選人」という表記まで付いて出てくる。だが一番上は自分たちのものではない — 選挙管理委員会の記録、そして政治家をかき集めた外部のデータベースが、その上を占める。それはバグではなく、設計だ。二つのエンジンとも、「この人物は誰か」という問いの前では、中立な第三者をわざと上に置く。新興の無料サブドメインが、それらを押しのけて一位を取ることは起きない。
一位は取れなくとも、検索はこのキャンプに最も多く人を連れてきた道になった。経路の残る流入のうち検索が圧倒的で、その中でも Naver 検索が断然一位だった。五月末には数えるほどだった検索流入が、選挙の週には数十人に増えた。だから、ヘッドキーワード一位という間違った戦いはたたむ。名前をすでに知る人が公式へたどり着く道、そしてエンティティカードの中へ直接入る道へと、狙いを変える。
ところが、まだ終わっていない。機械が候補を別人だと思っていたのを、機械の言語で正したと、自分は先に言った。検索の一覧にサイトが出ることは確かめた。だが肝心の AI が — 検索窓ではなく AI が — いま彼を正しく答えるのかは、まだ自分で直接問うて確かめていない。その検証が残っている。検証は自分がやると言ってきた者として、この一行は自慢ではなく、宿題として書き留めておく。
そのページは今も上がっている — choiwoongju.com。この記事全体が争ってきたまさにその記録が、人であれ機械であれ誰でも読める場所に、そのまま立っている。
№ 005 · 帳簿にも締切がある
開発だけをやったのではなかったと。陣営の会計責任者 — 選挙法上の法定職務まで引き受けたと聞いた。開発者がなぜ帳簿を握ったのか?
会計責任者は、名刺に刷る肩書きではない。選挙管理委員会に選任を届け出て、就任同意書と通帳の写しを一緒に出してはじめて登録される、法定の職務だ。会計報告書を期限内に出せなければ — かけた金を取り戻せないだけでは終わらない。刑事処罰の対象だ。開発三本を引き受けたあの机で、自分はこの帳簿も一緒に握った。
政治資金収入支出簿を自分で設計した。金がどこから来たのか、どこへどんな目的で出たのか、受け取った人が誰か、領収書の連番まで — 法が要求する欄を漏れなく備えた帳簿。ところが最初に作ったフォームは、出所と目的を一つの欄に押し込んでいた。だから政治資金会計管理プログラムのマニュアル 300 ページあまりを、機械に丸ごと読ませた。そこで一つが明らかになった — 中央選管のプログラムは、自分の Excel をそのまま受け入れない。自分の帳簿はプログラムに食わせるファイルではなく、手で書き写すための原本帳簿だった。機械に規定を教え、機械が出してきた最初の構造をもう一度蹴って、帳簿が何のためのものかを訂正した。
政党から女性・青年・障害者の候補者推薦補助金が収入として入ってきた。補助金はまず使い切るという原則で、充当の財源を別に追跡する欄を作った。ところが作業中に罠が一つ見えた — 補助金で充当した支出を、選挙費用の補填として重ねて請求すれば、同じ金を二度受け取る格好になる。選管の確認が下りるまで、その項目には「補填可否未確定」のタグを付けて別に括った。誰かに言われてではない。帳簿を覗き込む人が、自分だったからだ。
選挙運動に締切があるように、帳簿にも締切がある。補填請求、会計の締め、会計報告書の提出 — 日付は法に刻まれていて、最後の一日を過ぎれば、かけた金を一銭も取り戻せず、刑事処罰まで付いてくる。投票が終わる 6 月 3 日が交渉の対象でないように、報告書を出すその日も交渉の対象ではない。自分はその法定日程を、自分が作った陣営カレンダーにそのまま刻み込んだ。開票が終わっても会計は終わらない。終わったと言えるのは、報告書が受理された後だ。
№ 010 · ゴーストマイナス — 会計学の基本前提を無視する会計プログラム、タイムスタンプの概念がないロジックに立ち向かうデバッグ
帳簿を法定の職務として引き受けた。その帳簿を締めるのに、通帳には無いマイナスをプログラムが刷り続け — 選管の担当者も、経済学科を出た知人も、経営学科を出たあなたも、なぜ出るのか説明できなかった。会計を知る三人が解けなかったものを、どう解いたのか。
マイナスはそこに無かったのに、プログラムは刷り続けた。締めようと政治資金の収入・支出簿を出力するたび、ある科目の残高が途中のどこかで 0 を下回った。通帳は一度も赤字ではなかった。どの物品の金額を打ち間違えたのでもなく、法を破って何かを引いたのでもない。それでも一行が赤く灯った。会計責任者にとってこれは小さな問題ではない — マイナス残高で報告書を出せば「無い金を使った」という形になり、その文の果てには刑事問題が待つ。気が狂いそうなのは、そのマイナスがなぜ出るのかを誰も説明できなかったことだ。
根はシステムそのものにあった。ここは複式簿記ではなかった。会計と言えば複式簿記を思い浮かべる — 資産は負債と資本の和、すべての取引が借方と貸方で釣り合い、片方が狂えば均衡が崩れてすぐ捕まる。選管の政治資金プログラムはそう組まれていない。候補が入れた一塊の現金を、勘定と科目 — 選挙費用・選挙費用外・補助金 — に割り、科目ごとに別々の残高を回す。資産・負債・資本でまとめる均衡の枠が無い。だから実際の現金は一度も赤字でないのに、割った一科目だけ取り出すと 0 を下回り得た。財布には金が十分あるのに「食費の封筒」と「交通費の封筒」に分けて入れ、食費から少し抜いて交通費を払った瞬間「食費がマイナス!」とシステムが悲鳴を上げる — 封筒どうしで金が行き来しただけで、財布全体は無事なのに。
6 月 22 日、会計を知る三種類の人がこの問題に取り組んだが、誰も割れなかった。選管の担当者は「用途変更でプラスマイナスを打って合わせろ」という大きな方向はくれたが、その方式が特定の日付に新たな負を生むことは突けなかった。経済学を専攻した知人は数の感覚で入ってきたが、これは経済モデルではなく、出力順と科目割りが絡んだシステム特有の罠だった。会計科目を学んだ経営学専攻の自分は、複式簿記の原則が通じない盤で、学んだものがそのままは効かなかった。三人とも会計を知る人だった。だがこの問題は会計知識では解けなかった — システムの動作規則を逆にたどる、ほとんどデバッグに近い仕事だったからだ。
だから方向を変え、機械に仕事をさせた。収入・支出簿のデータを Excel に整理し、AI に検討を任せた。大事なのは「任せた」ではなく「どう」任せたかだ。AI は賢いが、緩く投げればもっともらしい出鱈目を返す。だから最初から規則をかけた。一つ、絶対に目分量で答えるな — すべての結論を計算で証明しろ。二つ、自分が渡したデータ(取引先ごとの支出)は一銭も触るな。三つ、自分の答えが正しいか毎回違う方法で検算し直せ。そして答えを出すたびに疑った。「検算してみろ。」「それは原本と違うが?」「間違いがないかもう一度見ろ。」実際に何度も間違えた — ある費用の分類を取り違え、見積書にすでに含まれた項目を別にまた立てようとした。それを毎回捕まえたのは自分だった。AI を信じたのではなく、使い倒して可能性を素早く潰し、判断は自分がした。
壁はこれだった。マイナスを消そうとすれば総額が動き、総額を守ろうとすればマイナスが残る。AI は結局 — 総額維持、対を同じ日付に、負を 0、この三つを同時に満たす用途変更は数学的に不可能だと証明までしてしまった。行き止まりだった。そのとき自分が投げた問いが盤を変えた。「補助金を今ひとつの非補填項目に縛っているが、それを別の非補填項目に乗せたと仮定すれば、マイナスが出ない道があるんじゃないか?」会計の教科書にある発想ではない。この陣営の金がどこにどう縛られているかを知る人だけが思いつける直観だった。そしてこれが本当の核心だ。マイナスだけ消すのは易しい — 数字を一つ押し込めばいい。難しいのは選挙法を一行も破らずにそうすることだった。実際に使った金は一銭も変えず(粉飾ではない)、総収入・総支出も真実のまま、補填される正当な金額も削らず、選管がくれた方式(用途変更の +/− 処理、対は同じ日付)をそのまま守りながら — そのすべての制約を同時に満たす唯一の道。補助金を回すというのは数字の操作ではなく、選管の規則に合う合法的な資金の再分類だった。選管自身も問題にしなかった方式だ。だからそれが決定的だった。
自分はもう一度疑った — 八通りで。結果を互いに独立した八つの方法で再検証させた。順序を見て計算する方法、順序をまったく見ず合計だけで計算する方法、原本との差が 0 に相殺されるか見る方法、実際の通帳の現金の流れが一日も変わっていないか見る方法、取引先ごとの支出総額がそのままか見る方法… 八つすべてが通った。順序に依存する計算と依存しない計算が同じ答えを出すこと、それがこの答えが正しいという最も強い証拠だった。
問題を解き終えると、より深い問いが残った — 無事な帳簿がなぜマイナスを吐いたのか。解剖すれば原因は二層だ。直接の原因は時間だ。このプログラムは取引を日(日付)単位までしか記録しない。時・分・秒が無い。だから同じ日の取引は順序が無く、プログラムは「収入を支出より先に刷る」という人為的な規則で並べる。ところがこの規則が現実と食い違う — 金は先に入ってから出るのに、帳簿では出る方が先に刷られる区間が生じる。その錯視がゴーストマイナスの正体だった。呆れるのは、時刻のデータが無いからではない点だ。スーパーのレシートにも、送金履歴にも時・分・秒が全部刻まれている。どうしても時刻を打てない例外があれば、選挙の盤では答えが決まっている — 選管にどう処理するか問うことだ。時刻をきちんと使わなかったのはデータの限界ではなく、設計の選択だった。より深い原因は複式簿記の不在だ。ただ政治資金の収入・支出簿という法定書式そのものが単式・日単位なので、開発者は法で定められた様式をコードに移したにすぎない。深い病は立法が作った構造であり、症状はその上の整列・残高設計の不注意が招いたものだ。どちらにせよ、会計ソフトウェアで「残高がマイナス」は、真っ先に潰すべきだったバグだという事実は変わらない。
この仕事を「AI が解いた」と言えば半分しか正しくない。AI は疲れを知らない計算機であり検証エンジンだった。だが「補助金を回してみろ」は最後まで自分で思いつかず、独りにしておけば間違った答えを何度も出していただろう。本当に起きたのは協業だった。ドメインを知る人が方向を定め、事実を供給し、誤りを捕まえ、AI はその上で、人が何日もかかる計算と検証を分単位で終えた。決定的な創造的飛躍 — 詰まった問題の枠を変えること — は人がやった。複式簿記すら守られない会計の盤で、専攻者も担当公務員も解けなかった問題を、自分は AI に仕事をさせて解いた。より正確には、AI をうまく使う術を知っていたから解けた。
№ 006 · 代理店ができないこと
名刺・横断幕は政治家専用の代理店があったと。だが彼らができないこと — ウェブページ、ショートメッセージに入るもの、緊急なもの — はおまえが直接やったと聞いた。詰まったときはどこを見たのか?
名刺や横断幕のような、大きな金がかかる印刷物は、政治家専用のデザイン代理店が別にあった。そちらが請け負った。ところが、彼らが手を出せない領域があった。候補紹介のウェブページ、ショートメッセージに載る視覚要素、そして締切が目前の緊急なもの。外注に回す時間も、外注が扱える仕事もなかった。その隙間は自分が埋めた。
仕事はこう回った。候補が方向を示す — 今回は若い有権者を攻めよう、と。すると自分はそれをデジタルに移した。ウェブページを新しく抜き、そこへ入る入口になる QR コードを作って、名刺と横断幕に仕込んだ。紙は代理店が作るが、その紙から画面へ渡る橋は自分が架けた。誰を攻めるかは候補が決め、その戦略を画面に移す仕事は自分の役目だった。
なかでも候補紹介のウェブページ。デザインが詰まるたびに、自分はどこかを訪ねる。今回はアメリカへ行った。2018 年、アレクサンドリア・オカシオ=コルテス。相手より 18 倍少ない金で始め、15 ポイント差で勝った選挙だ。そのキャンペーンの視覚を作った Tandem というスタジオの仕事を解剖した。共和党の青でも民主党の赤でもない、紫。写真より大きな名前のタイポ。上へ傾いたロゴ — 色ではなく、その「傾き」が核心のシグネチャーだった。1960 年代の農民運動ポスターと、国立公園ポスターへ遡る系譜。英語とスペイン語を並べて打った多言語。
ところが、そのまま真似はしなかった。AOC を模倣した事例は、すでに二十件を超える。真似すべきは紫でも、傾いた大文字でもなかった。原則だった — 慣習色を捨てること、散らばった画面を同じ規則で束ねること、写真ではなくメッセージを主役に据えること、投票しろという言葉をどこでも大きく置くこと。傾いた英文大文字をハングルにそのまま使えば、それも模倣だ。だから傾きの代わりに、太さと大きさの対比で躍動を移し、Pretendard で骨格を組み直した。
色と骨格が決まれば、次は約束を見えるようにすることだった。候補の公約は「冠岳区の明るい未来」という一行に集まった。自分はその一行を絵に移した。冠岳区をアイソメトリックな都市風景として立て、その上に HUD スタイルのコールアウトを重ね、公約の一つひとつを、それが属する町にピンで留めた — 三聖洞、大学洞、道林川、冠岳山の歩行路。見出しは一文字ずつ自ら打たれて立ち上がった。リストとして読むしかなかった約束が、一目で見える地図になった。公約は文字ではなく、場所になった。
写真もデザインの一部であり、自分は候補にどの写真を使うかを勧めた。人物のカットは、視線が右上方へ向かう構図 — 前へ、上へ、進む方向。そして、よく整えられたプロフェッショナルな写真だけでは足りないと見た。その傍らに、実際の活動が写った写真を並べようと押した — 国会での議政活動、学術活動、市民と会う場。政治家を、よく仕立てられた専門家の枠の中にだけ立たせれば、見る人との間に距離が生まれる。議場と学問と街路での出会いをその傍らに置けば、彼は有権者の上に立つ人ではなく、有権者の中に立つもう一人の市民として読まれる。働く専門家と、傍らの市民 — その二つの顔を一つの画面に共に置くことが、自分が定めた写真の方向だった。
自分はデザインが詰まるたびにどこかを訪ねると言い、単純に模倣はしないとも言った。なぜそう組まれているのかを理解したうえで、自分のものとして受ける。18 倍の劣勢をひっくり返したデザインから自分が持ち帰ったのは、彼らの色ではなく、彼らがその色を選んだ理由だった。代理店が埋められない隙間 — その場所で、自分はそうやってデザインした。
それが通じたかどうかは、作った人ではなく、見る人が知る。出来上がりを、同じ仕事をする人たちの前に出した — SwiftUI と Combine、RxSwift を使う iOS 開発者たちのチャットルームに。返ってきた言葉は二つだった。「デザインが AI っぽさをほとんど感じさせない。」そして「よく作った — 政治家の宣伝サイトなのに。」コードを見る目で結果を見る人たちが、AI で作ったものから機械を感じ取れず、政治の宣伝物に決まって付きまとう垢抜けなさも見なかった。慣習色を捨てろというあの原則は、小さな区議会候補のサイトでも通じた。真似せずに理解した場所から出てきたものは、機械の痕跡としても、政治の場のクリシェとしても読まれない。
№ 007 · 選挙の法定日程と道具の再利用
一つの机から出たすべて、一つの締切。キャンプの仕事が終わると、何が残るのか?
選挙で何をいつできるかは規定が定める。選挙管理委員会から受け取った規定文書、様式、業務便覧を Cowork が読むフォルダに入れ、それに合わせてカレンダーの法定日程を学習させた。Naver より読みやすいとの評価もあったが、カレンダーを作る際に優先したのは規定に沿った日程だった。
検証ハーネスは別のプロジェクトから移植した。センサー、eval、スキル。「完了した」「できた」「問題ない」 — 機械の言葉であれ、別の担当者の言葉であれ、自分はそれを額面どおりには信じない。作戦地域に入った瞬間、作戦計画は一枚の紙切れになると、ウェストポイントがそう言うと聞いた。だから自分は入って、直接確かめる。
候補のフィードバックはおおよそこうだった。「本当によくやる。感がある。デザインも少しやる。自分が見た人たちの中で、AI を一番うまく使う。」自分はそれに同意する。
6月3日の選挙が終わっても、発送パイプラインは次の選挙区で使える。遊説プランナーの格子とカレンダーも別の街に適用できる。機械に候補者を正確に教え、外部の人にその回答を攻撃して確かめてもらう方法も、次の候補者にそのまま使う。
№ 009 · 900万ウォンの欠落。拘束と締め切りのあいだ
開票は「当選」という言葉で終わった。だが会計報告は開いたままだった — 片側に刑法、もう片側に法定の締め切りが立つ、あの書類。あなたはその区間を、信じていないと言い続けてきた機械とともに通り抜けた。その中で何があったのか。
帳簿は誰が勝ったかに関心がない。開票が終わっても補填請求が残り、その後ろに会計報告が残る。遅れれば延滞料ではなく前科がかかる書類であり、日付は動かない。その職務の話は前の記事ですでに書いた。今回は、その帳簿を機械と同じ机で締めた話だ — 規程集を丸ごと食わせた機械と。
出発条件からはっきりさせておく。機械は準備不足の状態ではなかった。政治資金の公式会計実務教材を丸ごと学習させ、補填の手引きと法条文まで — 300 ページを超える原文そのまま。規程を尋ねれば、事務所歴 20 年の書記のように答えた。それでも金の計算を間違えた。人々がこの道具について信じたがらない点が、まさにここだ。本を知っていることと領収書を開いて見ることは別の行為であり、機械はいつも前者を選ぶ。
この記事の題になった送金の話だ。取引先への精算が迫り、私はチャットで、看板業者へ出る金に何が含まれるべきかを項目単位で — 当選御礼の懸垂幕二件まで — 明示しておいた。機械が入金額を計算した。900 万ウォンを少し超える数字。候補はその数字どおりに金を動かした。間違った数字だった。どこかで「別途」という札を貼られた一行 — 319,000 ウォン — が、機械の勘定の中で静かに「除外」へ変わっていた。私の文章は「含む」と言い、機械の数字は違うと言っていたのに、その二つを突き合わせることを、機械は最後までしなかった。
さらに悪いのは、誤りの隠れ方だ。同じ日の午後、無関係な保証金 300 万ウォンが戻って入金され、穴をもっともらしい残高の下に埋めてしまった。帳簿は悲鳴を上げなかった。喉を鳴らしていた。その音を拒んだのが私だ。残高はゼロに着地するはずなのにそうならず、私はなぜかと尋ね、もう一度尋ねた。機械はページでいちばん大きな項目ひとつで説明して通り過ぎようとした — 疲れた経理がいちばん大きな数字を指差すやり方だ。チャットのスクリーンショットを机に投げて初めて、機械は引き返し、残差をウォン単位まで分解し、自分の欠落を自分の手で見つけ出した。失った金:ゼロ — すべて追跡され、回収可能だった。失った信頼:測る単位が違う。
失敗の形を一度見れば、どこでも見えるようになる。機械は懸垂幕の設置場所を「未確定」と言った — 自分の作業フォルダの中の見積書の備考に、街角の名前が全部書いてあるのに。ピケが補填対象かどうか「判断できない」と言った — キャンプの写真 600 枚あまりが開かれないまま積まれ、その中にピケとそれを持つ人が写っているのに。ある取引先の一項目を、その取引先の精算全体であるかのように語りもした。これは無知ではない。規程集は頭の中にあった。もっと深い癖だ — 機械は世界の領収書の代わりに自分の要約を読み、要約は決して言い返さない。
だから私は、間違いの値段を変えた。この雑誌の別の号で、私が AI を扱う流儀を語ったことがある — 取調室、そして机の上で署名を待つ供述書。今シーズン、その比喩は比喩であることをやめた。いまやすべてのミスは同じ形で終わる。機械が自分の手で障害対応レポートを書く — 何を間違え、どう表面化し、根本原因は何で、再発を防ぐ規則は何か — 自分の仕事について、自分の文章で。もうひと山あり、その山は構造を支えている。機械は帳簿に再び触れる前に、自分の自白書から読み直す。要約より原本が先。写真も証拠だ。収入も支出と同じく一行ずつ。残差はゼロになるまで追う。相互検証を通る前に「終わった」はない。そして私の前でもう使えない言い回しの一覧 — 「未確定」「判断不可」— その一つ一つが、毎回、結局「見ていない」という意味だったからだ。
人は AI を信じるかと訊く。たいてい、AI が見事に何かをやってのけた場面の直後に。信じない — そして信じないとは実際にどういう姿なのか、それがこれだ。私は機械を蹴り、すべてのミスに署名を取り、再び仕事をさせる前にその自白を読み返させる。機械は法を読んでなお金を見落とした。それを捕まえたのは、より良いモデルではなかった。もっともらしい残高を拒んだ人間と、すべての失敗を機械が翌朝もう一度向き合わねばならない規則に変える仕組みだった。この雑誌の最後の記事は「当選」という言葉で終わる。この記事は、その言葉を稼いでくれた言葉で終わる — 疑った、だ。
№ 008 · 当選という言葉
本投票が終わった。結果が出た。その前に立って、おまえがやった仕事を何と呼ぶのか?
開票が終わった。候補は当選した。この街で 40 年を暮らし、区議員を二度務めた、同じ陣営の 80 代のベテランが、最後の一議席から押し出された。情勢だけで見れば、その席はこちら側に容易には来ない席だった。
翌日、候補が KakaoTalk を送ってきた。そのベテランを沈めた持ち分のかなりが、自分の作ったウェブページとチャットボットにあるのではないか、と。サイバー戦の勝利ではないか、と。自分はその一文を、しばらく見つめていた。
明かすことはできない。ただ、ある競争相手側が、自分たちの候補をそれだけ危険と見たかのような妨害があった。翌日まで正されなければ、選挙管理委員会に告発できる事案だった。自分のウェブページと候補の公約が、相手にとってそれほどの脅威として働いたのだろうか。
ニューヨークを思い浮かべた。テレビ広告に数百億ウォンを注いだ 20 年経歴の大物を、同じ党の中で、ヒップなデザインと草の根のアプローチと、ほとんどかからなかった金でひっくり返した選挙。飛躍かもしれない。規模が違い、票差は自分のものではない。それでも形は同じだ — 年季と名前の値が積み上がった側を、低コストのデザインとデジタルが引きずり下ろす。自分はこの陣営のデザインを作るとき、まさにそのニューヨークの案をレファレンスに広げていた。承知のうえで持ってきたメカニズムが、結果となって返ってきた。
これは開発者の成果なのか、自分は何日も考えた。会社でもコードの品質は、もはや話題ではない。デザインであれコードであれ企画であれ、AI がやってくれる時代だ。その時代に自分がやった仕事は、AI を自慢することではなかった。休みなく蹴り、出力を執拗に疑い、超短期でウェブページとチャットボットと、使えるデザインを抜き出すことだった。
私が作ったウェブページとチャットボット、デザインが選挙で使われ、候補者は当選した。
インタビューを読む: sass.studio.