LINE Notifyの代替手段を考える

LINE Notifyが2025年3月31日に終了してしまうということなので代替え手段を考えないといけなくなってしまいました。

無料で使えるし手軽で便利だったのになあ。

■案内されている手段は?

サービス終了に伴ってLINEから代替え提案されているのがMessaging APIを使う手段。

これは月間200通までは無料だけれど、それ以上になると月額5,000円〜という有料サービスになりますね。200通あれば用途を限定さえすれば事足りるような気もしますが、有料も視野にいれないといけないのであれば他の手段とも比較しておきたくなります。

■とりあえずMessaging APIは

LINE公式アイコン

ひとまず提案されている通り、第一の選択肢と考えることになります。
もちろんLINE公式アカウントを持っているというのが前提になります。

必要最小限の手順としては、

・アクセストークンを取得
・通知するユーザーIDを取得
POST送信

自分が管理しているアカウント宛てであれば、アクセストークンユーザーIDもコンソール画面上で確認できるのでかなり手軽に実験できますね。
あとはcurlで直接たたいても良いですし、pythonで書いたとしたら以下の通り。

import requests

# LINE Messaging APIの設定
LINE_CHANNEL_ACCESS_TOKEN = "チャネルアクセストークン"
USER_ID = "LINEユーザーID"  # 自分のLINEユーザーID
MSG_SEND_LIMIT = 200        #送信上限数
MSG_SEND_WARN  = 150        #警告開始数
MSG_SEND_COUNT = 0

def send_message(user_id, message_text):
    # 送信数確認API
    url = 'https://api.line.me/v2/bot/message/quota/consumption'
    headers = {
        'Authorization': f'Bearer {LINE_CHANNEL_ACCESS_TOKEN}'
    }
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        data = response.json()
        MSG_SEND_COUNT = int(data['totalUsage'])
        print(f"Total message usage: {data['totalUsage']}")
        # 個別送信pushAPI
        if MSG_SEND_COUNT < MSG_SEND_LIMIT:
            url = "https://api.line.me/v2/bot/message/push"
            headers = {
                "Content-Type": "application/json",
                "Authorization": f"Bearer {LINE_CHANNEL_ACCESS_TOKEN}"
            }
            payload = {
                "to": user_id,
                "messages": [{"type": "text", "text": message_text}]
            }
            if MSG_SEND_COUNT >= MSG_SEND_WARN:
                payload["messages"].append({"type": "text", "text": f"現在の送信数:{MSG_SEND_COUNT}通\n送信制限まで残り:{MSG_SEND_LIMIT-MSG_SEND_COUNT}通"})
            response = requests.post(url, headers=headers, json=payload)
            if response.status_code == 200:
                print("通知送信成功!")
            else:
                print(f"エラー発生: {response.status_code}, {response.text}")
        else:
            print(f"送信上限に到達しました:{MSG_SEND_LIMIT}通")
    else:
        print(f"送信数確認エラー: {response.status_code} - {response.text}")

# 実行部分
if __name__ == "__main__":
    message = "これはテスト通知です!"
    send_message(USER_ID, message)

もし自分(管理者)以外のユーザーへ通知したい場合にはユーザーIDを取得する必要があるので、Webhookを準備して送信するといったひと手間がかかります。
Webhookを設定した場合、初期値では無制限にどこからでもアクセスできるようになっているので、念のためにLINE DevelopersのコンソールからIPアドレス制限を掛けておいたほうが良いでしょう。

LINE公式は受信の通知も常に受け取っているので、どちらかといえば公式から発信というよりは公式アカウントへと通知できるほうがありがたいのですけれどねぇ。

■Discordへの送信

discordアイコン

わりとユーザー層が偏りそうな気もしますが、私も最近になってようやくdiscordに触れはじめたのでこちらに通知しちゃうという手もありそうです。

流れとしては、

・通知用チャンネルを作成(既存でもOK)
・チャンネルの設定アイコンをクリック
・「連携サービス」を表示
・「ウェブフック」を選択
・「新しいウェブフック」を選択
・出来上がったウェブフックURLをコピー

と、すべてアプリ画面上で完結してしまうのでとても楽ちん。

動作テストも

・curl -H “Content-Type: application/json” -d ‘{“content”: “これはテスト通知だ!”}’ “”

とするだけで良いので簡単ですね。

ただ、こちらは逆に通知が多くて抑制しちゃっているのもあって、やはり必要な通知を見逃してしまうおそれが払拭できないかな・・・

■Teamsへのチャット送信の場合

Teamsアイコン

Microsoftにどっぷりと浸かっている方であればTeamsのアカウントあてにチャット送信するという手もありそうですね。

Teamsに慣れてるかたならWorkflow(PowerAutomate?)でさくさくっと作ってしまえるのか、あるいはGraphAPIを活用してできそうです。

手順としては、

・Azure EntraIDでアプリ登録

アプリの登録 – Microsoft Azure

※適当な名前で構わないのですがあとで修正するのは大変かもしれない


・アプリのAPI権限を設定

「アプリ名」の中から「APIのアクセス許可」を選び「+アクセス許可の追加」

「Microsoft Graph」から「委任されたアクセス許可」を選び
Chat.ReadWriteとChatMessage.Sendを追加

そして、既定のディレクトリに管理者の同意を与えることを忘れずに。
場合によっては「アプリの所有者」にも追加登録が必要かも。

・クライアントシークレットの生成

「証明書とシークレット」の中から「新しいクライアントシークレット」

説明と有効期限(メニューからは最長2年)を設定し、シークレットを生成します。生成されたシークレットのIDではなく値の側をメモしておきます。

・アクセストークンを取得

つぎはコマンド操作で、

curl -X POST -H “Content-Type: application/x-www-form-urlencoded” -d “client_id=<アプリケーションID>&scope=https://graph.microsoft.com/.default&client_secret=<クライアントシークレット>&grant_type=client_credentials” https://login.microsoftonline.com/<テナントID>/oauth2/v2.0/token

とすることでアクセストークンが返ってきますが、とても長い文字列です。

・チャットIDを取得

通知先になるチャットのIDを取得する必要もありますが、なんかこんな便利そうなページもあるのですね。

Graph Explorer | Try Microsoft Graph APIs – Microsoft Graph

アクセス権限の都合で弾かれる場合には右上のアイコン下あたりの「Consent to permissions」から必要なアクセス権をConsentしましょう。


・POST送信

前準備がいろいろと面倒ですがいよいよ通知文の送信です。

curl -X POST -H “Authorization: Bearer <アクセストークン>” -H “Content-Type: application/json” -d ‘{“body”: {“content”: “これは通知テストです!”}}’ https://graph.microsoft.com/v1.0/chats/<チャットID>/messages

ただ、Teamsは自社契約ではなく他社契約になっているので実験はできずなのですが・・・

■自前で通知アプリを作るか

自前でアプリを作る方であれば、通知を受け取るだけのアプリを作っちゃうという手もありそうです。

ただ、むかーしむかしにiOSとAndroidの両方に対応するNotificationを持ったアプリを運用していたときに思ったのですが「OSのアップデートでメンテコストがかかりすぎる!」という問題がありますよね。

いまどきならすでに解決されているのかもしれませんが、そもそもそれを回避したいのが大きな理由でLINE Notifyを導入したというのを忘れそうになっていました。

というわけでこちらは論外でしたね。

手軽さから言えばDiscord、でも日常使いのシーンから考えるとLINE Messaging APIに落ち着いてしまうのかな。


安心安全安価なSDカードデータ復元・HDDデータ復元は
長年の信頼と実績の『株式会社パソコントラブル救助隊』へ。
https://hqsecure.net/

IPv4とIPv6で速度の違いは?

数年前ならいざ知らず、いまどきもうIPv6かIPv4かなんてことは一般ユーザーは意識する必要もなくなってきているとはおもいますが。

さて、ウチの固定ネットワークのプロバイダはIPv4とIPv6を同時に使用できます(むしろ当然)

一般的にはIPv4 over IPv6となっていて快適なのでしょうけれど、どういうわけか諸事情がありウチではIPv4とIPv6が別々に流れております。

■むしろ良い?

それによってメリットが無いわけでもないのですが、こと「通信速度」だけを見た場合にはやはりIPv4では不利なことがあります。

前提として以下しつこく書きますが日常使いではまったく問題にならないのですよ。

ただ、たとえば特殊事情(固定IPアドレスが欲しいとか、特定のプロトコルを通したい場合)はIPv4をPPPoEで通しておかないといけないなんていうプロバイダ事情があるので致し方ない。

■速度差がわかりやすい

さてそんな事情は横においといて本題。

同じ接続相手先でもIPv4の場合とIPv6の場合で顕著に速度差がでる時間帯があります。個人的に調査したなかでは概ね21〜00時くらいまでの範囲。

この時間帯にWEBサイトを見てまわっていると時々遅いなーと体感することがあるんです。でもGoogleなんかのスピードテストを実行してもぜんぜん遅い数値は出ないから不思議に思っていたのです。

知識としてはPPPoEのIPv4とIPoEのIPv6だったらIPv6のほうが断然有利なのは頭に入っているものの、体感するほどの差は出ないだろうとたかを括ってました。

■サーバー設定変更に乗っかり計測

そんな折、ちょうどデータセンターに置かれている自社サーバーの設定を変更する必要が出てきたのでその作業のついでに速度差のデータも取ってしまおうという事に。

対象サーバーの契約上はIPv6/IPv4それぞれの固定IPアドレスは払い出されているものの、古い古い運用を引きずっていたためIPv6はOS側で無効化していたのですね。

実質IPv4でしか接続できない運用体制だったサーバーにIPv6の設定を追加するだけ。

そのまえにまずは計測相手となるサーバーにLibrespeedを導入(Gitから展開するだけで良いので楽ですね)。クライアントからの計測ができる体制にしました。

動作テストとしてIPv4のままで速度計測を実施。
そのあとサーバーの設定見直しをかけIPv6を使用できるように修正。

IPv6接続でも速度計測ができることを確認します。

平日01時の速度差

※混雑の済んだこの時点でも2倍近い速度差はあるっちゃああるのですが

そして、IPv4とIPv6の切り替えが簡単にできるようにして待機させ、翌日の夜の速度差が激しくなる時間帯に計測することとします。

同じクライアントから同じサーバーへと接続することになるので条件差が少なく、単純にIPv4で接続するかIPv6で接続するかの違いだけと考えることができます、よね。

■予想以上の結果に

IPv4で速度が落ち込む時間帯というのは平日21~00時とだいたい3時間くらいありますし、念のためにIPv4計測→IPv6計測→IPv4計測→IPv6計測として突発事情ではないことも確認済み。

もともとクライアント側が細い回線を使っているためか、極端に落ち込む時間帯以外はIPv4でもIPv6でもそんなに体感差はなかったのですが(たしかに倍ほどの差は数値として現れていますけれども)、測ってみるとずいぶんと大きな差になりました。

(1)速度低下が出始める21時の計測

平日21時の速度差

おもにDownloadの値で比べることになりますが、IPv6: 76Mbit/sに対し IPv4: 4.2Mbit/sとずいぶんな低下っぷり。WEBサイトを閲覧しても時々もっさりと感じられます。

(2)速度低下が顕著な23時の計測

平日23時の速度差

結果としては一目瞭然ですがDownloadの値に注目するとIPv6: 93Mbit/sに対してIPv4: 2.5Mbit/sと97%ダウン
元の回線が細いとは言え、IPv6接続時と比較して3%ほどの速度しか出ていないという結果になっているのが驚き。

どうりでWEBサイトを見てまわっていてもやたらと遅いなと思うのは気のせいだけではなかったようです。

PPPoEだからオーバーヘッドが大きい?とか、プロバイダ側がIPv4のルーティングに力を入れないから?とか事情はあれこれ想像してしまいますが、利用者側から見えるわけでもないですしそこを追求したとて何もできない(IPv4 over IPv6だとそれほど顕著に速度低下しないのだろうけれどなぁ・・・)

ともかく、回線そのものの速度が低下していなくっても通す通信がIPv4だと遅くなることだけは明らかなようです。サーバーを立てる側もIPv6が使えるなら積極的に使ったほうが利用者に優しいということが言えそうですね


安心安全安価なSDカードデータ復元・HDDデータ復元は
長年の信頼と実績の『株式会社パソコントラブル救助隊』へ。
https://hqsecure.net/

WPS-PDFが動かないぞ

先日からwps-office続き。忘れないように自分用のメモ書きみたいなものですが。

wps pdf

・WPS PDFが動かない

WPS OFFICEをインストールすると、Writer※ワード的なもの、SpreadSheet※エクセル的なもの、Presentation※パワポ的なものとあわせてPDF閲覧・作成用のアプリケーションも入ります。

ところが、いざ使おうとするとまったく立ち上がらない。いったいどうしたのだろう?別にすぐに困りはしないけれどなんとなく環境が整っていないのはイヤというだけで頑張ってしまうわけです。

・原因はなんだろう?

CLIから起動するにはパスが通っていることを確認して wpspdf と入力してあげるだけでOKなはずなのです。

ですが、正常に立ち上がってくれない環境で試してみると「libtiff.so.5が見当たらないよ」というエラーメッセージが。

ライブラリが無いと言われると実際に確認したくなるもので、/usr/lib/x85_64-linux-gnu フォルダの中身を眺めることになります。

すると libtiff.so.6 と言う物は見つかるのですが、たしかに libtiff.so.5 は存在しない。なるほどエラーメッセージは確かであったかと納得。

・対策はどうする?

どうやらライブラリのほうがバージョンが高くなってしまってて、要求されるバージョンのものが見つからないために立ち上がらないわけで。

それならば簡単に、libtiff.so.6 を libtiff.so.5 に偽装してあげたらどうなるだろう?
そう、アプリ側が libtiff.so.5 を呼んだ時に libtiff.so.6 が何食わぬ顔で応答するようにシンボリックリンクを以下の通り

sudo ln -s /usr/lib/x86_64-linux-gnu/libtiff.so.5 /usr/lib/x86_64-linux-gnu/libtiff.so.6

と、ごまかしてみることに。

・すんなり起動した!

ふたたびCLIから wpspdf と入力してみると今度はすなおに立ち上がってくれました。

単独でのPDF閲覧や他のアプリからのPDF作成もすんなりと実行できていて、とりあえずのところは大丈夫そう。

よかった、また古いソースコードをコンパイルして展開しなくっちゃいけないんじゃないかと面倒くささが先行しましたが、割と簡単に対処できてほんとにヨカッタ。


安心安全安価なSDカードデータ復元・HDDデータ復元は
長年の信頼と実績の『株式会社パソコントラブル救助隊』へ。
https://hqsecure.net/

FireTV StickでABEMAが視れない(解決)

AmazonPrimeってわりと使いますよね。単純に買い物をするだけでもとても便利。その特典みたいな形でPrimeVideoもよく使うわけなのです

そうなると専用デバイスがあった方が使いがってがよく、我が家ではあちこちにFireTV Stickがあります。

FireTVstick

・ABEMAが映らない

ここ数年の間に購入したモデルでは、リモコンにABEMA専用ボタンがついているものもあります

ボタンがあるなら押してみたいというのが人情ですよね。

で、ぽちっと押してみるんです。

すると・・・待てど暮らせどぐるぐるぐるぐると読み込み待ちのような感じでまったく映りません。

特に積極的に見たいというものもないので数分で諦めて忘れてしまいます。

これを半年サイクルぐらいで何度も試しては忘れてという繰り返しなのですが・・・

ABEMA

・なぜ映らないのか調べる

それまで年単位で特に原因も対策も調べようともしなかったわけですが、今回は違いました。ちゃんとネット検索しました

そして、検索結果がまったく役に立たないことを再認識しました(笑)

ネットワークを調べろとか、アカウントを調べろとかHDMIに繋がっているか確認しろだとか、、、CMだけは映るのですから本当に関係ない。

・ABEMAアプリが悪いのか

ABEMAアプリのアップデートでもしないといけないのかな?と予想を立ててみるものの、特にアップデートのお知らせもなければアップデートを強制するような操作の導線もない

ならば、一度アンインストールしてみようと

そしてインストールし直すと、、、

何事もなかったかのようにちゃんと視聴できるようになりました(解決)

・セットアップ時から入ってるもの

ほぼ、購入当初からインストールされているような状態のアプリを疑ってかかるなんてあまりないですよね(正確には初期設定のときにインストール候補を聞かれてそのままの流れでインストールしているのだと思うが)

うちにあるFireTV Stickでは全滅で、すべてアンインストールしてから再インストールすることで解決しましたから初期設定のプロセスになにか問題が潜んでいるのでしょう。

同じ現象で困っている人ってほんとに居ないのかなあ?


安心安全安価なSDカードデータ復元・HDDデータ復元は
長年の信頼と実績の『株式会社パソコントラブル救助隊』へ。
https://hqsecure.net/

WPS-OFFICEで太字が潰れてしまう対応

さて、どのくらいこの現象にぶち当たる人数がいるのかは想像できませんが。

ウチのUbuntu24環境でちょっとしたOFFICE系データの閲覧や編集に重宝しているWPS-OFFICEなんですけれど、最近構築しなおしたUbuntu24.04の環境ではなぜか日本語表示が潰れてしまうという現象にあたりました。

■どんな現象が起きる?

普通に日本語表示をさせている部分にはまるっきり問題は出ないのですよ。

ところが、日本語の文字列に太字の設定をしたとたんに、まるでマジックで雑に塗りつぶされたかのように黒く潰れてしまうんですね。

とまあこんな感じで、上記はライター(※ワード的なもの)で書いた文書ですが、日本語文字の太字設定をした部分だけが潰れた表示になってしまいます。

見ようによっちゃまるで呪われたかのような文書になってしまいます(笑)

文字情報そのものが失われるわけではなく、ただ単に表示が潰れているだけではあるのですが読めないのは困った。

■原因は?

どうやらこれはWPS-OFFICEのバグが原因なようで、ざっとネットを見渡してみると2023年ごろにはすでに話題に上がっているようなのですが現在のところバグが取り払われた気配はありません。

しかもこのバグ、FreeType2.13.0よりも新しいバージョンのFreeTypeと組み合わせた場合にのみ発症するようです。

なので、Ubuntu24.04にアップして標準インストールされるFreeTypeのバージョンが2.13.2になったがために目立つようになってしまった、ということのようです。

■対処方法は

さて、新しいバージョンどうしを組み合わせると問題が出るということであれば、どちらかを古いバージョンにダウングレードしてしまうというのが最も簡単な対処法です。

今回はこのサイトの記事を参考にfreetypeの側をダウングレードして対処したいと思います。

問題は、Ubuntu24ではfreetype2.13.2しか配布されていないようで、ちょっと探しにいってみても2.13.1までしか遡れない。

そうなるともう、古いバージョンのソースコードをなんとか入手してコンパイルするという作業が必要になってきます。

ソースコードそのものは、
https://sourceforge.net/projects/freetype/files/freetype2/2.13.0/freetype-2.13.0.tar.xz
から入手可能なようです。

■手順は?

ダウンロードした圧縮ファイルを解凍し、
そもそもfreetype2.13.2がインストール済みという前提なので2.13.0のインストールは不要で、コンパイルまで進めることになります。

tar -xvf freetype-2.13.0.tar.xz
cd freetype-2.13.0
./configure –prefix=~/freetype-2.13.0
make -j$(nproc)

ここまでで必要なファイルが出来上がっているはずなので、

find . -name “*.so*”

として場所を確認します。私の環境では 、

./objs/.libs/libfreetype.so
./objs/.libs/libfreetype.so.6
./objs/.libs/libfreetype.so.6.19.0

と3つのファイルが出来上がっていたので、この3つをWPS-OFFICE配下のディレクトリにコピーします(挙動をみている限り3つめは不要な気もするが)。

sudo cp ./objs/.libs/libfreetype.so /opt/kingsoft/wps-office/office6/
sudo cp ./objs/.libs/libfreetype.so.6 /opt/kingsoft/wps-office/office6/
sudo cp ./objs/.libs/libfreetype.so.6.19.0 /opt/kingsoft/wps-office/office6/

■無事に解決

さてコピーまで済んだところでWPSを立ち上げてみます。

冒頭のライター(※ワード的なもの)で書いたファイルですが、日本語文字の太字部分がちゃんと潰れずに表示されています

もちろんWPSのライター以外のアプリケーション(スプレッドシート※エクセル的なもの、プレゼンテーション※パワポ的なもの)でも同様に改善することが確認できます。

最初この現象を目の当たりにしたときにはフォントファイルが壊れているか足りないのかな?などと考えたてアレコレ試すためにとても時間を消費するわけです。

でも解決できてみると「なんだこんな簡単なのかっ」となってしまうのはトラブル解決あるあるですね。


安心安全安価なSDカードデータ復元・HDDデータ復元は
長年の信頼と実績の『株式会社パソコントラブル救助隊』へ。
https://hqsecure.net/