投稿

2024の投稿を表示しています

Delphi のフォーマッタで無関係な変数の大文字小文字が揃えられてしまう

イメージ
 Delphi のフォーマッタで無関係な変数の大文字小文字が揃えられてしまう デフォルトで下記のようになっている 「その他の単語の大文字・小文字表記」= 最初の出現どおり 下記のようなコードの場合 interface uses System.Hash; type TFoo = class(TObject) private FHash: string; public property hash: string read FHash; end; TFooRec = record hash: string; end; フォーマッタを実行すると System.Hash を最初の出現とみなしてしまい interface uses System.Hash; type TFoo = class(TObject) private FHash: string; public property Hash: string read FHash; end; TFooRec = record Hash: string; end; となってしまう 言語的に問題ないように見えますが、RTTIを使用している場合、大文字小文字が変更されて設計と違う結果になってしまうことがあります(TJsonSerializer を利用して、問題に遭遇しました) フォーマッタの設定を変更すれば回避できますが、デフォルト設定がそれであるため、別環境を構築してフォーマッタを実行しただけで、書き換えられてしまうという問題を抱えたままとなります。コンパイルで問題を発見できない事も問題です。 フォーマッタの例外オプションを探しましたが見つからないため、該当部分を別ファイルへ抜き出して uses で参照することとしました

Delphi - TreeView で特定Nodeの文字色を変更

TreeView の CustomDrawItem を用いて procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); begin if (Node.Text = 'TargetNode') then begin Sender.Canvas.Font.Color := clRed; end; end; カスタムスタイルを使用している場合、背景が白抜け(スタイル未適用で塗りつぶされてしまうため) Vcl.Themes を uses して、TreeView(scTreeView)の色を取得してブラシへ割り当ててやる uses Vcl.Themes; procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); begin if (Node.Text = 'TargetNode') then begin Sender.Canvas.Brush.Color := TStyleManager.ActiveStyle.GetStyleColor(TStyleColor.scTreeView); Sender.Canvas.Font.Color := clRed; end; end;

SumatraPDF v3.5.2 でホームタブを表示させない

イメージ
 SumatraPDF v3.5.2 でホームタブが常に表示されるようになったようなので、設定を変更して非表示に 詳細設定から SumatraPDF-settings.txt を開き NoHomeTab の値を true へ変更して保存

Evernote API findNotesMetadata で取得する totalNotes が正しくない

 Evernote API findNotesMetadata で取得する totalNotes が以下の条件で正しい値を返さない 条件 NoteFilter.words が指定されている(空ではない) NoteFilter.notebookGuid の指定なし linkedNotebook(非共有ノートブック)が存在するアカウント linkedNotebook に検索に該当するノートが含まれている この条件で NoteStore.findNotesMetadata を呼び出した場合 戻り値 NotesMetadataList の totalNotes は linkedNotebook 内の該当ノート数を含む値が返るが NotesMetadataList.notes には linkedNotebook に存在するノートは含まれない また、offset, maxNotes を使用した検索結果は、linkedNotebook 内の該当ノートを含む(実際には取得できない)挙動をするため note1 note2 note3(linked) note4 note5(linked) note6 1. offset=0, maxNotes=3 で findNotesMetadata note1 note2 notes.count=2, totalNotes=5 2. offset=3, maxNotes=3 で findNotesMetadata  note4 note6 notes.count=1, totalNotes=5 2回目の offset に 1回目の結果 notes.count=2 を用いて決定してしまうと 同じノートを複数取得したり、取りこぼす可能性がある 対応 totalNotes を2回目以降の findNotesMetadata 実行条件としない 2回目以降の offset は notes.count ではなく、前回の maxNotes を用いる 結果が notes.count = 0 の条件でループを抜ける どなたか findNotesMetadata で linkedNotebook 内のノートも取得する方法知ってたら、教えて下さい!!

alexa_remote_control.sh 認証方法のメモ

イメージ
 Alexa(Amazon Echo)のリモコン alexa_remote_control.sh の認証方法がID+パスワードからリフレッシュトークンへ変更されているようなのでメモ alexa_remote_control.sh 内の SET_EMAIL='' SET_PASSWORD='' に代わって SET_REFRESH_TOKEN='' を取得を設定する必要がある 下記から該当プラットフォームのバイナリをダウンロード、実行 ※ブラウザによりAmazonへログイン可能なプラットフォームの事です https://github.com/adn77/alexa-cookie-cli/releases (ログイン時の cookie からトークンを読み取るらしい) Windows の場合 alexa-cookie-cli-win-x64.exe を実行 http://127.0.0.1:8080/ をブラウザで開いて、対象のAlexa と同一アカウントでログイン ログインが成功すると情報がトラップされるので、refreshToken をalexa_remote_control.sh の SET_REFRESH_TOKEN へコピペ 参考文献 https://blog.loetzimmer.de/2021/09/alexa-remote-control-shell-script.html

Inno Setup でインストールフォルダが "Program Files" にならず "Program Files (x86)" となる

 Inno Setup で64bitアプリのインストール先が "Program Files" にならず "Program Files (x86)" となる [Setup] DefaultDirName= {autopf} \MyApp を [Setup] DefaultDirName= {commonpf} \MyApp としても変化なし [Setup] DefaultDirName={autopf}\MyApp ArchitecturesInstallIn64BitMode=x64 とすればよいらしい

Inno Setup のコンパイルで「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」

イメージ
 Inno Setup6 のコンパイルで 「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」 が表示されてセットアップファイルが作成できない [Setup] OutputDir= に記載されいる、出力先フォルダをウィルスチェックの対象外にする

さくら 高精度迷惑メールフィルタによる .mailfilter の変更

 さくらインターネットが 高精度迷惑メールフィルタ を提供開始 簡易迷惑メールフィルタ (旧迷惑メールフィルタ) 高精度迷惑メールフィルタ それぞれを適用した .mailfilter いずれも ブラックリスト、ホワイトリスト、迷惑メールフォルダに保存 を設定した状態 簡易迷惑メールフィルタ (旧迷惑メールフィルタ) if ( /^From:\s*(.*)/ && lookup( $MATCH1, ".blockaddr" ) ) { to "maildir/.Trash/" } if ( ! ( /^From:\s*(.*)/ && lookup( $MATCH1, ".whitelist" ) ) ) { xfilter "/usr/local/bin/spamc" } if ( /^X-Spam-Flag:.*YES/ ) { to "maildir/.spam/" } 高精度迷惑メールフィルタ if ( /^From:\s*(.*)/ && lookup( $MATCH1, ".blockaddr" ) ) { to "maildir/.Trash/" } if ( /^X-VADE-SPAMSTATE:/ ) { if ( ! /^X-VADE-SPAMSTATE:\s*clean/ ) { if ( ! ( /^From:\s*(.*)/ && lookup( $MATCH1, ".whitelist" ) ) ) { to "maildir/.spam/" } } } 一旦、迷惑メールフィルタにかけた後、ホワイトリスト以外を迷惑メールフォルダへ移動 旧フィルタでは、ホワイトリストに記載したメールの判定結果が不明だった 個人的にはブラックリストよりホワイトリストを優先して欲しいところだが、昔からブラックリスト優先

OCN請求情報の変更ページで携帯電話番号が080へ書き換わって表示される

イメージ
 OCN請求情報の変更ページで、登録されている携帯電話番号が書き換わって表示される 契約者情報の電話番号が 090 -xxxx-yyyy で登録されている場合 支払い情報変更ページで 申し込み者名等に契約者情報から引用された内容が表示される中、連絡先携帯番号が 080 -xxxx-yyyy (xとyの部分は 090 のもの) と書き換わったものが表示される 連絡しようにも、サポートチャットは定型文を返すだけだし、窓口は電話くらいしかなく、たらい回しにされるだけだろうから、ここに記録しておく

ブラウザのリンク等からローカルアプリ(Windows)を起動するカスタムスキーム

イメージ
ブラウザからのリンクやコールバックをローカルアプリケーションで受け取る、カスタムスキームの登録方法(Windows) 下記の例では、ブラウザ上で MyApplication:// のリンクを開くと、c:\MyApplication.exe がリンクを引数として起動されるのを説明 レジストリへ  MyApplication:// で開く アプリを登録 ※アプリケーションからこのレジストリの操作は要UAC 拡張子等に対する起動アプリを登録する \HKEY_CLASSES_ROOT\ へ 下記のツリーを作成し、既定、URL Protocol(valueは空)、実行コマンド を登録 command の %1 へブラウザからの情報が置換され実行 HTML側 下記のようなMyApplication:// で始まるリンクを作成 <html> <head></head> <body> <a href="MyApplication://MyAppSetToken?token=hogehoge">Callback</a> </body> </html> ブラウザで確認 ブラウザで上記HTMLのリンクを開く(ローカルファイルでも可)とブラウザが対応レジストリをチェックして、下記のような確認が表示される ※ローカルでない場合 file:// の所がホスト名(ドメイン名)となる アプリケーションがリンクを引数として起動する ※下記は、起動引数(自身含む)を表示させるテストアプリ 実行結果 (2024-03-21現在 Chrome, Firefox で確認) 識別子 MyApplication:// は小文字へと変更される リンク内容全てがアプリケーションへ渡される

python のイテレータを再利用可能なリストへ変換

python のファイル一覧取得 os.scandir をループで使用して痛い目に遭う def test(dir): files = os.scandir(dir) print('list1') for file in files: print(file.path) print('list2') for file in files: print(file.path) 上記コードは、二度目のループでは中身が空で何も表示されない os.scandir で生成した リスト (イテレータ)を使いまわししてたら動きがおかしいので調べたら、戻り値はイテレータなので、片方向リンクリストのように再利用時はインデックスが進んでしまっていて戻せないんだとか os.scandir が FindFirstFile API を利用していたら、その方が合理的ではある 書き直すの面倒だなぁと思ってたら list関数でリストへ置き換えできるそうで、小変更で済みました def test(dir): files = list(os.scandir(dir)) print('list1') for file in files: print(file.path) print('list2') for file in files: print(file.path)

Google Chrome でダウンロードした pdf が Adobe Reader で自動で開かれるのを抑制

イメージ
Google Chrome でダウンロードした pdf が Adobe Reader で自動で開かれるのを抑制 検索すると、Chrome 設定→ダウンロード→詳細... の記事ばかりだが、そんな設定はもうなくなっているわけで 私は pdf を開く規定アプリに Adobe Reader 以外を指定しているので、Adobe Reader で開かれてしまうのは、ブラウザ側の機能ではないということ で、Adobe Reader に迷惑な設定がありました

特定の sudo コマンドをログへ出力させない

cron(root)で定期的に arp-scan を実行しているが、sudoコマンドとしてログへ大量に出力される このようなログ sudo[2450]:     root : PWD=/root ; USER=root ; COMMAND= /usr/sbin/arp-scan -I eth0 -l visudo で下記の行を追加すればログに出力されなくなる(コマンド部分は適宜変更) Defaults! /usr/sbin/arp-scan !syslog

raspberry pi 5 の cron ログを止める

raspberry pi 5 の標準ログは、syslog ではなく systemd のログらしい # journalctl -e 等で確認できるが、下記のような cronログが大量に記録されるので止めたい CRON[xxxx]: pam_unix(cron:session): session opened for user ~ # vi /etc/systemd/journald.conf デフォルトでdebugになっているので MaxLevelStore=notice MaxLevelSyslog=notice へ変更して反映 # systemctl restart systemd-journald

apache2.4 で エラー AH01630

apache2.4 の WebDAVでエラーログに AH01630: client denied by server configuration: ディレクトリ が出て認証できない 検索すると Require の問題ばかり出てくるが WebDAV用のモジュールを有効化していなかった 以下で有効化後 apache2 を再起動 # a2enmod dav # a2enmod dav_fs

raspberry pi の apache2 にSSL/TLSを設定したら Action 'start' failed.

raspberry pi 5 の apache2 に SSLを設定したら下記のメッセージで起動しなくなった # systemctl status apache2 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Action 'start' failed. The Apache error log may have more information. 今回問題になったのは ServerName 未記載の AH00558 ではなく /var/log/apache2/error.log に記載があった SSL Library Error AH02562: Failed to configure certificate drive5:443:0 (with chain), check /etc/apache2/ssl/server.crt SSL Library Error: error:0A00018F:SSL routines::ee key too small キーが短いと... 検索で上がってくる ssl 設定例に # openssl genrsa -des3 -out server.key 1024 というのがあり、ここのキーが短すぎるらしい # openssl genrsa -des3 -out server.key  2048 で作成し直したら問題なく起動しました

PHP gmstrftime の代替

PHP 8.1.0 で 非推奨になったgmstrftime の代替 キャッシュの有効期限を header 関数で指定するのに使っていたため gmdate で書き換え フォーマットが違うので注意、特に%ヘッダが無いので GMT 等を含めると別の解釈をされます gmstrftime の フォーマット gmdate の フォーマット $cache = (60 * 60 * 24) * 1; // header('Expires: ' . gmstrftime('%a, %d %b %Y %H:%M:%S GMT', time() + $cache)); header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $cache) . ' GMT');

Ultravnc 暗号化設定

イメージ
Ultravnc の通信を暗号化する設定 鍵の生成 サーバ側(被リモート側)で DSM Plugin [Use] にチェックを入れ [SecureVNCPlugin64.dsm] を選択、[Config.] を開く ※Config. を押すと UAC画面になるがリモートでは操作不可(サービスモードでも) [Passphrase] と [Confirm] を入れて(これが接続時に聞いてくるパスワードとなる) [Generate Client Authentication Key] を押して 20240228_Server_ClientAuth_m.pubkey ←サーバへ(被リモート側) 20240228_Viewer_ClientAuth.pkey ←クライアントへ(リモート側) のような日付で始まる2つのファイルをダイアログ経由で保存 [Close], [OK] で設定画面を閉じる 鍵の配置 各ファイルをサーバ(.pubkey)とクライアント(.pkey)の UltraVNCのプログラムフォルダに置く C:\Program Files\uvnc bvba\UltraVNC  接続 ビューワーで Use Encryption: SecureVNCPlugin64.dsm を選択して接続 パスワードは鍵の生成時に入力したもの コマンドオプション -dsmplugin SecureVNCPlugin64.dsm を追加 コマンドライン例 直接接続 \vncviewer.exe -connect 10.10.55.55 -dsmplugin SecureVNCPlugin64.dsm リピーター経由 \vncviewer.exe -proxy example.com:5900 ID:123456789 -dsmplugin SecureVNCPlugin64.dsm ※-password hogehoge も利用可

VPS に Ultravnc Repeater を設置

イメージ
互いにNAT配下にある端末からリモート操作を行うため VPS(グローバルアドレス) に Ultravnc Repeater を設置 インストール手順(ubuntu, centos)とセキュリティなどのメモ 接続概要 両端末からそれぞれ リピータ へ セッション を張り、その中で リモート操作 を行う リピータは複数の接続をさばけるので、被リモート側が接続時に設定した ID(数値)をリモート側が指定してターゲット端末を選別する仕組み ※画像のポート番号はデフォルト値です(運用では変更しましょう) インストール  (ソースからコンパイルが必要らしい) ダウンロードと解凍 # wget http://www.uvnc.eu/download/repeater/uvncrepeater.tar.gz # tar -zxvf uvncrepeater.tar.gz ビルド # cd 解凍したディレクトリ # make # make install makeで makeが見つからない  や g++: が見つからない と出た場合、開発ツールが入ってないのでインストール(makeが入ってなければ gccも入ってないと思う)してからmake を再度行う. makeで警告が出るが気にしない  Ubuntu # apt install make # apt install build-essential Centos # yum install make -y # yum -y install gcc-c++ ユーザーの追加 インストール最後に uvncrep ユーザーを追加しろとメッセージが出る Ubuntu # useradd -s /bin/false uvncrep Centos # adduser uvncrep -s /bin/false 起動と終了(手動) # /etc/init.d/uvncrepeater start # /etc/init.d/uvncrepeater stop 自動起動 chkconfig や systemd が使えないようなので、rc3.d へシンボリックリンクを登録 # cd /etc/rc3.d ←Ubuntu # cd /etc/rc.d/rc3.d ←Centos # ln -s /etc/init.d/uvncrepeater S11uv

Ultravnc のリピーター使用時にサーバに登録したクライアントがセッション終了で消される

イメージ
 Ultravnc のリピーター使用時にサーバに登録したクライアントがセッション終了で消される UltraVNCのリピーターを使用する場合、サーバ(リモートされる側)にリピーターを登録(確認は List All Clients)しておいて、クライアント(リモートする側)がリピータへ接続するが、切断後、リストからリピータが消されてしまい、再接続できなくなる https://uvnc.com/docs/uvnc-repeater.html によると C:\Program Files\uvnc bvba\UltraVNC\ultravnc.ini の [admin]セクションに service_commandline=-autoreconnect ID:123456789 -connect  リピータアドレス:5500 の形式で直接記述することで、サービス起動時にリピーターへ接続するとのこと ちなみに、サーバで設定する ID は複数接続を想定した識別子だと思いますが、Viwerから接続するときには ID: が必要らしい

php の simplexml_load_string で名前空間も取得する、ものすごく雑な方法

 php の simplexml_load_string でnamespace(名前空間)も取得する、ものすごく雑な方法 simplexml_load_string では <aa:abc> 等の名前空間を取得しようとすると children 等を用いて取得しなければならず、そのまま 配列→json とならない オレオレアプリ用なので <aa:abc> → <aa__abc> というタグに置き換えるという、ものすごく雑な方法で取得してみる ※<rdf: で始まるタグを除外 しているだけ(爆     $url = 'https://example.com/hogehoge.xml' ;     $xml = file_get_contents ( $url );     $xml = preg_replace ( '/<([\/] * )(?!rdf)([a-z] + ):([^>] + )>/' , '<$1$2__$3>' , $xml );     $rss = simplexml_load_string ( $xml );     print_r ( json_decode ( json_encode ( $rss ), true ));

Gmailへの転送方法による SPF, DKIM pass可否

イメージ
Gmail による SPF, DKIM チェックが始まったので、情報を整理 2022年3月頃から、Gmailへの転送で SPFが Softfail でも警告が表示されるようになった これの回避方法は、 メールを Gmail に転送するおすすめの方法 にあるように、転送時に エンベロープ送信者を変更 して転送することで、Gmail側は転送サーバのSPFを参照するようになり、SPF は PASS となる。 ただ、この方法で迷惑メールを含むメールを転送すると、送信元=転送サーバであるため、転送サーバがspam発信元としてマークされてしまうため、 迷惑メールを受信する可能性のあるメールアカウントは絶対に避けるべき である。 (GmailのPOP3受信等で対応、ただしアカウント数制限やプッシュ不可等制約あり) 今回、SPF, DKIM 設定ドメインによる、エンベロープ送信者の変更有無を確認 受信および転送サーバ(example.com)は、さくらのレンタルサーバで .maildrop の記述は ***@gmail.com への転送とした場合 転送設定 1. エンベロープ変更 なし cc "!***@gmail.com" 2. エンベロープ変更 あり cc "| /usr/sbin/sendmail -i -f postmaster@example.com ***@gmail.com" ※コンパネからの転送先追加では 1. が設定される 転送結果 1. エンベロープ変更 なし で転送されたGmail側の判定 2. エンベロープ変更 あり で転送されたGmail側の判定 DKIMについては、送信元ドメインを判定して、どちらも PASS  SPFについては、1.エンベロープ変更なし では、送信元のSPFレコードとマッチできないため SOFTFAIL となる。(送信元のSPFレコードで ~all が設定されている場合、 -allが設定されていると FAILとなる ) 2.エンベロープ変更あり では、送信元=転送元 となるため、送信元アドレスのSPF設定に関係なく、転送元のSPFが正しく設定されていれば PASS となる。 送信元の SPF設定は、受信側で設定不可のため、エンベロープ変更により、SPFをコントロール下に置くことが可能

さくらレンタルサーバーDKIMを ValueDomain や お名前.com の DNSに登録

イメージ
 さくらのレンタルサーバでDKIMが提供されたので、ValueDomainの DNSにレコードを追加するまでをメモ ※さくら以外のDNSで運用している場合です。さくらのDNSを利用している場合は、DKIMレコードの生成のみでDNSへ登録が完了します 大まかな流れは さくらでDKIMレコードを生成 ValueDomainへ生成したレコードを登録 お名前.com への登録は こちら 手順 さくらのコンパネへログインして、ドメイン/SSL へ入る 対象のドメインの設定メニューから DKIM設定 今回は新規生成なのでそのまま設定 鍵が生成されるので、この画面は閉じる 公開鍵情報を6で使用する場合はコピーしておく 再度メニューへ移動して、対象ドメインのDNSレコードを開く ドメインレコード確認から、 セレクタ._domainkey.あなたのドメイン を探す txtレコードをコピペするが、ダブルクォーテーションで2ブロックに分かれている(たぶん)のでダブルコートを消して一つに連結 または、4の公開鍵を p= 以降にコピペしてもよい ValueDomain へログインして、対象ドメインのDNS設定を開き、txtレコードを下記の書式で追加・保存 txt  セレクタ._domainkey.あなたのドメイン   v=DKIM~ ※ダブルコートが削除されていないとエラーになる 反映されるとコマンドプロンプトから >nslookup -type=txt セレクタ._domainkey.yourdomain のようにセレクタ以降をキーにtxtレコードが引けるようになる

Pixel Watch へ iD や QUICPay がエラーで登録できない

イメージ
 Pixel Watch の Google Wallet(Google Pay) で iD や QUICPay を登録したらSMS認証や通話認証の選択メニューが表示されず「エラーが発生しました」 ※アップデートで「無効」表示とはならずエラーとなるようになったっぽい 結論は 解決方法は無し サポートへ連絡しても無駄 無効となったカードを削除して 、 毎日登録操作を行う 毎日1回登録を行ったら QUICPay は 7日程度、iD は1ヶ月強かかって、認証画面が突然表示されてSMSで通知された番号を入力して、登録・利用可能となった 登録できた時の環境 スマホに登録済みのカードから選択して登録 (セキュリティーコードのみ入力) Wi-Fi接続中 端末の再起動など行っていない(数日稼働中) 時間帯は関係ないと思うけど、QUICPayは夕方、iDは昼過ぎ やってみたけど無駄だったこと ※登録できる時は下記のような操作を行わなくても登録できます 各端末の再起動後に登録作業 Wi-Fiをオフにして公衆網(4G, 5G)で登録作業 登録時に既に登録してあるカードからではなく、新たにカード番号から入力 無効を有効にしようとする Watch端末アカウントの削除や追加 デバイスの一時ロック サポートへ連絡しても、アプリバージョンを事細かく聞かれ、結局上記(やっても無駄だったこと)をやってみろと言われるだけ、サポートは解決方法を持ち合わせていないのは明確(分かってりゃアプリを修正するからね) クレジットカード会社からの与信と思われる利用通知が届いているので、カード会社へは接続されているようですが、カード会社としても迷惑な話ですな 本来表示されるべきSMS送信確認画面 サポートからの指示で、アカウント情報などをいじっていると Googleウォレットのメニューが無効化され、同時にアカウントメニュー内のアカウント情報が消えてしまう この状態になった場合、アプリ一覧から、Pixel Watchアプリ、および Google Wallet アプリを強制終了させることで復活する(端末の再起動では直らない)。サポートはそんな事教えてくれないけど Google Wallet (Pay)で利用できるタッチ決済は、カード会社毎にタッチ、iD, QUICPay と利用できるものに制限がある上、このグダグダ加減で何が

Google Workspace + お名前.com の DKIM設定

イメージ
Google Workspace + お名前.com DNS利用中 の DKIM設定 大まかな流れ DKIMレコードの生成 - Google Workspace DNSへ生成したレコードを登録 - お名前.com 認証開始 - Google Workspace DKIMレコードの生成 Google Workspaceの アプリ → Google Workspace → Gmail の設定 →メールの認証 DKIM認証で対象ドメインの「新しいレコードを生成」 しばらくするとレコードが生成される お名前.com へレコードを追加 ドメインNavi へログイン「DNS設定/転送設定」を開いて 該当するドメインを選択後「次へ」 「DNSレコード設定を利用する」の「設定する」を開く txt レコードへ 1.で生成したレコードをコピペして追加 サブドメインで運用していない場合 サブドメインで運用している場合 (google._domainkeyの後に .サブドメインを付加) レコードを追加、保存後DNSの反映を待つ 認証開始 DNS反映後、Google Workspace へ戻って(開いて)「認証を開始」を行う