Tech系サービスやガジェットの使い心地、自分の作業環境、資産運用について気が向いたときに記録を残しています。

記事内のAmazonアソシエイト適格販売及び、Google Adsenseでお小遣いを得ています。

Astro1.9からAstro2.0へのアップデートメモ

サークルサイトをAstroで書き直したのだが、リリース日にAstro2.0が発表された上に、泣き所だったMDXコンテンツの呼び出しが改善されていたので即書き直しすることにした。

docs.astro.build

基本はガイド通りに進めていく。

1. コンテンツファイルの場所移動

pageディレクトリに入れていたMDXコンテンツたちを/content/{contenttype}へ移動(今回は/content/portfolioとした)

2. スキーマ定義

config.ts

// 1. Import utilities from `astro:content`
import { z, defineCollection } from "astro:content"
// 2. Define your collection(s)
const portfolioCollection = defineCollection({
  schema: z.object({
    title: z.string(),
    date: z.date(),
    draft: z.boolean(),
    tags: z.array(z.string()),
    cover: z.string().optional(),
    layout: z.string().optional()
  })
})
// 3. Export a single `collections` object to register your collection(s)
//    This key should match your collection directory name in "src/content"
export const collections = {
  portfolio: portfolioCollection
}

3. Astro.glob()していた部分の書き直し 、ルート追加

[slug].astro

---
import { getCollection } from "astro:content"

export async function getStaticPaths() {
  const entries = await getCollection("portfolio")
  return entries.map((entry) => ({
    params: { slug: entry.slug },
    props: { entry }
  }))
}

const { entry } = Astro.props
const { Content } = await entry.render()
---

<Content />

ルーティングはNext.jsっぽい書き方。

markdown用のレイアウトファイルを編集する必要があるかと思ったが、そちらは維持したまま簡単なルーティング用のファイルを置けばとりあえず動いた。 ただ、そのままでは肝心な記事レイアウトのastroコンポーネントで型安全な開発ができないので、レイアウト全体を[slug].astroに寄せている。

github.com

これで、各MarkdownファイルにlayoutのFrontmatterを設定する必要もなくなった。

4. ついでにRSSも追加

pages/rss.xml.ts

import rss from "@astrojs/rss"
import { getCollection } from "astro:content"

export const get = async () => {
  const entries = await getCollection("portfolio")
  return rss({
    title: "Gen's Portfolio(幻想サイクル公式WEBサイト)",
    description:
      "ゲン(@gen_sobunya, gentksb, gensobunya)のポートフォリオサイト兼、同人サークル「幻想サイクル」の公式WEBサイト",
    site: import.meta.env.SITE,
    items: entries.map((entry) => ({
      title: entry.data.title,
      pubDate: entry.data.date,
      link: `/${entry.slug}/`
    }))
  })
}

5. frontmatter処理の変更

data.somefrontmatterで取得するように変更。String前提だった処理も型がついて扱えるようになったので、コードがわかりやすくなった。

TwitterシェアボタンがAndroidで動かないと嘆いている人へ

ここ数カ月、AndroidTwitterシェアリンク(https://twitter.com/share?~~~)がTwitter for Androidで機能していません。

アプリにIntentで飛んだ後に「入力した単語の検索結果はありません」とTweetではなくSearchに飛ばしていると思われている挙動になっています。

この事象が見られた直後には、「どうせすぐHotfixされるだろう」と思っていたのですが、どうやらTwitter社はこれを優先的に直す気はなさそうなので暫定対応しました。

前提

react-sharenext-share など、公式のサンプル以外でツイートボタンを実装している

未確認ですが、公式ウィジェットでボタンを実装していればひっかからないのかもしれません

修正方法

Twitterのシェアボタンには2通りあり、https://twitter.com/share?~~~ を使う方法と、https://twitter.com/intent/tweet?~~を利用する方法です。

上記前提の二つのライブラリは、前者を使っており、このURL経由でツイート画面を開くとアプリの不具合にぶちあたります。

developer.twitter.com

公式ドキュメントを参照しながらintentのURLに置き換えます。Twitter Widgetスクリプトの配置が必要に見えるので、従っておきます。

住宅ローン初回・ふるさと納税があっても書類を郵送せずに確定申告が完結した【2022年度】

確定申告の季節ですね。

今年は住宅ローンの初回控除があるので、確定申告が必須となる年度でした。

住宅ローン控除は非常に魅力的な制度ですが、「初年度が面倒」「書類を揃えるのが面倒」という話があり、仲介会社の確定申告セミナーを受けても郵送前提の事務フローが案内されるなど、紙の書類を扱う上に、信書郵便を出さなければいけない雰囲気が形成されており非常に憂鬱でした。

実際に国税庁のWEBサイトを読み込んだところ、「もしかして郵送はしなくてもいいのでは?」という疑念が生じ、実際に申告書作成コーナーに従って書いていたら書類転記を最低限にした上で、オンラインで申告処理が完結したので、一応記しておきたいと思います。

申告にあたって郵送・持ち込みは一切不要でした

源泉徴収票と住宅ローンの年末残高証明書は転記せざるを得ませんでしたが、源泉徴収票XMLが交付されている会社であったり、残高証明書を電子交付してくれる金融機関からの借り入れであれば、手入力ゼロの人も可能性としてはありえそうです。

RSU・同人活動の雑所得(マイナスですが確定申告する以上は申告しないといけません)・贈与税の特例申告などのマイナーな内容は省いていますが、同様にマイナポータルによるデータ連携・ログイン連携を使ってe-taxアプリ(WEB)からイメージ提出を行うことで、郵送を行わずに申告を完了することができました。

マイナポータル連携

マイナンバーカードおよび、マイナポータルは確定申告における必須ツールです。

まず最も重要な点として、カードリーダー等が無くてもPCでマイナポータル連携ログインが可能です。スマホのアプリでブラウザに表示されたQRコードを読み込んでスマホマイナンバーカードをスキャンすることでログインできます。

そして、下記のページに記載されている内容は(事業者が対応していれば)全て手入力を免れます。

www.nta.go.jp

医療費

マイナンバーカードと健康保険証の連携をしておけば、2023/2/9から一括で2022年度分の医療費を入力できます。

医療費控除は関連交通費も入力できるので、それらは手入力ですがかなり手間の節約ができるはずです(今年は医療費控除を使わなかったので詳細は不明)

ふるさと納税

ふるなび、さとふる、楽天ふるさと納税などの大手サイトは、ふるさと納税サービスから直接マイナポータルに証明書データを連携します。依頼から発行までに数営業日ほどかかるので、前年度分の申請ができるようになった瞬間に申請しておきましょう。

そして、マイナポータル連携に対応していないサービス経由の寄付も、「ふるさと納税 e-tax連携サービス」の利用ができる自治体であればマイナポータル連携で寄付金額を入力できます。

ふるさと納税強者の自治体は大抵対応しています(記事を書いた時点で800自治体が対応済み)

www.shift7.jp

e-私書箱経由の連携

主に保険会社や証券会社。

事前に「e-私書箱→マイナポータル連携」を済ませ、「保険会社→e-私書箱」「証券会社→e-私書箱」の連携を行っておくことで、確定申告書作成コーナーでインポートできます。

こちらはe-私書箱に書類が発行された段階で自動的に確定申告書作成コーナーでインポートできます。

e-taxでのイメージデータ提出

大抵の人はマイナポータル連携で入力が楽になってめでたしめでたし…ですが、住宅ローンにおいては書類の提出が待っています。

しかし、この添付書類の一部はオンラインでPDF化しての提出が可能でした。

www.e-tax.nta.go.jp

しかも、ご丁寧に所得税の確定申告が終わった後に発行されるPDFで、イメージデータ提出の可否を記載してくれています。

イメージデータの提出はe-tax (WEB版)から行います。確定申告に使ったものと同じマイナンバーカードでログインし、申告履歴を見る画面からイメージデータ提出を行えるようになっています。

必要書類はコンビニのスキャナーでPDF化して、イメージデータ提出することで無事確定申告の全工程を終了することができました。

まとめ

実は様々な理由(損益繰越やらなんやら)で5年ほど確定申告を続けているのですが、毎年のように便利になって進化しています。

まさか、契約書の写しが提出な住宅ローン控除周りまでオンラインで完結するとは思いませんでした。デジタル庁、ちゃんと働いてる!

申請中引っかかったところ覚書

シフトセブン 「ふるさと納税 e-tax連携サービス」

令和4年度分のサービスは2/1より実施というのは明記されていたため、事前に登録をしていたのですが2/1を迎えてもマイナポータルに証明書が連携されてきませんでした。

e-tax連携サービス側では発行メッセージは出ていたのですが、マイナポータル側では検知できなかったので「もっとつながる」から連携を削除し、再連携したら無事確定申告書作成コーナーでも取り込めました。

e-taxアプリ(WEB)

タブを閉じると再ログインが必要なくせに、セッションは終わっておらずブラウザを終了するまで再ログインできない仕様。UIもイケてないし、e-taxで偉いのはe-taxじゃなく「確定申告書作成コーナー」だという確信を深めた。

Yubikeyが2本になったので、各アカウントのMFAを見直した

Cloudflareのキャンペーンで沢山Yubikeyを手に入れた。

元々Yubikey5C nanoを1個所持していたので複数セキュリティキー…つまり予備セキュリティキーが手に入った形。

セキュリティキーが1本しかない状態ではバックアップが難しく、TOTPなど他の多要素認証手段を組み合わせることが必須だったが、2本以上あることでセキュリティキーをファーストチョイスにできるようになった。NFCタイプを購入したので、モバイルデバイスにも利用できる。

  • Yubikey 5C nano ... 普段からメインPCに装着
  • Yubikey 5C NFC ... 予備兼モバイルデバイス

この体制で、5C NFCは普段は金庫に入れておけばnanoの紛失に備えることができる。

多要素認証手段の再整理はazuさんのブログ記事を参考に、パスワードマネージャ―であるBitwardenに置き換えて考えている。

efcl.info

bitwardenも多要素認証をYubikeyだけに置き換えることができるので、ほぼ同じ戦略を取ることができる。

  • TOTPのマルチデバイス対応をAuthyからBitwardenへ変更
  • 重要アカウント(不正アクセス時の影響が大きいアカウント)は可能な限りYubikeyのみの認証に置き換える
  • 非重要アカウントはBitwardenにTOTPを登録

上記の通りに設定していく。SMSでの確認も可能な限り削除していく

サービス対応状況

個人アイデンティティやに関わるものと、WEB公開できるサービスは重要扱い。 VercelとかGatsbyCloudは実質GitHubなのでリストにない。

重要アカウント Yubikey対応 Yubikey単体運用可
Bitwarden Y Y Y
Twitter Y Y Y
Facebook Y Y Y
Slack Y
GitHub Y Y
Google Y Y Y
Amazon.co.jp
Binance Y Y Y
LinkedIn Y
Bitbank Y
mstdn.jp Y
Discord
Microsoft Y Y
Square Y
Paypal Y Y
Cloudflare Y Y Y
Tumblr
AWS SSO Y Y Y
AWS root Y Y Y

備考

Windows Hello対応サイト

GoogleやBinance, Cloudflareなどが対象。FIDO指紋認証バイスが刺さっているとそっちも認識するので注意。

BitwardenのTOTP

モバイルのSlackログインなどはシームレスにTOTPを入力してくれて再ログインが捗った

モバイルアプリが無いと多要素認証が設定できない or PCでテキストでTOTP追加できない

Instagramはモバイルアプリのみ多要素認証を新規設定可能。bitbankはQRでしか暗号鍵を出してくれない。

Microsoftアカウント

メールと電話番号を削除できない。SMSを選択可能にしてしまうのはちょっと痛い…

Paypal

セキュリティキーが1つしか設定できなかった。TOTPと併用

追記

Cloudflareは結構頻繁にログアウトされるので、TOTPを追加した。GitHubも意外と再ログインユースケースがあるのてTOTPが現状便利。 Bitwardenで自動入力後にTOTPをクリップボードに貼り付けてくれるので入力も意外と手間ではない。早く課金すべきだった

Pixel7購入記。下取りの現状やアクセサリー・指紋認証の最適化・電波掴み改善など

※10/24 使用インプレ・下取り結果・返金結果を末尾に記載しました

Pixel7を買いました。

スマートフォンは年々型落ちになる耐久財なのに、実質無料で買い替え可能とは…更新しない理由はありませんでした。

「Pixel6は結局実質何円で買ったんだっけ?」となった際に自分のブログが役立ったので今回も備忘録がてら記載していきます。

割引

巷ではローカルガイドの15%プロモーションコードが使えた人もいたようですが、自分のものは使えませんでした

下取りが満額だと仮定して、本体82500円に対して、もともと実質-8250円の予定だった。

  • Povoの割引コード: -10%(8250円)
  • Googleストアクレジット: 21000円
  • 下取り(予定): 61500円

Googleのやらかし10%返金も適用され、実質-16500円というのが現在の予定。

スマホを買ったのにお金が増える、MNPCB最盛期を思い出す。

下取り

幸運にも下取りキットがPixel7の翌日に届いたので、当日受け取り当日発送で本日(10/17)時点でPCS Wirelessのオフィスには届いている模様。

Googleストアの下取りは、本人限定郵便で届くのでまず所管の郵便局から「本人限定郵便到着のお知らせ」というペライチがポストに投函され、それから配送(もしくは局受け取り)を依頼するというフロー。

Pixel6はケースとガラスフィルムで完全防御していたこともあり、かなり綺麗

これで満額査定じゃないならちょっと辛い(2022.10.24) 査定満額でした!

なお、なぜか満額の61500円のうち1500円が不可解にストアクレジットで返金されていたので、引き続きサポート問合せ中です

(2022.11.08) 支払い情報が修正され、全額クレジットへの返金となりました。返金しきれない場合のストアクレジット付与ロジックで「税抜本体価格に割引を適用した価格」を「下取り価格」と比較してしまったとしたら辻褄が合うので、完全にGoogleストアのミスと思われます。

// ローカルガイド15%使えなかった人
(82500/1.1)*0.8-61500=-1500

//  ローカルガイド15%使えた人
(82500/1.1)*0.75-61500=-5250

保護フィルムと指紋

Pixel6にガラスフィルムを装着して運用すると、指紋認証は体感で半分失敗するという有様だったので今回はPETフィルムを選択。

10年ぶりくらいにミヤビックスのオーバーレイブリリアントを貼ってみたところ、指紋認証もバッチリ認識するようになった。

Pixel6もガラス無しの丸裸運用ならそれなりの精度のようだったこともあり、ガラスフィルムは光学式指紋認証の主流化と共に終わる可能性が頭をよぎった。

しかし画面のすべりや汚れにくさはやはりガラスフィルムの方がよいし、貼るのもガラスフィルムの方が楽。電源ボタン一体型静電式指紋認証の方がロック解除体験は良い気がするのだが…

ケース

安定のSpigen、背面クリアケース。

埃が入ったことが目立たず、Pixel使ってるぞ感を出せるので6の頃からお気に入り。

移行

2時間ほどかかった。前回の記録によるとPixel6の移行時より30分ほど多くかかっている。

gensobunya-tech.hatenablog.com

BitwardenでYubikeyでの認証を求められたことや、自動入力が中々有効にならなかった影響で若干時間がかかってしまった。

インプレッション(2022.10.24)

顔認証は素早くて非常に使いやすい。

指紋認証もPETフィルムなら問題なくサクサク認識されるので、Pixel6比でロック解除に対するストレスはゼロになりました。Smart Lockによる持ち歩き時のロック解除も使いやすく最高です。

そして、最も特筆すべきが電波掴みの良さ。Pixel6では電波は掴むものの通信できない、いわゆる「パケ詰まり」や、エリア圏内でも"!"がピクトに立ってインターネット通信できない事象が高頻度で発生していたものが無くなりました。(特に電車移動・都内使用時がひどかった)

下取りにPixel6がはいっていたの、ハードウェア的な問題があったのではと邪推したくなるレベル。

vivliostyleを使って技術書を爆速で執筆開始するためのリポジトリを公開しました

技術同人誌や評論同人誌、やってみたいと思ったことはありませんか?

でも、「WEBサイトや増田ならともかく、原稿の作り方が分からない」そう思う人は多いと思います。

そんな人たちのために、Markdownファイルで原稿を作るだけで本文入稿用のPDFを作成できるボイラープレートを作成しました。

コミケの評論島や、技術書典を更に賑やかな場にしていければという思いで、C100の原稿から汎用的に利用できる部分を抜き出し、公開しました。

vivliostyle-techbook-boilerplate

GitHubにテンプレートリポジトリとして公開しています。

github.com

テンプレートリポジトリはGitHub固有の機能で、公開されたリポジトリを元に一切のGit履歴なく自分のリポジトリを作成することができます。

publicリポジトリとして公開されたリポジトリをfolkする場合、GitHubでは必ずPublicとする必要がありましたが、テンプレートリポジトリではPrivateかつ元のリポジトリとの関係を無くして自分のコードを書くことができます。

同人誌の執筆という特性上、コンテンツを公開することは適切でないため、テンプレートリポジトリとしての公開を選択しました。

vivliostyleとは

CSS組版という概念を実現するためのnpmパッケージです。

vivliostyle.org

最新 Web 標準技術により、電子出版や Web 出版のための 新しい組版システムを作るオープンソース・プロジェクト

物理的な印刷物を作るためには、RGBではなくCMYKの世界でカラーを扱う必要がある他、ブラウザではなく業務用プリンターでレイアウトを再現するために、固有のノウハウが必要でした。

一方でWEBエンジニアがこの領域に明るいことは稀です。このギャップを埋めるために、WEB開発の知識、すなわちHTMLとCSSで印刷レイアウトを表現・作成(いわゆる組版)するための手段としてCSS組版が編み出されました。

VivlioStyleは、追加の文法を一切学ぶことなく、CSSの世界とMarkdown文法さえ分かっていれば、原稿PDFを作成することができるソフトウェアです。

Why boilerplate?

VivlioStyleと既存のテーマを用いることにより、本文のPDFを作成することは可能です。

しかし、印刷用フォーマットのPDFをビルドするCLIコマンドオプションの選択、自動的に日本語校正の設定、印刷用フォーマットのPDFビルドの前提となるPuppeteerの依存ライブラリインストール、Gitの特性を活かしたブランチごとのプレビューCIパイプラインなど、実際の執筆を快適に行うためには多くの設定が必要となります。

また、これらの設定を行うにあたり、本業の開発に最適化したローカル環境に手を入れた結果、思わぬ副作用を生んでしまう可能性もあります。

このリポジトリは、Public PreviewとなったばかりのGitHub Codespacesの設定を追加することで、ローカル環境を一切変更することなく原稿のビルド環境を構築するために作成しました。

様々な依存関係をグローバルインストールすることによる心配事を、完全に払拭しています。

使い方

GitHubリポジトリのREADMEを参照してください

制限

GUI環境ではないため、VivlioStyleの機能の一つである、ブラウザプレビュー機能は利用できません。

また、ローカル環境にインストールされているフォントを使用することもできないため、WEBフォントの利用が前提となります。

Sponsorship

好奇心で設定しました。1ドルから寄付を受け付けていますが、利用に際して必須ではありません。

Windowsもクラムシェルしたい!

こんな記事を見かけたので、WindowsノートPC2台でクラムシェル運用を行っている身としてノウハウを残しておく。

2week.net

結論から言うとメーカーを選ぶ。

ただ、メーカー謹製のドックには(観測範囲では)ほぼ全て電源連動ボタンがついていたため、メーカーのドックを買えといえば解決するのかも。

HPノートブック

HPのThunderboltハブが、電源スイッチ代わりになる。

jp.ext.hp.com

廉価かつ、保証もしっかりしているThunderbolt3ハブとして大人気だったこともあってか、今では入荷未定になってしまっている…

f:id:gensobunya:20220302093111p:plain
上部に電源ボタンがある

このドックは上部にLED付き電源ボタンがあり、ケーブル接続状態で長押しすることで閉じた状態の対応しているHPノートブックの電源を入れることができる。

電源が落ちている際はLEDも連動して消灯する(HP製ノートブックに限る)

ハブ自体のレビューはこちら

gensobunya-tech.hatenablog.com

ThinkPad

ThinkPadの場合は2通り選択肢がある。

1つは、HPと同じく純正ドックを使う方法。

www.lenovo.com

www.lenovo.com

もう一つは、UEFI設定から、電源につないだ際に起動するオプションを設定することだ

blog.treedown.net

"Power on with AC attach"という項目があり、電源ケーブルをつないだ際に電源がONになる設定がある。これをEnabledにすることでクラムシェル運用を簡単に行うことができる。投資もゼロ。

自分はこの項目を使っている

おまけ:Wake on LAN

よく議論されるが、実装が面倒だし失敗することもあるので毎日使っていると疲れると思われる。自宅内のNW機器が対応していないこともあるし…