azukipochette's weblog

memory dump (mini)

サイトの仕組みを調べる

時々、そのサイトがどのサービス上で動作しているのか、どのような技術で作成されているのかを調べたいことがある。
本エントリでは、そのような調査に役立つサイトを紹介する。

ドメインを調べる

ドメインを調べるときは WHOIS と呼ばれるサイトを使うとよい。 どのサイトを使って調べても良いが、gTLD (Generic Top Level Domain) ごとに WHOIS の場所がことなる可能性がある点に注意するとよい。 たとえば、.com.org のようなサイトは ICANN LOOKUP を使うと見つけることができる。

lookup.icann.org

Mozilla.org を調べてみると次の結果が得られる。

一方、.jp のような日本向けのサイトは ICANN LOOKUP では見つかないので、別途 JPRS が提供する WHOIS を利用するとよい。

whois.jprs.jp

たとえば、デジタル庁 (digital.go.jp) を調べてみると、次の結果が得られる。

ホスト先を調べる

以前はホスティング サービスが主流だったが、最近は各社クラウド事業が提供するサービス上で動作している場合もある。 調査方法は様々な方法があるが、"Hosting Checker" を使うと簡単に調べることができる。

hostingchecker.com

デジタル庁のサイトの場合、AWS の CloudFront (CDN) を使っていることがわかる。

そのサイトがどのような技術で作られているのかを調べる

対象のサイトがどのようなフレームワークや技術を使って作られているのかを調べる場合は、Build withWappalyzer を使うとよい。

builtwith.com

www.wappalyzer.com

たとえば、デジタル庁のサイトを "Wappalyzer" で調べると、Nuxt.js で作られていることがわかる。

ひとりごと

デジタル庁のサイトは AWS で動いているけれど、DNS は Azure なんですね。実に興味深い。

とにかく最新の .NET SDK (Preview) を使いたい

今日の出来事

とある事情で .NET SDK 7.0.2 SDK に実装されたらしい機能を試す必要があった。
そして、先日の 2023 年 1 月 10 日に待望の "7.0.2" がリリースされたと聞き、颯爽と .NET 7.0 ダウンロード サイトを開いた! ...が、そこには .NET 7.0.2 SDK は無かった。(ランタイムは 7.0.2 なのに)

最新インストーラーの確認と公式 Docker イメージ

.NET SDK Installers のリポジトリを見てみると、最新のプレビュー バージョンは 7.0.200-preview.23062.11 らしい。

github.com

これが欲しいが、自分のローカルマシンに直接インストールするのはリスクが大きいので、サンドボックス化したい。 サッと思いつくのは、DockerHub に公開されている NET SDK のイメージ。

hub.docker.com

上記のアドレスは正式公開版が置かれているが、欲しいのは開発中の Preview 版なので "nightly" を見に行く。

hub.docker.com

Full Tag Listing の記載を見ると、残念ながら本日時点で 7.0 を指し示すと 7.0.102 が指定されるとある。
どうやら nightly ではあるものの 7.0.200 ではないようだ。というわけで、公式ビルドを使うのは諦め。

インストール スクリプト

一時的に動きを確認できれば事足りるので、Windows Sandbox に入れることにした。 インストールするためのスクリプトはここにある。

github.com

今回は Windows Sandbox なので PowerShellスクリプトを落とし、下記のように実行する。

.\dotnet-install.ps1 -Channel 7.0.2xx -Quality daily

これで 7.0.2 系の最新のビルド(日次ビルドの成果物)をダウンロード&インストールしてくれる。

おまけ

実際にインストールした際のログを下記に示す。

PS C:\works> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
PS C:\works> .\dotnet-install.ps1 -Channel 7.0.2xx -Quality daily
dotnet-install: Note that the intended use of this script is for Continuous Integration (CI) scenarios, where:
dotnet-install: - The SDK needs to be installed without user interaction and without admin rights.
dotnet-install: - The SDK installation doesn't need to persist across multiple CI runs.
dotnet-install: To set up a development environment or to run apps, use installers rather than this script. Visit https://dotnet.microsoft.com/download to get the installer.

dotnet-install: Extracting the archive.
dotnet-install: Adding to current process PATH: "C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\dotnet\". Note: This change will not be visible if PowerShell was run as a child process.
dotnet-install: Note that the script does not resolve dependencies during installation.
dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install/windows#dependencies
dotnet-install: Installed version is 7.0.200-preview.23062.11
dotnet-install: Installation finished
PS C:\works> dotnet --version
7.0.200-preview.23062.11

メッセージを読むと環境変数ではなく、現在のプロセスにパスを追加しており、インストール先も %LOCALAPPDATA% 配下になっていることがわかる。 他のプロセスなどで dotnet CLI を使う場合などは注意すると良いだろう。

効率的に NuGet スペック ファイル (.nuspec) を書く

Visual Studio Code 向けに Redhat 製の XML 拡張機能が提供されているので、これを使う。

marketplace.visualstudio.com

nuspec ファイルの XSD ファイルの最新は GitHub 上で管理されている。

github.com

XSD を使った自動補完 (Auto complete/IntelliSence) はいくつかあるが、nuspec ファイルに直接手を入れずに補完するには、XML 拡張機能を導入した後、"xml.fileAssociations" を設定するとよい。

    "xml.fileAssociations": [
    {
        "systemId": "https://raw.githubusercontent.com/NuGet/NuGet.Client/dev/src/NuGet.Core/NuGet.Packaging/compiler/resources/nuspec.xsd",
        "pattern": "**/*.nuspec"
    }

既知の問題と対策

上記のように記載すると、XSD による検証によって、package 要素の xmlns 属性に "{0}" を指定しなければならない。 これは、そのように XSD に明記されているためだが、このままではパッケージ化することはできない。

nuget pack コマンドでは、xmlns で指定可能な名前空間は 6 種類の URI のいずれかでなけらばならいようにコーディングされているので、いずれかの URI にするか xmlns 属性を消去する必要がある。*1

実際の判定コードは以下にある。

github.com

*1:指定しない場合、既定で "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" が使われるようだ

ワンコマンドで既存のリポジトリから GitHub にリポジトリを新規作成してプッシュする

ローカル内に Git リポジトリを作成して開発を行い、ある程度公開できる準備が整ったら GitHub 上に公開したいという場合、これまでは以下のような作業が必要だった。

  1. GitHub 上でリポジトリを作成する
  2. ローカル リポジトリのリモート先に GitHubリポジトリを設定する
  3. プッシュする

GitHub CLI を使えば、この操作をワンコマンドで実行することができる。 (下記の例では Private リポジトリとして作成しているが、Public リポジトリの場合は --public オプションに変更する)

gh repo create <create repo name> --source=<your source path> -- private --push

たとえば、カレント ディレクトリにあるローカル リポジトリを temp リポジトリの名前で GitHub 上に作成、プッシュする場合は、以下のように実行すればよい。

gh repo create temp --sorce=. --private --push

PowerShell を使用して Markdown を GitHub 風の HTML ファイルとして出力する (シンタックス ハイライト対応版)

以前の記事で PowerShell 6 以降で使用可能なコマンドレットを使用して Markdown ファイルを GitHub で表示した場合のような HTML ファイルを生成する方法を書いた。

azukipochette.hatenablog.com

この時のスクリプトでは、Markdown を利用して記述するメリットの一つであるシンタックスハイライト対応をしていなかったので、対応したバージョンを以下に掲載する。

$mdfile = "C:\path\to\yourmarkdownfile.md"
ConvertTo-Html -Body ('<div class="markdown-body">' + (ConvertFrom-Markdown -Path $mdfile).Html + '</div>')  -Head '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.1.0/github-markdown.min.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/styles/github.min.css"><script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min.js"></script><script>hljs.highlightAll();</script>' | Out-File -FilePath out.html

対応方法は簡単で、highlight.js を呼び出せば良い。
今回は、タイトル通り GitHub 風のスタイルを選択しているが、他にも様々なスタイルが用意されているので、好みに合わせて選択すると良い。

highlightjs.org

おまけ

PDF 印刷を行うとコード 部分が期待通りに表示されないことがある(水平スクロール バーが表示されてコード全体が正しく表示された状態で印刷されない)。 この場合は、下記の CSS を追記するとよい。

<style type="text/css">
 .markdown-body pre code { white-space: pre-wrap; overflow: hidden; }
</style>

グローバル IP をコマンドラインで取得する

Windows 向けの記事が見つからなかったのだが、最近の Windowscurl.exe を内包しているので Linux 同様に次のコマンドで取得する事が出来る。

curl ifconfig.io

なお、IPv6 接続の場合は既定では IPv6 のアドレスが表示されてしまう。
IPv4 のアドレスを表示したい場合は、-4 オプションを付与して次の様に実行すればよい。

curl  ifconfig.io -4

追記

上記では ifconfig.io を使用したが、世間的には ipinfo.io のほうが有名のようだ。
下記のようにすれば JSON 形式で情報が取得できる。(特定の部分だけを取得するなら jq コマンドを使うと良い)

https://ipinfo.io/json

VMWare Workstation 上に Windows 11 環境を構築する

Windows 11 から TPM が最小要件に含まれたことに伴い、VMWare Workstation 上で Windows 11 環境を構築する際も TPM を有効にする必要がでてきた。
しかし、VMWare Workstation 上の GUITPM を有効にしようとすると、ディスクを暗号化する必要があり、それに伴ってパスワード設定が必要となる。

これを有効にすると、仮想マシンを起動するたびにパスワードを求められイライラしていたのだが、公式サイトの KB を見たら良い解決方法が記載されていたので、メモとして記載しておく。

kb.vmware.com

具体的にはインストールを開始する前に、VMX ファイルに 1 行追加するだけでよい。

managedVM.autoAddVTPM = "software"

後は、通常の仮想マシン同様に扱うことができる。