本番環境と検証環境を区別させたい

目的・意図

検証環境を利用していて、誤って本番環境にアクセスしてしまわないかは心配ですよね。
誤って本番環境にアクセスしてゴミデータを登録したりとか、ありそうですよね。

提案

Chromeの設定でサイトごとに画像を表示させない設定ができるので、その設定を試してみてはいかがでしょうか?

右上の3点リーダーから「設定」
→左のメニューから「プライバシーとセキュリティ」
→「サイトの設定」
→「画像」
→「画像の表示を許可しないサイト」に対象のURLを追加。

最近では、画像を全く使っていないというようなサイトは少ないと思いますので、
「画像が表示されない→本番環境だ」となるのではないでしょうか。

昔、担当したことのあるシステムでは検証環境だけ背景色が変わっていたりしていましたが、
これならコードをいじらなくて良いので、お手軽かなと思います。

タイトル画面から本編への遷移

参考サイト

1.<https://gametukurikata.com/ui/startbuttonui>

2.<https://dianxnao.com/%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%A7%E3%82%B7%E3%83%BC%E3%83%B3%E9%96%93%E3%82%92%E9%81%B7%E7%A7%BB%EF%BC%88%E7%A7%BB%E5%8B%95%EF%BC%89%E3%81%99%E3%82%8B/>

いちおう出来た!

STARTボタンはマウスが重なると少し拡大して赤色になり、押すと青色になって本編が起動します。(本編はキャラを表示しているだけ)
ENDボタンは、処理の終了です。

上の方に記載した参考サイトは、項番1がアニメーションの設定の理解につながりました。
項番2は、画像を多くしてくれていたので、どこにドラッグするのかが分かりやすかったです。

田舎から都会へ出る人へ

時期外れだけど
ひとりになる前に知っておいた方が、
あるいは、聞いておいた方が良かったのではというポイント。

保険関連

貯蓄があって、危険の少ない仕事なら、保険料の高い保険は不要。
通勤が電車のシステムエンジニアなら、とりあえず貯蓄を500万くらい貯めて、
あとは都民共催の月千円のプランでよいかと思います。

地方で自動車通勤とかなら別途、車関連の保険には入った方がいいかもしれませんね。

引っ越し関連

大手不動産仲介会社とかに全部任せると、逆に高くついたりする。
必要ないものは断って、お安い会社に任せるのも検討した方が良いと思います。
たとえば不動産の紹介だけやってもらって、引っ越しは安い業者に任せるとか。

今では少なくなったかもしれませんが、社会人1年目なら寮のある会社はオススメ。
変な先輩とかいればご愁傷様って感じですが、一緒に過ごすことで同期の仲が深まることもあります。

キッチン回り

シンクの周りは台拭きを置いておき、使用後は水をかならず拭うこと!
ステンレスでも錆びは移ります。
金属の缶とか絶対置かないでください。
使った後は水気をきちんと拭うこと!(大事なことなので(ry )

換気扇は100均とかでフィルターを購入して、そもそも汚れないようにする。
また、風呂場に防カビ燻煙材を焚いて、なるべくカビが発生しないように。
できればルンバが動きやすい床の物件だと掃除も自動化できますね。
時間は有限なので自動化できるところは自動化して、
汚れにくい環境を作りましょう。

フライパンはテフロン加工されているか、鉄鍋、アルミパンなど、
きちんと特性を理解して使用、メンテナンスしましょう。
特にメンテナンス方法を理解することは大事。
この前、オムライスを作るときは強火が良いと言っていたテレビがあったけど、
テフロンなら死んだなと。

目覚まし

太陽電池が組み込まれた目覚まし時計がオススメです。
そういえば、うちのCITIZENの時計は5年くらい電池を変えてないはず。。。

こたつ・扇風機

冬の電力消費を抑えたいならコタツがオススメ。
エアコンは暖房も冷房もお金がかかります。
お金に余裕がなければこたつや扇風機を買った方が安上がりの場合があるはずです。
特に、物件に備え付けのエアコンは古い場合が多いので。

食生活

節約するならお安いスーパーの近く。
ある程度の日数分を購入して、お休みの日に作り置きするのがベター。
たとえば、オクラとかほうれんそう、小松菜などをゆでて麵つゆ、鰹節に漬けるとか。
毎日作るのは料理好きでも大変です。

ひとりだと購入する食材が偏ったりするので、
一日分のビタミンをサプリなどで不足分は補いましょう。

ごはんは基本的には常温保存。
温めなおす前提なら、冷蔵or冷凍。
冷凍の場合はあたためコース、冷蔵の場合は500wで1分20秒程度。
冷ごはんにはレジスタントスターチになってるらしいので、
カロリーを気にしているなら冷ごはんがオススメ。
できれば麦ごはん。

食材ごとに書きたいことがあるけど、それは別で書きます。

フィットネス

ジムよりもSwitchのフィットボクシングがおすすめ。
家から出ずに運動できるし、汗をかいたら家だからすぐにお風呂に入れます。
Switchはゲームではなく、フィットネスマシンです。
ただし、何事もやりすぎは禁物なので、ほどほどにしましょう。

体重計よりも体組成計がオススメです。
とりあえずは、体重と体脂肪率が分かるやつです。
体重と体脂肪率が分かれば脂肪の重量が分かるので、脂肪の重量を減らすことを目標にしましょう。

きちんと運動していなかったときは豆類を食べてもイソフラボン効果が感じれませんでしたが、
ちゃんと運動をするようになってからは、イソフラボン効果が感じれるようになりました。
(肌にハリが出てきた気がする。あと、カサカサしにくくなったかな?)

街中で声をかけてくる人

基本的には無視してください。冷たいのではなく、自衛です。
悪い人間や自分のことしか考えていない人間が多いです。
こちらも自分優先で生きましょう。

そもそも、街中で声をかけてくる人が困っていることは、ほぼありません。(経験上)
本当に困っていたら、常識的な人は交番行きます。

声掛けの例(実例):
・外人から、恵まれない人にという話で千円の寄付を求められた。
・〇〇に行きたい→乗る電車を教える→自信ないのでそこまで連れてって
・今、お時間いただけませんか。(多分、どこかの営業の新人研修)
・ちょっと教えてほしいんですけど→今急いでるんで→タクシー乗り場どこですか?
 →あっち!(ほんとに急いでたけど、ほんとに知らないようなので指を指しながら)
・アンケートにご協力いただけませんか。
 →〇〇保険なんですけど、ご住所はどちらですか。
 →え、嫌なんだけど。(はっきり言いましょう)
・○○テレビの該当インタビューなんですけど。
 (今の時代、インタビューで炎上することもありますのでリスクは避けましょう)

そのほか、何かアップデートあれば追記します。

Minecraftサーバーを立ち上げようとした

minecraftサーバーを立ち上げようとしてみました。
結論から言うと、メモリ不足で失敗(^^;

今のサーバーのメモリが512MBで、やっぱりスペック的には1GBは必要そうです。

使用したのはpaperMCという軽量化したminecraftサーバーソフトで、
ver1.17からJava16になったようです。
Java16(openJdk)のインストールは、↓のコマンドでやりました。

yum install -y java-latest-openjdk.x86_64 which

やる前に↓のコマンドで、存在することを確認してください。

yum search openjdk

ちなみに、何回もリトライしましたが、ワールドの生成が何回やってもダメでした。
当然それ以降は確認できていないので、他のエラーが出てきてもちょっと分かりません。
ポートあたりがつまづきそうですけど。
※スペックを上げてまで立ち上げる意思はないです・・・。


以下、コマンドのメモです。

--グループ作成
groupadd minecraft

--ユーザ作成(パスワードは後で設定)
useradd -g minecraft minecraft

--ユーザ切り替え
su minecraft_username

--CD
/home/minecraft_username

--ディレクトリ作成
mkdir minecraft_server

--CD
cd minecraft_server/

--jarダウンロード
curl -LO https://papermc.io/api/v2/projects/paper/versions/1.17.1/builds/139/downloads/paper-1.17.1-139.jar

--起動(1回目はeula.txtの許諾が必要)
java -Xmx1024M -Xms1024M -jar paper-1.17.1-139.jar

サーバーのメモリは512MBだけど、1024MBでも動きました。
OutObMemoryにはなりませんでしたので、実質1024MBでは動いていなかったようです。
まぁそりゃそうか。

長く誰かと遊ぶなら専用サーバーを契約してもいいですね。

2021年07月25日 近況

オリンピック

世間はコロナで大変ですがオリンピックが始まりましたね。
テレビ欄にたくさん中継が出てました。
正直あまり賛成派ではありませんでしたが、せっかくやるなら楽しんでほしいですね!

ログイン失敗

このWordPressを入れているサーバーにはSSH接続でTeraTermからログインできるようにしていたんですけど、一昨日、ログインできなくなってました。
パスフレーズも変えた覚えがないし、ファイルも同じなんだけど・・・?
まぁ結論から言うとExcelのセルをコピーして貼り付けていたので、
改行文字がパスフレーズに含まれちゃってたんですよね。
ひさびさにログインしたから忘れてました!

お仕事

1年半くらいテレワークです。
電車に乗らなくていいって最高ですね。
来週は離任手続きで久々の出社があるので、ちょっと面倒です。

報酬はしばらく今のままですかね。
でも残業もあまりなく、ほどほどの報酬もいただけてテレワークなので、
今くらいがちょうどいいのかもしれません。

あとは性能改善系を少しずつ進めていて、PLAN_HASH_VALUEとか、
実行計画の見方とかなんとなく分かってきました。

dTV

dTVに加入。
「デッドプール」とか「ワカコ酒」とか観ました。
ワカコ酒とか孤独のグルメみたいなのが好きなのかも。
「おいしい給食」の3話はぜひ見てほしいので、リクエストしておきました笑

要件定義

要件定義でデザインとJavaScriptは専用部隊で作ることになっているんですけど、
出てくる成果物の品質がイマイチなことが多々あり。
やっぱり要件定義の時に「どの項目がどんな属性でどんな動き方をするのか」を共有する必要がある。
フォーマットに追加したので、次からはもうちょっと品質が上がればいいな。

ゲーム

モンハンは最近やってないかも。
Apexをやってることが多くなりました。
普通に面白いけれど、操作にちょこっとストレスを感じるので。
まぁでもカンストと勲章集めはやりたいし、
これからもアップデートはあるので期待してます。

テレビ

今期の中で個人的に面白いかも?と思ってる番組です。
・迷宮ブラックカンパニー
・RE-MAIN
・ピーチボーイリバーサイド
・孤独のグルメSeason9
・ひねくれ女のボッチ飯

料理

ナスを揚げ焼きして、めんつゆ、唐辛子、酢、ゴマ油を入れた出汁に漬けるとうまい。
酢が入ってるのである程度は日持ちするのでは。
できれば一度、火を通した方がベターと思われます。
ナス、ホウレンソウ、オクラとかを入れておけば副菜によさげ。

この前、ニラ玉を作ったんですけど、うまくできました。
・卵にちょっと出汁を入れる。
・ニラは2cm幅くらい。
・蓋をして蒸し焼きにする。
・ウェイパーを水溶き片栗粉でトロミつけて餡にする。

酢豚を作ったとき、消費期限前だったせいかちょっと豚が臭かったのと
下味をつけてなかったのでイマイチでした。
ちゃんと下処理をした方が絶対おいしかったのに・・・!

株主優待

オリックスのふるさと優待が届きました。
信州のハムにしたので、ウィンナー3パック、ハム2パックでおいしそうです。
ライザップも株を持ってるんですけど、
めぼしい商品は品切れになってたので使えないという・・・。

Pythonでクローリング&スクレイピングのお勉強

1.経緯

本屋でPythonの本を眺めてふと、勉強してみようと思ったので。

2.購入

というわけで、そのままの流れで書籍を購入。
書籍代はもちろん、教育費。

3.まずは実行まで

なにやらVirtualBoxなるものでWindowsにLinuxの仮想環境を作成し、仮想環境でPythonを実行するようだ。

本に記載されているバージョンでインストールして、なんとかHello, Python!を出すところまで出来ました。

終わったらVirtualBoxで起動しているLinuxを保存&シャットダウン!

毎回起動&シャットダウンはちょっと面倒かも。。。

さくらVPSでWordPressの更新をFTPから

1.経緯

テーマやらプラグインやらインストールしたり更新するたびに、
FTPの認証を求められてて、
そのたびにFTPのポートを開けたりしていたのが、とても面倒でした。

2.FTPポートをカスタムしてローカルのみ許可

パケットフィルタ機能があるからそこにポート追加すればいいんだろうなとは思いつつ、
とりあえず、設定ファイルにパスワードを設定!

下記のサイトを見ながらパスワードを設定してあげてください。

WordPressでアップデート時にFTP接続情報を聞かれないようにする方法
http://nb-style.info/?p=918

この時点でテーマのインストール&アンインストールが問題なく動いたので、
パケットフィルタリングの設定はいらんかったんや!と気づいた!!!
ポート開け閉めの苦労!!!ガッデム!!!!!!

Unityで3Dモデルをマウスクリックで動かす

1.経緯

3Dモデルが作れるっていうVRoidStudioを触ってキャラクターを作ったので、
Unityで動かせたらな!と思ったのがきっかけ。

完成というわけではないけど、
イメージはこんな感じ。

細かいところではイケてないところがあるので課題ですねぇ。。。

基本的には下記のサイトを参照してください!
ここでは、補足のみ記載します!

【ゼロから】VRoidで作ったキャラ(3Dモデル)をUnityで動かす(Unity編)
https://miyagame.net/vroid-unity-unity/

2.キャラのインポート

VRoidStudoioでエクスポートした形式は、拡張子がvrmっていうもので、
Unityに取り込むにはUniVRMというものが必要らしいです。

UniVRM
https://github.com/vrm-c/UniVRM/blob/master/README.ja.md

プロジェクトを開いておいて、ダブルクリックすれば適用された気がします。
それか、「アセット」→「パッケージをインポート」→「カスタムパッケージ」で。

いろいろ警告が出ててもエラーでなければ、
とりあえずOKかな。

あとは、vrmファイルをプロジェクトにドラッグ&ドロップしてあげればプレハブ化されます。
シーンウィンドウに放り上げてあげましょう(^^

3.キャラを動かすためのアセットをインポートしましょう

動かしたいのでコントローラーを入れていきたいですねってことで、
「ウィンドウ」→「アセットストア」!
※ウィンドウが小さかったら、ウィンドウの右上の縦3点から「最大化」しましょう。

検索ボックスに「standard assets」を入力して出てくる、
「Standard Assets (for Unity 2017.3)」を選んでください。

選択したら、「Import」を!

インポート完了したら、コンソールに警告が出ているけど、エラーも出ているはず。
こちらを解決していきましょう。

下記のサイトを参考にしてエラーを解消してください。

Unity 2019.3でのStandard Assetsのエラーへの対処方法
https://www.sbcr.jp/support/48965/

4.キャラが動けるように設定しましょう

3Dモデルを選択して、Animatorのコントローラーに「ThirdPersonAnimatorController」を設定。

3Dモデルに「コンポーネントを追加」から、左記の2つを入れていきましょう。

「Capsule Collider」はキャラクターの体系に合うように調整してください。
※あっていない場合、動かなかったりします。

5.クリック位置に移動するようにしましょう

床を静的にしてください。

「ウィンドウ」→「AI」→「ナビゲーション」を選択して、
ナビゲーションウィンドウを開いてください。

開いたら、床にベイクを設定しましょう。

左記のような水色のエリアが移動可能エリアになります。

次は、3DモデルにAgentを追加してあげます。
「コンポーネントを追加」→「ナビ メッシュ エージェント」

「速度」は3Dモデルを置き去りにしない速度を設定しましょう。

曲がり角で、ナビだけが先に行ってしまいます。

「Third Person User Control」は無効にしておきましょう。

次で作成するプログラムと命令が競合してしまうので。。。

ここまできたら、やっとプログラムを記述します。
ファイル名はMoveにでもしましょうか。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using UnityStandardAssets.Characters.ThirdPerson;
//using UnityStandardAssets.CrossPlatformInput;

[RequireComponent(typeof(ThirdPersonCharacter))]
public class Move : MonoBehaviour
{
    NavMeshAgent agent;
    RaycastHit hit;
    private ThirdPersonCharacter character;

    private bool m_Jump;
    private bool crouch;
    private string Direction;

    // Start is called before the first frame update
    void Start()
    {
        character = GetComponent<ThirdPersonCharacter>();
        agent = GetComponent<NavMeshAgent>();
        agent.updatePosition = false;
    }

    // Update is called once per frame
    void Update()
    {

        Flick();
        switch (Direction)
        {
            case "up":
                Debug.Log("Jump");
                if (!m_Jump)
                {
                    m_Jump = true;
                }
                break;

            case "down":
                //下フリックされた時の処理
                crouch = true;
                break;

            case "right":
                //右フリックされた時の処理
                break;

            case "left":
                //左フリックされた時の処理
                break;

            case "touch":
                Debug.Log("touch");
                //タッチされた時の処理
                SetDestinationToMousePosition();
                break;
        }

        if (crouch == true)
        {
            character.Move(Vector3.zero, crouch, false);
            agent.ResetPath();
            crouch = false;
        }
        else if (agent.hasPath == true)
        {
            character.Move(agent.nextPosition - transform.position, false, m_Jump);
            m_Jump = false;
        }
        else
        {
            character.Move(Vector3.zero, false, m_Jump);
            m_Jump = false;
        }

    }

    void SetDestinationToMousePosition()
    {
        if (agent.pathStatus == NavMeshPathStatus.PathInvalid)
        {
            Debug.Log("NoReady");
            return;
        }

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit))
        {
            agent.SetDestination(hit.point);
        }
    }

    private Vector3 touchStartPos;
    private Vector3 touchEndPos;

    void Flick()
    {
        Direction = "";
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            touchStartPos = new Vector3(Input.mousePosition.x,
                                        Input.mousePosition.y,
                                        Input.mousePosition.z);
        }

        if (Input.GetKeyUp(KeyCode.Mouse0))
        {
            touchEndPos = new Vector3(Input.mousePosition.x,
                                      Input.mousePosition.y,
                                      Input.mousePosition.z);
            GetDirection();
        }
    }

    void GetDirection()
    {
        float directionX = touchEndPos.x - touchStartPos.x;
        float directionY = touchEndPos.y - touchStartPos.y;

        if (Mathf.Abs(directionY) < Mathf.Abs(directionX))
        {
            if (30 < directionX)
            {
                //右向きにフリック
                Direction = "right";
            }
            else if (-30 > directionX)
            {
                //左向きにフリック
                Direction = "left";
            }
        }
        else if (Mathf.Abs(directionX) < Mathf.Abs(directionY))
        {
            if (30 < directionY)
            {
                //上向きにフリック
                Direction = "up";
            }
            else if (-30 > directionY)
            {
                //下向きのフリック
                Direction = "down";
            }
        }
        else
        {
            //タッチを検出
            Direction = "touch";
        }
    }
}

フリック操作については、下記のサイトを参考にしました。

Unity-フリック操作について
https://qiita.com/pilkul/items/e8864882b3f7e59b05e3

障害物はキューブなどで作り、床と同様に「Navigation Static」にしてください。

「NavigationArea」を「NotWalkable」にすることで障害物になります。

こんな感じですね。
大きさとか色は適当に設定してます。

6.その他

動く障害物などあるようなのですが、そちらについてはまた気が向いたら試してみます。
とりあえず、参考リンクのみ。

【Unity】NavMeshを学ぶ 障害物編
https://www.urablog.xyz/entry/2017/10/14/190557

Unityでアプリ制作~タッチ操作を添えて~

1.経緯

なんとなーくUnity環境を構築したので、せっかくだからアプリを作ってみようと。

2.参考サイト

こちらのサイトさんを参考にさせていただきました。
私の環境では環境構築が完了していたので、#2からですね!

Unity入門
https://dotinstall.com/lessons/basic_unity_v2

3.問題に衝突

途中でちょっとしたタイプミスなどありつつ、
なかなか順調に進んでたんですけど、
最後に問題にぶつかりました!

「アプリに書き出してもタッチ操作に反応しない!」

まぁ薄々そんな気はしてました。
だって、スマホに矢印キーはないもの!!!

4.解決

いろいろなサイトを見て回りました!
結果的に作ったコードは以下の通りです!
(赤色の部分以外は、参考サイトを参照してください)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AppUtil : MonoBehaviour
{

    private static Vector3 TouchPosition = Vector3.zero;

    /// <summary>
    /// タッチ情報を取得(エディタと実機を考慮)
    /// </summary>
    /// <returns>タッチ情報。タッチされていない場合は null</returns>
    public static TouchInfo GetTouch()
    {
        if (Application.isEditor)
        {
            if (Input.GetMouseButtonDown(0)) { return TouchInfo.Began; }
            if (Input.GetMouseButton(0)) { return TouchInfo.Moved; }
            if (Input.GetMouseButtonUp(0)) { return TouchInfo.Ended; }
        }
        else
        {
            if (Input.touchCount > 0)
            {
                return (TouchInfo)((int)Input.GetTouch(0).phase);
            }
        }
        return TouchInfo.None;
    }

    /// <summary>
    /// タッチポジションを取得(エディタと実機を考慮)
    /// </summary>
    /// <returns>タッチポジション。タッチされていない場合は (0, 0, 0)</returns>
    public static Vector3 GetTouchPosition()
    {
        if (Application.isEditor)
        {
            TouchInfo touch = AppUtil.GetTouch();
            if (touch != TouchInfo.None)
            {
                return Input.mousePosition;
            }
        }
        else
        {
            if (Input.touchCount > 0)
            {
                Touch touch = Input.GetTouch(0);
                TouchPosition.x = touch.position.x;
                TouchPosition.y = touch.position.y;
                return TouchPosition;
            }
        }
        return Vector3.zero;
    }

    /// <summary>
    /// タッチワールドポジションを取得(エディタと実機を考慮)
    /// </summary>
    /// <param name='camera'>カメラ</param>
    /// <returns>タッチワールドポジション。タッチされていない場合は (0, 0, 0)</returns>
    public static Vector3 GetTouchWorldPosition(Camera camera)
    {
        Vector3 pos = GetTouchPosition();
        pos.z = Mathf.Abs(camera.transform.position.z);
        return camera.ScreenToWorldPoint(pos);
    }

}

/// <summary>
/// タッチ情報。UnityEngine.TouchPhase に None の情報を追加拡張。
/// </summary>
public enum TouchInfo
{
    /// <summary>
    /// タッチなし
    /// </summary>
    None = 99,

    // 以下は UnityEngine.TouchPhase の値に対応
    /// <summary>
    /// タッチ開始
    /// </summary>
    Began = 0,
    /// <summary>
    /// タッチ移動
    /// </summary>
    Moved = 1,
    /// <summary>
    /// タッチ静止
    /// </summary>
    Stationary = 2,
    /// <summary>
    /// タッチ終了
    /// </summary>
    Ended = 3,
    /// <summary>
    /// タッチキャンセル
    /// </summary>
    Canceled = 4,
}

以下、参考にしたサイトです。

UnityでiOS/Android/Editorの共通タッチ処理を実装する
https://qiita.com/tempura/items/4a5482ff6247ec8873df

さくらVPSのWordPress環境にSSL証明書を設定

1.経緯

先日作成した当サイトの管理者ページにログインしようとしたところ、
「保護されていない通信」と表示されたため、
「おいおい、ログイン情報が保護されていないのは不味いんじゃない?」と思って。

2.「Let’s Encrypt」のSSL証明書を発行

かといって、長続きするか分からないサイトのために有料の証明書を購入するのは、
ちょっと、いや、かなり躊躇われる。

なので、無料でどうにかならないかと調べてみると、、、
「Let’s Encrypt」なるものが使えるらしいじゃないですか!

しかもおあつらえ向きなことに、KUSANAGIならコマンドが用意されていて、
更新までやってくれて、ちょうど構築した環境もKU☆SA☆NA☆GI!!

これは使うしかないということでさっそく!

kusanagi ssl --email [EmailAddress] [Profile]

ところが、、、

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
~省略~
Detail: Invalid response from
http://xxxxxx.com/.well-known/acme-challenge/QEqWBDKJkUucWcuZGr942OUJxwxY5riqaU0iUFCEJns
~省略~
To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address.
Cannot get Let\'s Encrypt SSL Certificate files.
失敗しました。

なんじゃこりゃってことですよ。。。

3.解決

いろんなサイトを見まくって頑張りました。
どんなエラーかというと、
証明書発行時にDocumentRoot配下のディレクトリにファイルを配置して、
そのファイルが参照できるかな?って見てるらしいです。

で、私の場合は、証明書発行コマンドが判断したドメインがアクセス可能なドメインじゃなかった!!!
(「xxxxxx.com」じゃなくて「www.xxxxxx.com」だったのさ)

参照権限がどうのこうのとかあったので、かなり惑わされてしまいましたよ。。

まぁ、なんにせよ/etc/nginx/conf.dに移動して、
該当プロファイルのhttp.confにサーバーネームを追加。
※再起動をお忘れなく!(kusanagi nginx)

server_name www.xxxxxx.com;
↓
server_name xxxxxx.com www.xxxxxx.com;

あとは、証明書発行コマンドを再実行すれば...Congratulations!!!

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
~省略~
IMPORTANT NOTES:
Congratulations! Your certificate and chain have been saved at:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Your key file has been saved at:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Your cert will expire on yyyy-mm-dd. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew all of your certificates, run
"certbot-auto renew"
If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
証明書の自動更新を有効にします
nginx/httpd の設定を変更し、再起動しました。
完了しました。

4.最後の仕上げ

あとはhttpをhttpsにリダイレクトしてあげればOKなので、
/etc/nginx/conf.dに移動して、
該当プロファイルのhttp.confのコメントアウトを除去!
※再起動をお忘れなく!(kusanagi nginx)

# rewrite ^(.*)$ https://www.xxxxxx.com$uri permanent; # SSL ONLY
↓
rewrite ^(.*)$ https://www.xxxxxx.com$uri permanent; # SSL ONLY