古事連記帖

趣味のこと、技術的なこと、適当につらつら書きます。

今年を振り返ろう サブスクリプションの棚卸

今年を振り返ろうシリーズ。次はサブスクリプションの棚卸をします。

これは id:bps_tomoya がやっているのが面白そうだったので真似させてもらうやつです。

bps-tomoya.hateblo.jp

初回なのでまずは広げるところから。 この中には通信費を除く光熱費、各種生命・自動車保険、ローンなどの分割決済などは含んでいません。

月間

品目 費用 年間支払額 どうする予定? 備考
GitHub Copilot Pro 11ドル 18,391円 継続 ドル建てはめんどくさい。愚直に決済情報から円で出す
Google One 100GB 290円 3,480円 継続 そろそろ足りなくなりつつあるので増やすか整理するか
ウェザーニュース 315円 3,780円 継続 The Last 10-second を使っている関係で使い続ける
enひかり 4,378円 52,536円 継続 1Gマンション + 固定v4 + Xpass - 勝手に割り。この組み合わせでは最安のはず
さくらのVPS (石狩/1G/月払) 880円 10,560円 継続 自作逆ジオコーディングで使用中。ASP.NET Coreを運用するのは金が掛かる
Discord Nitro 1,050円 12,600円 継続 一応
Microsoft 365 Business Basic 989円 11,868円 継続 これでメールアドレスを量産している。Teamsありなのでなしプランに切り替えるともう少し安くできそう
Adobe Illustrator 1,848円 19,446円 継続 データ入稿で結局必要。あの手この手でおさえてこの額。(1,848 x 11) + 123 - 975
ahamo 2,970円 35,640円 継続 メイン端末の通信プラン。dポイントで多少増減はしているものの誤差
Spotify Premium Standard 980円→1,080円 11,860円 継続 ahamoに紐付け中。12月決済から1,080円になった。ロスレスありがたいがハイレゾもほしい
Youtube Premium 1,280円 15,360円 継続 ahamoに紐付け中。なんだかんだ毎日見ている
日本通信 合理的シンプルプラン 290円 3,480円 継続 サブ端末で個人アプリ (Mikaboshi) の通信に利用中
スカパー! 2,409円 28,908円 継続 フジテレビONE/TWO, テレ朝チャンネル1/2の視聴用でスカパー!セレクト5。テレ朝chは観なくなりつつあるので単体契約にする手もある
irumo 3GB 880円 10,560円 廃止検討中 後述
αあんしんプログラム 550円 6,600円 廃止したい 廃止したい。後述
合計 244,467円 (概算)

年間

品目 費用 どうする予定? 備考
Duolingo 7,890円 継続 一応日課として定着しているので継続
COCCHi 3,800円 継続 カーナビアプリ。車載Google Mapsは使い物にならん
ドメイン (udonge.net) 13.02ドル (1,863円) 継続 ドメインは維持
ドメイン (masterspark.net) 13.02ドル (2,053円) 継続 ドメインは維持
ドメイン (moriya.faith) 11.20ドル (1,753円) 継続 もうどこにも使ってないけど一応維持
ドメイン (aynv.jp) 3,058円 継続 大切な4文字JPドメイン
Amazon Prime 5,900円 継続 知らん間に6,000円近くまできてたのか
NHK受信料 21,765円 継続 テレビがあるので必須。最近は面白い番組もちょいちょいあるので価値はあると思ってる
Microsoft 365 Personal 16,870円 継続? Amazonの初年度価格 (通常 21,300円)。2027年4月に更新予定だが更新方法は未定
駅すぱあとプレミアム 2,400円 廃止検討中 どうしよう?なんだかんだ使うけど勝手が微妙…
Flightradar Gold 3,900円 廃止 アンテナ用意してContributorになったので廃止予定
Xperia ケアプラン 5,500円 廃止 Pixel 10 Proを買うかどうかの瀬戸際でうだうだしてたら更新してしまった。来年は解約
合計 76,852円

補足

Microsoft 365 Business Basic

スパム対策でアカウントはサービスごとにしたい。けどめんどくさいメール管理はMicrosoftに任せてしまえってことで、ひとりで企業アカウントを持っています。この棚卸をしているときに知ったんですが、今Teamsなしプランが存在しているようなので、これをあてれば989円/月から725円/月になって年間3,168円の節約になりそう。年間契約月払いで9月更新なので、途中で更新できるかは不明。できれば1月から始めようかと。

スカパー!

GCCXが観たい、水曜どうでしょうおにぎりあたためますかが観たい ということで、チャンネルごとに買うより安いスカパー!セレクト5をチョイスしていました。

一方で、水曜どうでしょうはプレミアが毎週水曜にチバテレでやってる方を観ていて、おにぎりあたためますかは録画していても急に放送時間やチャンネルが変更になって全く追いつけなくなってしまいました。今の視聴スタイル的にはチバテレで水曜どうでしょうプレミアをのんびり観てるのがよさそうなので、いっそフジテレビONE/TWO単契約で充分なのかもしれないです。気が向いたら契約更新したらいいものね。

ちなみにスカパー!セレクト5の残1はナショナルジオグラフィック。でもテレビ内ラテ欄で遠いので一切観ていない…。

irumo

もともとはPixel 9aのバラマキがあったときに、OCNモバイルoneの移行先としてMNP契約したときのもの。Xperia 5VでAndroid Autoすると動作が著しく不安定だったので、Pixel 9aにそれを任せる目的で3GBプランを契約しています。それでも足りなかったんですよね。

一方で年末にXperia 5VからPixel 10 Proへメイン端末をお引っ越しした関係で、メイン端末だけでAndroid Autoができるようになり、Pixel 9aは宙ぶらりんの状態になってしまいました。3GBも大きく持て余す事態になっています。

とはいえPixel 9aは残クレでもっているので回線契約を潰すかちょっと悩ましいところ。irumo 0.5Gに相当するものがもうなくなった上プラン変更もできないのでただただ浪費してしまうのはちょっとなーと思いつつ…。

αあんしんプログラム

カメラを買ったときにおすすめされて、とりあえず何らか恩恵受けられるじゃろって思って契約していました。が、レンズは増えないのでたまにくる15%オフクーポンは持ち腐れになり、レンズの入れ替えは発生しておらず下取りもなんもない。センサークリーニングするタイミングはあったけど、銀座まで行かないと即日できない上に急いでるときに空きがなく、結局キタムラでお願いしてしまいました。

こうなりゃもう意味もないなーと思って解約したいけど、現状解約はオンラインでサクッとではなく電話しなければいけないのです。非常に面倒…。

Xperia ケアプラン

Xperia 5Vの購入と同時に契約してたもの。年間契約。購入が11月だったので11月が更新月で、Pixel 10 Proの購入するかどうか悩んでいたのものこの時期で、買うかどうかも不透明だったために解約を漏らして今年分の決済が済んでしまいました。

2年経ったしもういいよね でとりあえず解約しておけばよかったんだけど。ということで来年は忘れずに解約します。こっちはオンラインでサクッとできます。なんでやねん。

感想

今回初だったのでまずは現状を知るところから始めたものの、年間でとんでもない額を払っていたことに驚愕しているところです。今年はもうバッタバタなので来年に入って落ち着いたところで断捨離をします。断捨離できっかな…

F1を(サッシャさんの実況で)観ていたDAZNはクッソ高くなってしまって去年のうちに解約してたんですが、DAZNからF1が消え、FODが持つことが決まっているので、それが増えるかも。値段次第ですが…。

今年1年を振り返ろう

2025年は個人的にいろいろ変化とかがあったので、普段あんまりやらないですが珍しく(?)振り返りをします。
一応Amazonアフィリエイトリンクもあります。よろしくお願いいたします。

転職をした

このブログではあまり仕事のことは書いてませんでしたが、4月に転職をしました。そして3社目です。
新卒で入って前職まではいわゆる「モバイルオンラインゲーム」、またの名を「ソーシャルゲーム」で頑張ってきていましたが、今度は別の業種になりました。それなりにでっかい会社です。
やることは大きく変わりましたが、使うモノはそんなに変わらないです。異業種で10年ほどの知識を頑張って生かしつつ新しい知識を身につけていこうと思います。
そして今はGitHub Copilotを駆使していろいろ試したり、Actionsでいろいろ組んだり…と割と足回り系の整備をしていますw

どこに行ったのか…はそのうち。

シビックRSを手に入れた

4月に納車されました。人生初めてのMT車
思えばイベントでシビックEX (MT)を試乗して面白かったこと、試乗中に大失敗したことをきっかけにMT車の「リベンジ」とも言える憧れを持ち始めて、でも当時はフィット e:HEV Modulo Xに乗り換えたばかりだったこともあり、
車検をとりあえず通してから考えよう…ということでやっていったら2024年のオートサロンでシビックRSプロトタイプの発表、そして秋に発表・発売されるという話しを聞いて8月の先行注文の2番目に並び、いろいろあって翌年4月に納車されたという運びとなりました。

2025年4月に納車された シビックRS

フィットと比べて広くなりましたが、その辺はあまり意識しなくても大丈夫そう。
BOSEスピーカーはいい音がします。運転が楽しくなるし、Spotifyで組んでいるプレイリストに何を入れるかが楽しくなってきます。
マイナーチェンジしたシビックから入った「Google 搭載」のHonda CONNECTディスプレーは面白いんですがまだまだ途上感あって今後に期待といったところ。日産や三菱も搭載してきましたし、ユーザーが増えることによるサードパーティソフトウェアの充実度合いが高まってほしいです。
今のところはAndroid AutoでパイオニアのCOCCHiをカーナビとして使っています。
いろいろ使った中では都道府県道の「主要地方道」と「一般都道府県道」の色分けがされた地図情報、カーナビメーカーらしい案内情報、高速道路などの分岐における標識記載情報をすべて読み上げる音声情報、スマホをそのままサイドモニターとして地図表示をしたりTurn by turn表示ができたりと、それぞれにおいて自分にしっくりくるなと感じます。
案内はちょいちょい変だったりはしますがw

運転面では まだまだMT車の運転がおぼつかない面もありますが、納車当初「走ることに集中」していたのが、半年ちょっと乗ってきて「運転することに集中」するようになってきたのは変化かなーと思ったりします。

コーティング

今回はがんばって自分でやってみようと思って、いきなり「シラザン50 ダイヤモンドプラス」にチャレンジ。

施工は近所のレンタルガレージでやりました。6時間で終わるやろと思ったら6時間ギリギリで大変でした。やっぱりプロってすごいんだな…ということで、今度があればコーティングはお任せしようと心に誓いました。

副次的な話しとしては、洗車を自分で頑張ろうと思い始めて、純水器や電動フォームガンのボトルのやつを買ったりしました。自分の家ではさすがに洗車はできないので、実家の駐車場を借りて洗車させてもらっています。

冬タイヤも買った

車が変わったら変わるのは冬タイヤですが、フィットと違ってタイヤサイズが大きくなりその分お値段も上がりました…。
車が納車された当初は冬タイヤは買わずに様子見をしよう…と思っていたんですが、冬が近づくにつれて冷え込みの厳しさが予想されるようになり、雪の心配が現実味を帯びてきたのでやむなく購入。
これまでタイヤ館でブリジストンの冬タイヤを買っていましたが、今回からは量販店で選んでヨコハマのiceGUARD7にしました。店員さんと話しをして現実解だなあと思ったタイヤです。とはいえやっぱり高いんですが…。

テレビを買った

一人暮らしを始めた当初に買っていたテレビ「SONY KJ-49X8500F」を下取りに出し、新たに「REGZA 50Z870R」を買いました

きっかけはSwitch2の購入で、今まで持っていたテレビは4K HDR対応でしたが120Hz非対応だったので、せっかくだし120Hzも出せるテレビをと思い、前々からREGZAのテレビが欲しいなーと思っていたこと、同じく一人暮らしを始めたときに買ったタイムシフトマシンレコーダーの使い勝手がよかったので、今度はテレビがタイムシフトマシン搭載であるといいなと思った中でちょうど見つけた50型のタイムシフトマシン搭載テレビ。半ば勢いで買ったので、同グレード帯の55Z875Rの方がもうちょっといい性能だったということに後で気付いた後悔はありますが、まあそこまでじゃないよね…って思いながら、レスポンスの良さ、細かい調整ができたりする面白さで割と満足しています。

スマホを買い換えた

Xperia 5Vを買って2年。なんでかわからんけど、スマホっておおよそ2年になるとめっちゃ調子悪くなるんですよね。というかXperia 5Vに至っては買って数ヶ月くらいで調子が悪くなって騙し騙し使ってきていたんですが。NFCタッチ決済反応しないとか、Suicaの応答が時々遅れるとか、電話が掛かってきたらハングアップするとかしんどかった。
末期はちょっとアプリをバックグラウンドに移しただけでTerminateするし、Microsoft Launcherは毎回Terminateしたり動かなくなったりとストレスマッハ。
さらにXperiaシリーズは1と10の2ラインになりそうな気配が濃厚で、1はデカいし、10は自分のほしいスペックからは遠すぎるのでもう乗り換える先がない…ということで、
いろいろ考えた結果、次に行ったのは Pixel 10 Pro でした。ちなみに決め手はQi2でした。

my new gear...

いやこれXperia 1VIIと大して大きさ変わらんやんけ!って気はするんですが、もうXperiaに対して情熱が冷めているときだったので仕方がなかったんです。
それに、ちょうどブラックフライデーセールで、かつ4万円クーポンを配っていたタイミングとも重なったことで、1VIIよりも安く手に入れられた というのもありました。普段はしょっぱいiPhone SE2の下取りもこのときだけは大盤振る舞いでしたね。
playpoints.withgoogle.com

今のところすごく好調です。NFCタッチ決済が動かないこともないし、Suicaの反応もすごくいい。それにサブ端末などのケースをマグネットによるホールド対応のものにしていたのもあって、Qi2がすごくありがたい。まあQiでもマグネットつきケースにしてなんちゃってQi2にしてもいいのかもしれないですがw

まとめ

ということで、今年はいろいろ買いすぎてお金が吹っ飛んでいきました。転職した上に賃貸の更新も重なってまあまあしんどいw ですが、買ったモノはどれも満足度は高いです。
来年はもやし生活で粘ります。

三井住友カード (NL) の修行をOliveでやったらできた

中身は「とりあえずできたよーっていう事実」だけです。

三井住友カードのナンバーレスは、毎年9月末または入会月翌年の同月末日までに年間で100万円の決済をすることで年会費永年無料化されたゴールドカードへのアップグレードができます。
Oliveは三井住友銀行のキャッシュカード兼クレジットカードで、カード1枚でキャッシュカードとクレジットカード、さらにはデビットカードなどにもアプリから切り替えることができます。*1 さらにはクレジットカードは三井住友カード発行であればOliveとは別のクレジットカードを紐付けることが可能です。

そのOliveとは別のクレカが紐付けできるというところに着目し、もしかして100万円修行を、ノーマルカードを差し出さずに達成できてしまうのではないかということを思ったのが昨年のこと。Oliveそのものの100万円修行が終わった次の目標兼検証として切り替えて試してみることにしました。
結果としては「できました」の一言です。つい先日達成した旨通知があり、無事に三井住友カードゴールドへのアップグレードを果たすことができました。


Oliveでのクレカモードを別のクレカに紐付ける際、修行もそうですが通常利用にも注意点がいくつかありました。三井住友カードの「指定の支払いモードにならないお取引」にある通り、ETCカードや継続決済についてはOliveのクレカで決済されるので、公共料金や通信費などだけで修行することはできませんでした。なのでそれらも含める場合はもとのカードの番号で決済するように各種サービスに変更を届けておくか、それらを除いて都度決済で頑張るかのどちらかでやる必要があります。
www.smbc-card.com

僕の場合、Oliveカードはゴールドでしたが、もちろん「ガワだけがゴールドカード」で実際の決済は紐付けたカードであるため、各種保証や特典などもその紐付けたカードに準ずることになります。とはいえお世話になることはなく特に問題もなかったです。
www.smbc-card.com

で、アップグレード案内の「よくある質問」には「Oliveフレキシブルペイは対象となりません。」という記載がありますが、用語的にこれが「Oliveのカードを通しての『指定の支払いモード』による決済」なのか、「Oliveのノーマルカードで『クレジットモード』による決済」なのかよくわからないですが、今回のケースでは大丈夫だったようです。たぶん後者の話なのかなあ…。
www.smbc-card.com


とりあえず達成したのでよかったです。毎月達成状況を教えてくれるメールがきてて、順調に積み上がってるのは見てたのでたぶん大丈夫だろう、でも実際にアップグレードできる旨がこないまでは信用できない…とか思いながらやってたので一安心というか。これでやっぱダメですってなったらちょっと悲しかった。
で、達成したし、カードも手にあるし、じゃあどうするのっていうのはあんましないです。とりあえずカードは大事にしておきますw
普段の生活に組み込める、無理ない程度にやれる修行、他にもあったらやりたいですね。飛行機は普段の生活に大きくプラスしてしまうので結構厳しいですがwでもちょっと憧れるサムシングでした。

*1:ちなみにカードそのものはデビットカードとしてのカード番号が割り振られるので、一部で使えないという制約はあります。例えばConoHaとか

.NET MAUI (Android) で電波強度の取得をしてみる

Zennにも書きました

ほぼ同じ内容を、より技術に特化したブログのZennにも書きました
zenn.dev

はじめに

手元で試せるのがAndroidしかないので、Androidのみとなりますが、.NET MAUIで携帯ネットワーク通信やWiFi接続の電波強度を取得して表示するということをやってみます。MAUIとしては現在のネットワーク接続が何かはわかりますが、電波強度などまではわかりません。そこでプラットフォーム固有のAPIを使用して取得することを試みます。

プラットフォーム固有のAPIを使用するので、作成するcsファイルはすべて「Platform/Android」配下に置きます。また、余計な考慮をしたくないので、この説明中の「最小ターゲットAndroidフレームワーク」は「Android 10.0 (APIレベル29)」にしてあります。

携帯ネットワーク通信の電波強度を取得する

Android API Level 31 以降とそれより前で必要な物が変わります。最低サポートバージョンを Android 12にする場合は気にしなくていいですが、それより前をサポートする場合はそれぞれに考慮する必要があります。
つまり、Android 12より前のバージョンでは、「Android.Telephony」名前空間の「TelephonyManager」クラス(Android)「Listen()」メソッド(Android) を使用しますが、12以降のバージョンでは非推奨となり、「Android.Telephony.TelephonyManager.RegisterTelephonyCallback()」メソッド(Android) を使います。
そして、前者「Listen()」メソッドで必要なコールバックを受けるクラスは「Android.Telephony.PhoneStateListener」クラス(Android) を継承し、後者「RegisterTelephonyCallback()」は「Android.Telephony.TelephonyCallback」クラス(Android) の継承、および「Android.Telephony.TelephonyCallback.ISignalStrengthsListener」インターフェース(Android) の実装をしたものを用意します。ここで、両方が必要になる場合、特に後者で必要なクラスとインターフェースはAPI Level 31から追加になったもので、30以前のOS、Android 11以前では存在しないため変数として宣言できませんので、両方に対応できるよう、別でインターフェースなどを用意しそれを型として変数宣言する方法を採るといいかもしれません。

ちなみに、この情報を取得するのに必要な権限はありません。適当に権限をなくしてエミュレーターや実機に流して実行してみましたが、特に怒られることはなかったです。

using Android.Content;
using Android.Telephony;

public class NetworkStrengthWatcher
{
    /// <summary>
    /// 携帯ネットワーク通信に関するコールバックをまるめるインターフェース
    /// </summary>
    private interface ITelephonyState
    {
        /// <summary>
        /// 電波強度
        /// </summary>
        int Level { get; }
    }

    /// <summary>
    /// Android API Level 31 以降用
    /// </summary>
    private class TelephonyState : 
        TelephonyCallback, 
        TelephonyCallback.ISignalStrengthsListener, 
        ITelephonyState
    {
        public int Level { get; private set; }

        public void OnSignalStrengthsChanged(SignalStrength signalStrength)
        {
            // 電波強度を見やすいように 0 から 4 にしてくれているプロパティを使う
            this.Level = signalStrength.Level;
        }
    }

    /// <summary>
    /// Android API Level 30 以前用
    /// </summary>
    private class TelephonyStateOlder : PhoneStateListener, ITelephonyState
    {
        public int Level { get; private set; }

        public override void OnSignalStrengthsChanged(SignalStrength? signalStrength)
        {
            if (OperatingSystem.IsAndroidVersionAtLeast(31))
            {
                return;
            }

            base.OnSignalStrengthsChanged(signalStrength);

            if (signalStrength is null)
            {
                return;
            }

            // 電波強度を見やすいように 0 から 4 にしてくれているプロパティを使う
            this.Level = signalStrength.Level;
        }
    }
}

あとは、変数宣言の型はインターフェースで、実際の代入にはAPI Levelに応じたものを入れ込めばOKです。

private ITelephonyState telephonyState;

public NetworkStrengthWatcher()
{
    if (OperatingSystem.IsAndroidVersionAtLeast(31))
    {
        this.telephonyState = new TelephonyState();
    }
    else
    {
        this.telephonyState = new TelephonyStateOlder();
    }
}

つづいて、状態のコールバックを受け取るための購読処理をおこないます。携帯ネットワーク通信にかかわる情報は「Android.Telephony.TelephonyManager」クラスを使用します。これは「MainActivity」のインスタンスから取得できるので、今回作成したクラスにそのインスタンスを渡してもらい、呼び出します。

private MainActivity activity;
private TelephonyManager? telephonyManager;
private ITelephonyState telephonyState;

public NetworkStrengthWatcher(MainActivity mainActivity)
{
    this.activity = mainActivity;

    // これで取れるはず。GetSystemService の返り値が nullable なので as を使い、
    // 受け取りも nullable にしておきます
    this.telephonyManager = mainActivity.GetSystemService(Context.TelephonyService) as TelephonyManager;

    if (OperatingSystem.IsAndroidVersionAtLeast(31))
    {
        this.telephonyState = new TelephonyState();
    }
    else
    {
        this.telephonyState = new TelephonyStateOlder();
    }
}

次に購読開始のメソッドを用意します。前述の通り、API Versionによって呼び出すメソッドは変わり、また必要なコールバッククラスも変わりますので、バージョンで分岐させつつ呼び出します。コールバッククラスはインターフェースでどちらが入ってもいいようにしてありましたので、ここで本来必要になる実装型に変換してあげればOKです。

public void Listen()
{
    if (OperatingSystem.IsAndroidVersionAtLeast(31))
    {
        // 本当は MainExecutor プロパティは nullable なので見た方がいいかも。ここでは知ったこっちゃない扱いにしておきます。
        this.telephonyManager?.RegisterTelephonyCallback(this.activity.MainExecutor!, (TelephonyState)this.telephonyState);
    }
    else
    {
        this.telephonyManager?.Listen((TelephonyStateOlder)this.telephonyState, PhoneStateListenerFlags.SignalStrengths);
    }
}

念のため購読解除も用意しておきましょう。こちらもAPI Versionによって呼び出すメソッドが変わります。31以降の場合は「UnregisterTelephonyCallback()」メソッドを呼び出すと止まりますが、それより前の場合は明確な停止メソッドがありませんので、「Listen()」メソッドのフラグに「PhoneStateListenerFlags.None」を渡すことになります。

public void Stop()
{
    if (OperatingSystem.IsAndroidVersionAtLeast(31))
    {
        // 素直なメソッドがあるのでそれを使えば止まる
        this.telephonyManager?.UnregisterTelephonyCallback((TelephonyState)this.telephonyState);
    }
    else
    {
        // None を入れてリッスンすると止まる
        this.telephonyManager?.Listen((TelephonyStateOlder)this.telephonyState, PhoneStateListenerFlags.None);
    }
}

これで準備はOKです。あとは実際に使うところですが、いったんここではMainActivityクラス内で宣言し、リッスン開始をするようにします。

// プロジェクトを作った際のいろいろ書いてあるところは省略してあります。
public class MainActivity : MauiAppCompatActivity
{
    private NetworkStrengthWatcher? networkStrengthWatcher;

    protected override void OnStart()
    {
        base.OnStart();

        this.networkStrengthWatcher ??= new NetworkStrengthWatcher(this);
        // サクッとスタート
        this.networkStrengthWatcher.Listen();
    }

    protected override void OnDestroy()
    {
        // ここで止める
        this.networkStrengthWatcher?.Stop();

        base.OnDestroy();
    }
}

もうあとは実行すれば情報がおりてきます。ログもなんも出してないので、コールバッククラスの「OnSignalStrengthsChanged()」メソッド内でなんとなくログを出すようにしておけばよいと思います。
エミュレーターでネットワークの状態をポチポチといじってあげれば、ログにもその情報が逐一入ってきているのがわかります。

ログの出力例

いったんここまでまとめ

長くなったので、携帯ネットワーク通信の分で一旦締めます。ここまでで書いたコードは以下のgistに適当に貼っておきました。
次はWiFiの情報について書きます。
gist.github.com

コミックマーケット104に参加します

C104に参加します。AncientChronicleとしてはサークルスペースはありませんが、ご縁あって5r4ce2さまと共同でグッズを製作しましたので、そちらで頒布するという形で参加することとなりました。

「高速道路ナンバリングチャーム」というものを作りました。高速道路ナンバリングってなんぞやという方もいるかと思いますが、全国の高速道路には番号が振られています。
www.mlit.go.jp
例えば、「東名高速道路」なら「E1」が、「中央自動車道」なら「E20」「E19」「E68」などです。
また、一部路線には特定の区間に2つ番号が振られているケースもあります。この2つ並ぶ様子を形にできたら面白いな…と思ったのがきっかけです。また、近くを走っている高速道路や、よく通る高速道路、好きな高速道路の番号を並べてみたりするのも面白そうです。

予定頒価は、お好きなのを2つ選んで500円です。また、5r4ce2側でも首都高のナンバリングチャームを作成しており、こちらとも一緒に選べるようにする予定です。
今回第一弾でお試しということで、AC側では関東地方一円の高速道路について作成しました。以下を持っていく予定ですので、もしお時間ありましたらぜひ 8月12日(日) 東地区 "へ" ブロック 01ab へお立ち寄りください。

番号 路線名
E1 東名高速道路名神高速道路
E1A 東名高速道路伊勢湾岸自動車道新名神高速道路
E4 東北自動車道
E6 常磐自動車道 (仙台東部道路三陸沿岸道路、仙台北部道路)
E14 京葉道路館山自動車道富津館山道路
E16 横浜新道、横浜横須賀道路
E17 関越自動車道
E19 中央自動車道*1、長野自動車道
E20 中央自動車道
E50 北関東自動車道、東水戸道路、常陸那珂有料道路
E51 関東自動車
E52 東名高速道路(清水連絡路)、中部横断自動車道中央自動車道*2
E65 新空港自動車道
E68 中央自動車道*3東富士五湖道路
E70 伊豆縦貫自動車道
E82 千葉東金道路
E83 第三京浜道路、横浜新道
E84 新湘南バイパス西湘バイパス
E85 小田原厚木道路
C3 東京外環自動車道東海環状自動車道
C4 首都圏中央連絡自動車道(圏央道)
CA 東京湾アクアライン
D8 東京高速道路
D18a 箱根ターンパイク*4
D18b 箱根ターンパイク*5

試作した感じではこうなりました。サイズ感の統一のために、本来のナンバリング標識とは違う形になっています。

チャームのサンプル

*1:岡谷JCTより西

*2:中部横断道と重複するほんの一部だけ

*3:大月JCTから南に行く、例えば富士急ハイランドに向かうときに使う路線です

*4:箱根小田原本線という、箱根の横を通るターンパイクのメインとなる道路です

*5:箱根伊豆連絡線という、箱根より西側にある少し短い道路です

ドコモ光をやめ、enひかりに引っ越しをした話

いつだったか、ドコモショップの人に「ドコモ光おすすめですよ」って言われて、「ISP好きに選びたいから…」って渋ったら「単独プランっていうISP無しのがあるんです」と返されて逃げられなくなってから、しばらくは土管としてのドコモ光を使い続けてきました。
ayano.hateblo.jp

その間、ISPIIJmio FiberAccess/NFを使っていたり、固定IPv4IPv4 over IPv6 (IPIP)がしたくてインターリンクのZOOT NATIVEに引っ越したりとうわべを変えたりしていました。

先日ふと、そういえばドコモ光って実はそんなにフレッツ光単独で契約するのとコスト変わらないのでは?と思って調べてみたところ、ドコモ光のマンションプランよりも、フレッツ光単独の方がわずかに安い*1のに気付き、ドコモ光を辞めてもいいのでは…?と思っていたところ、enひかりが今のネット環境をある程度維持しつつコストを下げられると気付いたのでした。
enhikari.jp

これまでは、ドコモ光の単独タイプが4,180円、ZOOT NATIVEの固定IPv4オプション付きが2,200円で毎月6,380円です。これが4,488円になるので結構大きな削減になります。ドコモ光のISPセットであるうちのタイプAの値段に88円を足せば、固定IPv4アドレスがもらえる上、IPIP接続が手元でできるためDS-LiteやMAP-Eなどの「誰と同じIPアドレスを共有してるかわからない」であるとか「ポート数が足りなくて」とかを気にしなくて良いと思うと、結構安いのではないでしょうか。


ドコモ光はペア回線としているドコモ回線に対して割引をおこなう「ドコモ光セット割」があります。自分も現在irumo契約してペア回線にしているためその恩恵を受けています。ドコモ光から抜けたらその分割引が利かなくなるのでは?と思うところですが、実家とファミリー割引グループになっていて、そのグループ内にドコモ光があるので、セット割対象になって割引が継続されます。
www.docomo.ne.jp

ということは、自分がドコモ光を辞めても、実家がドコモ光を継続し続けていてくれる限り安泰となるはず。と思って抜けることを決意しました。


光コラボレーション同士の変更は「事業者変更」と言います。ドコモ光の場合は、メールフォームへ必要事項を記載した上で事業者変更承諾番号がメールで送られてくるのを待ちます。
www.docomo.ne.jp
自分の場合、2022年7月以前の契約かつプラン変更をおこなわなかったため、切り替えが終わった後は事務手数料3,300円がかかる予定です。

事業者変更承諾番号が届いたら、enひかりの申込みフォームに記載し、手続きをします。
IPv4 over IPv6がしたい条件を満たすには、ここで「固定IP」と、「enひかりv6プラス」あるいは「enひかりXpass」のオプションを追加しておきます。「enひかりtransix」はIPIP非対応みたいです。v6かXpassかは、IPIPする分には何を選んでもあまり変わりがないので*2好きなのを選べばよいかと思います。
自分は「enひかりXpass」を選びました。v6プラスと違い結構なマイナー(失礼)であること、集合住宅でガッチガチに全戸インターネットを組まれたところでないとお目にかかれないアルテリア*3に乗り込めるとかちょっとワクワクしませんか。という適当な理由です。


申し込んだ後、最短翌日くらいに電話がきます。自分の場合は事業者変更で、かつ品目変更もなかったので無派遣工事でした。一方でIPoEの接続先が変更になるため一時的に通信ができない期間ができてしまうのを防ぐために、安いPPPoEを提供するbb.excite*4を契約して繋ぎにしておこうと思い、コールセンターのお姉さんにその辺問題ないか確認したところ、ノータイムで問題ない旨の回答がきました。コールセンターのお姉さんがその辺をすぐ回答できる知識を持ってるとは思ってもおらず*5「この会社…すげえ…」と感じた瞬間でした。また、enひかりは契約者向けに電気の小売もやっていて、その案内もありましたが、積極的な勧誘ではなく「興味あれば」程度だったあたりも好印象でした。
事業者変更の手数料は2,200円、また固定IPv4アドレスの払い出しに手数料が2,200円なので、ここで4,400円がかかります。


工事日も決まり、インターリンク側への解約の申し出はオンラインのみでできました。ZOOT NATIVEの場合、解約が実際におこなわれるのは解約日翌日の午前なので、別のIPoE接続へ切り替える日と同日にしておくと新しい方は開通できず、前日だと午後以降の開通になるため、つなぎISPを契約してることを利用して開通日前々日の解約にしました。
そのおかげか、開通日当日は午前中に切り替えがおこなわれたようで、午前中には新しい固定IPアドレスが払い出された旨のメールが届いていました。ちなみにその間、PPPoEセッションは維持されたまま(何度か再接続を試したので、いいタイミングで切り替わったかもしれません?)だったので、全然切り替わったことに気付きませんでした。

あとは、ZOOT NATIVEで使っていた古いtransixの設定を削除し、新しくXpass用の設定に書き換えてあげるだけです。
家にはRTX1210があり、ひかり電話は未契約なためRAプロキシでの接続です。なのでconfigのうち、Luaスクリプトの部分と、トンネル接続先アドレス、NATディスクリプターアドレス(払い出された固定IPv4アドレス)あたりを書き換えればOKです。
www.rtpro.yamaha.co.jp
新規で接続する場合は、Web GUIではIPIP接続までうまくできないかもしれないので、途中までWeb GUIで、あとはconfigを直接いじった方が楽かも。
YAMAHAルーターでなくても、エレコムルーターが固定IPv4によるIPIP接続に対応しているものがあるので、こだわりがなければそれを選ぶというのも手かもしれません。)


configをルーターに流し込み、再起動をおこなったところで接続が確立。ルーティングもbb.exciteからXpassに切り替えて、無事完了です。IPoE接続のない期間を1日弱作るのが功を奏したような気がします。
PPPoEとIPoEを両方提供するようなISPでなければPPPoEセッションに余裕があると思うので、もしIPoE同士の切り替えをおこなう場合は参考にしてみてください。


回線切り替えが済んだ直後の儀式的なSpeedtest。回線名が「Arteria」なのがイカしてるゥ


お気づきかもしれませんが、enひかりは当月内の開通に対して日割り計算をしません。ではなぜ月末に開通させたかというと、ドコモ光の定期更新が11月で終わるため、12月以降の解約だと違約金8,800円が掛かるからです…。
というわけで、変更にかかった費用をまとめると

項目 費用
事業者変更事務手数料(ドコモ光) 3,300
転用事務手数料(enひかり) 2,200
固定IP払い出し手数料(enひかり) 2,200
11月分利用料(enひかり) 4,488
合計 12,188

となりそうです。光コラボレーションの切り替えってまあまあお金掛かりますね…。
とはいえ、半年以上維持していればペイできるって考えると変えてよかったかもしれません。


将来的には10Gへの切り替えも検討しようと思っています。それまではXpassの回線品質について見極めていきたいと思います。

*1:マンションプランの場合、見込み世帯数によって金額が変わります。今住んでいる建物的には安くなる方でした

*2:v6プラスだとHGWが対応しているとか細かい部分はあります

*3:グループのつなぐネットコミュニケーションズ、UCOM光とか

*4:bb.exciteコネクトが550円/月

*5:ちょっと失礼な言い回しに感じるかもしれませんが、こういう手の話はだいたいコールセンター側は持ち寄っておらず、技術者側に問い合わせあるいはつなぐという時間が発生することが多いです

AncientChronicleのサイトを新しくしました

細々と活動してたりしなかったりする同人サークル「AncientChronicle」のウェブサイトを新しくしました。

ac.udonge.net

大きなデザイン変更はしていませんが、時代にあわせてアクセスカウンターを消したり、Silverlightで動いていた試聴モジュールを削除したり(代替品は用意できてないですが)しました。
本来ならモバイル端末に最適化できるともっとよさそうなんですが、ウェブページつくるの久しぶりすぎるのでいったん保留です。近いうちに簡易的に対応すると思います。

裏側事情(?)

新しくする前のウェブサイトは、もともと Microsoft Expression Web にあわせて作っていたものでしたが、Expression Web が終わってからは大きくページの更新することがしんどくなってきて、
作品紹介の更新もおろそかになれば、トップページにとりあえず書いて終わりみたいなことをしていたらひどい有様になってしまいまして。

いつかは新しくして管理しやすくしないとなあと思っていたところでしたが、AncientChronicle のサイトをはじめ自分が持っているウェブサイトをホストしている CORESERVER の値上げが発表されたのを機に、
持っているウェブサイトのホスト先の移動、管理の効率化を進めることにしました。

一枚ペラなウェブサイトである「うどんげ.ねっと」と、先日作成した「aynv.jp」については、既に対応が完了していて、ホスト先は Cloudflare Pages で、ウェブサイトは静的サイトジェネレーター「Statiq」を使っています。
www.cloudflare.com
www.statiq.dev

複数ページがいくつもある構成で Statiq を使うのは初めてで、作品紹介画面とお知らせ画面、2種類の構成をうまく1つのテンプレートに混ぜるかとかは結構苦労しました。
作品紹介画面は収録曲リストだけ Markdown に記載して、あとの情報は Statiq でいう Front Matter に全部寄せて、ページ内ヘッダー・フッターの cshtml を分割して作ってそこから参照するようにしています。
例えばこんな感じで↓

このページ全体を cshtml にしてもよかったんですが、それぞれで構成を組めるので楽っちゃ楽になる反面、数が増えてきたときの管理が面倒になってくるので、この構成にしました*1

ホスト先を Cloudflare Pages にしたことでまた利点ができて、GitHub に push してしまえばあとは勝手に展開される上、git 管理になるので更新履歴がコミット単位で管理できるのが非常に楽になりました。
Cloudflare Pages では Statiq の実行がそのままではできないので、手元では GitHub Actions で Statiq の実行を任せて、結果を特定のブランチに出力して Cloudflare Pages にフックしてコピーしてもらう手段をとりました。

これで管理が楽になった…はずです。
CMSだと管理がおろそかになった瞬間乗っ取られる可能性が高まるので、静的ページとしてアップロードするだけでいい静的サイトジェネレーターが、年に数回更新するかどうかのサイトにはちょうど良いのかもしれません。

*1:Markdown だけしかいけないと思ってて、あとから cshtml もいけるのを知ったのは内緒