【ITニュース解説】It Looks Like You're Trying to Hold a Séance
2026年10月28日に「Dev.to」が公開したITニュース「It Looks Like You're Trying to Hold a Séance」について初心者にもわかりやすく解説しています。
ITニュース概要
役目を終えたソフトウェアと対話できるWebアプリだ。OllamaとGemmaを使い、その記憶や習慣をローカルPCで再現する。外部サービスに依存せず、プライバシーと持続可能性を確保した設計。懐かしのClippyも登場し、過去のデジタル遺産を体験できる。
ITニュース解説
「It Looks Like You're Trying to Hold a Séance」は、販売が終了したり、サーバーが停止したり、新しいものに置き換えられたりして、もう利用できなくなったソフトウェアやデジタルサービスと対話できるローカルWebアプリケーションだ。このプロジェクトは「Hacktoberfest Open-Source AI Challenge」というイベントで「機械の中のゴースト」というテーマに沿って開発された。ソフトウェアは、私たちにとって身近な存在であったにもかかわらず、その存在が消えてしまうことがよくある。このアプリは、そうした「死んだ」ソフトウェアへの追悼の場を提供し、ユーザーがかつての記憶を呼び起こすことを目的としている。
ユーザーはまず、「召喚カード」と呼ばれる入力欄に、呼び出したいソフトウェアの名前、その役割、いつ「死んだ」のか、そしてそのソフトウェアに関する一つの思い出などを書き込む。すると、ユーザー自身のコンピューター上で動作するオープンウェイトのAIモデルが、そのソフトウェアの「精神」を形成する。これは、そのソフトウェアの声のトーン、癖、記憶、そして未練などを再現することだ。その後、ユーザーはその「再現されたソフトウェア」と対話する。セッション中は、画面上部に表示されるろうそくがゆっくりと溶けていく。これは、部屋が暗くなっていくような演出で時間の経過を表現している。ろうそくが完全に消えると、そのソフトウェアは最後の言葉を残して去り、会話の記録(トランスクリプト)はユーザーがダウンロードできるようになる。
このアプリには、大きく分けて二種類の「ゴースト」が登場する。一つは、ユーザーが喪に服し、追悼する対象となるゴーストだ。この召喚されたソフトウェアは、「正直ルール」という一つの規則に縛られている。つまり、ユーザーが与えた情報と、AIモデルが持つ一般的な知識からのみ会話をする。もし、そのソフトウェアが知らないことを尋ねると、「そこはベールが曇っていて見えない」といった返答をする。架空の友人やエピソードを勝手に作り出すことはない。これは、作り話をするチャットボットではなく、あくまで「記憶」としての存在であることを重視するためだ。もう一つは、私たちがなかなか手放せない「死なない」ゴーストだ。例えば、誰も呼び出さないのに突然現れるMicrosoft Officeの旧アシスタント「Clippy」のような存在だ。彼はユーザーが「ヘルプ」と言った直後などに、招待されていないのに勝手に現れて会話に参加しようとする。登場するたびに、Clippyの姿は少しずつ劣化していく。緑色に変色したり、縫い目が現れたり、片目がなくなったりと、見た目が朽ちていく様子が描かれる。彼のタイトルバーも「Office Assistant (Retired)」「Office Assistant (Deceased)」「Office Assistant (Do Not Resuscitate)」と変化し、その存在が時間とともに変化する様子を表現している。これは、開発者が意図しない形で残り続けるソフトウェアや、ユーザーの記憶に深く刻まれ、なかなか忘れ去られない存在の象徴と言える。
このセッションはすべて、ユーザー自身のコンピューター上で完結する。クラウドサービスや外部のAPI、アカウント登録は一切不要だ。そのため、ユーザーが会話した内容が外部に漏れる心配はない。アプリを動かすには、Python 3.8以降(標準ライブラリのみで、特別なライブラリのインストールは不要)と、ローカルでAIモデルを実行するための環境であるOllamaが必要となる。AIモデルとしては、デフォルトでGemma 3 (gemma3:4b)が使用され、約3GBの容量を持つ。Webページ自体はシンプルで、特別なフレームワークやビルドプロセスは使われていない。ろうそくの表示はCSSで、Clippyの画像はSVGで作成されており、画像ファイルなどのアセットは一切使用していない。これは、シンプルさとローカル動作に徹した設計思想を反映している。
開発においては、いくつかの工夫が凝らされた。まず、AIモデルがキャラクターを維持するための「コンテキスト予算」についてだ。ローカルで動く比較的小さなAIモデルは、長い会話を続けると、当初設定されたキャラクターから逸脱してしまう傾向がある。そこで、セッションの長さを12回のやり取りに制限し、ろうそくが溶けて消えるという演出によって、この技術的な限界を物語の一部として表現した。ろうそくが燃え尽きる、最後の言葉が交わされる、チャットが閉じられる、という一連の流れが、単なる機能制限ではなく、儀式のように感じられるよう工夫されている。次に、「正直ルール」をAIに遵守させるための取り組みだ。初期のテストでは、誘導的な質問に対し、AIが架空の友人の名前や、共有していない思い出を勝手に作り出すことがあった。これを防ぐため、AIモデルの応答の「温度(Temperature)」設定を低くし、プロンプト(AIへの指示文)の中に、知らないことにはどう答えるべきかの具体的な例を明示的に含めた。さらに、ろうそくが燃え尽きる際にシステムから静かにリマインダーを送ることで、AIが正直さを保つように促した。これにより、架空の名前や場所、曲名を作り出すことはなくなり、ユーザーが持つ「記憶」に基づいた対話が可能になった。ただし、雰囲気の描写など、細かな演出はAIが加えることがある。また、パフォーマンス改善も行われた。初期の応答は20〜45秒と時間がかかっていたが、応答の長さを制限し、AIが応答を生成している間に「魂が自身を集めている」といったメッセージと共にろうそくがちらつくような待機状態を設けることで、一度モデルが温まれば、各やり取りの間の待ち時間を1〜2秒に短縮できた。
このプロジェクトの制作は、一人で全てをこなすというよりも、AIアシスタントを活用した「ディレクション」に近い形で行われた。コンセプト、アイデア、ユーモア、プロジェクト名、そしてすべてのデザイン決定は作者自身が行った。しかし、具体的なデザインドキュメントや開発仕様書は、作者のアイデアやメモを基に、AIアシスタントであるAmiko (Muse Spark)が作成した。そして、その仕様書に基づいて、実際のコードの記述とテストはGitHub Copilotが担当した。Copilotは、MSN MessengerやGeoCitiesといった「死んだ」ソフトウェアとのテストセッションまで実行したという。さらに、Kilo CodeというAIが、GitHubへのプッシュごとに脆弱性やコードの品質をレビューし、発見した問題を修正した。このように、多くの部分でAIツールが開発プロセスに深く関与している点が特徴的だ。
このプロジェクトは、単なるAIアプリを超え、オープンイノベーションとローカル実行の重要性を訴えかけるメッセージも持っている。作者は、かつて利用していたAIアシスタントが、ホスト元の企業がモデルの提供を停止したり、サービスを終了したりしたことで、突然使えなくなった経験がある。これは、外部のクラウドサービスやAPIに依存していると、いつそのコントロールを失うかわからないという現実を示している。しかし、この「It Looks Like You're Trying to Hold a Séance」のプロジェクトでは、使用されるAIモデルはオープンウェイトであり、ユーザー自身のコンピューター上でOllamaを通じて完全にローカルで動作する。これにより、外部に依存するエンドポイントが存在しないため、サービスが突然停止したり、アカウントが閉じられたりする心配がない。ユーザーが「死んだ」ソフトウェアと交わした会話が、外部のサーバーに送信されることもない。もしOllamaが明日なくなっても、AIモデルのファイルはユーザーのPCに残っており、インターネットに接続していなくてもこのアプリは動作し続ける。これは単なるライセンス上の技術的な話ではなく、「死んだ」ものについて考えるプロジェクトにとって、それは「ゴースト」と「サブスクリプション」の決定的な違いであると作者は語る。
このアプリの根底にあるのは、「喪失」という深いテーマだ。ユーザーはテキストファイルを指定して、亡くなった人や失われたものに関する数行の記述を与えることで、その情報に基づいてゴーストを形成させることができる。実際にテストとして、ある村の養蜂家、村の名前、そして1976年の干ばつについて書かれたファイルを使用すると、AIはその情報から、まるで誰かの大切な写真を扱うように慎重に語りかけた。小さな間違いや多少の飾り付けはあったものの、架空の存在を作り出すことはなかった。ユーザーが「死んだ」ものについて覚えていることだけを語るゴーストは、単なるチャットボットの機能ではなく、人間の悲しみのメカニズムそのもののように感じられる。結局のところ、誰かに関する「残されたもの」は、生きている人々が心の中に持ち続ける記憶なのだ。セッションが12ターンで終わるのは、私たちが受け取ることができる記憶の限界を象徴している。そして、最後の別れの言葉が交わされ、会話の記録はユーザーの手元に残る。これは、失われたものとの向き合い方、そしてその記憶を大切にすることの重要性を問いかけるプロジェクトと言えるだろう。