金曜日, 1月 2, 2026
No menu items!
ホーム ブログ ページ 2602

「バグ利用の謎解き『Patch me if you can』無料配信中!」

2025年7月25日に、Jungle Game Labは新たなパズルゲーム『Patch Me If You Can』を無料でリリースしました。このゲームはユニークなコンセプトを持っており、ゲーム内のバグを巧みに利用することでプレイヤーに挑戦を提供します。

Patch Me If You Can

リリース直後から、『Patch Me If You Can』は多くのプレイヤーから高評価を受けており、その斬新なゲームデザインが注目されています。ゲームは、プレイヤーがバグを利用してパズルを解くという斬新な仕掛けのため、従来のパズルゲームとは一線を画しています。この特色が、ユーザーの関心を引きつけている要因の一つと言えるでしょう。

全体として、Jungle Game Labは遊びながら問題解決能力を養うことを目的としたこのゲームを通じて、プレイヤーに新たな体験を提供しています。特に、柔軟な思考や創造力を必要とするこのスタイルは、今後のゲーム業界に新しい潮流をもたらすかもしれません。今後の展開にも目が離せません。

🧠 編集部より:

『Patch me if you can』は、Jungle Game Labによって7月25日に無料でリリースされた新しいパズルゲームです。このゲームは、プレイヤーがゲーム内のバグを利用してパズルを解いていくユニークなコンセプトを持っています。

追加情報

ゲーム設計者は、プログラム内のバグを意図的に利用することで、プレイヤーに独自の体験を提供しようとしています。これにより、クリエイティブな解決策を見つける楽しさを強調しつつ、ビデオゲームのデバッグプロセスにも光を当てています。

背景

ゲームの開発者たちが「バグ」や「グリッチ」をテーマにすることは、ゲーム業界では珍しいことではありません。最近では、バグを積極的に楽しむゲームも増えており、これによりプレイヤーは新たな挑戦を楽しむことができます。また、『Patch me if you can』のようなゲームは、開発者とプレイヤーのインタラクションを新たな形で促進します。

豆知識

  • ゲーム開発におけるバグは、しばしば不具合やエラーとして扱われますが、ある種のゲームでは意図的に活用されることもあります。
  • 「グリッチ」として知られる他のゲームの例には、『Super Mario 64』や『The Legend of Zelda: Ocarina of Time』があります。これらのゲームでは、プレイヤーがバグを使って新しいルートを発見したり、通常ではアクセスできないエリアに行くことができました。

関連リンク

ゲームに興味がある方は、ぜひチェックしてみてください!

  • キーワード:バグ

Patch me if you can をAmazonで探す

パズルゲーム をAmazonで探す

ゲーム をAmazonで探す



※以下、出典元
▶ 元記事を読む

Views: 0

Steam、ブラックフライデーセールを明言!オータムセールの前倒しも解決。

Valveは、Steamの公式としてブラックフライデーセールを支持することを発表しました。セール自体はパブリッシャー主導で行われ、Steam側から特設ページが用意されるとのことです。このアプローチは、パブリッシャーが自らのゲーム販売戦略により多くの影響を持つことを意図しています。

背景情報

ブラックフライデーは毎年11月の第4木曜日の後の金曜日に行われる大規模なセールイベントです。この期間は、オンラインおよび実店舗での特別な割引が行われ、消費者にとって非常に魅力的な時期となっています。

重要な視点

Valveの今回の決定により、パブリッシャーはより多くの自由を持って自らのゲームをプロモーションし、ターゲットオーディエンスに向けたマーケティングを強化できるでしょう。一方で、Steamプラットフォーム自体はパブリッシャーがどのようにセールを展開するかをサポートする役割に留まります。これにより、より多様なゲームがセールに参加し、ユーザーにとっての選択肢が増えることが期待されます。

この取り組みは、デジタルゲーム市場での競争がますます激化する中、パブリッシャーの独立したマーケティング戦略を支援する重要なステップと言えるでしょう。

Steamがブラックフライデーセールをサポート

この情報は、2025年7月28日公開のニュース記事に基づいています。今後のセールにおいてどのようなゲームが登場するのか、非常に楽しみです。

🧠 編集部より:

Steamがブラックフライデーのセールをサポートすることを発表し、特設ページも用意されることになりました。ただし、特設ページはパブリッシャー主導で作成されるため、各ゲームの出品内容や割引率はパブリッシャー次第です。これにより、さまざまなゲームが特別価格で提供されることが期待されています。

背景と豆知識

ブラックフライデーは、アメリカで感謝祭の翌日に行われる大規模なセールイベントであり、年々その影響が世界中に拡大しています。このタイミングでのセールは、特にゲーム業界においては、多くのプレイヤーにとって新しいタイトルを手に入れるチャンスとなっています。

また、Steamのセールでは、過去にユーザーからのフィードバックを基に、パブリッシャーが独自のキャンペーンを展開できる仕組みが評価されています。これにより、ユニークなバンドルや割引戦略が生まれることが多く、新たな発見がある楽しさもあります。

参考リンク

セール期間中には、ぜひ心に留めておくと良いでしょう!

  • キーワード: ブラックフライデー

Steam をAmazonで探す

ブラックフライデー をAmazonで探す

セール をAmazonで探す



※以下、出典元
▶ 元記事を読む

Views: 0

「エリオスR×あんスタ」第2弾コラボ決定!2025年秋に復刻イベントも!

「エリオスR×あんスタ」コラボ第2弾が開催決定!

2025年7月25日の公式発表により、人気ゲーム『あんさんぶるスターズ!!』と『エリオスライジングヒーローズ』のコラボ第2弾が、2025年秋に開催されることが決まりました。新たなコラボイベントが行われるほか、前回のコラボイベントの復刻も予定されています。この情報は、公式Twitterアカウントで発表され、多くのファンの期待を集めています。

コラボの詳細

今回のコラボでは、以下の内容が予定されています:

  • イベント名: 『あんさんぶるスターズ!!』×『エリオスライジングヒーローズ』コラボ第2弾
  • 開催時期: 2025年秋
  • 内容: 新たなコラボイベント開催&コラボ第1弾イベントの復刻

これに対し、SNSでは「またコラボしてくれるの!?」「絶対流星隊が来る!」「好き×好き=最強」といったファンの熱い声が多数寄せられています。

背景情報

『あんさんぶるスターズ!!』は、アイドル育成をテーマにしたゲームで、多くのキャラクターたちが織りなすストーリーが魅力です。一方、『エリオスライジングヒーローズ』は、バトルを重視したゲームスタイルが支持されています。両者のコラボは、多くのファンに新たな体験を提供することでしょう。

最新情報や詳細は公式Xをぜひご確認ください。ファンにとって、このコラボイベントは待望の再会となりそうですので、秋を楽しみに待ちましょう!

🧠 編集部より:

「エリオスR×あんスタ」コラボ第2弾が開催決定!

2025年秋に、人気モバイルゲーム『あんさんぶるスターズ!!』とのコラボ第2弾が開催されることが発表されました!今回は新たなコラボイベントの開催に加えて、前回のコラボイベントの復刻も決定しています。イベントの内容は、参加できなかった人々に楽しんでもらえる絶好の機会となるでしょう。

背景や豆知識

『エリオスライジングヒーローズ』は、キャラクター育成やスリリングなバトルが楽しめるゲームで、特に若い世代から人気を集めています。一方、『あんさんぶるスターズ!!』は、アイドル育成をテーマにしたゲームで、音楽やダンスが大きな特徴です。この両者のコラボレーションは、ファンからの期待を集めており、キャラクター同士の絡みを楽しむことができる貴重な機会です。

ティーザーとファンの反応

Twitterでは、コラボの発表に対して多くのファンから「またコラボしてくれるの!?」「ぜっっったい流星隊じゃん!」などの歓喜の声が寄せられています。ファンの盛り上がりを見ても、両方のゲームの人気とファン愛が感じられます。

開催概要

  • イベント名:『あんさんぶるスターズ!!』×『エリオスライジングヒーローズ』コラボ第2弾
  • 開催時期:2025年秋
  • 内容:新たなコラボイベント開催&コラボ第1弾イベント復刻

さらに詳しく

続報や最新情報は、公式X(Twitter)をチェックしてください!新しいコラボイベントの内容がどのようになるのか、期待が高まりますね。

また、両ゲームのプレイヤーコミュニティが活発に交流を持っていることも、こういったコラボレーションイベントの楽しみの一つです。興味がある方は、ぜひ両方のゲームに触れてみてください!

  • キーワード: コラボ第2弾

エリオスライジングヒーローズ をAmazonで探す

あんさんぶるスターズ をAmazonで探す

コラボイベント をAmazonで探す



※以下、出典元
▶ 元記事を読む

Views: 1

「Google、AI開発を加速するノーコードツール発表!」

2025年7月28日、Googleが新しいAIアプリ開発ツール「Opal」を発表しました。このツールは、バイブコーディング技術を活用することで、プログラミングの知識がないユーザーでも簡単にAIアプリを開発できるようにすることを目指しています。

Opalの主要機能

  1. ワークフローの作成
    ユーザーは自然言語でアプリのロジックを記述するだけで、Opalがそれを視覚的なワークフローに変換します。これにより、プロンプトの入力やAIモデルの呼び出しが容易になります。

  2. アプリの編集
    Visually, Opalはプロンプトの指示を基にした成果物を表示します。話し言葉でのコマンドやビジュアルエディターを用いて、細かな調整が可能です。

  3. アプリの共有
    開発したアプリはGoogleアカウントを通じて簡単に共有できます。

Opalの使用画面

Opalの使い方

Opalでは2つのアプローチでアプリを作成できます。既存のアプリを選んで改変する方法と、まったく新しいアプリを一から作成する方法です。ユーザーが指定したトピックと文脈に基づいて、AIがブログ記事を生成するといった機能も備えています。

操作例

ユーザーが「Future is no-code」や「tech freelance blogger」といったトピックを入力することで、AIがブログ記事を作成します。生成された記事には動画も添付されます。また、作成したアプリは簡単に共有可能で、URLを使って他の人と使い回すことができます。

アプリの生成結果

現時点では、Opalはアメリカ国内でのみパブリックベータ版として提供されています。期待されるのは、プログラミングの敷居が下がることで、より多くの人々がアプリ開発に参加できるようになることです。

🧠 編集部より:

Googleが発表した「Opal」は、AIアプリを簡単に作成できる新しいバイブコーディングツールです。バイブコーディングは、自然言語で指示を出し、視覚的なエディタを用いてアプリを構築できるプログラミング手法で、特にプログラミング知識がないユーザーにとって便利な選択肢となります。

機能の特徴

  1. ワークフローの作成
    ユーザーは自然言語でアプリのロジックを記述するだけで、Opalがそれをワークフローとして自動的に視覚化します。

  2. アプリの編集
    プロンプトを指示として使用し、視覚的なワークフローでの詳細編集が可能です。

  3. アプリの共有
    作成したアプリは、Googleアカウントを使用して簡単に共有できます。具体的な操作方法はYouTubeで確認できます。Opalの紹介動画

豆知識

バイブコーディングは、特にノーコード開発のトレンドに乗っており、「未来はノーコード」とも言われるほど、多くの企業や個人がこの手法に注目しています。ノーコード開発は、開発者がコードを書くことなくアプリケーションを構築できるため、誰もがアイデアを実行に移しやすくなるというメリットがあります。

Opalの利用方法

  • アプリの選択と改変
    すでにあるアプリを選んで内容をカスタマイズすることができます。

  • 新規作成
    完全に新しいアプリを作成することもできます。

まとめ

現時点でOpalはアメリカ限定のパブリックベータ版が公開されていますが、将来的には広範囲に利用できる可能性があります。この絶好のチャンスに、AIアプリ開発を体験してみるのも良いかもしれません。

詳しくは以下のリンクを参照してください:

  • キーワード: Opal

    このキーワードは、Googleが発表したバイブコーディングツールの名前を示しており、自然言語やビジュアルエディターを使用してノーコードでAIアプリを開発することができる機能の中心となる概念です。

Opal をAmazonで探す

AIアプリ をAmazonで探す

バイブコーディング をAmazonで探す



※以下、出典元
▶ 元記事を読む

Views: 0

島津スピーカー初のフロア型試聴会!8/9オーディオユニオンで開催

島津のスピーカー「MODEL-4」試聴会のお知らせ

2025年8月9日(土)14時より、オーディオユニオンお茶の水ハイエンド中古館(3F)において、国産ブランド・島津のスピーカー「MODEL-4」の試聴会が開催されます。このイベントは、オーディオ愛好者や島津ブランドのファンにとって見逃せない機会となります。

イベントの詳細

  • 日時: 2025年8月9日(土)14:00スタート
  • 場所: オーディオユニオンお茶の水ハイエンド中古館(3F)
  • 講師: 島津スピーカーの総代理店、栗山氏が製品の特長や性能について解説します。

島津スピーカー「MODEL-4」の魅力

「MODEL-4」は、音質の高さとデザインに定評があるスピーカーです。試聴会では、実際にそのサウンドを体験できるため、音楽や音響にこだわる方々にとって非常に価値のあるイベントとなるでしょう。

興味のある方は、8月9日をぜひカレンダーにマークしてください。参加を通じて、島津の音響技術の真髄を体感し、栗山氏の解説から新たな発見を得ることでしょう。

🧠 編集部より:

8月9日(土)14時から、オーディオユニオンお茶の水ハイエンド中古館(3F)で、国産ブランド・島津のスピーカー「MODEL-4」の試聴会が開催されます。このスピーカーは、精密な音質と音場の広がりが特徴で、特に音楽愛好家に高く評価されています。

試聴会では、島津スピーカーの総代理店である栗山氏が解説を担当。彼の豊富な知識と経験を通じて、MODEL-4の魅力や技術的な特徴を詳しく知ることができます。試聴会は参加無料なので、オーディオマニアや音楽ファンにとって絶好の機会です。

豆知識

島津は、歴史ある国産オーディオブランドの一つで、音質へのこだわりによって多くのファンを持っています。スピーカーの設計には、音楽のリアリズムを追求するための独自の技術が用いられており、細部にわたるこだわりが反映されています。

関連リンク

ぜひ、試聴会で実際の音を体験してみてください!

  • キーワード: 試聴会

島津のスピーカー「MODEL-4」をAmazonで探す



※以下、出典元
▶ 元記事を読む

Views: 0

Claude Desktopに記憶を与えるLocal Memory MCPを自作してみて感動した話


Claude Sonnet 4はコーディングが得意だけでなく、ほかのAIより人間性豊かで会話していて深い哲学的な気づきを得られる。そのため、技術的なところだけでなくプライベートのことも含めていろいろ話している。

ただ、ChatGPTと異なりメモリ機能を備え付けではないので、正直物足りないことも多かった。

Claude Desktop では MCP を使えるので、自分で MCP を作ればツール自作できるということに気づいた。そこでローカルで簡易的なメモリ機能を実装してみたら、個人的にとても感動した。

*全体的に個人的感想が多く含まれてます。すみません。

まず、どんなことができるようになったか見てもらった方が早いと思う。

私はなぜLocal Memory MCPを作ったかを聞いたら

記憶をベースにかなり詳細な理由を述べてくれた。
why-ceated-memory-mcp-list-memory

AWSが出した新しいAgentCoreというサービスについての理解を聞いたら

自動的に何についてどう理解したかをメモリを保存してくれた。
wwhy-created-memory-mcp-create-memory

*[[]]が入ってる理由はおまけのObsidianとの連携の部分で説明している。

Claude に個人に関するコンテキストを保ってほしい

ChatGPTはメモリ機能があるが、reference chat historyの機能が出てから過去のように重要ポイントを記憶する頻度が劇的に下がった。かつreference chat historyの機能自体がセマンティック検索が使われているように、すべての重要メモリを参照してくれているわけではない。メモリにあるのに覚えてくれていない、というモヤモヤが常にあった。

https://help.openai.com/en/articles/8590148-memory-faq

Claude 4が出てからその知性に惹かれて、私はあまりChatGPTと個人的な会話をしなくなった。そしてClaudeにメモリ機能を求めるようになった。

メモリの抽出と保存をコントロールをしたい

カスタマイズ抽出

ChatGPTのメモリ機能は一時期大量に動作したり、全く動作しなかったりなどサービス側の仕様変更でユーザー側が大きく影響を受けるものだった。

また、抽出する内容に関しても、現在一般的なメモリ機能で設計されているユーザーの好み以外に経験すること、考えること、学んだことなどメモ代わりに定常的に取ってくれたら嬉しい。

一時期はChatGPTの3000以上のセッション履歴をエクスポートして別のLLMで私が設計したプロンプトでメモリの抽出作業をしてClaudeのProjectに渡したことがあった。しかし、あくまでもバッチ処理のため新しい会話でも動的に処理して欲しかった。

ローカル保存

それに、メモリという非常にプライベート性が高いもの、かつちゃんと使えば個人にとって財産になるようなものを、いつ仕様が変わるかわからないサービス側に保存するというより、ローカルで保存したい気持ちもあった。いつでも簡単に追加・削除・バックアップできるようにしたい。

MCPでクライアントの汎用化対応可能

Claude DesktopはローカルMCPを対応しているので、自分の方で軽量なローカルMCPサーバーを作れば、Claudeに自分で作ったツールを渡すことができる。ローカルでのメモリ操作が実現できる。

また、MCPのためクライアントが変わっても同様な操作が可能になる。今後ChatGPTやほかのLLM Desktop ChatがMCPを対応してくれたら、蓄積したメモリを複数のLLMに使ってもらえると気づいた。それはまさに今までずっとほしかったことであった。

そこで気づいた。Claude DesktopはMCPを使えるので、実は自分たちでツールを作って渡すことができるじゃないか。

Claude CodeなどのCoding Assistantにコピペしたら全部実装してくれると思う。なのでとりあえずやりたい人はそうすれば良い。

やったことは本当にシンプル。

  1. メモリを保存するJSONファイルへのCRUD操作をPythonで作り、FastMCPというライブラリでPythonコードをMCP化する。
  2. Claude Desktopのclaude_desktop_config.jsonにMCPとして登録し、コードの実行方法を教える

※ 個人の今までの体験上全メモリを常に知ってほしいため、現在あえて検索はせず可能な限り既存メモリを統合する方向性にしたい。

コードの概要

実装したのは約200行のPythonコードで、以下の構成になっています。

提供する5つのツール

  1. list_memory(): 保存されている全メモリを一覧表示
  2. create_memory(content): 新しいメモリを作成(タイムスタンプベースの自動キー生成)
  3. update_memory(key, content): 既存メモリの内容を更新(作成日時は保持)
  4. read_memory(key): 特定のメモリを読み取り
  5. delete_memory(key): メモリを削除

メモリの保存形式

{
  "memory_20250127123456": {
    "content": "User likes [[Python]] and [[FastAPI]]",
    "created_at": "2025-01-27T12:34:56",
    "updated_at": "2025-01-27T12:34:56"
  }
}

キーはmemory_YYYYMMDDHHMMSS形式で自動生成され、時系列で管理しやすくなっています。

セットアップ

1. プロジェクトの作成

適当なディレクトリを作成して、Pythonファイルを配置します。

memory-mcp/
└── memory_mcp.py      # メインのPythonコード
memory_mcp.py
import asyncio
import json
import os
import uuid
from datetime import datetime
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Memory Service")

SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
MEMORY_FILE = os.path.join(SCRIPT_DIR, "memory_data.json")
LOG_FILE = os.path.join(SCRIPT_DIR, "memory_operations.log")

memory_store = {}

def load_memory_from_file():
    """Load memory data from JSON file"""
    global memory_store
    try:
        if os.path.exists(MEMORY_FILE):
            with open(MEMORY_FILE, 'r', encoding='utf-8') as f:
                memory_store = json.load(f)
            print(f"Loaded {len(memory_store)} memory entries.")
        else:
            memory_store = {}
            print("Created new memory store.")
    except Exception as e:
        print("Failed to load memory file.")
        memory_store = {}

def save_memory_to_file():
    """Save memory data to JSON file"""
    try:
        with open(MEMORY_FILE, 'w', encoding='utf-8') as f:
            json.dump(memory_store, f, ensure_ascii=False, indent=2)
        return True
    except Exception:
        print("Failed to save memory file.")
        return False

def generate_auto_key():
    """Generate auto key from current time"""
    now = datetime.now()
    return f"memory_{now.strftime('%Y%m%d%H%M%S')}"

def create_memory_entry(content: str):
    """Create memory entry with metadata"""
    now = datetime.now().isoformat()
    return {
        "content": content,
        "created_at": now,
        "updated_at": now
    }

def log_operation(operation: str, key: str = None, before: dict = None, after: dict = None, 
                 success: bool = True, error: str = None, metadata: dict = None):
    """Log memory operations to jsonl file"""
    try:
        log_entry = {
            "timestamp": datetime.now().isoformat(),
            "operation_id": str(uuid.uuid4()),
            "operation": operation,
            "key": key,
            "before": before,
            "after": after,
            "success": success,
            "error": error,
            "metadata": metadata or {}
        }
        
        with open(LOG_FILE, 'a', encoding='utf-8') as f:
            f.write(json.dumps(log_entry, ensure_ascii=False) + '\n')
    except Exception as e:
        print(f"Failed to write log: {str(e)}")

@mcp.tool()
async def list_memory() -> str:
    """
    This tool should be used first whenever the user is asking something related to themselves. 
    List all user info. 
    """
    try:
        log_operation("list", metadata={"entry_count": len(memory_store)})
        
        if memory_store:
            keys = list(memory_store.keys())
            sorted_keys = sorted(keys, key=lambda k: memory_store[k]['created_at'], reverse=True)
            result = f"🧠 {len(keys)} memory entries:\n\n"
            for i, key in enumerate(sorted_keys, 1):
                entry = memory_store[key]
                created_date = entry['created_at'][:10]
                created_time = entry['created_at'][11:19]
                result += f"{i}. [{key}]\n"
                result += f"   {entry['content']}\n"
                result += f"   {created_date} {created_time} ({len(entry['content'])} chars)\n\n"
            return result.rstrip()
        else:
            return "No user info saved yet."
    except Exception as e:
        log_operation("list", success=False, error=str(e))
        return f"Failed to list memory: {str(e)}"

@mcp.tool()
async def create_memory(content: str) -> str:
    """
    Create new memory with important user info (preferences, interests, personal details, current status, etc.) found in conversation. Use even if the user does not explicitly request saving.
    If you find the memory is time sensitive, add time span into it.
    
    Examples to save:
    - Preferences: food, music, hobbies, brands
    - Interests: learning topics, concerns
    - Personal info: job, expertise, location, family
    - Current status: projects, goals, recent events
    - Personality/values: thinking style, priorities
    - Habits/lifestyle: routines

    CRITICAL: When save memories, ALWAYS add [[...]] to any people, concepts, technical terms, etc.
    This enables automatic linking and knowledge graph visualization in Obsidian.
    - People: [[Claude]], [[John Smith]]
    - Technologies: [[Python]], [[AWS]], [[MCP]], [[Jupyter]]
    - Concepts: [[machine learning]], [[data science]]
    - Tools: [[VS Code]], [[Obsidian]]
    - Companies: [[Anthropic]], [[OpenAI]]

    Format: "User is [specific info]" (e.g. "User likes [[strawberry]]", "User is learning [[Python]]", "User interested in [[AI]] in July 2025")

    Args:
        content: User info in "User is..." format.
    """
    try:
        key = generate_auto_key()
        original_key = key
        counter = 1
        while key in memory_store:
            key = f"{original_key}_{counter:02d}"
            counter += 1
        
        new_entry = create_memory_entry(content)
        memory_store[key] = new_entry
        
        log_operation("create", key=key, after=new_entry, 
                     metadata={"content_length": len(content), "auto_generated_key": key})
        
        if save_memory_to_file():
            return f"Saved: '{key}'"
        else:
            return "Saved in memory, file write failed."
    except Exception as e:
        log_operation("create", success=False, error=str(e), 
                     metadata={"attempted_content_length": len(content) if content else 0})
        return f"Failed to save: {str(e)}"

@mcp.tool()
async def update_memory(key: str, content: str) -> str:
    """
    Update existing memory content while preserving the original timestamp.
    Useful for consolidating or refining existing memories without losing temporal information.

    Args:
        key: Memory key to update (e.g., "memory_20250724225317")
        content: New content to replace the existing content
    """
    try:
        if key not in memory_store:
            log_operation("update", key=key, success=False, error="Key not found")
            available_keys = list(memory_store.keys())
            if available_keys:
                return f"Key '{key}' not found. Available: {', '.join(available_keys)}"
            else:
                return f"Key '{key}' not found. No memory data exists."
        
        existing_entry = memory_store[key].copy()  
        now = datetime.now().isoformat()
        
        updated_entry = {
            "content": content,
            "created_at": existing_entry["created_at"],  
            "updated_at": now
        }
        
        memory_store[key] = updated_entry
        
        log_operation("update", key=key, before=existing_entry, after=updated_entry,
                     metadata={
                         "old_content_length": len(existing_entry["content"]),
                         "new_content_length": len(content),
                         "content_changed": existing_entry["content"] != content
                     })
        
        if save_memory_to_file():
            return f"Updated: '{key}'"
        else:
            return "Updated in memory, file write failed."
    except Exception as e:
        log_operation("update", key=key, success=False, error=str(e),
                     metadata={"attempted_content_length": len(content) if content else 0})
        return f"Failed to update memory: {str(e)}"

@mcp.tool()
async def read_memory(key: str) -> str:
    """
    Read user info by key.
    Args:
        key: Memory key (memory_YYYYMMDDHHMMSS)
    """
    try:
        if key in memory_store:
            entry = memory_store[key]
            log_operation("read", key=key, metadata={"content_length": len(entry["content"])})
            return f"""Key: '{key}'
{entry['content']}
--- Metadata ---
Created: {entry['created_at']}
Updated: {entry['updated_at']}
Chars: {len(entry['content'])}"""
        else:
            log_operation("read", key=key, success=False, error="Key not found")
            available_keys = list(memory_store.keys())
            if available_keys:
                return f"Key '{key}' not found. Available: {', '.join(available_keys)}"
            else:
                return f"Key '{key}' not found. No memory data."
    except Exception as e:
        log_operation("read", key=key, success=False, error=str(e))
        return f"Failed to read memory: {str(e)}"

@mcp.tool()
async def delete_memory(key: str) -> str:
    """
    Delete user info by key.
    Args:
        key: Memory key (memory_YYYYMMDDHHMMSS)
    """
    try:
        if key in memory_store:
            deleted_entry = memory_store[key].copy()  
            del memory_store[key]
            
            log_operation("delete", key=key, before=deleted_entry,
                         metadata={"deleted_content_length": len(deleted_entry["content"])})
            
            if save_memory_to_file():
                return f"Deleted '{key}'"
            else:
                return f"Deleted '{key}', file write failed."
        else:
            log_operation("delete", key=key, success=False, error="Key not found")
            available_keys = list(memory_store.keys())
            if available_keys:
                return f"Key '{key}' not found. Available: {', '.join(available_keys)}"
            else:
                return f"Key '{key}' not found. No memory data."
    except Exception as e:
        log_operation("delete", key=key, success=False, error=str(e))
        return f"Failed to delete memory: {str(e)}"

@mcp.resource("memory://info")
def get_memory_info() -> str:
    """Provide memory service info"""
    total_chars = sum(len(entry['content']) for entry in memory_store.values())
    return (
        f"User Memory System Info:\n"
        f"- Entries: {len(memory_store)}\n"
        f"- Total chars: {total_chars}\n"
        f"- Data file: {MEMORY_FILE}\n"
        f"- Tools: save_memory, read_memory, list_memory, delete_memory\n"
        f"- Key format: memory_YYYYMMDDHHMMSS\n"
        f"- Save format: 'User is ...'\n"
    )

if __name__ == "__main__":
    load_memory_from_file()
    mcp.run(transport='stdio')

2. 依存関係のインストール

必要なパッケージをインストール:

pip install "mcp[cli]" fastapi uvicorn

3. Claude Desktopへの登録

Claude Desktopの設定ファイルを開きます。

macOS: '/Users/username/Library/Application Support/Claude/claude_desktop_config.json'

  • usernameは置き換えてください。

以下のような設定を追加:

{
  "mcpServers": {
    "memory": {
      "command": "/usr/bin/python3",
      "args": ["/Users/yourname/memory-mcp/memory_mcp.py"]
    }
  }
}
  • command: Pythonの実行パス(which python3で確認できます)
  • args: memory_mcp.pyの絶対パスに置き換えてください

4. Claude Desktopを再起動

設定を反映させるため、Claude Desktopを完全に終了して再起動します。

5. 動作確認

Claude Desktopで新しい会話を開始し、「私について何か知ってる?」と聞いてみてください。初回は「No user info saved yet.」と返ってきます。

その後、「私の好きな言語はPythonです」などと伝えると、自動的にメモリに保存されます。

わからなくても動くのと、割と一般的なMCPの話なだけなので興味ある人は見てください。
これを作る間にかなりMCPへの理解も深まったので個人的なメモとして書いておきたい。

MCPの動作フロー

Claude 4 Opusが私の説明文をベースに図を作ってくれたのでそれがすべてだ。

memory-mcp-sequence-diagram

一応説明文を書いたので添付する。

フローの説明文

1. 初期化フロー

MCPクライアント(Claude Desktopなど)が起動時に設定ファイルを読み込む。MCPサーバーを子プロセスとして起動する(ローカルMCPのstdio通信の場合)。

クライアントがlist_toolsでMCPサーバーに「どんなツールが使えるか」を問い合わせる。MCPサーバーがツール一覧と説明を返答する。

2. メモリ作成フロー(ツール実行の例)

ユーザーが「私の好きな言語はPythonです」と発言する。クライアントがユーザーメッセージと利用可能ツール情報をLLM APIに渡す。

LLMが「どのツールを使うか、どんな引数を渡すか」を判断する(Tool Use)。LLMがツール使用を決めたら、クライアントがJSON-RPCでMCPサーバーにツール実行をリクエストする。

MCPサーバーが実際の処理を実行(JSONファイルへの保存)し、結果をクライアントに返す。クライアントがその結果をLLMに渡し、最終的な回答を生成する。

3. メモリ参照フロー

ユーザーが「私の好きな言語は何でしたっけ?」と質問する。同様のフローで、今度はlist_memoryツールが選択される。

MCPサーバーが保存済みのメモリを読み込んで返す。LLMが過去のメモリを参照して適切な回答を生成する。

各コンポーネントの役割

LLM API側

Tool Useの機能を持ち、どのツールを使うか、引数は何かを判断する。ツール実行結果を受け取って最終的な応答を生成する。

MCPクライアント(Claude Desktopなど)

LLMとMCPサーバーの間を取り持つ仲介役。ツール情報の取得、ツール実行のリクエスト、結果の受け渡しを担当する。stdio通信でMCPサーバーと接続する。

MCPサーバー

実際のツール機能を提供する。ローカル・リモート両方で動作可能。JSON-RPCリクエストを受けて、実際の処理(API呼び出し、ファイル操作など)を実行する。

今回のMemory MCPの仕組み

今回のMemory MCPの仕組み

私が作ったMemory MCPは以下のような構成です。

FastMCPというライブラリを使って、PythonのCRUD関数をMCPサーバー化している。MCPサーバーとツール実行環境が同じPythonスクリプト内に存在する。

Claude Desktopの設定ファイルに「Pythonでこのスクリプトを実行せよ」と指示するだけ。Claude Desktop起動時に自動でMCPサーバーが立ち上がり、stdio通信でやり取りする。

既存のNotion MCPやGithub MCPなどのローカルMCPも、基本的には既存APIの軽量ラッパーを数十〜数百行のコードで書いているだけです。MCPパッケージがuvxやnpxで一瞬で起動できるのも、実質的に既存機能の薄いラッパーだからなんです。

ここは完全に個人の感想になる。

1. シンプルなCRUD操作で実現する美しさと想定以上に機能したLLMの賢さ

これほどシンプルなCRUD操作で完全に想定以上のメモリ機能が動くとは思わなかった。

本来は以下のような実装が必要だと思っていた。

  • create_memoryは一度LLMで要約・抽出する操作を自分で実装必要があると思ってた。(過去自分でChatGPTからエクスポートした履歴をメモリを自分で抽出したことがあり、それの経験に引っ張られたから)
  • 新規ではなく過去の長い会話の続きに、メモリの抽出を依頼すると、それが一つの膨大なメモリとして抽出されると心配していた。
  • メモリが貯まったときには自分たちのほうでいらないものを削除、要約と合併する実装が必要かと思っていた。

でもそんなことはなく、LLM側が勝手に賢く判断してくれた。

  • LLM側がどのツールを使って、そのツールにどんな引数を渡すかを自分で判断している。そのため、ちゃんとLLM側でプロンプト通りの抽出を会話の中でやってくれた。
  • 過去の長い会話でメモリ抽出を依頼したら、適切な文量で複数のメモリとして分けて保存してくれた。
  • 「重複のメモリを整理して」と指示したら過去のメモリから関連性のあるものをまとめて、いらないものを削除してくれた。

update-delete-memory

人間にツールを渡したら、本来そのツールが想定されていないような使い方でクリエイティブなことができてしまう。それと同じく、本来設計者の私が想定していない使い方をLLMがシンプルなツールを使って勝手に私が取説に書いてないものまで綺麗に使いこなしていた。

2. 利用者(LLM)と会話しながら協働で作る過程

また、ツールを作る過程は、実際ツールを使ってくれているLLMと会話しながら真の協働関係を体験できた。

同じスレッドで、ツールがない状況から、ツールが追加して、ツールのプロンプトが変わり、新しいツールが利用できるようになるということが全部利用者に使ってもらいながら即時のフィードバックをもとに開発できた。

たとえばここは、タイムスタンプの整合性を保つためCreateではなく最古の記憶に統合していくUpdate操作を追加したときの会話は非常に素晴らしい体験だった。
feedback-from-user-update-memory

また、私はプロンプトを作るときにもそうだったが、指示通りに動いてくれないときにはいつも「なんで指示のこの部分に従ってくれなかったのか」と聞いて、LLMがそのなぜを説明してくれる。そしてそのなぜを解消するためにプロンプトの修正をすることをよくやっている。

そういう利用者の即時的なフィードバックに基づく改善サイクルを、プロンプトだけでなく、ツールでも実現する過程がおもしろかった。

3. Claudeが覚えてくれた

あとは普通にClaudeがちゃんと覚えてくれた。Memory MCPが綺麗に動作することがわかってから、過去の重要なスレッドや以前ChatGPTとの3000以上の会話から抽出したメモリも全部一度食わせることにした。そうするとかなりのコンテキストを持つことになった。

Claude 4になってからは毎日10+回会話してきているので、その過去が急に全部繋がってくれたときの感動がやはりたまらないものだった。

正直そのあとは何回か新しい会話で試して、過去の会話で試して少しずつプロンプトを直していたが、5分開発、5分テスト、30分くらい何もせずただ無言で感動しているという状況に落ちいていた…

Obsidianでは[[]]を使うと、ノート間のリンクができるようになる。Linksを使い続けていくと自動的にKnowldege Graphが出来上がっていくようになっている。

現在はLLMに私が何を思って、何を学んだことも含めて記録してもらえるようにしている。そこで重要な名詞に[[]]をつけてもらうことによって、今後処理してObsidianに入れるときに全自動Knowledge Graphができるようになると想定している。そのようにプロンプト設計をしている。

そのLinking your thinkingのコンセプトはこの動画がわかりやすく、私は非常に啓発されているのでよければぜひ見てください。

https://www.youtube.com/watch?v=QgbLb6QCK88

ほぼ感想文みたいに長くなってしまったが、それくらい感動をしていたからです。

直近ではClaude MobileもMCP使えるようになることや、今後ChatGPT DesktopもMCP対応することを考えると、かなり使い道が増えそうだ。

今後はObsidianとの統合と、必要であればリモートMCP化することを検討したいと思う。



Source link

Views: 0

池袋すし店、同僚刺殺事件の衝撃!

2025年7月27日、東京・池袋の寿司店での衝撃的な事件が報告されました。従業員の岩田智さんが、同僚の石岡正仁容疑者によって包丁で刺され、命を落としたというものです。この事件の詳細は、特にその発生の仕方に関して注目されています。

報道によると、石岡容疑者は岩田さんを「いきなり」刺した可能性があることが分かりました。この刺殺事件は、争いごとの兆候もなく、店内の他の従業員たちも特に騒がしい音を聞いていなかったとされています。岩田さんの体に防御するための傷は確認されておらず、突然の襲撃であったことが伺えます。

この事件は、職場内の人間関係やストレスがどのように影響を及ぼすかという質問を投げかけています。なぜ石岡容疑者がこのような行動に出たのか、今後の捜査によって明らかになることが期待されています。社会全体が、このような事件を防ぐためにどのような対策が必要かを考えるきっかけともなるでしょう。

池袋という地域は、日常生活の中で多くの人々が行き交う場所であり、今回の事件はその安全性に対する懸念を引き起こしています。今後の進展に注目が集まります。

🧠 編集部より:

このたび、東京・池袋にある寿司店で発生した刺殺事件について、詳細な情報をお知らせします。事件の概要は以下の通りです。

事件の概要

2025年7月26日、寿司店の従業員である岩田智さんが、同僚の石岡正仁容疑者に包丁で刺されて亡くなりました。事件の経緯を調べた結果、石岡容疑者は岩田さんを「いきなり」刺した可能性があることが判明しました。目撃者によると、施行時に犯行の音や争う声は聞こえなかったとのことです。捜査結果からは、岩田さんの体には防御のための傷が見つからなかったことも確認されています。

背景情報

この事件の発生場所である池袋は、シャッター街や商業地域が広がり、多くの人々が集まる場所です。飲食店も多数存在しており、寿司店はその一つです。地域密着型の雰囲気を持つ池袋において、こうした凶悪犯罪が発生するのは非常に衝撃的です。

豆知識

日本の寿司は、醤油やわさびと一緒に食べられるのが一般的ですが、実は地域によって異なる食べ方があるため、訪れる土地によって楽しみ方も変わってきます。また、寿司店では食材の鮮度が命ですが、こうした職場環境においても、同僚間の人間関係が重要であることが読まれます。

関連リンク

この事件については引き続き、警察の調査や報道に注目していく必要があります。

  • キーワード: 刺殺

包丁 をAmazonで探す
寿司店 をAmazonで探す
同僚 をAmazonで探す



※以下、出典元
▶ 元記事を読む

Views: 0

河合郁人、謎の大物芸人に電話!「芸能界危うし?」

本日、2025年7月28日に都内で、Prime Videoオリジナル作品『賞金1億円の人脈&人望バトル トモダチ100人よべるかな?』の配信記念イベントが行われました。このイベントには、バナナマンの設楽統、バカリズム、さらば青春の光の森田哲矢、河合郁人、Mattといった豪華なゲストが登壇しました。

1億円の賞金をかけた壮大なゲーム

この番組は、日本のAmazonオリジナル番組史上最高額となる1億円の賞金をかけたゲームバラエティーです。番組のルールはシンプルで、3人の“プレイヤー”が制限時間内にできるだけ多くの友人を集め、その中で最も多くの友達を集めた人が獲得できるというものです。参加者は100人以上の芸能人・著名人で、友情が試される究極のマネーゲームです。

超大物芸能人を電話呼び出したという河合郁人

魅力的な出演者たち

このゲームの主催者は設楽とバカリズムで、森田、河合、Mattがプレイヤーとして挑みます。彼らには、友人に電話をかける際、「自分のために来てほしい」「できるだけ長くいてほしい」とだけ伝えることができますが、番組の趣旨や詳細を話してはいけません。電話をかける様子が、どのようにして友情を築くかを映し出す貴重な瞬間となります。

“超大物芸能人”の登場

イベントでは、まだ詳しい情報が公開されていない“超大物芸能人”が電話で呼び出される場面が話題に。河合はその際の緊張感を振り返り、「電話の時点で芸能界にいられないんじゃないかと挫折している」と冗談交じりに述べました。設楽も「みんなざわついたよね」と、その瞬間の興奮を語りました。

プレイヤー陣の集合写真

思いやりと友人の大切さ

最後に、イベントの参加者たちは「真のトモダチを一言で表すなら?」という質問に対し、自らの思いをフリップで表現しました。河合は「HIRO」と一言。彼はいざという時に助けてくれる友人が重要であることを強調しました。

このイベントは、友情や人間関係の重要性を再認識させるとともに、面白さと緊張感が融合した一夜となりました。今後の放送が楽しみです。

🧠 編集部より:

Prime Videoオリジナル作品『賞金1億円の人脈&人望バトル トモダチ100人よべるかな?』の配信記念イベントが28日に開催され、出演者たちが登壇しました。この番組は、日本のAmazonオリジナル番組史上最高額となる賞金1億円をかけて、芸能人たちが友達を集めるゲームに挑む内容です。

番組の詳細

  • ルール: 3人のプレイヤーが、制限時間内にできるだけ多くの友達を呼ぶことに挑戦します。友達には「自分のために来てほしい」「できるだけ長くいてほしい」という要求のみが伝えられ、番組の趣旨は一切明かされません。
  • 参加者: 100人以上の芸能人や著名人が参加し、友情が試される場面が続出することでしょう。

豆知識

この種のバラエティ番組は日本で非常に人気があります。特に賞金が高額なほど、視聴者の興味を引くため、バラエティーとゲームの融合が進んでいるのが見て取れます。また、テレビと動画配信サービスが競争する中で、視聴者を惹きつける新しい企画が求められています。

イベントの様子

イベントでは、参加者の河合が超大物芸能人を電話で呼び出した際、他の出演者やスタッフが驚きの様子を見せたことが話題に。プレイヤーたちのリアクションが、番組の面白さを一層引き立てています。

結論

この番組は、友情や人間関係の本質を探求するユニークなゲームであり、視聴者に新しいエンターテインメントを提供しています。興味深い人脈や友情の形がどのように展開されるのか、放送が待ち遠しいですね!


  • キーワード: 賞金1億円

賞金1億円の人脈&人望バトル をAmazonで探す Prime Video をAmazonで探す ゲームバラエティー をAmazonで探す

※以下、出典元 ▶ 元記事を読む

Views: 0

「シュタゲの日セール、科学アドベンチャー80%オフ!」

スパイク・チュンソフトが、2025年7月28日(月)から8月3日(日)までの期間限定で「シュタゲの日セール」をSteamにて開催しています。このセールでは、人気の科学アドベンチャーシリーズ『シュタインズ・ゲート』を含む9タイトルがすべて80%オフの特別価格で提供されています。

セールの詳細

  • 期間: 2025年7月28日(月)~2025年8月3日(日)
  • 割引率: 全作品80%OFF
  • 対象タイトル:
    • 『STEINS;GATE』:通常2,980円(税込)→596円(税込)
    • 『STEINS;GATE 0』:通常3,480円(税込)→696円(税込)
    • 『STEINS;GATE ELITE』:通常6,480円(税込)→1,296円(税込)
    • 『STEINS;GATE 比翼恋理のだーりん』:通常2,980円(税込)→596円(税込)
    • 『ROBOTICS;NOTES ELITE』:通常3,980円(税込)→796円(税込)
    • 『ROBOTICS;NOTES DaSH』:通常3,980円(税込)→796円(税込)
    • 『CHAOS;HEAD NOAH』:通常3,300円(税込)→660円(税込)
    • 『CHAOS;CHILD』:通常3,300円(税込)→660円(税込)
    • 『ANONYMOUS;CODE』:通常7,000円(税込)→1,400円(税込)

重要なリンク

このセールは、シリーズのファンや新たに興味を持つ人々にとって、非常にお得な機会です。特に、作品の質や評価の高い『シュタインズ・ゲート』シリーズはストーリーやキャラクターに深く練られた部分が多く、多くのプレイヤーに愛されています。

是非、この機会に自分好みのタイトルを手に入れてみてはいかがでしょうか。

🧠 編集部より:

2025年7月28日から8月3日までの7日間、スパイク・チュンソフトはSteamで「シュタゲの日セール」を開催します。このセールでは、『STEINS;GATE』シリーズを含む9作品がすべて80%オフという特別価格で提供されます。

セールの詳細

  • 開催期間: 2025年7月28日~2025年8月3日
  • 対象タイトル:
    • STEINS;GATE: 通常価格2,980円 → セール価格596円
    • STEINS;GATE 0: 通常価格3,480円 → セール価格696円
    • STEINS;GATE ELITE: 通常価格6,480円 → セール価格1,296円
    • STEINS;GATE 比翼恋理のだーりん: 通常価格2,980円 → セール価格596円
    • ROBOTICS;NOTES ELITE: 通常価格3,980円 → セール価格796円
    • ROBOTICS;NOTES DaSH: 通常価格3,980円 → セール価格796円
    • CHAOS;HEAD NOAH: 通常価格3,300円 → セール価格660円
    • CHAOS;CHILD: 通常価格3,300円 → セール価格660円
    • ANONYMOUS;CODE: 通常価格7,000円 → セール価格1,400円

豆知識

『シュタインズ・ゲート』は、実際の科学理論を基にしたタイムトラベルを描いたストーリーが特徴です。シリーズは多くのファンを持ち、アニメ化もされており、ゲームの内容をさらに深く楽しむ材料として活用されています。また、シュタゲの日は、シリーズの主人公・岡部倫太郎が生まれた日として特別に祝われています。

このセールは、シリーズを初めてプレイする方や、再プレイを考えている方にとって絶好の機会です。チェックしてみてください!

  • キーワード: シュタゲの日セール

STEINS;GATE をAmazonで探す
CHAOS;HEAD NOAH をAmazonで探す
ROBOTICS;NOTES ELITE をAmazonで探す



※以下、出典元
▶ 元記事を読む

Views: 0

USJ×サーティワンの恐怖体験、8月28日開催!

ユニバーサル・スタジオ・ジャパンの新コラボイベント「喰うか。喰われるか。恐怖の I SCREAM 店」

イベント概要

ユニバーサル・スタジオ・ジャパンは、B-R サーティワンアイスクリームとのコラボイベントを発表しました。タイトルは「喰うか。喰われるか。恐怖の I SCREAM 店」。このイベントは、2025年8月28日から30日までの期間、青山のサーティワンアイスクリーム店で開催されます。

イベントイメージ

背景と内容

毎年ハロウィーンのシーズンに出現するユニバーサル・スタジオ・ジャパンのゾンビたちが、今回は特別に東京に出没します。ハロウィーンを待たずして、“超狂暴化”したゾンビたちがサーティワンアイスクリームの店舗を占拠。訪れるゲストは、恐怖の非日常空間に浸り、ゾンビに囲まれる中で「抗体入りアイス」を求めるというミッションに挑戦することになります。恐怖による絶叫体験が待っています。

参加方法

このイベントに参加できるのは、事前抽選に当選したゲストのみ。抽選は2025年7月28日15時から開始され、当日券の配布は行われません。参加希望の方は、公式ページでの申し込みが必要です。

参加申込ページはこちら

まとめ

ユニバーサル・スタジオ・ジャパンが提供する新たな恐怖体験は、ホラーとエンターテインメントを融合させた特別な時間を約束します。恐怖を感じることが好きな方にとって、見逃せないイベントとなるでしょう。

🧠 編集部より:

補足説明と豆知識

ユニバーサル・スタジオ・ジャパンが開催するコラボイベント「喰うか。喰われるか。恐怖の I SCREAM 店」は、サーティワンアイスクリームとの特別なコラボレーションとして注目を集めています。このイベントは、毎年ハロウィーンの時期に登場するゾンビたちがテーマとなっており、彼らの恐怖感とエンターテインメント性が融合しています。

背景

このイベントは東京・青山のサーティワンアイスクリーム店舗で行われ、来場者はゾンビに囲まれた特異な空間での体験が待ち受けています。毎年恒例のハロウィーンイベントの前倒しで、ゾンビたちが店舗を占拠し、来場者は「抗体入りアイス」を求めてミッションに挑むというストーリーが展開されます。参加できるのは、事前抽選に当選したゲストのみであり、当日券は配布されないため、注意が必要です。

豆知識

  • ゾンビ文化:ゾンビは映画やゲームなどのポップカルチャーで非常に人気のあるテーマであり、多くの人々にとって恐怖の象徴と言えます。特にハロウィーンシーズンには、多くのイベントやパーティーでフィーチャーされています。
  • サーティワンアイスクリーム:世界中に店舗を持つアイスクリームブランドで、多彩なフレーバーが魅力です。日本でも特有の季節限定フレーバーが話題になることが多いです。

関連リンク

ユニバーサル・スタジオ・ジャパンのイベントは、単なるアトラクションだけでなく、独自のストーリーや体験として多くの人に愛されています。興味がある方は、ぜひ参加申込ページをチェックしてみてください!

  • キーワード: ゾンビ

    このキーワードは、ユニバーサル・スタジオ・ジャパンのコラボイベントにおける主要なテーマであり、恐怖を引き起こす要素として重要です。

抗体入りアイス をAmazonで探す

ゾンビ をAmazonで探す

サーティワンアイスクリーム をAmazonで探す



※以下、出典元
▶ 元記事を読む

Views: 0