tech.guitarrapc.cóm

Technical updates

CircleCI Orb をいくつか作った話

幾つか CircleCI Orb を作っていたのですが、記事にしていませんでした。

どれも必要になって作ったもので、いずれもプロダクションで万単位で実行されれているのでいい感じで使えそうなら幸いです。

目次

TL;DR

  • NuGet Cache を制御するなら guitarrapc/nuget-cache
  • Shallow Clone を制御するなら guitarrapc/git-shallow-clone
  • Chatwork にメッセージを投げるなら guitarrapc/chatwork
  • CircleCI は、公式Orb でやっているやり方をドキュメントに反映してほしいです。Orbを初めて作るときに把握から始まるのは結構ツライ

Orbs とは

CircleCI は Job や Command にまとめていた処理を Orb として共有できます。

circleci.com

これって結構強力でいい仕組みで、Executor を含んだり含まないことができます。

  • CircleCI でYAMLが特定の処理のためにやけに長くなってしまった (Executor 依存がないとよりよい)
  • 特定の操作を行いたい

特定のシーンにスコープを絞れば Executor 依存してもいいし、特定の処理に絞って汎用的に使いたいなら Executor 依存しないようにするといいでしょう。

CircleCI でやっていこうと思ったら、何かしたいときは Orb をチェックするのは標準的に行うといい流れを作ろうとしているし、実際そうだと思います。

既存のOrbs で提案があれば適当にPR出したりもいいでしょう。 どのみち config.yml は公開されますしね。

tech.guitarrapc.com

公開したOrbs

3つ作って公開しています。

どれも当初は commands として定義していたのですが、ほかのプロジェクトでも使えるし公開しました。

guitarrapc/git-shallow-clone

https://circleci.com/orbs/registry/orb/guitarrapc/git-shallow-clone

git shallow clone をするOrb は実はいくつかあります。 有名なのは、ganta/git でしょうか。

qiita.com

しかしこれらのOrb はどれも Fork プロジェクトは考慮されていません。 また、GitHubや BitBucket が死んでることを想定していないので、案外失敗します。

guitarrapc/git-shallow-clone は、Fork プロジェクトにも対応しつつ、実際に頻繁に使っても問題ないまでブラッシュアップしてあります。

利用はいたってシンプルです。

orbs:
  git: guitarrapc/git-shallow-clone@1.0.1
version: 2.1
workflows:
  build:
    jobs:
      - git/checkout_shallow

keyscan_bitbucket と keyscan_github で、実際のリポジトリを keyscan するか選べます。 デフォルトは、鍵の更新がしばらくないのでハードコードしてあります。

depth と fetch_depth で、深さを指定できます。 Shallow Clone は、depth で 1指定しておいて、fetch depth では少し深く 5~10指定しないとブランチとかをいい感じで処理できないのでその対策も入っています。 clone時にsingle branchを使ってると気にせずにすむのですが。

clone を高速に終わらせて、汎用的に使いたいならお勧めです。 毎日結構な回数動いてて安定しているので、大概のケースでいけるかと。

この Orb はテストを書くのが面倒でしたが、ひとこねしたテストも書けるのは CircleCI 強かった。

guitarrapc/nuget-cache

https://circleci.com/orbs/registry/orb/guitarrapc/nuget-cache

.NET Core のビルドで困るのが、nuget package の restoreサイズは大きく時間がかかるということです。 別に一切気にしないという手もありますが、キャッシュしておくほうが爆速になるのでやるでしょう。

ただ、cache をするにはキャッシュキーを決める必要があります。 利用するパッケージに変更があったらキャッシュを切り替えたいわけです。 .NET Core なら csprojの変化を見るのが一番間違いがないでしょう。(Directory.Build.props は考慮したくないですね!)

guitarrapc/nuget-cache を使うと、任意のファイルを拾って md5 を取得してキャッシュキーに利用しつつ、cache のsave/restoreが可能になります。

想定している流れ場、nuget_cache/nuget_restore_cache して、dotnet restore してnuget_cache/nuget_save_cacheです。

orb でいい感じのキーで nuget-restore して、dotnet cli でdotnet restore するのはキャッシュがあれば秒で終わります。 キャッシュがずれていたら適切に dotnet restoreでリストアされるので、あとはいい感じのキーでsave してあげれば次回以降のビルドで生きます。

orbs:
  nuget-cache: guitarrapc/nuget-cache@0.1.1
version: 2.1
executors:
  dotnet31:
    docker:
      - image: 'mcr.microsoft.com/dotnet/core/sdk:3.1'
    environment:
      DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
      NUGET_XMLDOC_MODE: skip
jobs:
  build:
    executor: dotnet31
    steps:
      - checkout
      - nuget_cache/nuget_restore_cache:
          cache_key: test_save_cache
          project: nuget-cache-orb
      - run: dotnet restore
      - nuget_cache/nuget_save_cache:
          cache_key: test_save_cache
          project: nuget-cache-orb
          project_cache: false
      - run: dotnet build

シンプルですが、こういうのが適当にできるのがいいなぁということで作りました。 いろんなプロジェクト構成に対応できるように、cache_key や project、working fidrectoryや target file pattern も指定できるようにしてあります。

実際、外部リポジトリを使った複雑なプロジェクト構成でも機能しているのでだいたいうまくいくはずです。

guitarrapc/chatwork

https://circleci.com/orbs/registry/orb/guitarrapc/chatwork

Chatwork のルームにメッセージを送信します。 さくっとメッセージを送るだけなら、Chatwork API を使うのがいいでしょう。(こんなことで OAuthしたくない)

ということで、curl でサクッと送ります。

orb:
  chatwork: guitarrac/chatwork@0.0.2
version: 2.1
workflow:
  build:
    jobs:
      - chatwork/notify:
          message: Hello+Chatwork%21
          room_id: '12345'

環境変数 CHATWORK_TOKEN に API Token だけ仕込んでおけばサクッと使えます。 また、when に対応してあるので、「on_success 成功時 (デフォルト) 」、「on_fail 失敗時」、「always いつでも」の状況に合わせた送信ができます。

Orb を作る

基本は公式を見ましょう。

circleci.com

namespace とか、circleci cli の基本操作は沿っておく必要があります。

ただし、公式 CircleCI Orb はいずれもこの構成とはずれています。ひどい。 ということで、実際どうやって構成しているのかを把握します。

Orb の構成を把握する

Orb を使うのはともかく、作るとなると「作ること自体は簡単」です。 ただ、「テストやCI/CD」まで含めると面倒ですが、テンプレート化してしまえばあとは流れ作業で作れます。

このテンプレート化がドキュメントがなく、CircleCI 公式Orb でもどれもバラバラなので把握が面倒です。

公式を見つつどんな構造化把握します。

基本構造

公式Orbもそうなのですが、Orb のディレクトリは基本的に次の構造になるはずです。

.
├── .circleci
│   └── config.yml
├── LICENSE.md
├── README.md
├── src
│   ├── commands
│   │   └── your_command.yml
│   ├── examples
│   │   └── your_command.yml
│   └── @orb.yml
└── tests
    ├── your_test.yml
    └── your_test_n.yml

シンプルに、@orb.yml に全部定義というのもいいと思います。

github.com

.circleci

Orb自体のCI/CDは CircleCI 自身で行います。後述。

src/@orb.yml

Orb のDescription と依存する Orb などを書きます。

例えば、次のように書く

version: 2.1

description: >
  Build images and push them to the Amazon Elastic Container Registry.
  See this orb's source: https://github.com/circleci-public/aws-ecr-orb
orbs:
  aws-cli: circleci/aws-cli@0.1.13

Orbのページでは次のように表示されます。

実際のところ、@orb.yml じゃなくても orb.yaml で動作します。 私は orb.yml にしていますが、公式はみんな @orb.yml なのでそっちにしておけばいいでしょう。

src/commands/

commandsフォルダの中に置いたファイル名がコマンド名になります。 いいですね、この割り切り。

ecr-login というコマンドなら、ecr-login.yml というファイル名にします。

description: "Authenticate into the Amazon ECR service"

parameters:
  region:
    type: env_var_name
    default: AWS_REGION
    description: >
      Name of env var storing your AWS region information,
      defaults to AWS_REGION
steps:
  - run:
      name: Log into Amazon ECR
      command: |
        # aws ecr get-login returns a login command w/ a temp token
        LOGIN_COMMAND=$(aws ecr get-login --no-include-email --region $<<parameters.region>>)
        # save it to an env var & use that env var to login
        $LOGIN_COMMAND

すると、ecr-login としてコマンド定義が公開される。

src/examples/

コマンドのサンプルを定義します。 examplesフォルダの中に置いたファイル名がExample名になります。

なのでコマンドごとにファイルを用意したり、Workflow として一連の流れを定義したりです。

たとえば Workflow simple-build-and-push-image を定義して、それを Orb画面で simple-build-and-push として表示したいなら次の定義になります。

description: Log into AWS, build and push image to Amazon ECR

usage:
  version: 2.1

  orbs:
    aws-ecr: circleci/aws-ecr@x.y.z

  workflows:
    build_and_push_image:
      jobs:
        # build and push image to ECR
        - aws-ecr/build-and-push-image:

            # required if any necessary secrets are stored via Contexts
            context: myContext

            # AWS profile name, defaults to "default"
            profile-name: myProfileName

            # name of env var storing your AWS Access Key ID, defaults to AWS_ACCESS_KEY_ID
            aws-access-key-id: ACCESS_KEY_ID_ENV_VAR_NAME

            # name of env var storing your AWS Secret Access Key, defaults to AWS_SECRET_ACCESS_KEY
            aws-secret-access-key: SECRET_ACCESS_KEY_ENV_VAR_NAME

            # name of env var storing your AWS region, defaults to AWS_REGION
            region: AWS_REGION_ENV_VAR_NAME

            # name of env var storing your ECR account URL, defaults to AWS_ECR_ACCOUNT_URL
            account-url: AWS_ECR_ACCOUNT_URL_ENV_VAR_NAME

            # name of your ECR repository
            repo: myECRRepository

            # set this to true to create the repository if it does not already exist, defaults to "false"
            create-repo: true

            # ECR image tags (comma separated string), defaults to "latest"
            tag: latest,myECRRepoTag

            # name of Dockerfile to use, defaults to "Dockerfile"
            dockerfile: myDockerfile

            # path to Dockerfile, defaults to . (working directory)
            path: pathToMyDockerfile

Orb画面は、simple-build-and-push とファイル名になります。

tests

テストを定義しておきます。

ここは CircleCI 上で解釈されて実行されるので、いい感じにファイルを置きます。 もちろん CircleCI 上で config.yaml を走らせることもできて、その場合はconfig.yaml の記法に沿っておく必要があります。

公式Orbは案外tests フォルダを持っていないのですが、devに挙げたorbで挙動をテストするようにしています。

testsフォルダを設けている例として、mafuyuk さんや私のOrb を例にします。

github.com

github.com

例えば、mafuyuk/terraform-orb は terraform 操作を行う Orbです。 その test.yml は次のようになっています。

  version: 2.1

jobs:
  build:
    executor:
      name: terraform/default
      tag: 0.11.11
    steps:
      - checkout
      - run:
          name: Create Sample Terraform
          command: |
            mv test/backend.tf backend.tf
            mv test/main.tf main.tf
            mv test/provider.tf provider.tf
            mv test/variables.tf variables.tf
#      - terraform/init
#      - terraform/plan
#      - terraform/apply:
#          use-plan: false

コメントアウトされていますが、ニュアンスはわかります。

テストのときは、cache のようなファイル操作ができないのは circleci cli の制約を食らうのでそこは注意です。 なんだそれ感はある。

もし、外部リポジトリをクローンするなどSSH Key を渡したりといった込み入ったことをする必要があるなら、こっちのOrbが参考になるでしょう。

github.com

ポイントは、テストをどう走らせるかです。

  test:
    # ref: https://github.com/ganta/git-orb/blob/master/.circleci/config.yml
    # Workaround for passing a SSH key with orb-tools/local-test-build command
    # https://github.com/CircleCI-Public/orb-tools-orb/blob/330d11bb0cdef3c2f24cb4e2c595ca01e55bfd8c/src/%40orb.yml#L107-L134
    commands:
      local-test-build:
        parameters:
          path:
            type: string
        steps:
          - run: cp << parameters.path >> tmp-config-src/config.yml
          - run: mkdir -pv $(dirname tmp-config-src.yml)
          - run: circleci config pack tmp-config-src > uncompiled-config.yml
          - run: cat uncompiled-config.yml
          - run: circleci config process uncompiled-config.yml > config.yml
          # Cannot access "~/.ssh" from working directory.
          # pass spin up env's CIRCLE_TAG to local circleci command.
          - run:
              command: |
                cp ~/.ssh/id_rsa ./id_rsa
                circleci local execute --checkout-key ./id_rsa -c config.yml -e CIRCLE_TAG=${CIRCLE_TAG} | \
                  tee local_build_output.txt /dev/stderr | \
                  tail -n 1 | \
                  grep "Success"

Orb のCI/CD をする

Orbを作ったら、それをいい感じでCircleCI 上で Orb のCI/CD をしたいでしょう。

CI/CDでは当然、Orb のLint、テストをしたり、Orb Dev に挙げて動作を事前テストしたり、Devから Production に Promote したりしたいです。 Promote はGitHub Tag に準じるといいでしょう。

つまりこれ。

  • CircleCI Orbで提供する処理を定義する
  • CircleCI Orbで何ができるのかDescriptionやExampleを定義する
  • Orb のCIを行う
  • Orb のDevへのCDを行う
  • Orb のProduction への CD (Promote) を行う

CircleCI-Public/orb-tools-orb

Orbリリースをするためのツールとして CircleCI が用意しているのが CircleCI-Public/orb-tools-orb です。

github.com

これを使うと、YAML のLintチェックから、パッケージング、テストの実行、GitHub Release 連動、DevへのCD、ProductionへのCD まで一通りできます、便利! ドキュメントがなく Example だけで動作もわかりにくいですが、がんばれ。

qiita.com

9.x 系

orb-tools-orb ですが、9.0.0でコマンドを悉く変えています。 9系はコミットでの制御に切り替える方針に伴って破壊的変更をしていて、コマンド自体が消えたりパラメーターが丸っと変わっています。

9.0.0 をやってるケースもあるので、気が向いたらあげよう。

qiita.com

CircleCI 公式の各種Orb は8.27.3 以前のバージョンで止まっていたりします。 対応確定するまでは 8.27.3 をターゲットで私は書いています。(8.27.6時点でもうダメだったりする)

基本的なパターン

公式Orb を参考にするといいでしょう。

circleci-orbs/config.yml at master · CircleCI-Public/circleci-orbs

slack-orb/config.yml at staging · CircleCI-Public/slack-orb

aws-ecr-orb/config.yml at master · CircleCI-Public/aws-ecr-orb

8.27.3 をターゲットにします。

定義

公式Orb 各種がそうですが、概ね次の流れです。

slack-orb/config.yml at staging · CircleCI-Public/slack-orb

lint_pack-validate_publish-dev

PR へのプッシュでトリガーします。

  • orb-tools/lint
  • orb-tools/pack
  • orb-tools/publish-dev
  • orb-tools/trigger-integration-workflow
  • orb-tools/trigger-integration-workflow

integration_tests-prod_deploy

テストはintegration タグやmaster-タグでトリガーします。 dev-promote-prodは、各種master-patch / master-minor / master-major のタグでトリガーされます。

  • 各種テスト
  • orb-tools/dev-promote-prod (patch)
  • orb-tools/dev-promote-prod (minor)
  • orb-tools/dev-promote-prod (major)

挙動は config.yaml だけ見ても全然分からず、動かしたりCircleCI-Public/orb-tools-orb をみるしかないでしょう。

リリースの流れ

PR を作って、CI と dev への CD が走るので通るのを確認、でマージすると Orb にpush されます。

Renovate を使うという手も。

www.kaizenprogrammer.com

Orbのテンプレートにする

適当に guitarrapc/chatwork-orb あたりはシンプルなのでテンプレートにしやすいでしょう。

github.com

Orbのnamespace を用意したら、これを fork したり適当にベースにして、OrbのコマンドとExample と orb.yml を変えてテスト書けば行けるはずです。(orb名やテストの置換はしましょう)

TIPS

既存の Orb で時々使いにくいやつがあるので、そうならないようにメモ。

  • Jobとしての提供なら、Orb でExecutor 指定しよう
    • 案外こういうのは多いので、どう使いたいか次第でまず決めるといい
  • Stepsとしての提供なら、Orb はなるべく依存小さくするほうがいい
    • Bash依存とか避けたほういいのは間違いない
    • コマンドある前提で組んでしまって、コマンドないならサクッとエラーになるのでユーザーに任せるほうがユーザーにとっても幸せ

REF

qiita.com

www.kaizenprogrammer.com

sue445.hatenablog.com

2019年を振り返って

毎年やっている昨年の振り返りをしてみます。

2018年はこれ。

tech.guitarrapc.com

目次

総合

2019年の初めにこう書きました。

会社としては、2019年は作りたいサービスを形にして何本かリリースするため働き方をシフトします。*8 個人は、会社のサービスリリースと収益化です。注力する言語的にはC# / Golang 、ツールはTerraform + Kubernetes + GCP/AWS/Azure + Unityです。

2019年は2018年より、さらに(自他に)求められるレベルが高くなっており、天井知らずを感じつつ楽しみたいと思います。

2019年は想定に基づいて働き方をシフトを進めました。 が、想定よりもクライアントとの密着した動きが必要になってしまって、結果そっちにフルコミットしていました。 つまり、サービスリリースのための余力0でそっちに全振り。 個人の目標からは乖離しておりよくない、けど経営計画で予想していた結果の1つで、途中でこっちに振ったので納得はあります。

今年は夏から完全にサーバーサイドに振っていて、Kubernetes での構築に完全シフトでした。前半はHoloLens、Vue.js に携わっていました。 サーバーサイド/インフラは、C#/Kunernetes が主で、おもにAWSがほとんどでした。2018年とは全然違う動きになったのですが、私のスキルがそっち側に伸びているので、まぁそんなものかと。一年を通して幾つか感じましたが、Kubernetes むずかし、たのしいのでよしとします。

2019年は、わからないことへの挑戦がかなり多く、知ってることの応用はあまり利かず前提に過ぎない状況をよく感じました。 もともと挑戦が多いのですが、結構苦しんだ感覚があります。

経営

会社としては、OSS は1つだけです。 会社としてメンテするもの、というのを公開していく方針なので来年はもう少し増やしていきたいので、増やせるように努力しよう。 サービスは後は実装なので、粛々と書きます、考えます。

一年を過ぎたので、税、会計回りも一通りすぎました。 経理、会計が税理士先生のおかげで負荷小さいので、感謝しかないです。 引き続き法に則って粛々と進めたいところ。

弁護士先生とのやり取りを通して、弁護士って法に基づいてうまく振る舞う方なのだなというのは少し面白かったです。 公正ではなく、利益を追求する側の人間なのは、なるほどそういうものかという気づきがありました。

興味深かったのは、中小企業庁の動きでした。 消費税増税で、転嫁拒否に対する法律上問題ある行動の有無に関して調査票が来たのですが、素直にうれしかったです。 弊社のお客様にそういった動きはなくスムーズに移行したのですが、転嫁拒否に対する是正の姿勢を見せてもらえるのは、経営者としてはうれしいものがありました。

プログラミング

2019年は、C# がかなり多かったです。 また、Terraform を普遍的に広く使うことが多かったものの、後半ではPulumi の調査と投入をしていて、AWS CDK よりいい感触でした。 Pulumi dotnet Advent Calendar やってましたが、Pulumiの利用悪くない感じがあります。

Pulumi dotnet Advent Calendar 2019 - Qiita

GitHub コミットは、ほどほどにこんなものでしょう。GitHub じゃないコミットが見えないので、少なく感じますが。

2019年GitHub コミット

なんか CircleCI 対応や Docker イメージの公開が想像の倍以上行うことになって、ひたすら必要な部品を作っては組み立ててました。

CSharp

お仕事でやっていた HoloLens + Unity でのお仕事が一通り構築してリリースを迎えられたのはよかったです。

C# はUnityを除き .NET Core のみでした。後半は、 .NET Core 2.1/2.2 を .NET Core 3.0/3.1 に対応とかありましたが、幸いコンテナ化していたので何も問題なく進んでよかった。

Serverless から一番遠ざかった年だったかもしれない、というのもたいていのものを ECS Faraget/Kubernetes 側に振ったというのもあります。 デプロイ、監視を含めた全体の流れからすると、Serverless を選択しない選択が結構増えました。 自分の会社では選ぶんですが、お手伝い先では選ばないということが結構多かったです。

C# のビルドは、割り切った結果、あんまり頑張らない方向に倒してうまくいっています。 dotnet CLI 的には頑張りようが小さいので、そこで外から頑張るよりは頑張らないように済む方向に。 UWP から離れたというのが大きい気がしますが、.NET Framework で SDK Style の csproj をハンドルできることに気づいたのがよかったです。

シングルバイナリは来ました、案の定CI/CD、コンテナでいい感じでした。 ただ、リフレクションは結構鬼門でリフレクションするならランタイム込みでビルドしても動作環境にdotnet ランタイムは必要。 リフレクション、明らかに使う機会はちょくちょくあるけどアプリの動作環境的には年々厳しい制約になりつつある気がする。

あとシングルバイナリでも .NET Core のICU はめんどくさいです。Invaliantでない限りは .NET Core は ICU ライブラリに依存してグローバリゼーション対応しているので仕方ないのですが。 これは Microsoft Docs にも載っていますが、実際にコンテナ回りでの動作を組むときに思ったよりツライ。

.NET Core アプリケーション展開 - .NET Core | Microsoft Docs

C# なんか年々難しい度が上がってるので、がんばろ。

CircleCI で感じるんですけど、C# というか dotnet CLI の Linux での操作なんか面倒、というか癖強い。

Golang

書くより読むことが多かった。 1つ必要だったのを書き上げましたが、素直だなという側面と書きにくさも感じるのでもうしばらく慣れまで必要そう。

VSCodeで書いててつらかったので Goland 入れました。

自社の言語は Golang を選んでいます。 しばらく自分の言語は二軸になりそう。

PowerShell

クロスプラットフォームで動く PowerShell Core とは裏腹に、お手伝い先で書く機会はなるべく減らしほぼ0にしていました。 なるべく選択に入らないようにしていたというのもあります。 代わりに Bash、C#を多く選びました。(可能なところなら Golang を選択しました)

これはアプリケーションエンジニアが同じものを触るときに、いかに違和感すくなくするかを考慮した結果です。 正確に言うと、アプリケーションエンジニアというよりPowerShell に興味がない人が、です。 PowerShellで書くだけで、そこに触れたくないという意識が働くケースをこれまでも多く見ていたので、なるべくその意識を起こさせたくなかった。 案の定、予想していた状況に近づいているので、選択はずれてなかったように思います。

個人では書いていて、guitarrapc/ScoopPlaybook や guitarrapc/dotfiles-win/setup.ps1 で使っています。 dotfiles-win のセットアップは、guitarrapc/dotfiles/setup.sh で書いたBash の動作を PowerShell で忠実に再現したものなので、書いてて面白かったです。

PowerShell 実践ガイドブックは、おかげ様で第三版まで重版されました。 次の機会があれば、PowerShell 7対応かな。

海外のコミュニティを見ていても、PowerShellではないコミュニティを見ていても、PowerShell 7になってもWindowsがない環境で標準的に使われることは恐らくないのだろうと感じます。 Windows では標準的な位置づけでいいのですが。 素直に「組み込みにくい」のは最大のハードルであり続けるのでしょう。

ShellScript

思った通り多かった、多くしました。 macOS だけ挙動が違うコマンドがところどころ出てくるのがうざいのですが、シカタナイ? もう少しコマンドのシミュレート、変換がいい感じにできないかなぁと思いつつ、粛々と書いています。

インフラ

お手伝いはこれが多かった。 Kubernetes 回りを組んでいます、ECS ともちょくちょくバトルしていました。

ECS は Mutlti Target Group サポートが来てだいぶんよくなりました。 しかし Code Deploy がひたすらツライ、Code Pipeline もアレですが、Code Deploy やばい、使いたくない、頑張って使ったけど、Kubernetes にたおす過程で使わないようにした。

Kubernetes はClient APIに手を付けていますが、仕様の変更の影響受けやすくて、うーんという感じが。 幸せになる世界はまだ先な感じがすごいある。

Terraform

Terraform は一度組んでおけば、結構使いまわし聞くのでそこはよかったです。 特に Terraform Cloudが来て Atlantis も使わずいい感じで管理できるようになったので、よかったよかった。

0.12 はすぐに対応したのですが、なかなかはじめのバグり方が盛大でさすが HashiCorp、引き続き警戒が必要という感じがあります。 とはいえ、Terraform Cloud の動きを見ていても、0.12 の後半のアップデートを見ていても少しずつ期待する方向に向いてきた気配もあるのかな。

Pragmatic Terraform on AWS がいい本でした。いくつか気になる内容はあるものの、概ね同意。

Pulumi

Terraform 以外の選択肢としてみてた時にちょうど GA してたので、検証から投入までしました。

結論からいうと使える、けどその言語で書かれているからと言って読めても意味は読めないというのは間違いなくあります。 AWS に限らず、GCP やKubernetes でなんでこういうリソースが必要なのか、こういう組み方が必要なのかはコードで読めても、リソースの意味や制約を知らないとできないようにです。

C# は今年GA なので、別State 参照が来たらオススメしてもいいかなぁ。 Provider を複数持ってもいいけど、別State はほしいかな。 チームで使うには高いので、なんかそこがずっとハードルになりそう。

Terraform から移行もしたのですが、移行するかどうかは Pulumi で、その言語で書きたいかに強く依存しそうです。 言語のとっつきにくさが消えるのはめちゃめちゃいいので、価値はあります。

Pulumi、公式ページが最大のリファレンスで特に .NET に関しては全然いないので頑張るしかない。コミュニティの規模はかなり小さいですね。

Kubernetes

ECS との選択、Kubernetesでの運用を考えた時に、実際にKubernetesでいくぞにするためにずっとやってました(ます)。 小さいチームだからこそ選択するという選択をしたのですが、結果は2020年に出るので引き続き正面から取り組みます。(つまり2019年初とは逆の判断をした)

しかし分散は得意だけど、特定の一台への接続を制御しようとすると工夫を凝らす必要があるので、そこはまだ頑張るしかない感触。 Agones を今のコンセプトのまま、ほどほどにいい感じで使えるように組んでいます。

比較的 Helm よりも Kustomize に振っています。

Kubernetes 完全ガイドが本当に良書でよかったです。

記事

78本、久々にちょっとはかけました。 Pulumi dotnet Advent Calendar で盛った感はあります。

C# が意識して多めです。 お手伝い先ではザクザク書いているのですが、手を動かしつつなので記事にするほどまとめてないというのもあり結構ブログに書こうとまでならないのですね。 2020年も同程度を維持したいです。

ライフスタイル

徐々に改善が見えてきましたが道は長そう。

睡眠時間が年間平均3時間14分と4分伸びました。11月、12月は4時間と伸びているのでちょっとずつ調整しています。 6時間寝るとかなり快適なのは前々からわかっていても達成できていないのですが、少しずつ意識的に週の中頃などに8時間程度寝れないか試みています。

ランチは抜くと夕方ごろに集中力が持たなくなってきたので意識して食べるようにしています。 糖質は意識的に少し差し引きつつ、たんぱく質でおなかに入った感じがあるように。

「個人に依存することはエンジンがかかるのが遅い」課題はなかなか解消できてないものの、すぐにやらなくても予め開いておくと手を付けやすいので意識的にそうしています。 個人に依存しないことは、Google Calendar でこまめにスケジュールに組むことでうまく維持できているので、どうやら自分に興味がないっぽい。

集中って私は最も大事なことと考えています。 で、見直した結果、椅子に座っててツライと感じるシーンがあったので先日7年ぐらい使ってたエルゴヒューマンを、アーロンチェアリマスターに変えました。 椅子って結構影響あるんですね、アーロンチェアの座り心地があってて結構集中しやすくなった感じがあります。 座り心地がいいというか、座っててつらくない、しっかり前を向ける。

最近は考え方を短いスパンで変化させることを意識させるようにしています。 結果として、数日前と言ってることが全然違っていたりするのですが、それでもいいとみなすようになったのは少し変わったかもしれません。

ゲーム

たまにはゲームのことも。 2020年のFINAL FANTASY7 REMAKEを楽しみにしています。(振り切るのか、考慮するのかが一番の注目として)

スマホ

モンストが好きで結構ずっとやっているのですが、ドラクエウォークが出てからこっちにシフトしました。 全キャラ全職業のレベルが50を超えたので、55の旅をしていて二週目。 冒険者レベルも50になって、お出かけレベルしか残ってないのでそろそろ何かこないかな。

マリオカートは相変わらずの任天堂な施策で、結構興味深く週一ぐらいで開いてはプレイしています。 任天堂のゲーム設計、運営って素直にすごいと思います。

Nintendo Switch

今年は、Nintendo Switch の利用が多かったです。

ゼルダの伝説夢を見る島は、小さいころにやったゲームでしたがリメイクを楽しみにやりました。2Dをスイッチでどう再構築するかが楽しみで、実際すごかった。 案外覚えててサクッとクリアしてしまったのですが、ハードモードむずかしいのでよいですね。 ただコントローラーのボタン配置は、やはり厳しいものがあって、Yで攻撃はやめてほしい感じがあります。どうしてこうしたんだろう。

Blood Stained が出たのでやってて案の定面白かったです? バランスが相変わらず壊せるので、終盤に行くほど楽になってしまうのも含めてまぁいいのでは。 結局銃最強だった。(終盤しか使わない)

PS4

ドラクエ11をやり忘れていたのでクリアしました。ドラクエは新しいタイトルほど面白いのでいいですね。一番面白かった。

そういえば私はFF15 が好きなんですが、売り上げ、本数が最も少ないのはゲーム性がどんどん変わってて、プレイヤーが置き去りになってるのかもなぁとドラクエをしていて思いました。(ドラクエは根本が変わってない) 私は新しい体験が好きなので、方針に共感はするのですが。

新サクラ大戦は年末やっていたのですが、二の次なのでまだクリアしていません。3D になったのはいいとして、戦闘回りがただの無双になってて本当にこれでいいのか? という感じがあります。

DEATH STRANDING を次にやりたいけど、まずクリアしてから予定。

Steam

Cities: Skylines をちょこちょこやってました。 楽しいけど、やっぱりシムシティ系なので時間をそこまで費やせない(費やす選択をしない) ので、むずかしい。

2020年は?

C# + Golang + Kubernetes + Firebase あたりが注力ポイントです。 サービスリリースと収益化をがんばろう。働き方のシフトよりも頑張りポイントのシフトがよさそう。

分からないことたくさんで人生飽きないな。 できることを1つずつ増やしていきます。

Wi-Fiを Amplifi HD に移行した

最近やってよかったことの1つが、Wi-Fi を入れ替えたことでした。

何がどう変わったのか残しておきます。

目次

TL;DR

  • Amplifi HD、日本ではまだ出荷可能になったばかりですがいい感じでおもしろいし安定はしてる
  • 外出先からアプリで設定変更したり通信テストできるのは人権
  • ミニスクリーンに現在の通信状況が可視化されるのは本当にいい、最高
  • タッチでWPSを有効にできたりするけど、WPS今どき機器がなくていらない感

Wi-Fi をどれぐらい使っているのか

私の環境は 100% Wi-Fiです。 唯一LANを使っているのは、Hue Hub と Yamaha RTX810 - Wi-Fi AP の間のみです。ただ、これも同一ボックス内LANで結んでいるので目に見えません。

私が有線を廃止してすでに5年経ちました。 有線は高速でいいのですが、ケーブルをどこまでも減らしたい気持ちが強くネットワークは無線を前提にしています。 常にWi-Fiが稼働するので少しの問題でもすぐに気づいたり手を打つ気になるので、「普段からドッグフーディングする」方針とよくマッチしています。

常時Wi-Fi で問題になるのが、通信の安定性です。 私自身、安定性が最優先、速度はその中でかのなかぎり高速にという方針ですが、案外これが満たされません。 速度が出ても、不安定なAPが多いのが残念です。 色々なメーカーや機器を試した結果、3年前の時点では最終的に Aterm が安定していたのでこれを使ってきました。

子機となるデスクトップはASUS PCE-AC88 を使っています。 多くのWi-Fi拡張カードはWindows 10 の起動時やドライバー問題が多く Intel もそれは同様でしたが、PCE-AC88は安定したドライバーと速度が両立していてとてもいいです。

PCE-AC88 | ネットワーク機器 | ASUS 日本

動機

Atermは長年変化がなく面白くないWi-Fiです。

  • 管理画面がWebのみ
  • Webの管理画面の変更の変更に都度時間がかかる + 再起動が毎度求められる
  • 同一ネットワークからのアクセスしかできない
  • 規格が古い

通信が安定していてよいのですが、さすがにここまで進化ないのは飽きたので変えます。

選定基準

条件を満たすものを探します。

  • 面白そうなやつ
  • アプリでの設定を前提にする
  • メッシュ対応
  • TP Link、Synology、ASUS は避けたい (尊敬するエンジニアがツライいってる....)
  • Buffalo は避けたい (良かったことがほぼない)

一方であればいいけどなくてもいい条件も定めます。

  • Wi-Fi 6 (あればうれしいけど)
  • WPA3 対応
  • トライバンド
  • IPoE 対応 (ルータがあるのでそっちで対応する)

価格は Nest Wifi 基準で20000円前後で探しましょう。

候補の絞り込み

いい感じのメッシュルータの一覧はありますが、これだけだと選びようがないのでスペックや利用感を調べて絞ります。

日本で入手できるメッシュWi-Fiシステム19種+2の比較【2019年12月】 | 24Wireless

  • Nest Wifi (Google)
  • Orbi (NetGear)
  • Velop (Belkin)
  • Sila (Razer)
  • Amplifi HD (Ubiquiti)

Nest Wifi

Nest Wifi - 高速で快適な Wi-Fi ネットワークをご自宅で - Google ストア

Google Wifi よりは面白そう。 見た目はつまらないけど、ほしい機能は一通りあるしまぁよさそう。 ただ、Google のアプリ微妙で好きじゃないので、「最悪これ」という位置づけ。

Orbi

RBR20 - AC2200 OrbiトライバンドメッシュWiFiルーター | NETGEAR

RBK20やRBK50、AC3000とか面白そうだけど、サテライト経由で不安定になるのが微妙そう。 2018年と古い。

なし。

Velop

Velop Whole-Home Mesh WiFi

機能は全部満たしてそう。 2018年と古い。ちょっとお高め。

なし。

Sila

Gaming Router - Razer Sila

4万円台で利用者が少なすぎ (情報が全然ない) 、見た目がつまらない。

なし。

Amplifi HD

AmpliFi | Faster, Whole-Home Wi-Fi

比較表で不明だらけで逆に興味深い。

Ubiquitiが出している個人向けのメッシュルータが Amplifi シリーズです。 一方で、企業向けのシリーズがUnifi で、こちらのほうがピンと来る人もいそうです。

他のメーカーと違ってディスプレイがあり、タッチ対応で通信状況とか見れます。 StackOverflow の中のエンジニアとかが使ってて、いい感じそうです。

日本で試せないかと思っていたら発売もしているし、Amplifiよさそうとはじめから前向きになれます。 サイトを見るとAmplifi Alien が出たばかりです。スペック、見た目からして面白そうなのでこれをしたいところですが、日本ではまだ取り扱いないので Amplifi HD とします。

購入前の機器判断は公式が提供しています。

AmpliFi Help

スペックはPDFで公開されています、内容は雑です。 Dual-Band、SU-MIMO(3x3 Chain, 18)、5Ghz で1300 Mbps、2.4GHz で450Mbps はあります。 MU-MIMO がないんですが、Amplifi Alien が対応しているのでいずれ載せ替えたいところ。 とはいえ、デバイスが 15台なので今のところは特に影響も感じず問題になっていません。

PDF: AmpliFi Datasheet

Unifi もどこかで試したいですね。 企業でのWifiも今ならUnifi が選択候補に入れたいところで、Yamaha などはそろそろ古い感じが半端なくなってきました。

AmpliFi vs. UniFi Review and Comparison [December 2019]

Amplifi HDを設置する

日本向けストアがあり、日本国内から発送されます。

AmpliFi HD Mesh Router – store-ui-japan

2日でさくっと届いたので、開けてみます。 ディスプレイからもわかりますが、見えるところにある前提のルータです。

開封

設定をしていきます。 ルータがすでにあるのですが、ルータからのLANは Amplifi の WAN に刺します。

デフォルトではDouble NAT になりますが、構成後は設定で Bridge に変更できます。

既にルータがあるので Bridge に変更していますが、Double NAT でも特に速度低下が顕著ではなかったので気づかず使っても大きな問題にはなりにくいでしょう。 ただし、ルータとして利用しているときに使える Teleport という簡易VPNは使えなくなります。 ルータある環境でこの機能いらないからいいんですけど。 https://help.amplifi.com/hc/en-us/articles/220979347-Enabling-Bridge-Mode

設定はアプリやWebから行えますが、基本アプリになるでしょう。 Web画面 はIP か http://amplifi.lan/ でアクセスできます。(Bridge だとIPのみになります。)

ユーザー認証をして、SSIDを設定すればもう使えます。

5GHz、2.4GHz で同一SSID が利用できるので、基本Wifi接続は一本化されます。 SSID を分離もできますがしないほうがメッシュではいいでしょう。

Guest Wifi も設定可能なので、必要な時だけ有効にすればWifiを提供するときに便利。

WPSも可能です、タッチスクリーン長押しでWPS有効化ができるのは面白く便利感あります。(WPS使わないけど)

アプリはユーザー認証するので、外出先からでも設定できます。

Wifi一覧

外出先から設状況が確認できるのはうれしみがあります。

設定

デバイス一覧

今どきのメッシュルータっぽく、速度検査もアプリからできます。

ステータス

速度検査

クライアント1つ1つの接続状況をアプリで確認しつつ、接続の一時停止もできるのでケイオスモンキーになりきることができて便利。

タッチスクリーンからは、時計、通信量、リアルタイム通信状況、ポート状況などが確認できます。 Night Mode があり、特定の時間はLED をオフにできるので、夜でも目に優しい。

通信量

通信状況

ポート状況

もともと集合住宅のインターネット回線で、下り100Mbps 程度なので速度も特に低下なく過ごしています。 そろそろ IPoE に切り替えよう。

REF

2019年に使ったサービス

2018年から2019年でどうなったのか見てみます。 今年は一個一個のサービスにコメントせず、変化あったやつや新規とかのみで。

tech.guitarrapc.com

基本方針は変わりません。

  • 有料・無料で同一程度のサービスがある場合無料のものを選択する
  • 有料のサービスはサブスクリプションで、月ベースでのみ使う

目次

有料

既存のサービスの利用方法が微妙に変わってきました。

サービス名 価格 種類 タイプ 用途
AWS $4.64/month クラウド 継続 Route53 / Lambda / S3 / KMS (2013年~
Amazon Prime \4900/year 買い物 継続 ネットショッピング、3900円から値上がりした (2014年~
GitHub Pro $7.00/month DVC 継続 Protected Branch を含めた有料機能 + コントリビューター3名を超えるため (2013年~
GitKraken $49/year Git GUI 継続 macOS/Windows両方で利用 (2016年~
G Suite Basic \600/user/month オフィス 継続 Gmail / Group / Calendar / Drive & Document / Photo (2013年~
Jump+ \900/month 雑誌 継続 アクタージュ他が面白くて継続 (2016年~
Udemy コース次第 スクール 継続 技術系の動画スクール。微妙 (2017年~
はてなブログ \8434/year ブログ 継続 今使ってるマネージドなブログサービス (2013年~
マガジンポケット \840/month 雑誌 継続 ブルーロックが面白くて継続 (2018年~
Money Forward \500/month 家計簿 継続 キャッシュフロー管理 (2018年~
Unity Plus \4,200/month 開発 継続 開発環境 (2018年~
Open Collective $5/month 開発 継続 UniRx の支援 (2018年~
GCP \0/month クラウド 無料->有料 開発環境 (2016年~
Azure \0/month クラウド 無料->有料 AzureFunctions / AppService / AKS メイン (2015年~
Apple Music \1,480/month 音楽 新規 ストリーミング (2019年~
Goland \22,900/year 開発 新規 Golang 開発用に

AWS

Oragnization を分離して色々やってます。 課金増えてるのはKMSです、何気にRoute53 より多くて最もコストがかかる。 また、Cloud Formation でリソースを実験してた時にボリュームが残っててずっと課金されていたのにさっき気づきました、Cloud Formationやっぱりつらい。

Udemy

Udemy ほぼ見なかった。 本をメインで読んで、ずっと書いてたのですが、うーん、見るものか悩ましい。

はてなブログ

カスタムドメインのため Pro を1年更新で使っています。 2019年は多めに記事を書いてみました。 サイトはシングルカラムに移行しました。記事だけ読みやすければいいのですが個人的には読みやすくなった。 あとクッキー表示回り仕込んでおきました、これは今後来そうなので先回り。

Qiita の云々ではないですが、自分のブログを持っているのはやはりよいものです。 とはいえ Wordpressなどを構築、保持したく、適当なジェネレーターもあんまり好みでないので悩ましい。 Medium もなし判断なので、さて。

Money Foward

Zaimより圧倒的にいいです。 出費はクレジットに集約して、現金は細かくハンドルしない方針にしているので出費計測が本当に楽です。 現金はそもそもめったにないので、もうこれでいい感じ。

ただ、某銀行がChrome拡張でログインをはじいてブロックされることが多発するのでちょっといい加減銀行変える方針。

OpenCollective

去年書き忘れてましたが、UniRx の支援に使っています。 さて、今なら GitHub Sponsers あるしそっちにしたほうがいいのでは説が.... リリース情報も同期しないので Open Collective だけ見て伝わらないのはないかなぁ。

GCP

無料枠なくなって有料

Azure

Subscription 切れて、Visual Studio もMonthly なので課金になってしまった。

Apple Music

iTunes で買っていたのですが、Android でも使えることを知ってそろそろいいかなと。

実際、映画見たあとにそのサウンドトラック聞いたりが楽になったので今のところよい感じ。

Goland

VSCode で書くのに疲れました。 JetBrains IDE ちょくちょくうーむってなるものの、便利。

買い切り

サブスクリプションではない買い切りです。サービス以外にアプリやハードもあります。実際のところ書いていないハードは他にもありますが、開発と関連するところはこんな感じで。

昨年からの継続が混じっています。

サービス名 価格 種類 タイプ 用途
Flawless $35/買い切り 開発 継続 iOS開発アプリ (2017年~
Genius Productivity Bundle $8.99/買い切り PDF取り込み 新規 スマホでの事務処理アプリ (2018年~
Charles Proxy \1080 / 買い切り 開発 継続 iPhone でのプロクシ解析アプリ (2018年~
Tile \3,110/個 スマートタグ 継続 なくしたくないもののGPSトラッキング (2018年~
Google Home \15120/個 スマートスピーカー 継続 ok, google (2018年~
Apple TV 4K \19800/個 リモートディスプレイ 継続 macBookの映像だしたりAmazon Prime Video
YubiKey 5 NFC \6700/個 2FA 新規 FIDO U2F対応しているサービスは一通りYubikey に変更 (2019年~
Roomba e5 \54000/個 掃除機 新規 掃除して (2019年~
Google Nest Hub \15400/個 スマートスピーカー 新規 ok, google (2019年~
Switch Bot \3,980/個 IoTハブ 新規 (2019年~
Switch Bot 温湿度計 \1,980/個 IoTハブ 新規 温湿計(2019年~
Amplifi HD \18,398/個 Wifi 新規 メッシュ (2019年~
Yamaha YAS-109 \22,357/個 SoundBar 新規 PCスピーカー (2019年~
Anker PowerWave 10 Dual Pad \3999/個 Qi 充電 新規 充電パッド(2019年~
Philips Hueモーションセンサー \4165/個 Hueトリガー 新規 Hueをセンサーで駆動 (2019年~
Philips Hueライトリボンプラス スマートLEDライト \9269/個 リボンライト 新規 興味あったので試した (2019年~

機器の購入ちょこちょこしてました。 特に身の回りの連動回りの更新で、2018年よりだいぶんよくなったので次はどれに手を付けようかなぁ。

Apple TV 4K

結構自然に使うようになってきたようです。 ほっておいても活用していたので、生活の一部に入ったようでよかったよかった。

Yubikey 5 NFC

FIDO U2F にしたかったので。 冷静に考えて NFC が iOS で利用を想定したアプリなくて意味ないと思いきや、 iOS13.2 で対応来るのでそろそろ iOS アップグレードするか。

FIDO U2F が一個しか登録できないサービス多すぎでは。 あと Windows Hello も連動しないので、これは引き続きカメラでログイン。

Roomba e5

そろそろ入れようと思って買いました。 掃除機をどれぐらいかけたいかって人によって違うので、普段から勝手にきれいになったほうが平和なのです。

ごみのたまる量を見ていると案外たまる.... のでよかったよかった。 水洗いできるのも結構うれしいです。

Google Nest Hub

Google Home 使ってて、料理のアラームによく使うのですが、後何分!?っていうのがいちいち聞くのも面倒でどうしたものか。 だったのが、可視化されるようになってさっそく役立ちました。(おでん作った

複数人にアドバイスもらって、まさにその通りだったので私もオススメ。 正直 Google Nest Mini とか Google Home 買うなら、Google Nest Hub を買ったほうがいいです。(重いので落ちないようにできないならやめたほうがいいです

Switch Bot & Switch Bot 温湿度計

Nature Remo のYAS-109 接続との競合問題で、どうにも我慢できずもはや Nature Remo から変えるのが適切と判断しました。 温湿度計は、温度と湿度が簡単に見れるようになる + アプリでもよく見えるところに可視化されて経過も確認できるのがいいです。

ただ、Nature Remo のカスタムボタンのような利便性がないので、よくなるとうれしいです。

Amplifi HD

これまで Aterm 使っていたのですが、そろそろ面白いWifiにしようと思って変えました。 記事は別途。

Bridge 接続することで Double NAT を起こさないようにもできるのでいい感じ。

Yamaha YAS-109

今まで使っていたスピーカーをほかに移したのでサウンドバーにしてみました。 が、Nature Remo とアプリが競合でうーん。

さらに、Bluetooth がPINなしで接続できるために他人が接続してきたケースが複数回発生して、これはヤバイ..... もてあましますね。 Bluetooth の時間差も比較的大きいので失敗購入の筆頭。

Anker PowerWave 10 Dual Pad

Roomba がいると困るのがケーブルです。 充電周りのケーブルは結構巻き込みで3本ほどやられたので、全面的に Qiに移行しました。

Qi 1つだと機器での取り合いが起こるので、Dual Pad は本当に便利でおすすめ。

Philips Hueモーションセンサー

家に帰って 「Ok, Google ただいま」するまでに暗い、電気付けるのめんどう、事前に「これから帰るよ」言うの忘れた時につらかったので対処しました。 家の玄関が人感センサーがあれば不要なのですが、ないときはこれを玄関に磁石で貼り付けて仕込めば、センサーになります。

圧倒的、これでいい感。

Philips Hueライトリボンプラス スマートLEDライト

2年前から興味あって、使いどころないなぁと思って放置していましたが、間接照明してみようと思って買ってみました。 机の下に貼ってあるのですが、つけるとそれっぽくなる。

けど、ただの興味で実用性皆無なのでまぁいいか感。

階段の段差や壁角の際のような注意する必要なところに、Hueモーションセンサーと併用して使うのがよさそう。

無料

サービス名 価格 種類 タイプ 用途
Azure DevOps 無料 CI 継続 .NET / PowerShell ビルド (Visual Studio Team Service のブランド変更)
Appveyor 無料 CI 継続 .NET/PowerShell ビルド
Circle CI 無料 CI 継続 .NET / Golang / 他 ビルド
draw.io 無料 構成図 継続 構成図を描くのに便利
Docker Hub 無料 コンテナリポジトリ 継続 コンテナ置き場
Eight 無料 名刺管理 継続 名刺はEight で交換しましょ....
Fastly 無料 CDN 継続 検証に Developer Account で。
Google Analytics 無料 Web 継続 ブログとか
Google Adsense 無料 広告 継続 ブログ
Kibela 無料 Wiki 継続 ドキュメント/Wiki/ Blog / 勉強会メモ
Slack 無料 チャット 継続 個人のいろいろストックです
一休 無料 予約 継続 レストラン、ホテル他
IFTTT 無料 グルー 継続 連動系はこっち
Zapier 無料 グルー 継続 連動系の検証に
Integromat 無料 グルー 新規 インスタントは処理はこっち
duet 無料 リモートディスプレイ 継続 MacBook のディスプレイ拡張
NearLock 無料 macOS のロック 継続 MacBook を iPhoneでロック
LinkedIn 無料 プロフィール 新規 紹介
Wantedly 無料 プロフィール 新規 紹介
JapanTaxi 無料 タクシー 新規 困ったときに便利
ネットワークプリント 無料 プリンター 新規 コンビニプリント
Bitwarden 無料 パスワード管理 新規 マルチプラットフォームでの動作 (2019年~
Lingvist 無料 英語 新規 リハビリ (2019年~
PayPay 無料 QR決済 新規 WeChat的な決済だけのやつ (2019年~
Microsoft To Do 無料 TODO 新規 Wunderlist がおわこん (2019年~
Fork 無料 Git GUI 新規 GitKraken が承認されないときに (2019年~
Otter 無料 SpeechToText 新規 すご (2019年~
PhotoMath 無料 数式OCD 新規 すご (2019年~
Warp 無料 DNSリゾルバ 新規 公衆環境で (2019年~

Appveyor

解約予定。 Windows でのビルドに使っていたのですが、いい加減なくしたい。

Bitwarden

2019年早々にTeamsId からの移行したやつです。 一年運用してみて、やはりいい感じなのでこのまま維持で。

課金していいなぁという気分もありつつ、自前クラスタで管理はあんまりしたくないものの、Webそこまで信用できるかというと、うーむ。 で、悩ましさも感じています。

tech.guitarrapc.com

Lingvist

リハビリに入れています。

PayPay

現金払いのところでも PayPay は行けるので、やるかと思って入れたところです。 が、どうにも微妙そうなのでなしかなぁ。

Microsoft To Do

Wunderlist が終わるので移行しました。

tech.guitarrapc.com

Fork

GitKraken は、OAuth のOrganization 許可とかいるので時々アレでソレになるのでそんな時に。 SourceTree ライクで10倍安定していていいのですが、GitKraken のような複数プロファイルができず使い勝手はそんなに良くないです。

できれば使いたくない、GitKraken 使っておけってお気持ちですが使うこともあるので、残念ながら時々使います。

Otter

Speech To Text です、便利。

PhotoMath

数式を読み取って数式の計算ができます。

Warp

CloudFlare の 1.1.1.1 通信を常に暗号化してトラフィックを保護してくれる。 公衆環境で接続せざるを得ないときに、まぁ接続しないのですが、準備として。

無料継続(利用がなかったもの)

いらないというより、使う機会が乏しい

サービス名 価格 種類 タイプ 用途
Heroku 無料 PaaS 継続 アプリホスト
Visual Studio App Center 無料 CI/Analytics 継続 開発
Cloud Craft 無料 構成図 継続 3D系を書かなかった
inVision 無料 デザイン 継続 プロトタイプ前でした

2018年同様に、どれも触らなかった。 やはりこれらは使わない気がする。

Heroku は使ってもいいチャンスが全然なくなった気がするので、そろそろアカウント消そうかなぁ。

解約

サービス名 価格 種類 タイプ 用途
TeamsId $3/user/month パスワード管理 解約 チーム管理の楽さが神がかってる
Wunderlist 無料 TODO 解約 TODOの管理
Nature Remo \12,980 IoTハブ 機器取り外し Yamaha YS-109 との相性問題
Nature Remo Mini 2W1 \6,580 IoTハブ 機器取り外し Yamaha YS-109 との相性問題

TeamsId

2018年までお世話になりました。2019年1月時点で、Bitwarden に乗り換えて数か月様子を見て問題なかったのでグッバイ。

Wunderlist

2020年5月6日にサービスが終了するので、Microsoft To Do に移行しました。

Nature Remo & Nature Remo Mini 2W1

長らく赤外線機器の連動に利用していました。 しかし、Yamaha YAS-109 の SoundBar Controller を起動すると Nature Remo が全滅する事案があって Switch bot に移行しました。

tech.guitarrapc.com

今後使う可能性があるサービス

サービス名 価格 種類 タイプ 用途
Kyash 無料 ウオレット 新規 新規 | 割り勘時かな

Kyash

2018年はチャンスをうかがって使わなかったのですが、まぁよさそうかも?

検討して使わなかったサービス・機器

サービス名 価格 種類 タイプ 用途
Visual Studio Pro 標準サブスクリプション \102,687 開発 検討 Azureいらない
Notion 無料 Wiki 新規 使い勝手が微妙すぎる
ScrapBox 無料 Wiki リトライ おしい
AirPods Pro \27,800 イヤホン 新規 微妙すぎる

Visual Studio Pro Subscription

Monthly でいいでしょという。

Notion

やはり微妙。個人では使うことはない。

ScrapBox

別にリンクが欲しいわけじゃない。便利だけど。

Markdown 互換が重要ではないものの、やはり互換が必要なシーンが多いので細かいところで微妙。

ただ、個人的には嫌いじゃないので、引き続きチャンスは伺いたいところ。

AirPods Pro

物自体はいいんですが、バッテリー持ちがしょぼい。 次の世代に引き上げてくれた気配はあるのですが、もう音楽聞かずに集中するように体調を戻したのでいらない。

もともと音楽聞かなかったのですが、聞くことで集中しようとしていたのでそれを矯正しました。 いろいろ話かけられやすい体制を表現したかったのもあります。

まとめ

めちゃめちゃ時間かかった。一日書いてた気がする。 把握していても書き出すのがツライ。何かサービス.... Bobby も違うし困ったなぁ。

会社のは kibela にまとめてて一瞬で出るんだけど。

Wunderlist の移行先の検討と移行

Wunderlist を5年余り使っているのですが、ここ3年はサービス終わる終わるといわれ続けても移行先を時々探しては見つからず断念してきました。

と言っていると、ついに Microsoft から本当に終わらせる宣言が出たので移行先を検討し、移行しました。

Wunderlist will shut down on May 6, 2020. After that date, you'll no longer be able to update or edit your lists or tasks. We recommend exporting your account or importing your lists and tasks to To Do before then.

With our importer it's easy to move your lists, tasks, subtasks, files and notes to To Do. First, you just need to get Microsoft To Do. Then, head to your To Do settings and select the option to import.

Wunderlist Support Center | What's next for Wunderlist?

2019年ぎりぎり12/31 に移行していたことに、後から突っ込まれて気づいたという。

目次

TL;DR

  • Wunderlist と同様の機能を、数の制約なく満たそうと思うと Microsoft To Do が最も近い
  • 無課金で、少人数でtodoをシェアしつつ、数上限も気にせずに使うには Microsot To Do が満たしている
  • ただし Microsoft To Do のシェア機能はリンクの共有、リンクを知っていれば共有。それ以上の共有を制限できるが残念

必要な機能

Wunderlistは、個人 +α の二人で必要なTODOを共有し、お互いの共通認識にしつつ、非同期に自由なタイミングでそれらを解消していくために使っています。 そのために使っているWunderlistの機能が必要機能と定めました。

単純なTODOとして利用しているので、TODOとしての管理に特化していることを重視しています。

リストを30余り使っており、リストを用途別に分割を行うので上限があると厳しいので、量は大事。

  • TODO タスクをまとめ上げるリスト機能
  • リストをまとめ上げるフォルダー(グループ)機能
  • Complete したタスクをサクッと確認、Undoする機能
  • リストの共有機能
  • タスクのアサイン、期限、繰り返し機能
  • タスクへのメモ追加
  • タスクの並び替え
  • タスクの他リストへの移動機能
  • Due date なタスクの表示機能
  • Assign されたタスクの表示機能
  • リストの上限がない

可能であればほしい機能は次の通りです。

  • Microsoft アカウントは全てなくしたいので、Google ログインか Sign in by Apple に対応
  • 共有時は、相手にプッシュ通知などで通知してほしい
  • 一度ユーザーを共有していれば、共有時に候補を出してほしい
  • タグができるとうれしい (場所とか
  • 検索できるとうれしい (タグ検索とか
  • ユーザー名変更
  • タスクの並び替え機能

いらない機能も決めておきます。

  • テーマ変更
  • 画像変更
  • タスクの中でタスクを作るサブタスク機能
  • 重要マーク
  • プロジェクト自体へのコメント機能
  • Kanban 機能

Wunderlistの外観

Wunderlist の見た目を把握しておきます。 TODOアプリは使い勝手がUIに左右されるので見た目は重要。

Wunderlist

候補

検討候補は、次の通りです。並び順は当初考えていた移行優先順位です。1

  • Todoist
  • TickTick
  • Microsoft To Do

Google Todo は話にならないのでなしです。アレはダメ。

幸い全ツールが移行ツールを持っていたので順にみてみます。

検討の末、最終的には Microsoft To Do にしたのですが何がどうだったのか見ていきます。

Todoist

Todoist

必須な機能の状態です。

  • [x] TODO タスクをまとめ上げるリスト機能
  • [ ] リストをまとめ上げるフォルダー(グループ)機能 -> Projectの入れ子で代用
  • [x] Complete したタスクをサクッと確認、Undoする機能
  • [x] リストの共有機能 -> ~5 people
  • [x] タスクのアサイン、期限、繰り返し機能
  • [ ] タスクへのメモ追加 -> Premium
  • [x] タスクの並び替え
  • [x] タスクの他リストへの移動機能
  • [x] Due date なタスクの表示機能
  • [ ] Assign されたタスクの表示機能
  • [ ] リストの上限がない -> ~80 Project、Premium ~300 Project

可能であればほしい機能の状態です。

  • [x] Microsoft アカウントは全てなくしたいので、Google ログインか Sign in by Apple に対応 -> Google Login
  • [x] 共有時は、相手にプッシュ通知などで通知してほしい
  • [x] 一度ユーザーを共有していれば、共有時に候補を出してほしい -> 1 Projectで共有すればその共有をほかのProjectで利用可能
  • [x] タグができるとうれしい (場所とか -> ラベルで代用。@ラベル で付けられて検索も可能
  • [x] 検索できるとうれしい (タグ検索とか -> クイック検索が可能
  • [x] ユーザー名変更
  • [x] タスクの並び替え機能

価格の違いを見ておきます。

Pricing | Todoist

操作自体は直感的です。検索も可能で、タスク操作もクリックやメニュー操作で困ることはありません。

クイック検索

セクションが追加可能で、Projectの中で区切りを作れるのも使いやすいです。

セクションでProjectを中で分離できる

ただ、フォルダーの概念がないのが致命的で使いませんでした。 フォルダーがないので、親プロジェクトを作ってプロジェクトをまとめることで運用することになります。 Webでは親プロジェクトを見ると子プロジェクトが表示されます。(いいじゃん!) しかiOSネイティブでは、親プロジェクトを選んでも子プロジェクトは見えません。 そして、親プロジェクトは触ると選んでしまう.... ただ開閉したいだけなのに。 ただプロジェクトをまとめ上げたくても操作をミスってしまい、ミスるとストレスがたまるのでちょっとないという結論でした。

リストの上限は、80あれば今は十分だったので問題ありませんでした。 メモがPremiumでのみ追加なのは、リンクを貼ることもできないのでないです。

総じて操作はいいのですが、Projectで賄うのはちょっと厳しかった。

TickTick

TickTick

必須な機能の状態です。

  • [x] TODO タスクをまとめ上げるリスト機能 -> 99 tasks per list、Premium 999 tasks per list
  • [x] リストをまとめ上げるフォルダー(グループ)機能
  • [x] Complete したタスクをサクッと確認、Undoする機能
  • [x] リストの共有機能 -> ~2 member per list、Premium 19 member per list
  • [x] タスクのアサイン、期限、繰り返し機能
  • [x] タスクへのメモ追加
  • [x] タスクの並び替え
  • [x] タスクの他リストへの移動機能
  • [x] Due date なタスクの表示機能
  • [x] Assign されたタスクの表示機能
  • [ ] リストの上限がない -> ~9 list、Premium 99 list

可能であればほしい機能の状態です。

  • [x] Microsoft アカウントは全てなくしたいので、Google ログインか Sign in by Apple に対応 -> Google Login
  • [x] 共有時は、相手にプッシュ通知などで通知してほしい
  • [x] 一度ユーザーを共有していれば、共有時に候補を出してほしい -> 1 Projectで共有すれば候補が出る
  • [x] タグができるとうれしい (場所とか -> 可能
  • [x] 検索できるとうれしい (タグ検索とか -> クイック検索が可能
  • [x] ユーザー名変更
  • [x] タスクの並び替え機能

価格の違いを見ておきます。

https://support.ticktick.com/hc/en-us/articles/360010640652-What-are-the-differences-between-TickTick-Free-and-TickTick-Premium-

リストの数が足りず断念しました。 これは共有先のユーザーも、その共有分リストを使います。 そのため、自分のリストを共有するだけで足りず、リストを積極的に分離していくようにしているのでなかなか厳しいものがありました。 課金しても99はちょっと厳しい。

一方で、フォルダーはあるし必要な操作も網羅しています。

ばっちりだったのですが、リストの数上限だけが残念でした。

Microsoft To Do

Microsoft To Do

必須な機能の状態です。

  • [x] TODO タスクをまとめ上げるリスト機能
  • [x] リストをまとめ上げるフォルダー(グループ)機能
  • [x] Complete したタスクをサクッと確認、Undoする機能
  • [x] リストの共有機能
  • [x] タスクのアサイン、期限、繰り返し機能
  • [x] タスクへのメモ追加
  • [x] タスクの並び替え
  • [x] タスクの他リストへの移動機能
  • [x] Due date なタスクの表示機能
  • [x] Assign されたタスクの表示機能
  • [x] リストの上限がない

可能であればほしい機能の状態です。

  • [ ] Microsoft アカウントは全てなくしたいので、Google ログインか Sign in by Apple に対応 -> Microsoft アカウント統合
  • [x] 共有時は、相手にプッシュ通知などで通知してほしい -> AirDropで通知いくのでok (リンクの共有 or Email or AirDrop)
  • [x] 一度ユーザーを共有していれば、共有時に候補を出してほしい -> AirDrop で十分間に合う
  • [x] タグができるとうれしい (場所とか -> 可能
  • [x] 検索できるとうれしい (タグ検索とか -> クイック検索が可能
  • [ ] ユーザー名変更 -> アカウント統合されてて変更不可
  • [x] タスクの並び替え機能

価格がなく、Office365 ユーザーとそうでない場合で違いはありません。

必須な機能が網羅されています。 可能であればほしい機能はないのですが、どれも飲むことはできます。

2020/4 AirDrop での共有ができるようになって便利になって最高でした。 共有する相手と離れていない限りはこれで十分です。

共有に関しては、どのツールよりも使いにくく、共有リンクを直接シェアするか Email しかありません。 また、一度共有できても他のリストで共有する時に候補としてもでないので手間が永遠に楽にならないのは面倒極まりないです。

まとめ

必須機能は大事。要点抑えてあれば移行先は見つかるでしょう。 私は比較した結果Microsoft To Do がよかったので、これでいきます。

なお、Google Todo は無理。


  1. Wunderlist の創業者のTwitter を見ているといろいろ移行している人のツールが出てくるので便利。