記事一覧

1134 件の記事があります

npm リポジトリの cooldown と GitHub Actions の SHA pin — 個人ブログのサプライチェーン対策

Dependabot のアラートをきっかけに、既知の CVE 対応だけでなく、maintainer 乗っ取り型のサプライチェーン攻撃まで意識した自動化設定を組み直しました。cooldown、Actions の SHA pin、npm overrides、ignore-scripts、security update のみ auto-merge までを 1 セットでまとめます。

securitysupply-chaindependabotgithub-actions

🔐~/.aws/credentials の平文を避ける — aws-vault と macOS Keychain による IAM ユーザーキー管理

IAM Identity Center (SSO) を採用しない環境で、aws-vault と macOS Keychain を使い ~/.aws/credentials の平文管理を避ける運用と、その実用性について整理します。

awssecurityaws-vaultiam

🗺️Serverless IIIF で1Gピクセル級の高精細画像を配信するときに行った最適化のノート

1Gピクセル級の高精細画像(PTIF 約450MB)を AWS Lambda 上の Serverless IIIF で配信するにあたり、エンコード、Lambda、CloudFront、S3 メタデータの観点で行った調整の記録です。

iiifserverlessiiifawslambdacloudfront

🔑codh-mirror に Firebase 認証と JSONkeeper 互換 API を後付けして IIIF Curation の編集ワークフローまで成立させる — 前回『動かない』と書いたところからの方針転換

暫定ミラー codh-mirror について、前回記事では『認証・保存バックエンドは結局動かない』としていたところを、後から方針転換して Firebase 認証と JSONkeeper 互換 API (Cloudflare Workers + D1 / PythonAnywhere の二系統) を実際に動かすまでの記録です。Authorized domains 設定、FirebaseUI 3.x の signInFlow リダイレクト落とし穴、authFirebase.js の差し替え、Curation Manager の外部リンク相対化、5 箇所の curationJsonExportUrl 書き換えなど、codh-mirror リポジトリ側で行った変更を 1 本にまとめます。

codhiiiffirebasefirebaseui

JSONkeeper を Cloudflare Workers + D1 で書き直した記録 — IIIF Curation Viewer の保存先を Hono + jose で 360 行に収める

IIIF Curation Viewer のキュレーション保存先である JSONkeeper を、もとの Flask 実装ではなく Cloudflare Workers + D1 で書き直した記録です。Hono + jose による Firebase ID トークンの検証 (Admin SDK 不要・サービスアカウント鍵不要)、D1 SQLite スキーマ設計、JSON-LD @id 書き換えのトップレベル+ネストノード対応、Activity Stream の最小実装、CORS と Viewer 互換ヘッダ、wrangler によるデプロイ runbook、そしてアップストリーム JSONkeeper との差分一覧までを 1 本にまとめています。

cloudflarecloudflare-workersd1hono

JSONkeeper を PythonAnywhere 無料プランに HTTP API だけでデプロイする — IIIF Curation 保存先を自前で立てる

IIIF Curation Viewer の保存先 (JSONkeeper, Flask) を PythonAnywhere 無料プラン (Beginner) に自前で立てる手順記録です。ブラウザ操作はトークン発行とコンソールアタッチの 2 回だけに抑え、残りすべてを HTTP API + curl で完結させます。Flask 1.0 / apscheduler 3.5 の現代 Python 非互換、Firebase Admin SDK のサービスアカウント鍵運用、CPU 100 秒/日制約、CORS、Viewer 側 (codh-mirror) の差し替えまで一通り。

pythonanywherejsonkeeperflaskfirebase

📜『清語老乞大』の縦書き版面を TEI/XML と XSLT で再現する — 満州文字・ハングル音注・割書諺解の符号化と可視化

朝鮮司譯院刊『清語老乞大』巻之一・第一葉表を題材に、TEI 標準要素のみで縦書き版面(満州文字+ハングル音注+諺解の割書)を符号化し、XSLT 1.0 で HTML + SVG として可視化したデモを構築しました。データと可視化を分離した設計の考え方、列の切り出し方、満州文字の描画方法、影印・XML・HTML を 3 列で並べる対比ビューを記録します。

teixsltxmlmanchu

📺無音のデモ動画に Claude Code で日本語字幕を一括付与する

字幕も音声もないツール操作デモ動画に、画面のフレームを Claude Code に確認させて日本語字幕(SRT)を作成し、YouTube Data API の captions.insert で一括アップロードする手順をまとめます。

youtubeyoutubedataapipythonytdlp

💳Cloudflare Workers + better-auth + Stripe で個人技術ブログのメンバーシップ機能を実装した記録

Hugo から Next.js (Cloudflare Workers + OpenNext) へ移行した個人技術ブログに、Stripe ベースのメンバーシップ機能を載せた際の構成・実装手順・ハマりどころを記録します。Workers Free plan の CPU 制限との戦い、Stripe SDK の Workers 対応、SSG と動的ゲーティングの両立、本番化フォームの日本固有項目など、公式ドキュメントには断片的にしか書かれていない部分を中心に整理しました。

cloudflareworkersstripebetterauthnextjs

🛠vdiff.js のデフォルトモードとUI をサイト全体のスタイルに合わせる — 1 バイトパッチでデフォルトを差し替える

自サイトに暫定ミラーした vdiff.js を、サイト内の他ページのデザインに揃える形で外側からカスタマイズした記録です。デフォルト比較モードを「左右スライダー」に変える際、JS でラジオボタンをクリックする方法は vdiff の初期化タイミングと競合したため、最終的にミニファイ済みバンドルへの 1 バイトパッチに落ち着きました。あわせて、フッタを画面内に保ったまま画像をクリップするレイアウト、ja/en 切替、ダークモード対応の CSS の組み立て方をまとめます。

vdiffcodhjquery-uiui-customization

🪞CODH ツール群の暫定ミラー専用リポジトリを GitHub Pages で立てる — そあん(soan)の kuromoji 辞書欠落など

ROIS-DS 人文学オープンデータ共同利用センター (CODH) のホームページが長期メンテナンス中(2026年2月16日夕方よりサービス停止、再開時期未定)の間、各種ツール (vdiff.js / IIIF Curation Viewer / そあん / 等) を Wayback Machine 等から復元し、独立した GitHub Pages リポジトリ (codh-mirror) として公開する手順と、その過程で踏んだいくつかの落とし穴 (とくに『そあん』の kuromoji 辞書欠落) をまとめます。あくまで CODH のサービス再開までの暫定対応です。

codhiiifvdiffsoan

🪞Nuxt 2 generate で `static/` 配下の埋め込みアプリが 404 ページに上書きされる問題と、旧 Service Worker の退役

Nuxt 2 + target:'static' のサイトに、外部ツールのデモアプリ一式を `static/<ツール名>/index.html` として埋め込んだら、generate の crawler が 404 アプリシェルでそれを上書きする現象に遭遇しました。原因と回避策(generate.exclude)、そして同時に踏んだ旧 @nuxtjs/pwa 由来の Service Worker キャッシュ退役対応をまとめます。

nuxtnuxt2static-siteservice-worker

🪞CODH の vdiff.js を Wayback Machine から復元してデジタル源氏物語の「パタパタ顔比較」を一時復旧する

ROIS-DS 人文学オープンデータ共同利用センター (CODH) のホームページが長期メンテナンス中(2026年2月16日夕方よりサービス停止、再開時期未定)で、デジタル源氏物語の「パタパタ顔比較」(CODH の vdiff.js を呼び出していた)が動かなくなっていたため、Wayback Machine から vdiff.js の配布物を取り出して自サイト側に暫定ミラーを置いた手順をまとめます。あくまで CODH のサービス再開までの暫定対応です。

codhvdiffwayback-machinearchive

📚DH週間トピックス — 2026年5月10日週

DH週間トピックス — 2026年5月10日週

dhweeklydigitalhumanitiesデジタルアーカイブocr

📜フォルダの画像群から TEI/XML を生成する macOS アプリの開発 — Apple Vision OCR から Developer ID 配布まで

macOS の Vision フレームワークで OCR をかけ、フォルダ内の複数画像から 1 つの TEI/XML を生成するデスクトップアプリ TEI Scanner を開発しました。SwiftUI 実装、xcodegen でのプロジェクト管理、App Store Connect API キーによる Notarization、GitHub Releases での .dmg 配布までを記録します。

macosswiftswiftuivision

🗺️IIIFの古地図をWMTSで配信する(Allmapsを土台に、Next.jsポートフォリオに統合)

IIIFの古地図をWMTSで配信する(Allmapsを土台に、Next.jsポートフォリオに統合)

iiifwmtsallmapsnextjs

🌙OpenDrift漂流シミュレーションと暦・潮汐計算アプリの接続: GeoJSONブリッジの設計

JavaScriptで動く旧暦・潮汐計算ツールと、Pythonで動く漂流シミュレーションを、GeoJSONを介して接続する方法の記録。

opendriftpythonjavascriptgeojson

🌊OpenDriftとOSCAR気候値による黒潮域の漂流シミュレーション

NASA OSCARの月別気候値とNCEP/NCARの再解析風データを使い、奄美名瀬港沖からの漂流を月別にシミュレーションした記録。

opendriftpythonkuroshioocean

IIIF 3D Viewer を Presentation API 4 に対応させる — 既存マニフェストの v4 変換器

IIIF 3D Viewer を IIIF 3D Technical Specification Group が公開している Presentation API 4 のドラフト形式 (Scene / PointSelector / WKTSelector / PerspectiveCamera) に揃えました。Presentation 3 + 独自 3DSelector / camPos 拡張で運用してきた既存マニフェストは、ランタイムで v4 に変換する converter を通すことで処理系全体を v4 のみに統一しています。差分の整理、変換ルール、実装の要点をまとめます。

iiif3dpresentation-apiweb-annotation

TEI/XMLの翻刻データから統計ページをCI/CDで自動更新する — 『校異源氏物語』テキストDBの事例

TEI/XMLで構造化された翻刻テキストから、巻ごとのページ数・行数・文字数・和歌数を集計する統計ページを生成し、GitHub Actionsで再ビルド・再公開まで自動化する仕組みを紹介します。

teixmldhgithub-actions