アフィリエイト広告を利用しています

Facebook Messengerの誤送信を防ぐスクリプト【mac safari】生成AI(LLM)で作った

  1. MacのSafariでFacebook Messengerを使うと、日本語入力時にEnterキーを押すと誤送信されてしまう問題を、生成AI(ClaudeとGemini)に相談してUserscriptで解決した
  2. 完成したスクリプトは「Enterキーでの誤送信防止」は完璧に動くが、「Cmd+Enterでの送信」機能はまだ未完成
  3. でも一番のストレスだった誤送信が防げれば十分実用的で、完璧を目指さず「8割解決」で満足するのが生成AI時代の賢い使い方

前回、Userscriptsを使えば生成AIの力を借りて簡単にSafariをカスタマイズできるって話をしました。

今回は、実際に僕が作った具体例を紹介します。

日常の小さなストレス:Enter送信問題

PCにて、Facebook Messengerを使っていて、こんな経験ありませんか?

日本語を入力して変換を確定するつもりでEnterキーを押したら、2回押しちゃったり、英文モードに切り替えていたのを忘れて、Enterキーを押しちゃったり、そのまま未完成のメッセージが送信されちゃった…。

「あ、間違えて送っちゃった💦」ってあの焦り。

特に仕事のやりとりだと、冷や汗ものですよね。

これ、日本語入力特有の問題なんですよ。

Messengerはデフォルトで「Enterキー=送信」って仕様になっているので、漢字変換の確定とメッセージ送信が衝突しちゃうんです。

ClaudeとGeminiに相談してみた

そこで、「Enterキーでの送信を止めて、Cmd+Enterで送信するようにしたい」と、ClaudeとGemini 2に相談してみました。

やりたいことを日本語で伝えると、あっという間にコードを書いてくれた。

生成AIって、本当にこういう「ちょっとした困りごと」の解決が得意なんですよね。

完成したスクリプト

// ==UserScript==
// @name        Messenger Cmd+Enter Send
// @namespace   http://tampermonkey.net/
// @version     1.0
// @description Cmd+Enter to send
// @author      You
// @match       https://www.messenger.com/*
// @match       https://www.facebook.com/messages/*
// @run-at      document-start
// ==/UserScript==
(function() {
    'use strict';
    var isComposing = false;
    window.addEventListener('compositionstart', function() {
        isComposing = true;
    }, true);
    window.addEventListener('compositionend', function() {
        isComposing = false;
    }, true);
    window.addEventListener('keydown', function(e) {
        if (!e.target.isContentEditable) return;
        
        if (e.key === 'Enter') {
            if (isComposing) return;
            
            if (e.metaKey) {
                e.preventDefault();
                e.stopPropagation();
                
                setTimeout(function() {
                    var btn = document.querySelector('[aria-label="送信"]') || document.querySelector('[aria-label="Send"]');
                    if (btn) btn.click();
                }, 10);
            } else if (!e.shiftKey && !e.ctrlKey && !e.altKey) {
                e.stopPropagation();
            }
        }
    }, true);
})();

このコードがやっていること

プログラミングの知識がなくても大丈夫。このスクリプトがどんな仕事をしているか、簡単に説明しますね。

  1. 日本語入力中かどうかを判定
    • compositionstartcompositionendというイベントで、今まさに漢字変換中かどうかを追跡しています
  2. Enterキーの挙動を制御
    • 漢字変換中のEnterは、そのまま変換確定として機能
    • 変換中でないときの単純なEnterは、送信を止める
    • Cmd+Enterが押されたときだけ、送信ボタンをクリック(※実はこの部分、まだ完全には動いていないんですけど)
  3. 対象サイトを指定
    • @matchで、messenger.comとfacebook.com/messagesの両方で動作するように設定

実は完璧じゃないけど、それでいい

正直に言うと、Cmd+Enterでの送信機能は、今のところうまく動いていません。

送信ボタンを見つけてクリックする部分が、Messengerの複雑な構造にうまく対応できていないようです。

「え、じゃあ失敗じゃん」と思われるかもしれませんね。

でも、僕はこれで満足しています。

なぜ「これでいい」のか

一番のストレスだった「誤送信」は完全に防げるようになりました。

Enterキーを押しても送信されないので、変換確定もスムーズ。改行も自由にできます。

送信したいときは、マウスで送信ボタンをクリックすればいいだけ。

たしかにCmd+Enterで送信できたら便利ですが、なくても困らない。

問題の8割が解決できれば、それで十分実用的なんですよね。

完璧を目指さない、という選択

プログラミングって、完璧を目指すとキリがないんですよ。

特に、FacebookのようにUIが頻繁に変わるサイトでは、完全に動作するコードを維持するのは大変です。

それよりも「今、一番困っていることを解決する」ってアプローチの方が、実は賢いんじゃないかと思います。

生成AIの時代だからこそ、こういう「ちょうどいい」ところで妥協する判断も大事。

次にMessengerの仕様が変わったら、またAIに相談して調整すればいいだけですから。

あなたも試してみませんか?

この記事を読んで「自分もMessengerで困ってた!」って方は、ぜひこのスクリプトを試してみてください。

完璧じゃなくても、誤送信のストレスから解放されるだけで、毎日の体験はかなり快適になります。

そして、もし他にも「ここをこうしたい」って要望があれば、生成AIに相談してみてください。

完璧じゃなくてもいい。今より少しでも快適になれば、それで成功です。

技術的なハードルは、もうほとんどありません。

あるのは「こうしたい」ってアイデアと、「これくらいでいいか」っていう柔軟さだけ。

さあ、あなたは何をカスタマイズしますか?

この記事を書いた人

大東 信仁

カンパチが好きです。

プロフィールはこちら

10月14日開催 参加者募集中
(画像をタップ→詳細へ)

ミッションナビゲート モニター
(画像をタップ→詳細へ)

広告