TerraformでCloudflareのimportをやり直す(22.9.1時点)

はじめに

 ご無沙汰しています!数年ぶりのblog更新ですが、生きております。

 今回の記事ですが、数年ぶりにTerraformで管理していたCloudflareのメンテナンスをするべく、terraform planを実行したところ、どうやら化石となってしまったtfstateファイルの中身が原因で実行できないという事態が発生しました。

 また、Terraformの設定内容を記載しているtfファイル自身も書き方が色々と変わっていたらしく、備忘録に書き残せればと思います。

環境

作業OSWindows 11 Pro Ver.21H2 Build.22000.856
Terraformv1.2.8 on windows_amd64
前回メンテ日2018/10/21
今回メンテ日2022/9/1
ソースコードhttps://github.com/223n/223nTech
表1. 作業環境

作業内容1. 「terraform」の定義を追加

 tfファイルの先頭にterraformを追加しました。
 どうやら、バージョンアップでおまじないになっている様子…
 0.13で何があったんや…

コード1. terraformの追加
terraform {
  required_version = ">= 0.13"
  required_providers {
    cloudflare = {
      source = "cloudflare/cloudflare"
    }
  }
}

作業内容2. 変数を定義・設定

 従来は、環境変数に「CLOUDFLARE_EMAIL」と「CLOUDFLARE_TOKEN」を定義しておけばよかったのですが、どうもそれではダメになった様子…
 tfファイルでは、tfファイル内で使用する変数を定義しておき、環境変数に設定値を設定するようにしました。

コード2. 変数を定義
# Cloudflareで使用しているメールアドレス
variable "CLOUDFLARE_EMAIL" {
  type      = string
}

# Cloudflareで取得したGlobal API
variable "CLOUDFLARE_TOKEN" {
  type      = string
  sensitive = true
}

# 設定対象のゾーンID
variable "CLOUDFLARE_ZONE_ID" {
  type    = string
}

 tfファイルで定義した変数に環境変数の設定値を反映させるためには、変数名の頭に「TF_VAR_」と付けておく必要があるので、要注意です。

画像1. 環境変数

作業内容3. 「provider」の定義を追加

 変数定義の下に、providerを追加しました。
 ここでは、Cloudflareの接続に必要なメールアドレスとAPIを割り当てています。

コード3. providerの追加
provider "cloudflare" {
  email   = var.CLOUDFLARE_EMAIL
  api_key = var.CLOUDFLARE_TOKEN
}

作業内容4. フォーマットの大幅見直し

 あとは、ひたすらフォーマットを変えていきます。

コード4. 変更例(変更前後)
resource cloudflare_page_rule "223n_tech_rule" {
  "zone"     = "223n.tech"
  "target"   = "blog.223n.tech/*"
  "priority" = 1

  "actions" = {
    "ssl"              = "strict"
    "always_use_https" = true
  }
}
resource "cloudflare_page_rule" "_223n_tech_rule" {
  zone_id  = var.CLOUDFLARE_ZONE_ID
  target   = "blog.223n.tech/*"
  priority = 1
  actions {
    ssl              = "strict"
    always_use_https = true
  }
}

 この事例では、resourceの次にそのまま「cloudflare_page_rule」といった種類を書いていたのですが、””で括っています。
 また、一意の識別名が従来数字から始まっても良かったのですが、英字もしくは_で始めなければならないとのことらしいので、すべての識別名に「_」を追加しています。

コード5. 種類に""を追加と識別名を英字もしくは_で開始するように変更(変更前後)
resource cloudflare_page_rule "223n_tech_rule" {
resource "cloudflare_page_rule" "_223n_tech_rule" {

 その代わり、従来は「zone」や「target」などを””で括っていましたが、””を削除しています。

コード6. 変数名の""を削除(変更前後)
  "target"   = "blog.223n.tech/*"
  target   = "blog.223n.tech/*"

 次に、従来は「zone」で設定対象のドメイン名を設定していたところは、「zone_id」となり、Cloudflareで取得したゾーンIDを設定してあげる必要が発生しました。
 ここで、先ほど定義した変数「CLOUDFLARE_ZONE_ID」を使用しています。

コード7. zoneからzone_idに変更対応(変更前後)
  "zone"     = "223n.tech"
  zone_id  = var.CLOUDFLARE_ZONE_ID

 また、「actions」などの変数に複数の変数を定義しているようなものは、=でつながない書き方に変わっています。

コード8. 複数の変数を子持ちする変数の書き方変更対応(変更前後)
  "actions" = {
    "ssl"              = "strict"
    "always_use_https" = true
  }
  actions {
    ssl              = "strict"
    always_use_https = true
  }

作業内容5. tfstateファイルの削除

 tfstateファイルは、Terraformで設定した内容を保持してくれているファイルで、このファイルがあることで、現状のCloudflareの設定内容とtfファイルで定義している設定内容を比較することで、「terraform plan」などを実行した際に結果予想などを表示してくれる重要なファイルです。
 しかし、残念ながら今のtfファイルではv0.13の壁を超える手段がなく、この後、tfファイルを再作成するため、バッサリと削除してしまいます。

作業内容6. importコマンドを実行するための情報を収集する(ページルール)

 Terraformでは、tfファイルで設定した内容と実際の設定内容を紐づけてtfstateファイルに記録してくれる「import」という機能があります。
 しかし、「import」を実行するためには、それぞれの設定項目ごとにCloudflareで持っている設定ごとの「ID」が必要となるため、今回はcurlコマンドで取得をします。

コード9. ページルールを取得するcurlコマンド
curl -X GET "https://api.cloudflare.com/client/v4/zones/##ゾーンID##/pagerules" -H "X-Auth-Email: ##メールアドレス##" -H "X-Auth-Key: ##Global API##" -H "Content-Type: application/json"

(注記)コマンド内の##xxxx##の箇所は、下表の値を置き換えてから実行してください。

##ゾーンID##設定対象のゾーンID
環境変数の「TF_VAR_CLOUDFLARE_ZONE_ID」に設定した内容
##メールアドレス##Cloudflareで使用しているメールアドレス
環境変数の「TF_VAR_CLOUDFLARE_TOKEN」に設定した内容
##Global API##Cloudflareで取得したGlobal API
環境変数の「TF_VAR_CLOUDFLARE_ZONE_ID」に設定した内容
表2. コマンド内の置き換え内容対応表

 実行して正常にデータが取得できると、json形式でデータが返ってきます。
 Visual Studio Codeなどにjsonファイルとして保存しておき、「ドキュメントのフォーマット」で見やすいように整形してあげてください。
 以下のような内容が取得できるかと思います。

実行結果1. ページルールの取得結果
{
    "result": [
        {
            "id": "##このページルールの固有ID##",
            "targets": [
                {
                    "target": "url",
                    "constraint": {
                        "operator": "matches",
                        "value": "blog.223n.tech\/*"
                    }
                }
            ],
            "actions": [
                {
                    "id": "ssl",
                    "value": "strict"
                },
                {
                    "id": "always_use_https"
                }
            ],
            "priority": 1,
            "status": "active",
            "created_on": "2018-04-15T07:00:33.000000Z",
            "modified_on": "2019-07-04T18:44:00.000000Z"
        }
    ],
    "success": true,
    "errors": [],
    "messages": []
}

 今回、ページルールは1個しか定義していないため、result内の最初に出てくる「ID」が欲しい情報ですので、メモしておきます。
 ここでは、「##このページルールの固有ID##」と書かれている場所に、英数字が記載されています。

作業内容7. importの実行(ページルール)

 先ほどの手順で必要な情報は揃いましたので、ページルールのimportを実行します。
 基本的な構文は、以下のようになっています。
 なお、「##紐づけたい種類##」と「##紐づけたい識別名##」の間は「.」がありますので、忘れないようにしてください。

コード10. importコマンド構文
terraform import ##紐づけたい種類##.##紐づけたい識別名## ##ゾーンID##/##取得したID##
##紐づけたい種類##tfファイルでresourceの次に書いている種類
##紐づけたい識別名##tfファイルでresourceの種類の次に書いている一意の識別名
##ゾーンID##設定対象のゾーンID
環境変数の「TF_VAR_CLOUDFLARE_ZONE_ID」に設定した内容
##取得したID##「実行結果1.」などで取得した「##ページルールのID##」といったID
表3. コマンド内の置き換え内容対応表

 例えば、今回は以下のような設定に対して取得するので、コマンドは以下のようになります。

コード11. ページルールの設定(tfファイル)
resource "cloudflare_page_rule" "_223n_tech_rule" {
  zone_id  = var.CLOUDFLARE_ZONE_ID
  target   = "blog.223n.tech/*"
  priority = 1
  actions {
    ssl              = "strict"
    always_use_https = true
  }
}
コード12. importコマンド(コード11の設定と紐づける場合)
terraform import cloudflare_page_rule._223n_tech_rule ##ゾーンID##/##ページルールのID##

 無事に取り込みが完了すると、「Import successful!」といった結果が表示されます。

画像2. 成功した場合の結果表示

 もし、1回実行していて変更点が無い場合には、「Error: Resource already managed by Terraform」といったエラー結果が表示されます。

画像3. 失敗した場合の結果表示(既にimportしてから変更が無い場合)

作業内容8. importコマンドを実行するための情報を収集する(ページルール)

 あとは、DNSレコードを同じようにリストで取得してCloudflareで割り当てられているIDを取得、importコマンドをひたすら実行する流れです。

コード13. DNSレコードを取得するcurlコマンド
curl -X GET "https://api.cloudflare.com/client/v4/zones/##ゾーンID##/dns_records" -H "X-Auth-Email: ##メールアドレス##" -H "X-Auth-Key: ##Global API##" -H "Content-Type: application/json"

(注記)コマンド内の##xxxx##の箇所は、下表の値を置き換えてから実行してください。

##ゾーンID##設定対象のゾーンID
環境変数の「TF_VAR_CLOUDFLARE_ZONE_ID」に設定した内容
##メールアドレス##Cloudflareで使用しているメールアドレス
環境変数の「TF_VAR_CLOUDFLARE_TOKEN」に設定した内容
##Global API##Cloudflareで取得したGlobal API
環境変数の「TF_VAR_CLOUDFLARE_ZONE_ID」に設定した内容
表4. コマンド内の置き換え内容対応表

 ページルールと同様に実行して正常にデータが取得できると、json形式でデータが返ってきます。
 Visual Studio Codeなどにjsonファイルとして保存しておき、「ドキュメントのフォーマット」で見やすいように整形してあげてください。
 以下のような内容が取得できるかと思います。

実行結果2. DNSレコードの取得結果(一部中略)
{
    "result": [
        {
            "id": "##このDNSレコードのID##",
            "zone_id": "##ゾーンID##",
            "zone_name": "223n.tech",
            "name": "223n.tech",
            "type": "CAA",
            "content": "0 issue \"letsencrypt.org\"",
            "proxiable": false,
            "proxied": false,
            "ttl": 1,
            "locked": false,
            "data": {
                "flags": 0,
                "tag": "issue",
                "value": "letsencrypt.org"
            },
            "meta": {
                "auto_added": false,
                "managed_by_apps": false,
                "managed_by_argo_tunnel": false,
                "source": "primary"
            },
            "created_on": "2022-09-01T06:59:09.329106Z",
            "modified_on": "2022-09-01T06:59:09.329106Z"
        },
        ## 中略 ##
        {
            "id": "##このDNSレコードのID##",
            "zone_id": "##ゾーンID##",
            "zone_name": "223n.tech",
            "name": "blog.223n.tech",
            "type": "NS",
            "content": "ns1.dns.ne.jp",
            "proxiable": false,
            "proxied": false,
            "ttl": 1,
            "locked": false,
            "meta": {
                "auto_added": false,
                "managed_by_apps": false,
                "managed_by_argo_tunnel": false,
                "source": "primary"
            },
            "created_on": "2019-07-04T18:44:01.881493Z",
            "modified_on": "2019-07-04T18:44:01.881493Z"
        },
        ## 中略 ##
    ],
    "success": true,
    "errors": [],
    "messages": [],
    "result_info": {
        "page": 1,
        "per_page": 100,
        "count": 17,
        "total_count": 17,
        "total_pages": 1
    }
}

 あまりにも結果が長いので、一部中略していますが、DNSレコードごとに括られた状態で整形されると思います。
 あとは、tfファイルで設定している内容から該当するDNSレコードを探し、「”id”」の「##このDNSレコードのID##」の箇所に記載されているIDをメモしていきます。

作業内容9. importの実行(DNSレコード)

 import構文は重複するので作業内容7.をご参照いただくとして、例えば、今回は以下のような設定に対して取得するので、コマンドは以下のようになります。

コード14. ページルールの設定(tfファイル)
resource "cloudflare_record" "_223n_tech_issuewild" {
  zone_id  = var.CLOUDFLARE_ZONE_ID
  type    = "CAA"
  name    = "@"
  data {
                flags  = "0"
                tag    = "issuewild"
                value  = "letsencrypt.org"
  }
}
コード15. importコマンド(コード14の設定と紐づける場合)
terraform import cloudflare_record._223n_tech_issuewild ##ゾーンID##/##DNSレコードのID##

作業内容10. planの実行

 ここまでくれば、あとは、planを実行して試すのみです!
 もし、planを実行した後にapplyを実行して「tfstateの状態と実際の状態が異なる」といったエラーが発生した場合には、該当のtfファイルの設定に紐づくimportコマンドを再実行してからplan、applyを実行してみてください。

画像4. Terraformのplanとapplyの実行結果(正常終了)

最後に

 かなり手間取りましたが、そりゃあ数年放置したソースがそのまま使えるわけがないですよね…
 Wordpressに関しては、すべて自動的にアップデートが実行されるように組んであるので問題はないのですが、Terraformなどの構築設定後に触ることのないものは、要注意ですね…

SnapUpでのバックアップでDBダンプエラーになった場合の対応

このブログを含めていくつかWordpressのサイトをさくらのレンタルサーバで構築しているのですが、さくらインターネットさんの方でバックアップの機能が用意されています。

バックアップにはSnapUpを使用しており、CMSではWordpressのバックアップに対応しています。

そこで、手順に従ってバックアップを作成しようと試みたのですが、なぜかエラーになってしまいました。

SnapUpのエラーログ

調べてみても原因が分からず、さくらインターネットに問い合わせたところ、原因は「.my.cnf」にありました。

.my.cnfファイルの中身(修正後)

どうやら、SnapUpのデータベースのダンプには、「mysqldump」コマンドが使用されているとのことで、「.my.cnf」ファイルに「database = xxx」という行があるため、ダンプに失敗してしまったようです。

画像のように最初に「#」を付けてコメントアウトしてあげることで、正常にバックアップを作成することができました!
(ありがとう、さくらインターネットさん!)

SnapUpの正常終了ログ

自分がやったことのないことをやろう

お久しぶりです。生きていた223nです。

昨年から一緒に仲間とイベントをやってみたり、個人的に考えたりすることが増えました。

そのため、少しだけ今考えていることをまとめました。

INGRESS First Saturday

三河INGRESSイベント実行委員会の仲間に協力してもらいながら企画、準備、実施としてきました。

ほとんどが役所や観光協会などとのやりとりでしたが、初めての体験で楽しんでいました。

ただ、どんどんやることを増やすと体力の消耗が激しくなります。

なので2回目以降は体力が持つようにセーブしてやっています。

INGRESS ⬜️⬜️⬜️⬜️

こちらは企画段階です。

まだ⬜️⬜️⬜️から連絡がないので開催できるか全くわかりませんが、開催できると良いな〜

INGRESS まちじゅうエージェント

こちらもまだ企画段階です。

MDなどとの同時開催ではなく、単発でやりたいなと。

フォックスハントなどといったINGRESSを使って指定されたエージェントやアイテムを探すなどのイベントを考えています。

あとは運動会みたいなのも良いなぁとも…

これもできたらいいなぁ。

初心者が皆伝目指す

弐寺。

おうちで毎日2時間BMSをやれば皆伝楽勝という皆伝保持者の自伝から、個人的にやってみようと思います。

ちなみに音ゲーはリフレクビートをメインにやっていたので、他の音ゲーはからっきしです。

そのため、ノーマルもまだクリアできたりできなかったり…

(二個押しの連続とかが降ってくると混乱してます)

これを機にYouTubeでライブで記録を残しながらやってみるのもありかなぁとも思ってます。

ちなみに、おうちではbeatorajaを使う予定です。

Work

わたし…働きたい…

Ingress First Saturdayをやってみて

IngressのFirst Saturdayをやったときに裏方でやっていたこと

☆この記事について

 この記事は、Ingress & Wayfarer Advent Calendar 2019の3日目の記事です。

 自分は、愛知県蒲郡市で 223n というエージェント名で活動しています。また、三河INGERSSイベント実行委員会(旧:東三河INGRESSイベント実行委員会)という有志の団体でも活動しています。

 三河INGRESSイベント実行委員会では、三河地域でのINGRESSというゲームのイベント開催を行っています。メンバーはオブザーバーを含めて13名で活動しています。この委員会でFrist Saturdayという公式イベントの主催を数回やらせていただいたので、この時に裏方でやったことなどを共有できればと思い、まとめました。

Ref. INGRESSイベント実行委員会

Hint. 三河INGRESSイベント実行委員会では、一緒に活動するメンバーを募集しています!

☆ INGRESSとは

 INGRESS(いんぐれす)は、位置情報を活用したリアルタイムでの陣取り合戦のようなゲームです。2つの陣営に分かれて陣取りで戦うのがメインですが、それ以外にも陣取りの基点であるポータルを使ってプレイヤーが作ったスタンプラリー(ミッション)や、そのスタンプラリーを使った公式イベント、ポータルを結んだ三角形の陣地を使ったアート作品など、プレイヤーによってさまざまな遊び方があります。そして、今回、INGRESSの公式イベントの1つであるFirst Saturdayを主催する機会がありました。

Ref. Ingress Prime
Ref. Ingressの基本 #1 Ingressとは

☆First Saturdayとは

 First Saturdayは、ゲームでの陣営に関係なく初心者プレイヤーのレベルアップ支援や、プレイ方法などの疑問について教えてあげようという陣営フリーの公式イベントです。毎月の第1土曜日に開催しています。

☆事例(FS蒲郡 at 竹島)

 ここでは、竹島(俊成苑)で開催したFS蒲郡を例に挙げていますが、正直に言って、やりすぎているパターンです。そのことを踏まえた上で、こんなことをやっていたんだな~と軽い気持ちで読んでいただければと思います。

★仲間探し(必須)

 自分の場合は大丈夫でしたが、もしまだ一緒にやるメンバーがいない場合、メンバー探しから始まります。最低でも両陣営で各1名が必要です。

 また、特に主催(Faction Leader)をやる場合には、後述の場所探しで役所などに氏名や住所などを届け出る必要が発生する場合があります。そのため、事前に氏名などを書類などに書いてもらえるかを確認しておいた方が良いです。

★場所探し(必須)

 自分の場合は、兎にも角にも、まずはイベントを開催する場所を探すところから始まりました。

 First Saturday 蒲郡では、最初に候補地として挙がった俊成苑 の利用許可が必要であることを知っていたため、とりあえず蒲郡市の観光商工課に相談に行きました。観光商工課には、イベントを開催することと俊成苑を利用することを伝え、利用状況を確認してもらったところ、空いていたため開催場所を決定しました。

 自分たちの場合は、開催地でタープを張るなどの場所を占有することから、毎回、自治体に事前に相談しておき、必要であれば占有許可などの許可を貰うようにしています。タープなどを使用しない場合でも、公園などで開催する場合には、不要なトラブルを避けるため、開催場所を管理している自治体や管理団体などには、開催することをひとこと伝えておいた方が良いと思います。

Ref. 俊成苑

★後援(任意)

 今回、蒲郡市と蒲郡市観光協会に「後援」を申請しました。理由としては、記念ミッションに使用する写真などが欲しいことと、INGRESSを知ってもらうこと、今後計画しているMission Dayの開催などを考え、とりあえず申請してみようという軽い気持ちで申請しました。

★マップ(任意)

 Googleのマイマップという機能で、FS蒲郡の公式マップを作成しました。

 マイマップでは、観光協会から頂いた観光情報や、駐車禁止区域や集合場所などの情報などを追加しました。このマイマップは簡単に作ることができるため、可能であれば作成しておくと良いかなと思います。

Ref. FS蒲郡マップ(2019年8月)

★ホームページ(任意)

 当初、Adobe Portfolioというサービスでホームページを作成していました。しかし、このサービスではアカウントを持っている自分しか編集できないため、他のメンバーが編集できるようにWordPressに移行しました。

Ref. 当時のホームページ
Ref. 現在のホームページ

★パンフレット(任意)

 当日配布した3つ折りのパンフレットは、Adobe Indesignで作成しました。その後、データを印刷所に送信して印刷、配布しました。正直、これは本当にやりすぎだと思います。

 また、3つ折りだったこともあり、パンフレットの中身をちゃんと見てくれた人が少なかった点には驚きました。配布する際に中身を案内をすればよかったと思います。

Ref. パンフレット

★Fev Games(必須)

 First Saturdayのイベント登録は、Fev Gamesのページで登録することができます。イベントの登録後に、IFSのSlackの招待リンクが貼られているため、そこからSlackにも参加しました。

 Fev Gamesでのイベント登録は英語ですが、分からない場合にはとりあえずGoogle翻訳にかけてみて、不安な場合には過去のイベント主催者やIFSの主催者向けHangOutsなどで聞いてみましょう。

Ref. IngressFSイベント登録 ~Fev Games~

★お茶とTシャツ(任意)

 First Saturdayでは、IFSのSlackにあるJapanチャンネルで、お茶とTシャツの申し込みを行うことができます。なお、お茶とTシャツの締切は、通常のイベント登録の締切より早いため、イベント登録の募集を開始してすぐに申込みなどを行えば、特に問題なく手続きできると思います。

※地域によっては、お茶ではなくお水が商品提供されます。
※自分の場合はシャツのサイズがXLではパッツンパッツンだったため、自作で大きいTシャツを自作しました。
※まだTシャツは数着余っているので、欲しい主催者の方は教えてください。

★Telegram(任意)

 参加者の交流部屋としてTelegramのグループを作成しました。当初は主催からの連絡や、参加者の交流にと考えていましたが、実際にはあまり活用されなかったため、First Saturdayの規模では不要かなと感じました。

 また、同種のツールとしてHangOutsという選択肢もありましたが、近いうちに終了する予定があるため、今回はエージェントの利用者も増えてきているTelegramで開設しました。

★Twitter(任意)

 イベント告知として、公式のTwitterアカウントを実行委員会で作成しました。イベントの案内や連絡、観光協会などから頂いた情報などを投稿しました。

 Fev Gamesのイベント登録では、イベント案内を行うホームページまたはSNS、HangOut、Telegramなどのいずれかが必要となるのですが、個人的にはTwitterが情報を拡散させやすいと感じました。

★休憩所(任意)

 開催の前週は気温が高く、自分も熱中症にかかり倒れるなどがあったため、急きょ休憩所として会場の目の前にある公民館を借りました。当初は大丈夫だろうという予想でしたが、当日も非常に暑かったため、借りていて本当に良かったです。この経験から、日影がある休憩場所が無さそうな場合には休憩所も借りるようにしました。

★備品など(任意)

 長机やテント、椅子、拡声器などは、休憩所として借りた公民館からお借りしました。熱中症予防と受付台としてお借りしたのですが、結果的には日影となりスタッフの熱中症予防になったと思います。本当は日影のある場所で行うことが最適なのですが、芝生広場の箇所しか借りられないことや、日影のある東屋などは一般の利用者もいることからこのような形となりました。

 他にもメンバーの持出品でタープや飲み物を冷やす用のプール、板氷なども用意しました。また、今回は蒲郡市からインクを擦るとミカンの香りがする特殊印刷された名刺を頂いたので、来場スタンプを作り受付で押印して配布しました。

Ref. 配布したスタンプ入り名刺

★パスコード(任意)

 Fev Gamesに登録したメールアドレスに、当日の朝に分割されたパスコードの暗号文が送信されます。この暗号文は会場で参加者に解いてもらったり、解読済みのパスコードを公開するなど、主催者の判断で公開すれば大丈夫です。

 FS蒲郡では、解読済みのパスコードを受付に掲示しました。

★ミッション(任意)

 FS蒲郡では記念ミッションを作りました。ミッションは早めに作り申請をする方が良いです。というのも、FSのミッションではありますが通常のミッションと同じ基準で審査されるため、いつ承認されるかわかりません。

 ミッションは、最初のポータルなどに問題形式(入力させるタイプ)を含み、説明文を具体的に書き、一筆書きで回ることができるルートなどを設定しておけば問題なく承認されると思います。ただし、優先審査をしてもらう#ingressFSは、別途条件があるため確認してから使用するようにしてください。

★初心者の方向け対応(任意)

 受付では、初心者かどうかの確認をして、初心者の方にはスタッフと一緒に行動してもらい、経験値を稼いでもらう対応をしました。しかし、実際にはゲームの初心者という方より、Fev Gamesの参加登録や実績登録などの手順が分からないといったイベント参加が初めてという方が多い印象でした。ゲームの初心者の方は、一緒にイベント参加されていたプレイヤーの方が引率されていた方が多かったようです。

 また、最後の集合写真前にはMission Day 千葉ニュータウンの宣伝や、初回参加者にメダルカードのプレゼント、実績情報からアイテムカードのプレゼントなどの配布も行いました。

★実績収集・報告(必須)

 FS蒲郡では、Googleフォームによる実績の収集を行いました。当時はまだPrimeのスタッツ情報を使った収集方式ではなかったため、あらかじめパンフレットに開始時点と終了時点のスタッツ情報をメモしてもらい、それを最後にフォームに入力してもらうという方法で行っていました。

 現在は、開始時点と終了時点のスタッツ情報をPrimeからコピーして、それをフォームに貼り付けるだけで入力する項目を連絡用のメールアドレスの入力だけに減らすことが出来ました。

★ふりかえり

 主催として最優先の目標は「ケガ・事故ゼロ」でした。予想された熱中症も特になく、無事に終えることができました。ただ、先に書いた通り、このFSは色々とチカラをいれすぎた回でした。初めての主催ということもあったのですが、もう少し小規模でやってもいいのでは?と思いました。

 もし、First Saturdayを主催したい!という方は、ここまでチカラをいれなくても大丈夫です!ゆるふわで大丈夫です!!

☆First Saturdayの開催は難しくない

 主催をしてみて思ったことは、もっとFirst Saturdayを全国各地で開催すればいいのになと思います。First Saturdayを簡単に開催するなら、「仲間の用意」「場所の用意」「告知・連絡手段(TwitterやTelegramなど)の用意」「実績収集の用意」の4つが用意できれば開催することができます。

 ただ、場所の決定とTwitterなどでの開催告知は、少なくとも開催の前々月に行うことをお勧めします。早く告知すればプレイヤーが情報に触れるのが早くなるため、参加を検討する余裕が生まれることと、前月に開催している他のイベントなどで告知することができるようになります。

 開催は簡単です。ただ、あまりに人数が集まらなかった場合には、イベント要件である両陣営3名以上、合計10名以上を達成できない可能性が発生するので注意が必要です。特にMission Dayが第1土曜日に開催される場合には、多くのプレイヤーがMission Dayに参加するため、参加者数は少なくなります。

Ref. Ingress First Saturday 主催ガイド
Ref. IngressFSイベント登録 ~Fev Games ~

※他にも、こんな情報が欲しいという方がおられましたら、TwitterのDMなどで教えてください…!

Ref. Twitter (@223n_enl)

更新履歴

  • ミッションを追加
  • 三河INGRESSイベント実行委員会について追記
  • 仲間探しを追加
  • Advent calendarのリンクを追加

Discordがインストール、アップデート不可になった場合の対応

chocolateyでDiscordをインストールしていたのですが、
chocolatey upgrade all -yを実行した場合に、
エラーが発生してしまい、Discordは起動しなくなってしまうという
問題が発生しました。

やったこと

  1. choco uninstall discord -yを実行
  2. タスクマネージャからDiscord.exeを強制終了
  3. C:\Users\UserName\AppData\Local\Discordを削除
  4. 公式からインストーラをダウンロードしてインストール

やったこと(当時の手順)

まずは、chocolatey uninstall discord -yを実行しました。
しかし、これもアンインストーラが行方不明というエラーにより失敗…

次に、公式サイトからインストーラを入手して実行。
これもエラーで失敗。

エラーログによると、C:\Users\UserName\AppData\Local\Discord
配下にあるdllがアクセス不可でエラーになっている様子。

そこで、C:\Users\UserName\AppData\Local\Discord
削除を試みますが、なぜかDiscord.exeが動いているため、削除できません。

そのため、タスクマネージャでDiscord.exeを強制終了させました。

その後、C:\Users\UserName\AppData\Local\Discordを削除して
インストーラを再実行した結果、正常にインストールが行われました。

(このため、アンインストール時のログなども消失)

反省

  • エラー発生時のログやキャプチャを失念していた。
  • chocolateyでDiscordをインストールしてはいけない。
  • Discordに限らず、自動アップデートが実装されているものは、chocolateyでインストールするべきではないかもしれない。

C#問題集をGitBookにまとめてます

こんにちは。

先日、C#の問題を投稿していましたが、良い機会なのでGitBookでまとめることにしました。

https://223n.gitbook.io/csl/

この問題集は、自分がC#の勉強をする際につまづいたり、ほかの方に教えていた際に困っていたところなどをメモしていたのを問題集にしています。

なるべく細かい解説を入れるようにしていますが、誤っていたらGitHubのリポジトリにIssueを送っていただければと思います。

今後もよろしくお願いします。

新方式のe-Taxでつまづく

新年明けました。今年もよろしくお願いします。

さて、今回ですがe-Taxで確定申告をしようとしたのですが、どうにもマイナンバーによる新方式での提出が何故かできないという困ったトラブルに巻き込まれたので、とりあえず提出までできたのでその流れをメモがてら書きたいと思います。

国税庁 確定申告書等作成コーナー

さて、作成を行うのですが、まずは「作成開始」をクリックします。

国税庁 確定申告書等作成コーナー 作成コーナートップ

今回は、マイナンバーカードでの提出なので、「e-Taxで提出する」をクリックします。

税務署への提出方法の選択1

次に、「マイナンバーカード方式により提出する」をクリックします。

税務署への提出方法の選択2

次に事前準備を聞かれますが、まだセットアップがされていない場合には、ここでインストーラをダウンロードしてインストールします。

e-Taxのご利用のための事前準備を行います1

下にある「利用規約に同意して次へ」をクリックします。

e-Taxのご利用のための事前準備を行います2

次に、「マイナンバーカードの読み取り」をクリックします。

マイナンバーカードによる認証を行います

そうすると、利用者証明用パスワード(数字4桁)が求められるので、入力して「OK」をクリックします。

個人番号カード ログイン

まだマイナンバーカードと利用者識別番号が紐づいていないので、利用者識別番号と暗証番号を入力して「関連付け」をクリックします。

マイナンバーカード方式の利用開始

次に、再度マイナンバーカードの情報読み取りが発生しますので、「マイナンバーカードの読み取り」をクリックします。

利用者識別番号の関連付け1

すると、先ほどとは異なりWeb側で「券面事項入力補助用パスワード(4桁)」を求められるので、入力して「OK」をクリックします。

利用者識別番号の関連付け2

しかし、正しいパスワードを入力してもエラーメッセージが表示されてしまい、関連付けが行えません。このことをマイナンバー、e-taxに問い合わせをしますが、解決しませんでした。

失敗メッセージ

マイナンバーカード側は、市役所で確認してもらいましたが異常なしで、念のためパスワードをすべてリセットしてもらいましたが、ここの券面次項入力補助だけうまくいきません。

そこで、最終手段として案内されたのが「去年までと同じ方式による提出」でした。

(去年までの方式でできるのかよ…)

税務署への提出方法の選択3

事前確認まで戻り、「e-Taxで提出する」を選びます。
そして、最下部にある「税理士の方が代理送信を行う場合はこちら」をクリックします。

税務署への提出方法の選択4

事前準備は完了しているはずなので「利用規約に同意して次へ」をクリックします。

e-Taxのご利用のための事前準備を行います3
e-Taxのご利用のための事前準備を行います4

次に、利用者識別番号を持っているかどうかを聞かれるので「はい」をクリックします。

利用者識別番号有無の確認

暗証番号が分かるか聞かれるので「はい」をクリックします。

登録情報の確認1

「利用者識別番号」と「暗証番号」を入力して「次へ」をクリックします。

登録情報の確認2

そのまま「OK」をクリックします。

検索完了

検索結果が表示されるので、内容を確認します。

登録情報は次のとおりです1
登録情報は次のとおりです2

誤っていれば「訂正・変更」をクリックして修正します。正しいことを確認したら「申告書等を作成する」をクリックします。

作成する申告書等の選択

あとは、いつも通り確定申告を行い、最後にマイナンバーカードで送信すればOKです。

ただ、まだ問題があります。それは「メッセージボックス」で詳細が開けない点です。

メッセージボックス一覧

e-Tax側のサポートに、他に関連付けをする方法がないか確認したところ、税務署で関連付けを行う方法があるとのことでした。
ただ、事前に準備されているかどうかを税務署に問い合わせてから行くようにとのことです。

一応は、これで確定申告は完了したのですが、来年以降もこの方式でできるかどうかが分からないので、少し不安です。

総務省の電子申請で思う

アマチュア無線技士を取得したので、先日総務省の電波関連の電子申請をマイナンバーカードで行いました。

総務省 電波利用 電子申請・届出システム

というのも、Liteと呼ばれるアマチュア無線専用のシステムもあるのですが、「申請してからIDと仮パスワードの到達までに1ヶ月ほど時間がかかります」というふざけた仕様なので、せっかくマイナンバーカードを持っているということで、通常版を使用しました。

ただ、Liteとの違いとして通常版だと「運賃着払いによる郵送」を依頼する項目がありません。
もしかしたら、別途問合せをすればお願いできるのかもしれませんが、恐らく項目が用意していないので、対応してくれない気がします・・・。

さて、通常版での手順の流れを簡単に説明すると、
1.【申請者】専用アプリをダウンロード・インストール
2.【申請者】専用アプリで電子申請を作成
3.【申請者】専用アプリで電子申請に署名、送信
4.【総務省】システムから電子申請の到達メール
5.【総務省】受付処理(内容の簡単な不備などを確認?)
5.【総務省】システムから電子納付(Pay-easy)の連絡メール
6.【申請者】電子納付(Pay-easy)
7.【総務省】審査処理
8.【総務省】審査完了
9.【申請者】総合通信局に免許状を取りに行く

この流れにもありますが、電子申請到達の連絡、電子納付依頼の連絡、不備の連絡などはメールで連絡がありますが、審査完了時の連絡はありません。

そう、何故か審査完了時にはありません。
自分で毎回ブラウザでシステムにアクセスして、申請状態を確認しないといけません。
「審査完了時ぐらいメール送ってよ」と思う次第です。

申請状況を審査完了に変更したことをトリガーにメールを送るだけの簡単なお仕事だと思うのですが、なぜか連絡してくれません。

(どうして総務省はこういうのが多いのでしょうか)

また、今回の場合は、申請日を含めて平日3日程度で審査が完了した訳ですが、他のページなどを見てみると1ヶ月ぐらい時間がかかるとあるので、恐らく業務量や技適マーク無しの従来品での申請などで違うのかなとも思いますが、まさか年内に来るとは思っていなかったので、少しびっくりしています。

ちなみにコールサインはJS2GQG(再割当て)を頂きました。

WordPress 5.0にUpdateしました

ということで、WordPressのバージョンを5.0にアップデートしました。

更新ページ

今のところは、特に不具合などは無いですが、
気になる点とすればエディタが英語のままな点だけでしょうか・・・

追記(2018/12/15):いつのまにやら日本語になっていました。

後は、ごくまれに入力を確定した文字がどっかに消えて、
何か別の文字を入力すると突然復活するという点は、おそらくバグ・・・?

編集ページ

とりあえず、様子を見ながら使っていきたいと思います。

※注記:バックアップはたいせつにね!

追記(2018/12/15):もうv5.0.1ですってよ、奥さん。