Slide 1

Slide 1 text

~AIコーディングをセッションで終わらせない~ PHPライブラリ開発 における コンテキスト承継設計 同人ソフトサークル Project ICKX 若葉 章 @effy_staffs (EFFY開発チーム)

Slide 2

Slide 2 text

自己紹介 • 若葉 章(わかば あきら) • 2010年~ 同人ソフトサークル project ickx • プロデューサー / 営業 / インフラ / サーバサイド... / ゲームの実開発以外全部 • 本職はスタッフエンジニアっぽいこともするphpエンジニア • php続けてもうすぐ27年 php3の頃からお世話になっています • 趣味は自転車とコーヒーとアマチュア無線、最近BEVも始めました • Nintendo Switch で『VERTICAL STRIKE ENDLESS CHALLENGE』販売中 • 早ければ来年度中に処女作にして最高傑作『Effy one of unreasonable “if”』を Steamでリリースします • Qiitaで『phpで高速に・省メモリ・確実に日本語csvを扱う方法』公開中 https://qiita.com/wakabadou/items/84b48ca12f25fb2fb69c 「composer require fw3/streams」をよろしくね。 「composer require tacddd/tacddd」もよろしくね。 「composer require bypassflow/crypt」もよろしくね。

Slide 3

Slide 3 text

Tyrell IVE Sports complete Santillo Cicli RB-01e

Slide 4

Slide 4 text

icom IC-705 Toyota bZ4X Z FWD

Slide 5

Slide 5 text

Effy one of unreasonable “if”

Slide 6

Slide 6 text

宣伝 SJIS CSVを直接扱えるライブラリ “fw3/streams“ 来るべきAI化時代に輝く “bypassflow/*” をよろしくね

Slide 7

Slide 7 text

お知らせ と 前提条件

Slide 8

Slide 8 text

本登壇の知見はVS Codeにおける ChatGPT Codex拡張利用時に 最大の効果を発揮します

Slide 9

Slide 9 text

なんでわざわざ VS Code拡張なの?

Slide 10

Slide 10 text

以前より適当(*1)な冪等性を発揮する AIによる実装を研究していました *1) てき‐とう〔‐タウ〕【適当】[名・形動](スル) ある条件・目的・要求などに、うまくあてはまること。 かなっていること。ふさわしいこと。また、そのさま。 コトバンク https://kotobank.jp/word/%E9%81%A9%E5%BD%93-575436

Slide 11

Slide 11 text

同じ入力に対して安定すべき部分は 極力揺らがない出力が欲しい

Slide 12

Slide 12 text

え??? それはAIの旨味を無効化するのでは?

Slide 13

Slide 13 text

この辺りはPHPカンファレンス香川2026でお話した AIの揺らぎに “コシ” を与える階層化品質設計 をご参照ください

Slide 14

Slide 14 text

閑話休題

Slide 15

Slide 15 text

なぜ適当な冪等性が 欲しいのか

Slide 16

Slide 16 text

組織として開発する場合 『いつ誰が作業してもほぼ同じ結果』 を得られる必要がある

Slide 17

Slide 17 text

そのため

Slide 18

Slide 18 text

組織における実行環境として 過去の会話で結果が変化してしまう パーソナライズされたAI環境は 目的に対して極めて低品質といえる

Slide 19

Slide 19 text

個人が思索を深める分には 問題ないんです むしろあるべき

Slide 20

Slide 20 text

個人化のための記憶は 便利な機能として提供されています 例:Codexメモリ

Slide 21

Slide 21 text

つまり Codex拡張ならば

Slide 22

Slide 22 text

画像の通りの設定とすれば

Slide 23

Slide 23 text

セッション単位で パーソナライズがない フラットな環境をほぼ保証できる

Slide 24

Slide 24 text

PHPライブラリ開発 における コンテキスト承継設計

Slide 25

Slide 25 text

なんで個人で開発している ライブラリで組織を前提とした 開発スタイルを要求しているんです?

Slide 26

Slide 26 text

(1) 3日経ったら自分も他人って 言うでしょ

Slide 27

Slide 27 text

(2) 毎度出来がバラバラのコード 出されたらレビューしんどくね? 俺はしんどいしこれ以上 胃にポリープ作りたくない

Slide 28

Slide 28 text

(3) 安定して出力できるのなら 『正しく』ゼロレビューで 出力を利用できるよね

Slide 29

Slide 29 text

『正しく』ゼロレビューについては 他に品質保証・品質管理の観点が 必要ですが、本日は対象外となります

Slide 30

Slide 30 text

AI時代のソースコード品質 -定義・管理・保証を考える-

Slide 31

Slide 31 text

としてどこかで登壇するので その際はよろしくお願いします

Slide 32

Slide 32 text

閑話休題

Slide 33

Slide 33 text

(1)(2)(3)の課題解決ためには 組織開発と同じ要求が必要と 定義できました

Slide 34

Slide 34 text

さて

Slide 35

Slide 35 text

セッション単位で パーソナライズされていない フラットな環境

Slide 36

Slide 36 text

から始めると何が発生するのか

Slide 37

Slide 37 text

AIは毎回、身に覚えのない 前回の作業の続きを要求される

Slide 38

Slide 38 text

これの顕著な例としては /home/vscode/.codex/ をマウントしていない環境での devContainerリビルド

Slide 39

Slide 39 text

チャット履歴が全て吹き飛ぶので 文字通り何もかも知らない状態から 再開を求められる

Slide 40

Slide 40 text

AI『コードは残っている』 AI『なぜそうしたかが判らん』

Slide 41

Slide 41 text

そこで用意した概念がこちら

Slide 42

Slide 42 text

セッション トピック ノート

Slide 43

Slide 43 text

一続きの会話をセッション 現在の主題をトピック 判断・未決・次の一手など 続きを始めるために残すノート

Slide 44

Slide 44 text

セッション • • • 一続きの会話とその場で行う作業の区切り 同じセッションの中でトピックが変わることも セッションが終わっても作業が完了したとは 限らない

Slide 45

Slide 45 text

トピック • • • 現在取り組むタスクや論点の単位 会話の途中で切り替わり、 別のセッションへ持ち越すこともできる 判断や残件は、セッションではなくトピックに ひもづける

Slide 46

Slide 46 text

セッションを超えてトピックは続く セッション1 同じトピックの現在地 セッション2

Slide 47

Slide 47 text

ノート • • • 次の作業に必要な判断記録 決定とその理由、採らなかった案、未決事項、 次の一手、参照先が記録される 会話の逐語録ではなく、続きを始めるための記録

Slide 48

Slide 48 text

これらを残す事で 会話やログそのものが途切れても 全体の流れと作業の節目をたどり 再接続は出来るようになります

Slide 49

Slide 49 text

セッションをまたいで進捗を残す

Slide 50

Slide 50 text

これだけだと Anthropicの公開例と同じに見えます

Slide 51

Slide 51 text

ですが、継続の単位と残す内容が異なります 本登壇 Anthropicの公開例 • 作業をセッションで区切る • 進捗ファイルで作業状態を引き継ぐ • 実装項目の一覧で残件を確認する • セッションとトピックを分ける • ノートに判断・未決・次の一手を 残す 共通点:会話の外に、次へ渡す状態を残す

Slide 52

Slide 52 text

そしてもう一つ

Slide 53

Slide 53 text

人格スナップショット

Slide 54

Slide 54 text

同一内容の意思決定に対して 冪等性に影響を与えるものとして 仮想的な人格を定義してみました 厳密には『人格の輪郭を残す』

Slide 55

Slide 55 text

判断だけでなく、その時、そのAIが • 何を面白がり • 何に違和感を持ち • どこで慎重になったか を保存します これは次の対話へ渡す人格の輪郭です

Slide 56

Slide 56 text

AI『かつてこういう在り方だった』 AI『こういう話の流れだった』 AI『そこではこれを重視していた』 AI『なぜそうしたのかもある』

Slide 57

Slide 57 text

チャット履歴が全て無くとも ある程度は取り組み方も含めて 再開出来る

Slide 58

Slide 58 text

何を続けるか、どう向き合うか セッション・トピック・ノート 決定・未決・次の一手を残す 人格スナップショット 何を面白がり、どこに違和感を 持ち、何に慎重になるかを残す 作業の現在地と、取り組む姿勢を別々に引き継ぐ

Slide 59

Slide 59 text

記録のタイミング

Slide 60

Slide 60 text

何をいつ残すか セッション 会話を区切るとき、区切りと参照先を残す トピック 話題を移すとき、現在地を残す ノート 判断や未決事項がまとまったとき、要点を残す 人格 関心や違和感が見えたとき、姿勢を残す

Slide 61

Slide 61 text

残した記録をどう読み直すか まずトピック トピックの現在地と次の一手 ノート 採った判断、退けた方向、未決事項 人格 何を面白がり、どこで慎重になったか 必要ならセッション 会話の区切りと、参照先をたどる

Slide 62

Slide 62 text

リポジトリに残す文脈 入口・規約 最初に読む場所とプロジェクト固有の約束 手順・レビュー 進め方、判断規範、確認する観点 作業の記録 セッションの区切りとトピックの現在地 判断の記録 理由、退けた方向、失敗、次の一手

Slide 63

Slide 63 text

実例 ファイル検査をどこまで引き受けるか

Slide 64

Slide 64 text

ファイルの「値」と「中身」は同じ要求か 値として扱う 中身を調べ、扱い方を決める ファイル名・パス・容量 アップロード情報の形 形式・内容・一時ファイル 保存先・権限・信頼境界

Slide 65

Slide 65 text

規則ライブラリが受け持つ範囲 ファイルの値 名前・パス文字列・容量など ファイルの状態 存在や可読性の確認 アップロード情報 配列の形と付随する値の検証

Slide 66

Slide 66 text

ファイルの内容の検査と 保存・権限の方針は 別の要求として扱う

Slide 67

Slide 67 text

セッションを閉じ、判断を残す セッション 判断の詳細 ファイル検査の話題を区切る この記録の判断欄は空欄 会話の区切りと、判断を残す場所は別

Slide 68

Slide 68 text

トピックに残る現在地 状態 規則ライブラリの責務整理は完了 決定 実体の検査を規則ライブラリへ戻さない 未決 この境界の整理については、なし 次の入口 実体の検査を別の要求として検討

Slide 69

Slide 69 text

ノートには判断の理由も残す 理由 既存のファイル基盤の構想と責務が重なる 境界 規則ライブラリは値と低い水準の確認まで 禁止事項 実体の詳しい検査を規則ライブラリへ戻さない レビュー観点 今回の変更が、この責務境界を越えないか

Slide 70

Slide 70 text

次のセッションは、トピックから始める 1 トピック 現在地と次の入口を知る 2 ノート 境界を分けた理由を確かめる 3 現行の実装 新しい要求に照らして判断する 前のセッションの記録は、必要なときにたどる

Slide 71

Slide 71 text

記録は再開の入口 現行の実装と次の要求で確かめる

Slide 72

Slide 72 text

もう一つの実例 設計への向き合い方も残す 題材:クラス構造を扱うライブラリ

Slide 73

Slide 73 text

人格には判断の姿勢を残す 関心 難しさを面白がり、整理しがいを感じる 違和感 利用者の「筋が悪い気がする」を信号にする 慎重さ 長期で崩れない境界を選ぶ 設計の結論と、次の判断の仕方を別々に渡す

Slide 74

Slide 74 text

何を残し何をその場で判断するか プロジェクト資産として残す 次のAIが行う 固有の規約・禁止事項 判断の理由と、失敗した試行 レビュー観点・現在地・姿勢 今回の要求を読み取る 現行の実装と照らす 変更案を考え、検証する 残した文脈を入口に、判断は現在の状況で行う

Slide 75

Slide 75 text

ライブラリの責務を分けるように 引き継ぐ情報の役割も分ける

Slide 76

Slide 76 text

ここまでの経緯と結果 発端 開発環境の再構築で、チャット履歴が消えた 残したもの 現在地・判断の理由・取り組む姿勢 結果 別の会話から、現行の実装と照らして再開できる

Slide 77

Slide 77 text

最初は一つのトピックから 1 止める前に、現在地と次の一手を書く 2 判断の理由と退けた方向をノートに残す 3 次のセッションで読み、現行の実装と照らす 関心や違和感が見えたら、人格の輪郭も残す

Slide 78

Slide 78 text

コンテキスト承継設計とは

Slide 79

Slide 79 text

現在地や判断理由、規約、取り組む姿勢を リポジトリに残し、次のAIが現行の実装と 照らして再開できるようにする

Slide 80

Slide 80 text

その保存先と読み順まで含めて コンテキスト承継設計と呼んでいます

Slide 81

Slide 81 text

次の問い 引き継いだ先で AIが書いたコードを 何を根拠に通すのか

Slide 82

Slide 82 text

ありがとうございました