ラベル Windows の投稿を表示しています。 すべての投稿を表示
ラベル Windows の投稿を表示しています。 すべての投稿を表示

2022年7月5日火曜日

Git 2.37.0 で FSMonitor daemon が追加されたことで status が早くなったそうです

むかーし以下の記事で git status が遅かったのが submodule 巡回のせいだったので ignoreSubmodule=dirty で改善したよって記事(※)を書いたのですが、Git 2.37.0 で追加された FSMonitor で速度が大幅改善するそうです。

ブログズミ: git gc --aggressive するそのまえに
Improve Git monorepo performance with a file system monitor | The GitHub Blog

core.fsmonitor と core. untrackedcache を true にすると FSMonitor が有効になり、git status が爆速になるらしい。
試してみたところたしかに速くなってました。9秒だったのが2秒くらい。
(初回はキャッシュ構築するので今まで変わらない速度、2回目以降速くなる)
ちなみに git status --ignore-submodule=dirty だと 0.1秒くらいです。。

まぁこのへんはどんな repository なのかやマシン環境で違うとは思いますが、FSMonitor でたしかに速くなってたので有効にしておきたいと思います。
では。


※自分のブログに書いたほうは、パフォーマンス情報を出力してなんで git コマンドが遅いのか調べて解決しようねって内容で、ignoreSubmodule=dirty の話はおまけではある。


2020年10月12日月曜日

OpenSTF を Windows の Docker 上で動かす

CEDEC での講演もあって OpenSTF を使い始めた人も多いようなのでメモ。



講演でもお話ありましたが、 OpenSTF は DeviceFarmer に変わったそうですね。 (DeviceFarm と似てて検索とかしづらそう) 

OpenSTF のセットアップについては以下の記事が参考になります。

筆者もネットの情報を参考に立ち上げました。

OpenSTF 便利
OpenSTF はリモート操作のためのツールの印象が強いですが、開発者がローカルで実機確認するときにも便利です。
なぜなら、わざわざ端末を操作して社内システムにログインするためのユーザーID/パスワードの入力が必要なかったり、スクリーンショットも簡単に PC 側で取れちゃうからです。

Docker の勉強がてらローカル環境に立ててみることをオススメします。

docker-compose.yml と起動手順
使っている docker-compose.yml がこちら。コメントに手順も書いてます。


メモ
Windows でボリュームマウント
Windows だとホストマシンでマウントできる場所が限られてたりして面倒くさかったので、ホストマシンに DB の永続化をするのではなく、docker volume create したボリュームに永続化するようにしてます。(今はなんか Docker Desktop がいい感じにマウントできるようにする?って聞いてくれるので面倒くささ減ったみたいだけど)
端末が認識しない場合
adb サーバーが起動してないかも。
adb start-server をしてみてください。

端末を返却した際にインストールしたアプリをアンイストールしないようにする
デフォルト設定だと、OpenSTF で端末操作して返却するとその間の変更がクリーンナップされます。これはこれで便利なのですが、個人環境で利用する場合は不便にもなります。
クリーンナップしなくない場合は stf の起動オプションに  --no-cleanup を追加しましょう。
使ってみて困っていること・知りたいこと
たまに操作できない状態になる
USBの抜き差しで復旧したりするが、リモートワークな昨今、物理的な挿抜は難しい。
adb kill-server / start-server で復旧したりもする。
リモートで電源の通電操作が可能な機材(リブーター)が存在するので、それを使って AC 給電な USB-HUB の電源切断で、USB 挿抜をエミュレートできないかと思っている。(未検証)

ポートフォワーディング機能の使い方
端末上で実行しているアプリと特定ポートでお話できるかな?と思っているのだが、うまくいってない。機能を勘違いしているのかもしれないし、使い方・設定の問題かもしれない。

最後に
利用者が増えて知見が増えていくと嬉しいですね。
Airtest も便利なんでそっちも情報増えると嬉しい。(Android 10 になって minitouch 使えなくてツラミ)
以上。

2020年3月31日火曜日

[CircleCI] CLI を Windows で使う

昨今の CI サービスは CLI ツールが用意されていることが多いです。
ジョブを実行したり、コンフィルのバリデーションをしたりでます。
だいたいは、ジョブを本番に push するまえにテストするために使うことを考えて作られていると思います。

CircleCI も例にもれず CLI コマンドがあります。
CircleCI のローカル CLI の使用 - CircleCI

インストール方法はこちらに記載されています。
ぱっと見 Mac/Linux のみで Windows 版はないようにも見えますが、ちゃんと存在しました。
手動でのダウンロード」に「GitHub リリース」へのリンクがあり、そちらから Windows 版もダウンロードできます。


ダウンロードしたら任意のパスに展開し、パスを通せば普通に使えます。

例)バリデーションエラーの様子

修正前
workflows:
  default-test:
    jobs:
      - parallel1:
        i: 0
      - parallel2:
        i: 4

修正後
workflows:
  default-test:
    jobs:
      - parallel1:
          i: 0
      - parallel2:
          i: 4

↑の違いわかりますでしょうか?
i の位置に注目してください。


CircleCI の YAML はなんか他のサービスと比べてインデントが厳しい印象・・
こちらのエラーもインデントがずれていただけでした。これ気づくの難しい・・


正解は i のインデントレベルが 1 段違うだけでした。

最後に
コンフィグをいじる際に何度も本番環境でトライアンドエラーを繰り返すとクレジットを消費してしまってもったいないので、これからはローカルでバリデーションしてから push するようにしたいと思います。

今回は以上です。
では。

2019年10月23日水曜日

Windows Docker toolbox (VirtualBox) で USB 接続を使う

OpenSTF を使ってみようと思って、Windows + Docker toolbox 環境でやってみようとしたところ、すんなりいかなかったのでメモ。

USB コントローラーを有効にする(VirtualBox)
まずは、
docker-machine stop default
で VM を停止します。



USB を認識させるために VirtualBox Manager の設定から「USBコントローラーを有効」にチェックをいれ、コントローラーを選択します。


設定はこれで以上の場合もありますが、Docker toolbox を起動した際に以下のようなエラーになった場合は追加のインストールが必要です。
Starting "default"...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
Unable to start the VM: C:\Program Files\Oracle\VirtualBox\VBoxManage.exe startvm default --type headless failed:
VBoxManage.exe: error: Implementation of the USB 3.0 controller not found!
VBoxManage.exe: error: Because the USB 3.0 controller state is part of the saved VM state, the VM cannot be started. To fix this problem, either install the 'Oracle VM VirtualBox Extension Pack' or disable USB 3.0 support in the VM settings (VERR_NOT_FOUND)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

Details: 00:00:01.074731 Power up failed (vrc=VERR_NOT_FOUND, rc=E_FAIL (0X80004005))
Looks like something went wrong in step ´Checking status on default´... Press any key to continue...
VirtualBox Extension Pack をインストールする
VirtualBox のサイトから Extension Pack をダウンロードしてインストールするだけで良いのですが、現在使用している VirtualBox の Version と同じバージョンの Extension Pack をインストールする必要があるので注意してください。


自分の環境では 5.2.8 だったので、「Download_Old_Builds – Oracle VM VirtualBox」から 5.2.8 の Extension Pack をダウンロードしました。



ダウンロードしたら、あとはインストールするだけです。
(バージョンが違うとインストールに失敗します)



これで、Docker toolbox で USB を使う準備が整いました。
今回は以上です。それでは。

2019年10月16日水曜日

Docker toolbox QuickStart ショートカットを起動したときに history にゴミが溜まるのを抑制する

Docker toolbox の QuickStart でシェルを立ち上げると、ものすごい量の history が溜まって邪魔だったので対策しました。





設定でできること
HISTCONTROL
HISTCONTROL 環境変数をセットしておくと、空白から始まるコマンドや重複するコマンドを履歴に残さないようにできます。

  • ignoredups
    直前と同じコマンドの場合は保存しない
    commandhistory
    ls
    ls
    ls
    ls
    ls -a
    ls
    ls
    ls -a
    ls
  • ignorespace
    空白から始まるコマンドは保存しない
    commandhistory
    ls
    ls
    ls
    ls
    ls -a
    ls
    ls
    ls -a
    ls
  • ignoreboth
    ignoredups + ignorespace
  • erasedups
    重複するコマンドは最新のものだけが保存される
    (履歴にある重複コマンドは削除される)

自分は以下のようにしました。
export HISTCONTROL=ignoreboth

HISTIGNORE
HISTIGNORE に履歴に残したくないコマンドを列挙できます。
コマンドとコマンドの区切り文字は ':' です。

自分は以下のようにしました。
export HISTIGNORE=history:echo:'#*'

設定だけでは限界がある・・
上記の設定をしても、すこしだけ残ってほしくない履歴が減るくらいです。
自分でコマンド打つときにも便利な設定なので、しておいて損はないですが、当初の目的はこれだけでは達成できません。

というわけで、次に続きます。





start.sh を書き換える
できれば外部から非侵入的に解決したかったのですが、自分の知識ではここまでが限界でした。
Docker Toolbox のインストールディレクトリ「C:\Program Files\Docker Toolbox」に start.sh があります。
ショートカットはこちらの .sh を呼び出しており、こちらを少し書き換えることで対策しました。

ファイルの先頭で set +o history をして履歴を無効にします。
※ここで set コマンドの前に1つスペースを上げていることに注意。最初の設定で空白で始まるコマンドを履歴に残さないようにしたので
set +o history
#!/bin/bash
 set +o history

そして、ファイルの末尾あたりで set -o history で履歴を有効にします。
bash の呼び出しあたりは先頭空白を入れて、HISTCONTROL による抑制が効くようにしました。
set -o history

 if [ $# -eq 0 ]; then
   echo "Start interactive shell"
   exec "$BASH" --login -i
 else
   echo "Start shell with command"
   exec "$BASH" -c "$*"
 fi


最後に
これで設定は以上です。
きれいになりました。

2019年6月27日木曜日

Cygwin インストール後に SourceTree で「SSH 認証に失敗」ダイアログが出て接続に失敗してたので対応した備忘録

SSH認証に失敗

OpenSSH は起動していますが、接続に失敗しました。メニューのツール > SSH キーの追加 から、適切なキーを追加する必要があります。

OpenSSH では手動でユーザー名とパスワードによってログインすることはできませんのでご注意ください。その場合、HTTPS 形式の URL を使うか、SSH クライアントを PuTTY/Plink に切り替えてください。これはメニューの ツール > オプション から設定できます。


最近、Windows PC を新調したので、セットアップしていてこんな感じのダイアログが大量に出てきて、ビックリしました。
原因は cygwin をインストールしてパスを通したタイミングで cygwin の ssh agent を見るようになったのと、cygwin の HOME から設定した ssh のキーが見えていなかったためでした。


というわけで、HOME 環境変数を %USERPROFILE% として設定して対応しました。
HOME を Windows の環境変数に設定するのは非推奨というのを見かけますが、今までだいたい HOME を設定してたんですよね。
これなんでなんでしょうね?(疑問で終わる・・・)

ダイアログが大量に出てビックリして、検索したけど、ドンピシャなページにヒットしなかったので備忘録として残しておきます。
今回は以上です。では。



2019年2月12日火曜日

Windows + Git で実行権限をつけて commit する

何回かハマって、何回も調べ直してるので、記憶の定着・備忘録のために自分のブログにも書き残しておくことにした。

Windows + Git Bash では 644 で commit される
chmod +x としておいても commit したときに書き換えられます。
$ git commit -m 'sample action a'
[master e432bd4] sample action a
 4 files changed, 21 insertions(+), 4 deletions(-)
 create mode 100644 action-a/Dockerfile
 create mode 100644 action-a/README.md
 create mode 100644 action-a/entrypoint.sh

この状態でもう一回 chmod +x しても差分として出てこない。

git update-index --add --chmod=+x
パーミッションの変更は上記コマンドで行います。

しょっちゅう忘れるので alias にしました。
git config --global alias.addx 'update-index --add --chmod=+x'

これで、addx エイリアスから chmod +x できるようになりました。



+x/-x 両方に対応したエイリアス
せっかくなのでもう少し汎用的なエイリアスも用意しました。
git config --global alias.chmod '!f(){ cd ${GIT_PREFIX:-.} && git update-index --add --chmod=$1 ${@:2:($#-1)};};f'

git chmod +x hoge
git chmod -x foo bar
のように使えます。

2018年4月25日水曜日

Windows シャットダウンがブロックされるのを防ぐ - DockerToolbox + Windows 10 (VirtualBox)

Windows 10 + Docker Toobox (VirtualBox) 環境を構築。
スタートアップからホスト起動するようにして、個人的に使ってるサービスを立ててるのですが、シャットダウンするときに VirtualBox Interface が "Has active connections." となって終了を阻害してたので、それを解決したときのメモ。

VBoxHeadlessTray をインストールして常駐させておく
参考:
Windows 7 終了時にdockerを自動終了させる。 - イノベートな非日常
VBoxHeadlessTray - Topten Software

2つ目のリンクから VBoxHeadlessTray をダウンロードして、インストール。
VBoxHeadlessTray が常駐するようになります。
これだけで解決!
簡単でした。
(インストール直後はダメでしたが、再起動後からは終了が阻害されることがなくなった)

また、VBoxHeadlessTray により起動時に VM が PowerUp されるようになったので、スタートアップで Docker を起動する必要もなくなりました。
Windows Update とかもあって、この辺あやふやです。すみません。
Tray が自動で PowerUp してくれてる感じがありますが、それだけだとシャットダウンがブロックされました。(VM が headless で起動してない?)
Docker Toolbox の Quick Start をスタートアップに入れてるとエラーが出るのですが、Tray からの起動で正常に立ち上がるっぽい。(タイミングが衝突?)
スタートアップ直後じゃなくて、数秒待ってみると大丈夫そうだったので、しばらくこれで・・・

他にやったこと
常駐させておくよりも設定でなんとかできたらと思っていたので、こちらを先に試していました。
VirtualBoxでホストのシャットダウンにゲストのバーチャルマシンも連動させる パソコン鳥のブログ/ウェブリブログ

VBoxManage で設定をしてあげれば良さそうだったので、マニュアル見ながら試してみたものの結果としてはうまくいきませんでした。
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata default GUI/DefaultCloseAction savestate
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata global GUI/DefaultCloseAction savestate
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata default VBoxInternal2/Watchdog/APIMonitor/IsolationResponse shutdown

サービス化する
これを書いてて思ったのだが、サービス化するってのはどうだろうか?
VirtualBox をサービス化する情報はすぐに見つかったので、今度試してみたいと思います。


あとがき
この記事を書いて少し寝かせていたのですが、その間にたまーに Docker Host の起動状態がおかしくなって、Virtual Box Manager からシャットダウンして起動し直すということがありました。また、たまにシャットダウンがブロックされる症状が出ていたので、根本的な解決とはなってない感じ。。。
(この記事が公開されているということは、ネタ不足になったということだ。)


2017年12月12日火曜日

Windows で再起動時にエクスプローラーの状態を復元

最近お仕事で Mac を使うことが増えたのですが、Mac を起動したときにシャットダウンしたときの状態に戻るのでがすごく便利だなーと思ってたんですね。
これ Windows でもできないのかなーと思って調べたら、(エクスプローラーのみですが)標準機能でできたんですね!
もう10年以上お仕事してますが、めっちゃ損してましたよ!

設定の仕方
表示メニューを開き、一番右にあるオプションボタンからフォルダオプションを開きます。

フォルダオプションを開いたら、「表示」タブを選択します。
詳細設定のリスト中に「ログオン時に以前のフォルダーウィンドウを表示する」があるのでそれにチェックを入れます。

これで設定完了です。

アプリは復元できないのか?
エクスプローラーの状態を復元することはできましたが、Mac のように各アプリの状態も復元したいです。
これに関してググると大抵「Cache My Work を使おう」という記事が見つかります。
PC再起動時にアプリケーションやウィンドウの状態を復元する - @IT自分戦略研究所
再起動後に仕事を再開しやすくする·Cache My Work MOONGIFT
『Cache My Work』で再起動の後にワークスペースを復元! | ライフハッカー[日本版]
Windows 標準でできたら嬉しかったですねぇ…
後述しますが導入は見送りました。

Chrome のタブの状態を戻す
これは個人的によくやっている手段ですが、
Chrome では Ctrl + Shfit + T で以前開いていたタブを開き直すことができます。

履歴は有限ですが、複数回押せばその分タブの状態を復元できます。

会社来て、ブラウザ開いたらまずこのショートカットを打ってます。

最後に
Cache My Work の見送り理由
Windows 標準機能でないってのも理由の1つですが、そもそも再起動することが減ってました。(スリープさせることが多い。会社だとシャットダウンしますが…)
あと、実は再起動時に復元して欲しいものって、エクスプローラーとブラウザの状態がほとんどだなーと思ったからです。
であれば、Cache My Work を使わなくても問題ないので見送りました。

機能はデフォルトON
前の仕事場でもよく言われてきたことですが、なにか機能を作ったとき、
その機能を ON/OFF できるのなら、デフォルトは機能が有効になるようにすべきであると思います。
(当てはまらないケースも当然あると思いますが)
ユーザーが邪魔だな、おせっかいだな、どうしたら機能無効にできるんだろう?って思われようが、機能があることを知ってもらうのが大事です。
「実はその機能あるんです」ってなんの自慢にもならない。



あらためて、ふりかえるイイ機会になりました。
あー

2017年7月3日月曜日

bat ファイルの実行時間を PowerShell で計測する

ググればいっぱい情報出てきますが、個人用備忘録として残しておく。
Windows PowerShell の機能
powershell -C "(Measure-Command { .\HogeHoge.bat | Out-Default }).TotalSeconds"

メモ:
* 秒だけ欲しいので .TotalSeconds
* ミリ秒で欲しいときは .TotalMilliseconds
* .\ をつけないと不明なコマンドになる
* 標準出力が欲しい場合は " | Out-Default" をつける
* 標準エラーはコマンドだけで出る

2017年4月24日月曜日

[Windows][Docker] Host および コンテナの起動をスタートアップに登録

ブログズミ: [Docker] 始めてみたけど躓きまくってるので備忘録として残しておくよ
Docker 始めてみましたが、とりあえず、なので空いてる Windows マシンで動かしてる感じです。

そうすると、マシン再起動することがあったりして、そのたびに Docker を起動するのは面倒でした。
なので、スタートアップに登録してみました。

やり方はとっても簡単です。
「Docker Quickstart Terminal」ショートカットをコピーして、末尾に docker start コマンドを記入するだけです。
(Docker Toobox に付属してる start.sh に引数を渡すと、最後に実行してくれるので、それを利用しています。)
"C:\Program Files\Git\bin\bash.exe" --login -i "C:\Program Files\Docker Toolbox\start.sh" docker start 

あとはこれをスタートアップフォルダにツッコんでください。
簡単ですね^^

今回は以上です。




2016年12月26日月曜日

PowerShell を使って「ネットワークドライブ上の」バッチファイルを管理者権限で実行する

「ブログズミ: PowerShell を使ってバッチファイルを管理者権限で実行する」 の補足記事です。
上記との違いは「ネットワークドライブ上の」バッチファイルである点です。
以下がそのバッチ



前回と異なる点は、 PowerShell で自分自身を起動する前に net use でトライブ割当をしている点です。
管理者権限のユーザーに移動すると、割当ていたネットワークドライブが見えない場合があるので、このような対応をしています。

参考

2016年10月31日月曜日

FindFirstFile にルートパスを指定した場合の挙動について

FindFirstFile(FindFirstFileEx) 関数の lpFileName にルートパスは指定できません。
MSDN でそのように記載されています。
FindFirstFile 関数
FindFirstFile の lpFileName パラメータでは、最後に円記号(\)を付けるかどうかにかかわりなく、ルートディレクトリを指定することはできません。




指定できないのはわかりましたが、実際に指定してしまった場合にどうなるのか検証したところ、厄介な挙動だったので備忘録として残しておきます。

検証にしようしたコードはこちら。



これを実行するとこのような出力になります。

カレントディレクトリがルートパスでない場合

このように INVALID_HANDLE ではなく Find が成功し、しかもなぜかカレントディレクトリ名が取得できます。


これが、カレントディレクトリがルートパスだった場合

期待?通り INVALID_HANDLE が返ります。


ちなみに、FindFirstFileExTest がコメントアウトされていますが、FindFirstFileEx でも同じ挙動を示しました。
(Windows 10 HOME version 1607 build 14393.321)
古い OS での検証はできていないので、もしかしたら挙動が異なるかもしれません。

2015年8月3日月曜日

Windows 10 にしてん

ノートPC を Windows 10 に更新しました。
自動でなかなか落ちてこなかったので、「メディア作成ツール」を使ってやりました。
特に問題も発生せず、更新できちゃいました。
もともと Windows 8.1 だったのですが、なんかあんまり変わった感じがしませんね。

変わった所といえば、スタートメニューですが、
ちょっと微妙な感じ…ただ、慣れれば問題ないでしょう。
仮想デスクトップとかコマンドプロンプトで Ctrl + V が使えるようになりましたしね。

今週は以上です。では。

2015年4月6日月曜日

net use でシステムエラー 1219

net use z: \\hogehoge\jenkins のようにネットワークドライブを割り当てて Jenkins のジョブから参照してたりするんですが、これがたまに以下のようなエラーで失敗することがありました。

システム エラー 1219 が発生しました。

同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。サーバーまたは共有リソースへの以前の接続をすべて切断してから、再試行してください。

いつもは一度ログオフして再接続してましたが、コマンドだけで解決できたので備忘録として残しておきます。

状況
誰かが接続した状態になっているため接続できないようですが、net use コマンドで接続を確認してもそれらしいものは出ず… 試しにエクスプローラーでネットワークにアクセスしたら認証なしにフォルダが開けたので、どうやらログイン状態であるのは確かなようでした。

ググってみたところ、以下の記事が見つかりました。

みんな忘れてしまうんだ: [windows]ファイル共有を別ユーザーでログインする方法。(ネットワークフォルダの切断について)

こちらに書いてありますが、Windows 2000 以降ではエクスプローラーで接続したネットワークフォルダは net コマンドでは切断できないようです。

解決方法
上記のブログでは hosts ファイル編集して複数接続可能にしていましたが、もっと簡単に解決できます。

解決方法:
net use \\hogehoge\jenkins
net use \\hogehoge\jenkins /delete

net use /delete が net コマンドで接続したものしか切断できないのであれば、
net use で該当のネットワークに接続してから、切断すれば良いのです。

この方法がすべての環境でうまくいくかはわかりませんが、筆者環境ではうまくいきました。

今回は以上です。