VMware 関連用語の違い: vSphere, ESXi, vCenter Server, vSAN, VM

わかりづらすぎて全然覚えられないので、気合を入れて端的にまとめた。これで各用語の違いとイメージ(包含関係など)がつかめるはず。

一言で

  • vSphere は VMWare 社が提供する仮想化インフラ。ESXi やら vCenter Server やらをまとめたソフトウェアスイートとも言える
  • vSAN は vSphere が持つ SDS(Storage-defined storage)
  • ESXi は vSphere が持つハイバーバイザー
  • VM は ESXi 上で実現される仮想マシン一つ一つ
  • vCenter Server は vSphere が持つ ESXi や VM を統合管理するソフトウェア、または当該ソフトウェアをインストールした VM or ESXi

つまり vSphere という仕組みの中に vSAN、ESXi、VM、vCenter Server などがある。

階層的にまとめると

  • vSphere
    • vSAN(ストレージ制御)
    • ESXi(ホスト)
      • VM(仮想マシン)
      • vCenter Server(管理機能担当のホストまたは仮想マシン)

包含関係と個数でまとめると

vSphere:

  • 1-vSphere は 1 つの vSAN を持つ
  • 1-vSphere は N つの ESXi を持つ
  • 1-vSphere は 1 つの vCenterServer を持つ

ESXi:

  • 1-ESXi は N つの VM を持つ

vCenter Server の実体

vCenter Server は 1 つの VM、または 1 つの ESXi にインストールする。

図解

ESXi と VM

vcenter_vm_exsi

出典: 「VMware vCenter Server」とは | ニフクラ

ESXi 1 つで N つの VM を実現している。

※vCenter Server があたかも全体にまたがるかのように書いているが、この図では抽象的に描いてあるだけなのでここでは気にしなくてもいい。

vSAN と vSphere

vsan_vsphere_vm

出典: VMware vSAN 製品概要

vSphere というインフラには、1 つの vSAN(こいつがストレージ部分を上手いこと管理する) がある。

※VM と EXSi についてはここでは気にしなくてもいい(意図的に抽象的に書いてあり正確な包含関係でない)

今回意図的に無視した関連用語

本質ではないので簡単に。

ESX

一言で言うと、ESX が先発 で ESXi が後発、かつ 今は ESXi が主流。ESX という言葉があったら「ESXi の古い時代のやつ」くらいの認識で OK。

参考:

vSphere Client

vSphere Client は vSphere 環境にアクセスするためにクライアントソフトウェア。

クライアント端末(例: 各自が使っている PC)にインストールする。

インストール後、起動して vCenter Server(がインストールされた ESXi ホストなどの)IP を指定すると管理画面を開ける……という感じ。

参考

Slack で「よく使う絵文字」によく使ってる絵文字が表示されない時の対処方法

日本語版 Slack でリアクション付けようとすると、「よく使ってる絵文字」によく使ってる絵文字が表示されないことがあって煩わしい。

事象

Firefox v55 にて、Slack でリアクションをつけようとすると、「よく使ってる絵文字」のエリアによく使ってる絵文字が表示されない。

※最新のバージョンや他ブラウザ、その他アプリで発生するかどうかは不明

対処法

対処法:自分宛のダイレクトメッセージで、なんでもいいから絵文字を投稿する。

たとえば :smile: など。個人的には片手で打てる :rage: がおすすめ。

投稿後は「よく使う絵文字」によく使っている絵文字が表示されるようになるはず。

Q: なぜこの対処法で上手くいく?

Ans: わかりません

私は以下のようになっているのだと推測。

  • 「よく使う絵文字」は Slack 側で保存されている
  • しかし Slack にログインしただけでは読み込まれない
  • 何らかの絵文字を入力すると、「よく使う絵文字」を読み込む処理も併せて実行される

つまりは Slack 側の仕様。

理想はログイン時に読み込んでくれることだと思う。もしこの推測が正しいなら、Slack にはぜひ対応していただきたい。

本現象の発生契機

発生契機は Slack にログインした時 で、一度絵文字を入力する(そうすると Slack 側で「よく使う絵文字」の設定が読み込まれる)と解消される。

言い換えると、一度ログアウトして、またログインしたら再度発生する。

(2018/11/14 追記) 日本語版でのみ発生する

言語設定が English(US) だと本事象は発生しなかった。

言語設定を日本語にすると発生した。日本語版特有の問題なのだろうか?

コマンドプロンプトのウィンドウ表示位置は「常に左上にする」とストレスが少ない

バッチファイルやスクリプトを多用していると、コマンドプロンプトの黒いウィンドウ(いわゆる DOS 窓)が多数表示されることがある。だが、このウィンドウ、表示位置がいまいち安定しないため、しばしば散らかって見えてしまいうっとうしい。

どうすればスッキリするか。

結論: 常に左上に表示させる

常に左上に表示させる

これなら視点も常に左上に向けばいいし、ウィンドウも散らばらない。各ウィンドウを見たい場合は、適宜動かせばいい。

個人的にはこのやり方が最適に感じる。もう数ヶ月以上、ずっとこのやり方で運用している。

設定方法

  • コマンドプロンプトを開く
  • 開いたウィンドウを 固定させたい位置に持っていく
  • 同じウィンドウ上で、タイトルバー左上アイコンをクリックしてプロパティを開く
  • プロパティ画面の [レイアウト] タブを開く
  • [ウィンドウの位置] 部分の [システム設定を使う] のチェックを外す

これで指定した位置で固定されるようになるはず。

ウィンドウを動かす方法

タスクバーとタイトルバーを使うのもよいが、個人的にはフリーソフトがオススメ。タイトルバーのドラッグ&ドロップ以外の方法で動かせるので快適。

いくつか存在するのでお好みのものを(全体的に古いが)。

窓掴み_gjl soft

窓の杜 - 【NEWS】ウィンドウ内の任意位置ドラッグでウィンドウを移動可能に「シフトムーブ」

forest.watch.impress.co.jp

www.vector.co.jp

Q: なぜ左上?右上や右下左下じゃないのはなぜ?

Ans: 私の好み。

私はウィンドウの配置を、以下のようにしている。

[X-Finder] [Main Window                 ]
[        ] [ Ex1. IDE                   ]
[        ] [ Ex2. Text Editor           ]
           [ Ex3. Web Browser           ]
[ConEmu  ] [                            ]
[        ] [                            ]
[        ] [                            ]

左上がタブファイラの X-Finder、左下がターミナルの ConEmu、で右側が作業領域にしている。

この前提で、一番邪魔にならないのが左上なので、左上にした。

バッチファイルで goto や exit ができない時はたぶん for 文が原因

for 文の中から goto や exit を呼び出しても、コマンドプロンプトの仕様なのか上手く動作しない。動作させられないこともないが、かなりトリッキーになる。

結論

for 文は使わないこと。代わりに ラベルと goto 文で頑張る

ちなみに while 文なんてものも存在しないので、やはり ラベルと goto 文で頑張る

参考

WinAuth を使って Slack の2要素認証を設定する

SMS による 2 要素認証は安全じゃない、ということで代替ツールを使うことに。WinAuth。

2要素認証ってなに?

ログイン時に ID/PASS 以外に、もう一つ何かを使うという認証方式。略語では 2FA と書く。

参考: 2要素認証を設定する – Slack

そういえば過去記事でまとめてた(「二段階認証」という言葉を使っているが):

stakiran.hatenablog.com

設定手順

(1) WinAuth を入手する

GitHub の Releases · winauth/winauth よりダウンロードする。

Beta よりも Stable(安定版)が良いだろう。2018/11/05 現在では 3.5.1 が最新の Stable。

また、インストールが面倒くさい場合は zip ファイルをダウンロードする。本記事では zip ファイルで進める。

(2) WinAuth を起動

展開すると WinAuth.exe という実行ファイルが一つだけ存在する。これを適当なディレクトリに配置する。

(3) Slack の2要素認証を設定してみる

まずは WinAuth 画面。

  • Add ボタン > Google で「Add Google Authenticator」ダイアログを開く
  • Name と Icon は適当に

ここで Slack 側の 2 要素認証画面に移る。

  • 設定画面はこの辺
    • https://(ワークスペース名).slack.com/account/settings?msg=verified_two_factor#two_factor を開く
  • 認証画面を開くと、Step 3 つから成る画面が出る
  • このバーコードをスキャンできませんか? → 時間ベースキーを表示。これをコピー。

WinAuth 画面に戻る。

  • コピーした時間ベースキーを貼り付ける
  • Verify Authenticator ボタンクリック
  • 「3. Verify the following... 」の欄に確認コードが出ることを確認して、OK ボタンを押す

パスワード設定画面が出るので、必要ならする。これをしておくと、他人が WinAuth を起動した時も(パスワード入れないと使えないので)悪用されずに済む。

あとは WinAuth 側で登録したばかりの Authenticator から 6 桁のコードを表示して、Slack 側に入力する。XXX XXX ではなく XXXXXX と 6 文字で入れる(スペースは入れない)。

(余談) このコード、時間が経つたびに別のコードに変化していくが、問題はない。このコードの生成は(たぶん時刻をキーにして) WinAuth 側と Slack 側で同じアルゴリズムが使われているので、Slack 側でもちゃんと認識できる。というより、このように一定時間ごとに変化するコードを使うところこそがこの方式のセキュリティの肝。

Q&A

Q: WinAuth のデータはどこに保存される?

Ans: %appdata%\winauth\winauth.xml

中身は以下のような感じ。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<WinAuth version="3.5">
  <alwaysontop>false</alwaysontop>
  <usetrayicon>false</usetrayicon>
  <notifyaction>Notification</notifyaction>
  <startwithwindows>false</startwithwindows>
  <autosize>true</autosize>
  <left>250</left>
  <top>553</top>
  <width>0</width>
  <height>0</height>
  <WinAuthAuthenticator id="xxxxxxxx-..." type="WinAuth.GoogleAuthenticator">
    <name>Google</name>
    <created>xxxxxxxxxxxxx</created>
    <autorefresh>false</autorefresh>
    <allowcopy>false</allowcopy>
    <copyoncode>false</copyoncode>
    <hideserial>false</hideserial>
    <skin></skin>
    <authenticatordata encrypted="y">XXXXXXXX...</authenticatordata>
  </WinAuthAuthenticator>
</WinAuth>

バッチファイル謹製のリマインダーをつくった

r 3 カップラーメン で 3 分後に「カップラーメン」と表示する、みたいなツールをバッチファイルのみでつくった。

github.com

どんなツール?

たとえばファイル名を指定して実行から、以下のようにして指定する。

commainder_from_run

動作中は DOS 窓が動きますので、適当に最小化でもしとく。

commainder_dos_window

時間になると、以下のように 最大化表示したメモ帳 でリマインドされます。

commainder_reminding

特徴

特徴1. バッチファイルだけで動作する

特別なツールは使っていないし、バッチファイルなので何をしているかは中身を見ればわかる。スモールでオープンなツール。

特徴2. リマインドに気付ける

最大化したメモ帳を開いてリマインドする、という大げさな方法を使っているが、これが効力が高い。最大化ウィンドウなので、何かに夢中になっていてもすぐに気付ける。

r.bat 詳細

実装したバッチファイルの中身を簡単に解説しておく。

v0.1.0 ベースで簡単に。

rem Comminder v0.1.0
rem ================

ただのバージョン情報表記です。rem コマンドはコメント構文であり、バッチファイル中にコメントを書くための命令です。

setlocal

...中略...

set n=%1
set msg=%*

set datafoldername=.comminder
set datafolderfull=%userprofile%\%datafoldername%
set dataext=.txt

データファイルの名前やパスなど、よく使う値を変数に入れています。よく使うデータを共通化するのはプログラミングの常識ですよね。

また、setlocal は、set による環境変数定義を呼び出し元に波及させないための決まり文句です。言うなれば、set はデフォルトではグローバル変数をセットしますが、setlocal を実行すると、ローカル変数をセットするようになる、というイメージです。

if not exist %datafolderfull% (
    echo 初回起動につき, データファイル保存先 "%datafolderfull%" を作成します.
    mkdir %datafolderfull%
)

データフォルダが存在しない場合、mkdir で新規作成しています。if not exist による判定も必要です。この判定がないと、データフォルダが存在する場合に mkdir で「既に作成されています」系のエラーが出てしまいます。

if "%n%"=="" (
    set n=0
)

if "%msg%"=="" (
    set msg=これは動作確認です。このように表示されます。
)

これは r.bat に渡される引数が無い場合の対処です。待機秒数の n は、数字を設定しないと待機命令である timeout コマンドがエラーを出すので、0 を設定します。リマインド内容の msg は、内容が空だと、データファイル書き込み時に使っている echo が「echo は です」というメッセージを吐いてしまうため、これを防ぐために適当なメッセージ(動作確認のスタンスを取ってみました)を入れています。

set todaydate=%date%
set todaydate_for_disp=%todaydate%
set todaydate=%todaydate:/=%
set todaydate=%todaydate:~0,8%
set todaytime=%time%
set todaytime_for_disp=%todaytime%
set todaytime=%todaytime: =0%
set todaytime=%todaytime::=%
set todaytime=%todaytime:.=%
set todaytime=%todaytime:~0,8%
set todaydatetime=%todaydate%_%todaytime%

これは現在日付時刻の文字列を作っています。データファイル保存時、同じファイル名で保存してしまわないよう、被らないファイル名を付けることが必要ですが、こういう時は日付時刻を使うのがベターです。

バッチファイルでは環境変数 %date% で現在日付を、 %time% で現在時刻を取得できます。あとは、バッチファイルの文法で、上手いこと加工します。加工方法は set /? コマンドが詳しいです。

echo 【リマインド内容】 > %datafilefull%
echo %msg% >> %datafilefull%
echo.>> %datafilefull%
echo ======== >> %datafilefull%
echo.>> %datafilefull%
echo Set from: %todaydate_for_disp% %todaytime_for_disp%.  >> %datafilefull%
echo Wait sec: %n% Secs.  >> %datafilefull%

データファイルにリマインド内容を書き込んでいます。

まずは echo > でデータファイルを新規し、その後 echo >> で追記をしていっています。追記は最終行に追加されるので、上に書きたい内容ほど先に echo >> する必要があります。

title %n%秒後にリマインド

これは、r.bat 実行時に開かれるコマンドプロンプトウィンドウのタイトルを、見やすいよう変えているだけです。「ファイル名を指定して実行」から実行した場合は、上手いこと機能してくれます。コマンドプロンプトから実行した場合は、そのコマンドプロンプトのタイトルが置き換わってしまいます。上手い回避方法は無かったので見逃して下さい。

timeout /T %n% /nobreak

リマインダーの肝となる 指定時間になるまで待つ を実現するコマンドです。 /nobreak は、迂闊にキーを押した時に終了しないようにするためのオプションです。timeout コマンドは、デフォルトでは「何かキーを押したら(待ち時間が残っていても)即座に終了する」挙動なので、 /nobreak で無効にしないとうっかり終了してしまいかねません。

start "" /max notepad "%datafilefull%"

これはデータファイルをメモ帳で開くコマンドです。その際、/max オプションにて最大化で開く、という指令も与えています。start コマンドだからこそできることです。

キー一発でアクティブウィンドウをキャプチャして YYMMDD_HHMMSS.jpg で保存する

WinShot は保存時のファイル名に融通が効かないのと、キャプチャに成功したかどうかがわかりづらいのが不満。というわけで、それら不満を解消しつつ、キー一発でガシガシと保存する仕組みを整えた。

概要

  • ホットキーは AutoHotkey で割り当てる
  • ホットキーから呼ぶキャプチャツールは commandcap
    • 今回私がつくったもの
    • コマンドラインでアクティブウィンドウとかフルスクリーンとかキャプチャできる

(1) AutoHotkey

AutoHotkey 1.1.x をインストール。

(2) commandcap

stakiran/commandcap: Simple light commandline screen capture tool.

ダウンロードして適当なディレクトリに配置。動作には Python と Pillow ライブラリが必要。

(3) AHK スクリプトで commandcap を呼び出す

ScrollLock に設定する例。

ScrollLock::run,pythonw D:\work\github\stakiran\commandcap\commandcap.py -a -o D:\data\screenshots --format "$2"

pythonw は DOS 窓を出さずに Python スクリプトを実行するおまじない。

-a はアクティブウィンドウをキャプチャするよ、の意。

-o ディレクトリ で保存先ディレクトリを指定

--format "$2" はファイル名のフォーマットを指定。commandcap にはスロット1 と 2 があり、--format1 あるいは --format2 にて「現在日付時刻をベースとしたフォーマット」を指定できるようになっている(Python の strftime のフォーマット)。で、これらスロットを --format からさらに参照するという感じ。

Q&A

Q: マウスカーソルが揺れるんだけど、これは何?

Ans: カーソルシェイクという commandcap の機能。

キャプチャに成功したことを示すためのもの。

Q: デュアルモニタには対応していない?

Ans: していない。

プライマリモニタ以外だとキャプチャできない。Pillow ライブラリのキャプチャ機能の仕様なので、細かいことは知らない。

Google 日本語入力などで全角入力中に zh で「←」、zjで「↓」が入力される便利機能「ローマ字テーブル」

Google 日本語入力や ATOK では、全角入力中に zh を押すと「←」が入力される。「ローマ字テーブル」という仕組みらしい。

デフォルトの設定を覗いてみた

  • ローマ字の対応すべてが入っている。
  • 加えて、便利な入力が適宜追加されている感じ

便利な入力についていくつか。

矢印記号

  • zh→
  • zj →
  • zk→
  • zl →

HJKL は Vim のカーソル移動に対応している。

かぎ括弧

  • z[ →
  • z] →

『』はよく使うので地味にありがたい。

qq、vv、ll、xx、zz、ss……など、子音の連続打ちには が充てられている。

応用

これは要するに PhraseExpress などでお馴染みの Text Expansion ではないか。

qiita.com

まさか日本語入力システムだけでもできるとは思わなかった。

いじる前に

設定をエクスポートして保存しておくと安心。もし設定をミスっても、エクスポートしておいたデータで復元できる。

はてなブログで Twitter のツイート埋め込みができない時は Markdown + アンダースコアが原因

はてなブログでは [(Twitter-Tweet-URL):embed] という記法でツイートを埋め込むことができる(以下は例)が、

ツイートによってはこれが動作しないことがある。

原因はなんだろうと考えて、ようやく気づけたのでまとめておく。

原因

URL文字列内で Markdown の強調文法が解釈されている から。

たとえば、以下の URL(ダミーなので実在しません)は問題がある。

  • https://twitter.com/_stakiran2_/status/1058521643331407872

問題は _stakiran2_ の部分だ。アンダースコア囲みによる強調(ここでは斜線) が起きている。どうも、これが起きると埋め込み機能が動作しなくなるらしい。はてなブログのバグだろうか?

Markdown 記法でのみ発生する

この問題は、アンダースコア囲みを文法とみなす Markdown 記法でのみ発生する。

HTML 記法など他の記法では発生しない。

Amazon の Kindle 版商品ページにアクセスすると A notice to our users という画面が表示される件

f:id:stakiran:20181101074418p:plain

Firefox 63.0 で Amazon の Kindle 版書籍の商品ページ(たとえば 拙作の電子書籍 ページ)を開こうとすると「A notice to our users」と題したページが表示され、商品ページが表示されないという現象に遭遇した。

これは何?

これは「あなたが使っているブラウザは古いので、最新化してください」という Amazon の伝達事項( と思われるが後述するように最新化してもダメだったのでよくわからん

2018/11/01 07:30 現在、まだ商品ページを見れるようにする方法はわかっていません(後述しますが Amazon 側の不具合じゃないかと想像)

どういうこと?

古いブラウザには脆弱性が存在するので、Amazon では最新を使わせるようにしていると思われる。

先週は表示されなかったので、たぶんつい最近(きりがいいから 2018/11/01 から?)追加された機能だと思われる。

どうすれば元々の商品ページにアクセスできる?

どれを試してもダメだった。どういうことなの……。

方法1. ブラウザをバージョンアップする

Firefox 63.0 を、現時点の最新版である 63.0.1 に更新した。

が、A notice to our users 画面は消えてくれない。

方法2. Amazon アカウントでログイン

ログインしたら違うのかなと思ったが、効果無し。

方法3. 別のブラウザでアクセス

普段は Firefox 使いの私だが、Windows に入ってた IE11 でアクセスしてみた。効果無し。

現時点の結論

結論: とりあえず様子見する

先週までは普通に見れていたので、たぶん最近(きりの良さを考えれば 2018/11/01 から?)導入された機能だと思われる。が、ブラウザを最新化しても効果はないし、Kindle 版の商品ページは何であれこの画面が出るし、 Twitter によるとモバイル端末でも出るようだし、ググっても何の対処方法も出てこないし、で「つい最近リリースされたばかりの機能で」「Amazon 側になんか不具合がある」のではと私は想像している。

時間が経てば解決してくれるかな、と消極的に様子見しようと思う。

サポートに質問してみてもいいけど、A notice to our users ページでは英語圏の電話番号しか書いてないんだよなぁ……。

(参考) 全文の意訳

A notice to our users

ユーザーのみなさまへのお知らせ。

The browser or mobile device you use to access the internet does not support modern security standards that Amazon and others use to protect customers. To complete the entry of your payment information, please upgrade or use a different browser or mobile device to ensure that your experience on Amazon will be uninterrupted.

あなたがインターネットを見るのに使っているブラウザやモバイル端末は、最新のセキュリティをサポートしていません(≒バージョンが古いので脆弱性とかあるかもしれません)。このままだと支払い手続きするのが危ないんで、ちゃんとした(通信が途中で途切れない)ブラウザを使ってください。

To install or update a supported browser please visit any of the browsers website

サポート対象ブラウザのインストール or アップデート方法について、各ブラウザのウェブサイトを見てください。

Windows でパスの通ったディレクトリに入れておくと捗るバッチファイル

個人的によく使うものを紹介してみる。バッチファイルの中身と解説付き。

どちらかといえば「こういうふうにしてバッチファイルを適宜置いてやると便利なので参考にしてね」の意味合いが強いかもしれない。

なお「パスに通す」の意味や手順などは解説しない。

TIPS

最初に全般事項を TIPS としてまとめておく。

ファイル名を指定して実行からでも使える

パスに通したバッチファイルは「ファイル名を指定して実行」からでも使える。本記事で言えば PC ロックの lock.bat は、「ファイル名を指定して実行」から呼ぶことが多いかもしれない。

(余談) 「ファイル名を指定して実行」については拙作ですが以下にまとめてます。

日本語を echo や title で表示する時は文字コードを SJIS にする

バッチファイル(を解釈して実行するコマンドプロンプト)のデフォルトの文字コードは SJIS なので、他の文字コードで日本語を書いていると、表示時に文字化けする。

======== 汎用的なもの ========

「b」で一つ上のディレクトリに移動する(BackのB)

b.bat

@echo off
echo %cd%
echo   VVV
cd ..
echo %cd%

肝は cd .. だけだが、移動前後がわかるように echo で出力している。ここは好みか。

「qq」で今開いているコマンドプロンプトを終了する

qq.bat

@echo off
exit

単に exit するだけだが、exit やら quit と打つよりも圧倒的に速いのでオススメ。

「pp」でプロンプトを「$ 」にする

pp.bat

@echo off
rem my favorite prompt
prompt $$ 

これは完全に私の好みだが、デフォルトのプロンプトは長くて気に入らない。

C:\Users\stakiran> ipconfig /all
^^^^^^^^^^^^^^^^^
ここが長くて気に入らない

私は短い表示の以下が好き。

$ ipconfig /all
^
たった一文字。短い。

「here」でカレントディレクトリをエクスプローラーで開く

here.bat

@echo off
explorer .

「lock N」で N 秒後に PC をロックする

lock.bat

@echo off
set n=%1
title %n%秒後にロック
timeout /T %n% /nobreak
rundll32 user32.dll,LockWorkStation

timeout コマンドは指定秒数だけ待つコマンド。/nobreak はキーを押しても復帰しないオプション。これ入れないと、うっかりキー押しちゃった時に timeout による待ちが終了してしまうすぐロックに入ってしまう。

rundll32 user32.dll,LockWorkStation はおまじない。user32.dll という Windows に備わってるデフォの DLL ファイルに、LockWorkStation という機能(関数)があって、それを呼び出している。

======== Git/GitHub 系 ========

「save メッセージ」でカレントディレクトリの変更を Git コミットする

save.bat

@echo off
setlocal
set /p commitmsg="input your commit message>"
if "%commitmsg%"=="" (
    echo A commit message is required.
    exit /b
)
pushd %cd%
echo saving...
git add -A
git commit -m "%commitmsg%"
popd

特にひとり Git や GitHub している場合、コミットは適当でいいのでなるべく端折りたい。私は save.bat を配置して save コマンドにて実現させた。以下解説。

setlocal は呼び出し元の環境変数を汚染しないための指定。「ここで環境変数定義しても、それはここのローカル限定ですよ」の意。

set /p で入力プロンプトを出しつつ入力を受け付ける。

で、pushd でカレントディレクトリに移ってから git コマンドを叩く。最後に popd でディレクトリを戻す。pushd と popd のくだりはややこしいが、

  • (1) save.bat のあるディレクトリ
  • (2) save.bat の呼び出し元ディレクトリ(カレントディレクトリ)

と、ディレクトリが二つあって、何もしないと (1) 基準で進んでしまうので、明示的に (2) にしているという意図がある。このように「カレントディレクトリはどこなのか、を明示的に指定してやる」と、バッチファイルの呼び出し時にハマりづらくなる。

「glog」でカレントディレクトリの Git ログを TortoiseGit ログダイアログで開く

glog.bat

@echo off
start "" "C:\Program Files\TortoiseGit\bin\TortoiseGitProc.exe" prm=/command:log /path:"%cd%"

======== REST API 系 ========

「token」で GitHub の Personal Access Token をセットする

token.bat

@echo off
set PERSONAL_ACCESS_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

REST API を叩くスクリプトを使う前に実行する。

もちろんトークン情報はプライベート情報なので扱いに注意すること。たとえば「俺が考えた最強の "パスに通しておきたいバッチファイル"」リポジトリをつくって、うっかりトークンを書いた token.bat をプッシュしちゃう、なんてことのないように。

余談だが、AWS で不正アクセス食らって請求を食らう件のトラブルは、大半がトークン(AWS用語でいうとアクセスキー)情報をプッシュしちゃったことが原因である。

「proxy」で今設定している HTTP_PROXY などを見る

proxy.bat

@echo off
echo Result of "set | findstr HTTP"
set | findstr HTTP

set コマンドは(本来は環境変数を設定するコマンドだが何も指定しないと)環境変数を一覧表示する。findstr は UNIX でいう grep。

「proxy1」でプロキシ設定1 を HTTP_PROXY などに設定する

proxy1.bat

@echo off
set HTTP_PROXY=http://(PROXY-SERVER-IP):(PROXY-SERVER-PORT)
set HTTPS_PROXY=https://(PROXY-SERVER-IP):(PROXY-SERVER-PORT)

proxy1 の名前は適宜工夫する。設定個数が少ないなら proxy1 とか proxy2 でも覚えられると思う。「proxy」という単語が打ちづらくて気に入らないなら「p1」とか「p2」でもいいかもしれない。

「proxyoff」でプロキシ設定をクリアする(HTTP_PROXY などをクリア)

proxyoff.bat

@echo off
set HTTP_PROXY=
set HTTPS_PROXY=

======== その他系 ========

「cm」でディレクトリブックマークツールを使う

cm.bat

すいません拙作ツールです。バッチファイル中身は長いので載せません。 GitHub へのリンクだけ。ちなみに 130L くらい。あと ブックマーク情報を cm.bat と同じディレクトリ内に txt で保存する こともご了承ください。

ちなみにこのツールは bashmarks に触発されてつくりました。

「hide」で指定ファイルを秀丸エディタで開く

hide.bat

@echo off
pushd %cd%
start "" "C:\Program Files\Hidemaru\HIDEMARU.EXE" %*
popd

まず秀丸エディタ(に限らずテキストエディタ全般)は、引数としてファイルパスを与えるとそのファイルを開くようになっているので、これを利用する。

pushd については「今開いているコンソールをカレントディレクトリにする」ために必要。というのも、これをしなければ「カレントディレクトリ = hide.batのあるディレクトリ」となってしまい、前者のディレクトリを指さないため、相対的にファイルパスを指定した時に見つけられなくなる。

start を使っているのは、ノンブロッキングで実行するため。これを単に "C:\Program Files\Hidemaru\HIDEMARU.EXE" %* としちゃうと、秀丸エディタを終了するまでこの DOS 窓が閉じられないため煩わしい。

最後の popd はおまじない。呼び出し先のバッチでカレントディレクトリを変えた時は、最後に popd でもとに戻すことを心がけておくとハマらない。

おわりに

コマンドプロンプトを使う機会が多い方は、このやり方で色々カスタマイズすると便利になるのでぜひお試しを。

他にもオススメのバッチファイルなどあれば教えて下さい!

TortoiseGit のログメッセージダイアログでデフォルトの表示期間を絞る

設定でデフォルトの表示期間を絞るか、コマンドライン引数で範囲指定するか。

前提

  • TortoiseGit v2.7.0

方法1. 設定でデフォルトの表示期間を絞る

Settings > General > Dialogs 1

Log messages というグループボックス内の Default Limitation of log messages のドロップダウンメニュー

選択肢として以下がある。

  • No limitation(全範囲)
  • Last selected date(前回選択した範囲)
  • Last N Commit(s)
  • Last N year(s)
  • Last N week(s)

何もいじってなければ一番上の No limitation になっているが、これだとコミット数が多い場合にダイアログ表示が重たい。適宜変えると良い。

参考: How to set the default dates range in TortoiseGit log dialog? - Stack Overflow

方法2. コマンドライン引数で表示範囲を絞る

まず指定ディレクトリにある Git ローカルリポジトリのログダイアログを開くコマンドラインは以下のとおり。

"C:\Program Files\TortoiseGit\bin\TortoiseGitProc.exe" prm=/command:log /path:"指定ディレクトリ"

続いて、直近の N を取得する系のオプションは以下のとおり。

/limit:"N Commit"
/limit:"N Year"
/limit:"N Month"
/limit:"N Week"

たとえば直近 10 件のコミットを表示したい場合は、以下のとおり。

"C:\Program Files\TortoiseGit\bin\TortoiseGitProc.exe" prm=/command:log /path:"指定ディレクトリ" /limit:"10 Commit"

方法1と方法2が混ざった時の挙動

直感的な挙動だが、一応書いておく。

  • Case1: 方法2(コマンドライン引数による指定)で、/limit オプションを指定しない

→ 方法1 で設定したデフォルトの範囲が使われる

  • Case2: 方法2(コマンドライン引数による指定)で、/limit オプションを指定する

→ 方法1 で設定したデフォルトの範囲は無視され、/limit オプションで指定した範囲が使われる

おわりに

TortoiseGit のログダイアログは本当に見やすいが、常に全件表示するのが(特にコミット数が多いリポジトリだと)いまいちだった。が、これで表示範囲を絞れるので、快適になった。

Slack など業務チャットの運用で物申したいこと

職場で Slack によるチャットコミュニケーションが活発化してきたけど、運用面で不満があるので言語化しておく。

雑談や宣伝を Mention (@channel など)で投稿しないでほしい

Mention は言わば口頭で話しかけて割り込む行為に等しい。Mention が許されるのは 割り込んでも仕方ない時 だけだ。

にもかかわらず、「~~というニュースが面白かった」だの「~~の部署で~~になったみたいよ」だの「10日は兼ねての通り役員の~~さんが来訪されます」だの、それ割り込んでまで言うこと? というメッセージがしばしば @channel やら @here やらで Mention されてくる。これはたとえるなら、仕事している人に対して肩をたたいて「ねぇねぇ、~~というニュースが面白かったんだよ」などと言うようなもの。正直言ってウザくないですか。

仕事は集中して取り組むことが大事だ。メールにせよチャットにせよ電話にせよ口頭にせよ、割り込まれるのは望ましくない。Mention という行為は、Mention された側に通知が行くため、れっきとした割り込みになる。

  • Q: 「じゃあ通知を切ればいいじゃないか」
    • Ans: ダメ。割り込み自体は時には必要なので、割り込まれたことに気付くために必要である(通知を切ってると緊急のメッセージを送られても気付けない)。通知を切ることは、耳栓をして声掛けをシャットアウトし、また肩叩かれても無視する行為に等しい。
  • Q: 「チャンネル毎に通知やらミュートやらは制御できるので、うざいチャンネルだけ切ればいいのでは?」
    • Ans: それで済むならそうしたいところだが、 一つのチャンネルにはたいてい重要なネタとどうでもいいネタ(ノイズ)が混在する。切ってしまうと、前者も見逃してしまうことになる
  • Q: 「通知が来ても、通知ダイアログの内容を読んで "あとでいいや" と判断すればいいだけなので大した手間ではないと思うけど」
    • Ans: 手間でいうとそうだが、問題の本質は集中自体が邪魔されることだ。たとえば将棋のプロ棋士が大局で集中して読んでいる最中に、肩を叩かれて割り込まれたら、と考えてほしい。たとえ1秒で済んだとしても邪魔なはずだ。肩を叩かれること自体が問題なのだ。

アバターを入れてほしい

アバターがあるとメッセージの主を視覚的に一瞬で判断できる。文字を読むよりも断然速い。チャットでは膨大な量のメッセージを読むこともあるので、読むのに要する負担はできるだけ減らしたい。アバターはその役に立つ。

別に顔写真である必要はないので、その人であることがわかるようなアバターを何でもいいから入れてほしい。

その人であることが一意にわかるアバターを入れてほしい

繰り返しになるが、業務用チャットにおける アバターの意義は、その人であることが視覚的に一目でわかる ことだと私は思っている。なので何でもいいからといって、判別しづらいアバターは控えてほしいところ。

よくあるのが、仲間意識なのか複数人で同じロゴをアバターにするケース。たとえば同じロゴを設定した人が 5 人いたら、アバターを見ただけでは 5 人の誰かまではわからない。結局名前という文字列まで見ないといけない。

名前はローマ字で統一してほしい

まず名前の 書き方(フォーマット)は統一してほしい。人によって山田太郎だったり太郎山田だったり山田たろうだったりヤマダタロウだったり YAMADA TAROU だったり Taro Yamada だったり tarou yamada だったりする。見づらいったらありゃしない。ただでさえアバターのせいで判別コストが高いのに、名前のせいでさらに高くなってしまっている。

また、名前は出来れば ローマ字で記述してほしい。検索しやすいから だ。「漢字の方が視認性が高い」という意見もあるが、 視認性はアバターでわかる ので、私は打ちやすいローマ字が良い派。ここは好みだろう。

リアクションしてほしい

「了解しました」「読みました」というリアクションがほしい。でないと読んだかどうかがわからない。

仕事は段取りが大事だ。読んだかどうかがわからなければ、「読みました?」と尋ねることになる。尋ねずに進んでもいいが、たまに「まだ読んでないんだけど」と食い違いが起きることがある。いちいち口頭で尋ねていてはチャットの意味がない。

チャットの意義は、(リアルタイムに話し合っているのでなければ)お互いが自分のペースで仕事を進められることにある。そのためには、相手が自分でペースで進められるように、自分のボールを相手に返すことが重要。つまりはメッセージに対する反応である。

私としては「反応が無い=了承した」で良いとも思っているが、この運用はたまに「読んでないんだけど」と衝突が生じる。特に忙しい管理職に顕著。彼らは少しでも楽をしたいがために、こういうところにまで気が回らないし手も回らない。そのくせ、お偉いさんのどうでもいい雑談コメントにはリアクションしていたりする。

リアクションした後で「了解しました」は要らないと思う

二重。無駄。

たぶん「リアクションだけでは失礼ではないか」という意識があるのだろうが、チャットはもっとフランクに使って良いと思う。

ただし、(リアルタイムにコミュニケーションを進めている最中に)了解したことを相手にすぐに伝えたい場合は、Mention を付けて「了解しました」と書くこともある。リアクションしたことを通知させるためだ。これは私もよく使う。

使うルールになったんだからログインしてほしい

一部の使わない勢(主にリテラシー無い人や毎回「この雑務対応早くして」と怒られてる人)のせいで、結局メールでも知らせたり、口頭で知らせたりといった手間が生じている。

面倒くさいことこの上ない。使うルールになったんだからログインしてくれ。使い方わからないなら調べて。訊いて。

私としてはメールや口頭でも知らせるというお世話を廃止する、くらいしても良いと思う。怠け者のせいでこちらが負担を負うのはばかばかしい。

管理人はある程度詳しい人にしてほしい

ワークスペースの管理者が詳しくない人だと、「REST API 使いたいんすけど」 → 「(よーわからんから)ダメ」 が起きる。あるいは 「理由は何?」 → 「ちょっと試したい、触ってみたい」 → 「業務で明確に必要という理由がないとダメ」 というお堅い反応が返ってくる。

CRUD のうち CUD する権限であれば、まあわかる。下手なことすれば実害が出るから。でも Read するだけ、たとえばパブリックチャンネルを Read するだけのトークンくらいなら、許可してくれてもいいんじゃないか。ちょっと試してみるのもダメ?色々触って遊んでみたり試したりするもんでしょ、エンジニアなんだから。そうやって得られるものもある。つくられるものもある。Read だけなら実害は無い。

  • Q: API で取ったデータを悪用するとも限らないでしょ?
    • Ans: それ言っちゃキリないでしょ。手動コピペでもできるじゃん。API 使おうとすると性悪説になるの、なんで?
  • Q: Slack が落ちたらどうすんねん
    • Ans: 落ちません。Rate Limit などの仕組みが入ってます。
  • Q: プライベートでひとり Slack で試せば?
    • Ans: 会社は勉強の機会でもあると思っているので、そういう機会を潰す真似はイヤだなぁ。それに仕事で使ってるパブリックチャンネルに対して実行してみることにこそ意味がある。プライベートで数件投稿しただけでのチャンネルで実験するのと、色んな会話が既になされている会社のチャンネルで試してみるのとでは、意味合いが違うでしょ。
  • Q: そんな暇ないだろ。仕事しろよ?
    • Ans: してます。暇ではないです、学習の時間です。タスク管理をしてイエスマンから脱却すれば、できますよ。 イエスマン言いなりの社畜でタスク管理すらしらない残業当たり前マンと一緒にしないでください

これは一例に過ぎない。管理者が詳しくないと、すぐに一蹴される。一応反論もするが、まあ反論も一蹴されちゃうね。そして反感を買って、目をつけられる。

せっかく良いシステム使ってるのに、管理人の都合で束縛されるの、ほんともったいない。

おわりに

以上、宗教論や好みもあるだろうが、私の思いを書いてみた。

Slack で日記を書く Slack 日記のすすめ

Slack 日記 とはその名のとおり、Slack で日記を書くこと。

f:id:stakiran:20181026213012j:plain

Slack は本来チャットツールだが、その書きやすさと遊び心は日記を書いたり読み返したりすることにも適している。

本記事では Slack で日記を書くことのメリット、手順、所感などについてまとめる。

  • Slack とは
    • ワークスペース
    • チャンネル
    • メッセージ
    • 参考
  • Slack で日記を書くことのメリット
    • ブラウザさえあればどこからでも書ける
    • ファイル管理に頭を悩まさなくていい
    • 画像挿入も簡単
    • 絵文字が使える
    • 検索できる
  • Slack 日記でできないこと
    • カレンダー
    • カテゴリ・タグ
    • インターネットへの公開
    • 他ブログ形式へのエクスポート
  • Slack 日記をはじめる ~アカウント作成~
  • Slack 日記をはじめる ~日記の書き方~
    • (1) チャンネルの作成
    • (2) 日記の書き込み
  • Slack 日記をはじめる ~日記の読み方~
    • (1) チャンネル一覧から辿る
    • (2) カレンダーから巡る
    • (3) 検索から探す
  • Slack 日記をはじめる ~日記の整理~
    • サイドバーからチャンネルを非表示にする
    • 非表示にしたチャンネルをサイドバーに表示する
    • 現在月のチャンネルを一番上に表示したい
    • チャンネル一覧の表示順を思い通りに制御したい
  • Slack 日記をはじめる ~おわりに~
  • 雑多なトピック
    • 有料プランについて
    • バックアップ(エクスポート)について
      • (1) Slack の機能を使う
      • (2) 外部ツールを使う
    • 既存の Slack ワークスペースで Slack 日記を始めるには
    • #general チャンネルを非表示にしたい
  • おわりに
続きを読む