やる気駆動型エンジニアの備忘録

WPF(XAML+C#)の話題を中心に.NET/Android/CI やたまに趣味に関するブログです

在宅勤務になったのでコーヒーミルを買いました

私の勤務している会社は緊急事態宣言に伴い在宅勤務となりました。 普段から勤務中は個包装ドリップタイプのコーヒーを飲んでいるのですが、それらは全部会社に置き忘れてしまったので、せっかくだしコーヒーミルを買って豆を挽いて飲むようにしました。

今回は新しく買ったコーヒーミルを紹介していきたいと思います。

買ったもの

買ったのは HARIO の手動ミルです。 手動ミルを買ったのは初めてでしたが、レビュー数が多く安定していたのとまとまった量の豆を挽きたかったのでこちらを選択しました。

このミルは挽いた豆をそのまま蓋をして保存できるのですが、100g とか 200g 挽いてるとさすがにたりなさそうなのでミニキャスターも購入しました。

なお、HARIO のコーヒーフィルターとドリッパーは形状が円錐になっているので、スーパーなどでは同型のものが売り場においていない可能性があるのでご注意ください。

私はもともと 60V のドリッパーは持っていたのですが、持っていない方はこちらも購入したほうが良いと思います。

無事必要なものが到着したので早速豆を挽いてみました。

予想はしていましたが、200g 挽くのに 30分くらいかかりました。 普段からインドア派な私にはなかなかの重労働です。。。 在宅勤務のちょっとした運動と考えれば結構いい感じなんですけどね。

それでもやっぱり挽きたてのコーヒーは香りが良く、それだけで気分が高揚します。 ついでにミニキャスターもインテリアとしてもなかなかに優秀です。計量スプーンがいい味出してます。

f:id:iyemon018:20200427135124p:plain

コーヒー豆ごとに色違いのキャスターを使うとより一層おしゃれになります。 (背景が残念ですが)

f:id:iyemon018:20200427135512p:plain

HARIO (ハリオ) V60 計量スプーン Wood M-12WD

HARIO (ハリオ) V60 計量スプーン Wood M-12WD

  • メディア: ホーム&キッチン

注意点

このコーヒーミルは豆の粗さを調節することができます。 取説ではメモリを調節することで、豆の粗さを自由に変えられますと記載されていましたが、ぶっちゃけどれがメモリかわかりませんでした!

で、色々試した結果、どうやら以下の赤いところがメモリらしいです。

f:id:iyemon018:20200427140343p:plain

流石に初見でこれはわからんよ…

いくつか試してみた

コーヒーミルを買ってから以下の豆を試しに飲んでみました。

個人的にはキリマンジャロのほうが好きですがちょっとお高め。 UCC コーヒーは値段の割に美味しいので、よく飲む人は買っておいて損は無いでしょう。

また、5月1日より U ブレンド豆以外のコーヒー豆が 1,000円 から 1,200円 に価格が変更になるそうです。欲しい方は今のうちに少し買い置きしておいても良いかもしれません。

f:id:iyemon018:20200427140810j:plain

こんなご時世ですが、自宅で楽しめそうなことはどんどんやっていっても良いかもしれません♪

良きコーヒーブレイクを!

Azure Pipelines Task の拡張機能を開発する

前回は Azure DevOps の拡張機能Hello World を実施しました。

iyemon018.hatenablog.com

今回は Azure DevOps の中でも最も利用されるであろう Azure Pipelines に自作した Task を追加していきます。

参考ページ

docs.microsoft.com

今回は上記のページに沿って拡張機能を作っていきます。 ただ、上記では Node.js + TypeScript を使って開発されています。単純に手順に沿って作っていけば普通に作れてしまうため、あまりこのエントリで紹介する意味がありません。

なので、ちょっと趣向を変えて Node.js ではなく、PowerShell を使って開発していきます。 PowerShell を使った Task 拡張機能の作り方は Microsoft 公式では見当たらなかったため、以下のページを参考にしています。

codingsight.com

socraticprogrammer.com

環境構築

各種ツールを適宜インストールします。今回は Visual Studio Code を使っていますが、エディタはお好みのものを使ってください。

  1. Node.jsをインストールする
  2. TypeScript Compilerをインストールする
  3. VS Codeをインストールする
  4. npm i -g tfx-cliを実行してtfx-cliをインストールする

Azure Pipelines Task を開発する

今回作るもの

はじめに今回作るものをお見せしておきます。 サンプルなので特にタスクそのものが意味を持つわけではありませんが、画面で入力した値を作成した Task が受け取ってビルドログに表示します。

タスク設定画面

f:id:iyemon018:20200406000030p:plain

ビルドログ

f:id:iyemon018:20200406000111p:plain

カスタムタスクを作る

カスタムタスクを作るまでの手順は上記参考ページに従っていきます。 以下のリンク見出しのCreate task scaffoldingを実行します。

docs.microsoft.com

次に、task.jsonを作成します。こちらも上記のページからコピーして作ってください。 適宜編集した後、最後のexecutionのみ以下のように変更します。 targetには、実行する PowerShell スクリプト名を記載してください。

{
    "$schema": "https://raw.githubusercontent.com/Microsoft/azure-pipelines-task-lib/master/tasks.schema.json",
    "id": "{{GUID}}",
    "name": "{{タスクの名称(英数字のみ、半角スペース使用不可)}}",
    "friendlyName": "{{タスクの表示名(ユーザーに見えるタスク名はこっち。未入力なら name が使われる}}",
    "description": "{{タスクの説明}}",
    "helpMarkDown": "",
    "category": "{{タスクのカテゴリ。Build とか Utility とか。}}",
    "author": "{{publisher 名と同じにする}}",
    "version": {
        ...省略...
    },
    "instanceNameFormat": "{{ここはパイプラインやビルドログに表示する内容。$(変数)で変数も使える。}}",
    "inputs": [
        ...省略...
    ],
    "execution": {
        "PowerShell3": {
            "target": "powershell.ps1",
            "platforms": ["windows"],
            "workingDirectory": "$(currentDirectory)"
        }
    }
}

VstsTaskSdkを使う

VstsTaskSdk を Node.js で使用する場合は参考ページの手順に従ってください。 ここでは PowerShell の VstsTaskSdk を使用する方法について説明します。

  1. VstsTaskSdkのモジュールをインストールする
  2. インストールしたモジュールを拡張機能のps_modulsフォルダに保存する
  3. PowerShellスクリプトからVstsTaskSdkを呼び出す

VstsTaskSdkのモジュールをインストールする

以下のコマンドを実行してローカル端末に VstsTaskSdk をインストールします。

Install-Module -Name VstsTaskSdk -AllowClobber

インストールしたモジュールを拡張機能のps_modulsフォルダに保存する

インストールできたら拡張機能のフォルダ配下にあるps_modulesフォルダ上で以下のコマンドを実行します。

Save-Module -Name VstsTaskSdk -Path "<ps_modules フォルダ>" -Force

これを実行するとps_modulesフォルダ配下にVstsTaskSdkフォルダが作成されます。 その配下にバージョン番号名のフォルダが出来上がりますが、このバージョン番号フォルダ配下のファイルをVstsTaskSdkフォルダに移動させてください。

以下のようになるのが正解です。

f:id:iyemon018:20200406001844p:plain

PowerShellスクリプトからVstsTaskSdkを呼び出す

スクリプトは次のように書いたらOKです。 以下はGet-VstsInputを呼び出しています。

[CmdletBinding()]
param()

try {
    $samplestring = Get-VstsInput -Name "samplestring"
} finally {
    Trace-VstsLeavingInvocation $MyInvocation
}

なお、SDK のモジュールはそこそこの数があります。 以下のページを参照するとちょっとしたヘルプが記載されているので参考にしてください。

github.com

manifestファイルを作ってパッケージを公開する

manifest ファイル(vss-extension.json)の作り方とパッケージの公開方法は前回の記事を参照してください。

作ったTaskを実行する

ここは特に迷いませんね。Azure Pipelines のビルドパイプラインからタスクを追加するだけです。

f:id:iyemon018:20200406002714p:plain


このように割と簡単に Azure Pipelines Task を作ることができました。 PowerShell に慣れている方ならわざわざ Node.js を使う必要もありません。

SDK もそれなりに API が用意されているようなので、今後も色々試していきたいと思います。

Azure DevOpsの拡張機能を自作する -Hello World編-

Azure DevOps の拡張機能を自作する機運が高まってきたので色々調べながらとりあえず Hello World まで到達したので、その手順を備忘録として残しておきます。 なお、ここで記載している内容は2020年3月28日時点の以下のページに記載されている手順に則っています。 このページは英語で書かれていますが、一通りの手順を実施することで全く知識が無くても Hello World に到達できるようになっています。

docs.microsoft.com

なお、今回作成するのは以下のように Azure Repos にMy Hubというメニューを追加して、ログインユーザー名を表示する画面を追加します。

f:id:iyemon018:20200328223636p:plain

環境構築

Azure DevOpsに自分自身がownerになるorganizationを作る

Azure DevOps では拡張機能を自身が所属する organization にインストールするには権限が必要です。 最も手っ取り早いのは個人用の organization を作成することです。

会社で Azure DevOps を使用していて拡張機能をインストールする権限を持っていない場合、organization の owner に権限を与えてもらうか、owner 自身に拡張機能のインストールを依頼する必要があります。

拡張機能を作成するための環境を構築する

  1. Node.jsをインストールする
  2. Azure DevOps用の拡張機能パッケージツール(TFX)をインストールする

以下から Node.js をインストールします。とりあえず LTS をインストールしておけば問題ありません。

nodejs.org

Node.js をインストールしたら、TFX はコマンドプロンプトから以下のコマンドを実行することでインストールできます。

npm install -g tfx-cli

拡張機能を公開するためのPublisherを作成する

Azure DevOps のすべての拡張機能はパブリッシャーによって提供されます。 Marketplace で公開されているものだけでなく、自作して個人や特定の organization 内だけで使用するものについても同様です。

Publisher を作成するタイミングは拡張機能を作ってからでもいいのですが、ここで入力した以下の情報を拡張機能マニフェストファイルに埋め込む必要があるので先に作っておいたほうが楽ちんです。

  • ID

Publisher を作成するには以下の URL から必要な情報を入力します。

https://aka.ms/vsmarketplace-manage

なお、この手順の詳細は以下のページのほうがわかりやすいので、わからない場合はこちらを参照してください。

docs.microsoft.com

拡張機能を作る

基本的に以下の手順に従えば拡張機能を作成することができます。

docs.microsoft.com

ここではざっくり手順を紹介していきます。

  1. 拡張機能を作成するためのフォルダを作成する。場所はどこでもいい。
  2. npm パッケージマニフェストを初期化する。上記で作成したディレクトリでnpm init -yコマンドを実行する。
  3. Microsoft VSS Web Extension SDK パッケージをインストールする。npm install vss-web-extension-sdk --saveコマンドを実行する。
  4. 手順1.で作成したフォルダにvss-extension.json1ファイルを追加する。ファイルの内容は上記 URL の 4. を参照してください。
  5. Publisher 作成時に入力したIDvss-extension.jsonpublisherに記載する。
  6. 今回追加する画面のmy-hub.htmlファイルを追加する。こちらも、ファイルの内容は上記 URL の 5. を参照してください。
  7. 手順1. で作成したディレクトリでtfx extension createを実行する。

=== Completed operation: create extension ===と出力されたら完成です。 作成したフォルダ内に.vsixファイルが作成されるはずです。

ここまで実行すると以下のようなフォルダ構成になります。 (私は VS Code を使って Git で管理していたので.git, .vscode フォルダがあります)

f:id:iyemon018:20200328231928p:plain

Azure DevOpsにインストールする

Azure DevOps に作成した拡張機能をインストールするには先ほど作成した Publisher から.vsixを公開します。 拡張機能の管理ポータルへアクセスして [New extension] - [Azure DevOps] を選択します。 ダイアログに先程作成した.vsixをドラッグ・アンド・ドロップして [Upload] ボタンを押したら完了です。

f:id:iyemon018:20200328232936p:plain

Version にチェックマークがついていればアップロードは完了です。

f:id:iyemon018:20200328234157p:plain

続いてアップロードした拡張機能を organizatin にインストールします。 今回は private な拡張機能を作っているため、organization に対して拡張機能を共有する必要があります。 共有はアップロードした拡張機能のメニューから [Share/Unshare] を選択して共有先の organization 名を入力すればOKです。

f:id:iyemon018:20200328234955p:plain

拡張機能のメニューから [View Extension] を選択すると拡張機能のページに遷移するので、あとは他の拡張機能と同じようにインストールすれば完了です。 organization の Azure Repos メニューにMy Hubが追加されているはずです。

f:id:iyemon018:20200329000620p:plain


ドキュメントがしっかりしているおかげでほとんど詰まること無く、また大体1時間程度で Azure DevOps の拡張機能のインストールまでできました。 この時点では Hello World 程度で SDK の機能は殆ど触れていません。しかし、.vsixの作成方法やアップロード手順を知るには十分です。

What's next...

Azure Pipelines やその他サービスのチュートリアルです。 作りたい拡張機能に合わせてこの辺を通していけばよさそうです。


  1. vss-extension.jsonは Azure DevOps 専用のマニフェストファイルです。詳細はこちらのページを参照してください。

食洗機(NP-TA3-W)を買った

今年に入ってすぐに食洗機を買いました。 パナソニックの NP-TA3-W てやつです。

折角なので実際の使用感とか食洗機を購入・使用する上でやったこと、追加で購入したものなどを、私の調べた限りあまり紹介されてないことをメインに残しておきます。

購入までの流れ

意外と購入したひとのブログや動画をあさってもなかった情報です。 あ、ちなみに私はほしい機種のレビューをブログや Youtube 中心に見ていました。 そこでは、使用した結果やどのくらいうるさいのかを中心に紹介していましたが、購入までの流れを記載している人はいませんでした。

私が食洗機を購入して使い始めるまでの流れは以下のとおりです。 なお、私はヨドバシカメラで食洗機を購入しています。

1. 分岐水栓の型番と設置箇所の確認・見積もりの日程を決める

食洗機は備え付けの蛇口に分岐水栓を取り付ける必要があります。 この分岐水栓は蛇口の型番に合わせたものを使用する必要がありますが、素人目ではその型番が何なのかわかりません。(わかるものもあるかもしれないですが私にはわかりませんでした) この分岐水栓と蛇口の型番が合わないと食洗機の設置ができません。

sq.jbr.co.jp

まずはこの型番を確認してもらうためにヨドバシカメラの店員さんにお願いして、見積もりの日程を決める必要があります。 休日だと見積もりできないそうなので直近の平日に設定しました。

なお、この見積もりは100円かかるのですが、ヨドバシカメラだと無料でできるそうです。 この時点で食洗機を購入することもできますが、型番が一致しない場合のことを考えて私は一旦保留にしました。

2. 分岐水栓と設置場所を確認してもらう

見積もり日は朝から電話があり、2,30分程度で完了しました。 分岐水栓自体は在庫が合ったのですが、分岐水栓を設置する際に「冷水と温水のどちらに設置するか」を決める必要がありました。

温水に設置した場合は給湯器を利用することで温水で洗浄が可能になります。 冷水に設置した場合は食洗機の電気を利用することで温水で洗浄が可能になります。

要はガス代を使うか電気代を使うかの違いですね。食洗機の中には電気を使って温水にすることができないものもあるのでご注意ください。 この機能自体は油汚れ対策ですね。 特に温水に設定することのデメリットが思い浮かばなかったので温水にしました。

また、その他にも以下の2点の調整を依頼されました。

  • 食洗機を設置するためのシルバーラックを設置したが、足部分のキャスターは使えないので、固定できるものにすること
  • 食洗機の設置段はシートをおいて安定させること

ちなみにシルバーラックは上の 幅70x奥行き35 のタイプであれば設置可能です。

ここでは言われたとおりに円形のアジャスターとウッドシートを購入しました。

3. 食洗機を購入する

分岐水栓の型番を記載した見積もり書を持って食洗機と合わせて購入します。 あとは配達予定日などを決定すれば購入完了です。

設置するとこういう感じに。

f:id:iyemon018:20200309165011j:plain

なお、ヨドバシカメラではポイントを考慮すれば価格ドットコムの最安値と同じ値段になっていました。

使用するにあたって

実際使ってみると想定していなかったことなどがいくつかありました。 こちらも他のブログや Youtube などでは触れられていない箇所を中心に記録しておきます。

良かったところ

洗い物から完全に解放されるわけではないですが、それでも食器を置いて洗剤入れてボタンを押して待ったら洗い物が完了するというのは最高の UX だと思います。

食洗機を購入する前は気が付かなかったのですが、洗い物が楽になることで自炊する上での心理的ハードルが極端に下がりました(個人差あり)。

手こずる部分

食器の設置が難しい。 どこに何を置けば洗浄できるのか見ただけではわかりません。

取扱説明書に"こんな感じでおいてね!"と記載されているのでそのとおりに置きましょう。 最も、自宅の食器の形がサンプルと同じ理由もないので多少位置を変更する必要があります。 どの食器をどのあたりに置くのが良いかは試行錯誤が必要になります。 (とはいえ2週間もすると慣れますが)

想定していなかったこと

小さいタッパーを洗浄すると水が溜まってしまうことがある

我が家では白米を炊いたらご飯用の小さいタッパーに詰めています。 ↓↓↓こんなの

これを食洗機に入れて洗浄すると置き方によっては温かい水が溜まってしまいます。 多分内部で洗浄する際に立て掛けていたタッパーが水圧で倒れているのだと思います。 なので、私はお椀などをタッパーの後ろに配置するなどして設置場所を工夫しています。

洗浄中にシャワーを使うと水圧が弱まる

考えれば当然なのですが洗浄中にシャワーを使うと水圧が弱まります。 洗浄する時間は設定によりますが、1度開始すると30分以上は洗浄するので時間の管理が必要です。

その他、追加で購入したもの

食洗機でも洗えないものはいくつかあります。 例えば鉄製のものやフッ素加工されたフライパン、サイズが大きい食器などです。 そういったものを洗ったあと、乾かすための場所が必要になります。 そこで、以下のような水切りラックを購入しました。

設置するとこういった感じに(汚くてすみません…)。

f:id:iyemon018:20200309165114j:plain

これの良いところは折りたたむことができる点です。 食洗機を設置するとどうしてもキッチン周りは狭くなってしまうので折りたたんでおくことでスペースを確保できます。

最後に

感じ方は個人差ありますが、食洗機は人類の英知の結晶です。導入すればほぼ間違いなく QOL (Quality of Life)が上がることと思います。

(Azure Pipelines)Git Tag の情報を変数に保存・参照する

Git で Tag を使う場合、タグにはバージョン番号を付けて管理することが多いのですが、そのバージョン番号を Azure Pipelines で使いたいケースが稀にあります。 今回は Git で Tag うちされた情報を取得して Azure Pipelines の変数として保存・参照する方法を残します。

手順

  1. PowerShell タスクから Git コマンドで Tag を取得する
  2. Tag を変数に保存する
  3. 保存した変数を参照する

最後は PowerShell を使って変数を参照していますが、Azure Pipelines のタスクから変数を参照することができます。 少し調べると YAML ファイルから変数を設定する方法はすぐ出てくるのですが Classic を利用しているブログなどは、実はあまりありません。 折角なので Classic を使用してみようと思います。

なお、今回は2.1.0.0のような形式で保存しているものとします。

Git コマンドで Tag を取得する

$TagVersion = & git describe --tags --abbrev=0

Git コマンドの詳細については以下を参照してください。

git-scm.com

ただ、このままだとタグを取っているだけなので整形します。 今回のバージョン番号形式では、以下のようなスクリプトで取得することができます。

$TagVersion = & git describe --tags --abbrev=0
$Version = $TagVersion.Substring(4, $TagVersion.Length - 4)

Tag を変数に保存する

Tag を取得できたと言っても PowerShell の変数に保存しただけです。 これを他の Azure Pipelines タスクで使用するにはVariablesに保存する必要があります。

Write-Host "##vso[task.setvariable variable=TagVersion;]$Version"

docs.microsoft.com

なお、YAML を使う場合は以下のようにします。

docs.microsoft.com

保存した変数を参照する

Azure Pipelines を使っている方にはもはや書くまでもないですね。

$(TagVersion)

これでバージョン番号を取得することができます。

さいごに

タグを使う目的はプロダクトごとに異なると思います。 必要に応じて PowerShell でタグ文字列を整形していい感じに利用してください。