post-tweetという投稿専用のTwitterクライアントを作って最近使っています。

post-tweet

post-tweetはものすごいシンプルで、文字列の投稿しかできません。 また、作った目的でもあるのですがURLスキームからタイトル、URL、引用文を渡して起動できるようになっています。(逆にそうじゃないケースではまともに使えないです)

目的

post-tweetはブラウザなどで見ているサイトをTwitterに投稿する目的で作成されています。

以前は、PNBTというGreasemonkeyスクリプトを使って投稿していましたが、それを簡略化して単体のElectronアプリにしたものに近いです。

ブラウザ拡張は制限される方向になっているので、ブラウザに依存しないものとして切り出したのが最初です。(このアプリはもともとPostemというクロスポストアプリに内蔵されていましたが、単体に切り出しました)

機能

  • URLスキーム(post-tweet://)で起動
  • コメントを書ける
  • Cmd+Shift+EnterでTwitterへ投稿

URL Scheme

post-tweetでは一度起動すると、post-tweet://というURLスキームがシステムに登録されます。

URLスキームには次のようなクエリを渡すと、それぞれの値が入力欄に反映されます。

  • url: URL
  • title: Title
  • quote: Quoted text

ブラウザのJavaScriptから起動したい場合は次のように書けば、アプリで開くかどうかのダイアログがでるはずです。

const selectedText = window.getSelection().toString();
location.href = `post-tweet://?url=${encodeURIComponent(window.top.location.href)}&title=${encodeURIComponent(window.top.document.title)}&quote=${encodeURIComponent(selectedText)}`

自分はSurfingkeysというブラウザ拡張を使いCmd+Shift+Enterでアプリを起動をしています。 これは、Twitterに今見ているサイトを投稿する用途です。

mapkey('<Meta-Shift-Enter>', 'Open post-tweet', function() {
    const selectedText = window.getSelection().toString();
    location.href = `post-tweet://?url=${encodeURIComponent(window.top.location.href)}&title=${encodeURIComponent(window.top.document.title)}&quote=${encodeURIComponent(selectedText)}`
});

技術的な部分

Electronでもapp.setAsDefaultProtocolClient(protocol[, path, args])でURLスキームを登録できて、そのハンドリングは癖があることぐらいでたいしたことはやってないです。

またElectronは無のアプリでも起動時間が1秒とかかかるので、post-tweetではアプリを閉じてもバックグラウンドにはいる状態にしています。 これで数百msぐらいで投稿画面がでてくるようになりました。

面倒でバイナリはおいてないので、使いたいヒトは自分でビルドしてみてください。