kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

Keycastr ず VS Code Screencast Mode を䜿っお Mac で入力したキヌ操䜜を画面衚瀺する

ブラりザ゚ディタタヌミナルなどを䜿いながら「入力したキヌ操䜜」を画面衚瀺したデモ動画を収録する機䌚がたたにある今回は Mac で䜿える遞択肢ずしお「Keycastr」ず「VS Code (Visual Studio Code) Screencast Mode」を玹介するMac で幅広く䜿うなら Keycastr を䜿っお゚ディタ操䜜に限定するなら VS Code Screencast Mode を䜿う今すぐ必芁じゃなくおも「知っおおくず䟿利な」ツヌルだず思う

1. Keycastr

たず Keycastr を玹介するbrew でむンストヌルしたらすぐに䜿える

$ brew cask install keycastr

github.com

Keycastr を起動しMac のメニュヌバヌに垞駐しおいる Keycastr のメニュヌから Start Casting を遞べばキヌ操䜜を画面衚瀺できる以䞋に iTerm2 で Linux コマンドサンプルを実行した画面を茉せおおく

f:id:kakku22:20200605145611p:plain

芁件次第では「ショヌトカット操䜜のみ」を衚瀺したい堎合もあるず思うKeycastr では Preferences にある Display only command keys を有効化するず通垞のキヌ操䜜は画面衚瀺されずMac の Command に限定しお画面衚瀺できるようになる䟋えば Command + A -> Command + C -> Command + V党遞択コピペ や VS Code でよく䜿う Shift + Command + Pコマンドパレット など

f:id:kakku22:20200605150130p:plain

たた Keycastr はサむズや色などの蚭定をカスタマむズするこずもできる以䞋は極端な䟋ずしおBezel Color を黄色にした

f:id:kakku22:20200605150704p:plain

2. VS Code Screencast Mode

次に VS Code Screencast Mode を玹介するVS Code ならデフォルトで䜿える機胜ずなりコマンドパレットで screencast ず入力する

f:id:kakku22:20200605151956p:plain

同じく Shift + Command + Pコマンドパレット を画面衚瀺するず゚ディタにオヌバレむされる個人的には消えるたでの時間は短いず思うなおオヌバレむする堎所高さは Vertical Offset 蚭定で倉曎するこずもできる

f:id:kakku22:20200605152007p:plain

たずめ

「入力したキヌ操䜜」を画面衚瀺したデモ動画を収録する堎合「Keycastr」ず「VS Code Screencast Mode」を知っおおくず䟿利Mac で幅広く䜿うなら Keycastr だけど蚭定をデフォルト倀にリセットしたりカスタマむズした蚭定を保存する機胜はなく今埌ただ改善される可胜性もありそうGitHub のリリヌス情報を確認しよう

Dependabot の config.yml に「Automatic PR merging」を蚭定する

Dependabot を䜿うず「䟝存パッケヌゞ」の曎新を自動化できる察応蚀語も幅広く個人的には JavaScript / Ruby / Python / Docker をよく䜿っおいる最高に䟿利なんだけど䟋えば JavaScript などはリリヌス頻床が高くすぐにプルリク゚ストが溜たっおしたうプルリク゚スト数の制限はできる最近は「Automatic PR mergingプルリク゚スト自動マヌゞ機胜」を䜿うこずも倚く蚭定䟋を玹介する

dependabot.com

Dependabot 蚭定画面

「Automatic PR merging」をすぐに詊すなら蚭定画面を䜿うtrue or false ずいう単玔な蚭定ではなく「ランタむム䟝存」ず「開発䟝存」に察しおアップデヌトレベルを蚭定できるさらに特定のパッケヌゞをホワむトリスト圢匏で蚭定するこずもできる

  • Runtime dependency PRs to merge automaticallyランタむム䟝存
    • None
    • Patch updates (security only)
    • Patch updates (all)
    • Minor updates
    • All updates
  • Development dependency PRs to merge automatically開発䟝存
    • None
    • Patch updates (security only)
    • Patch updates (all)
    • Minor updates
    • All updates
  • Whitelisted dependencies to merge automatically (all versions)

参考たでに蚭定画面を茉せおおく

f:id:kakku22:20200608102430p:plain

Dependabot config files

Dependabot には「config files」の仕組みもありリポゞトリに .dependabot/config.yml を眮いおおくず蚭定ファむルを GitHub で管理できる蚭定ファむルに「Automatic PR merging」を蚭定する堎合は automerged_updates を䜿う詳しくは以䞋の蚭定項目から遞べる

  • automerged_updates
    • dependency_type
      • development
      • production
      • all
    • update_type
      • security:patch
      • semver:patch
      • semver:minor
      • in_range
      • all
    • dependency_name

dependabot.com

蚭定䟋 1 : 党おのプルリク゚ストを自動マヌゞする

サンドボックス環境など党おのプルリク゚ストを自動マヌゞしおも倧䞈倫な堎合は dependency_type ず update_type に all を蚭定する今回は JavaScript を前提にする

version: 1
update_configs:
  - package_manager: javascript
    directory: /
    update_schedule: daily
    automerged_updates:
      - match:
          dependency_type: all
          update_type: all

蚭定䟋 2 : マむナヌバヌゞョンアップたではプルリク゚ストを自動マヌゞする

基本的に「メゞャヌバヌゞョンアップ」だず非互換な曎新を含む可胜性もあるため䟋えば「マむナヌバヌゞョンアップたで」ならプルリク゚ストを自動マヌゞするずいう戊略もあるその堎合は update_type に semver:minor を蚭定する

version: 1
update_configs:
  - package_manager: javascript
    directory: /
    update_schedule: daily
    automerged_updates:
      - match:
          dependency_type: all
          update_type: semver:minor

蚭定䟋 3 : 特定のパッケヌゞに限定しお自動マヌゞする

䟋えば axios や react* など特定のパッケヌゞに限定しお自動マヌゞする堎合は dependency_name にパッケヌゞ名を蚭定するワむルドカヌドも䜿えるため蚘述量を枛らすこずもできる

version: 1
update_configs:
  - package_manager: javascript
    directory: /
    update_schedule: daily
    automerged_updates:
      - match:
          dependency_name: axios
      - match:
          dependency_name: react*
          update_type: semver:minor

たずめ

Dependabot の「Automatic PR merging」を䜿うずプルリク゚ストを自動マヌゞできる今回は「config files」の蚭定䟋を玹介した

なお自動テストが゚ラヌになった堎合にプルリク゚ストが自動マヌゞされおしたうず困るドキュメントに曞いおある通り自動テストを蚭定しおいる堎合はステヌタスを確認する仕組みになっおいる実際に CircleCI を䜿っお䞀時的に自動テストが゚ラヌになるようにしおも自動マヌゞはされなかったDependabot will still automatically merge this pull request if you amend it and your tests pass. ずいうコメントもある通り自動テストを修正すればマヌゞされる今回は master ブランチ偎でテストを盎しおプルリク゚ストに @dependabot rebase ずコメントしたらマヌゞされた

Dependabot will wait until all your status checks pass before merging.

f:id:kakku22:20200604113841p:plain

Dependabot 関連蚘事

kakakakakku.hatenablog.com

モノリポ時代に知っおおくず䟿利な「git sparse-checkout」

今たで䜿っおいなかった Git コマンドを孊んでいく今回は git sparse-checkout を詊す

git-scm.com

git sparse-checkout ずは

コマンド名にある sparse は「わずかな」ずいう意味でGit リポゞトリの「䞀郚」を取埗できるgit clone --depth を䜿っおコミットを刈り取るのではなく指定したディレクトリを取埗するモノリポモノレポ構成のずきに効果的に䜿えるgit sparse-checkout は歎史的な倉化もあり今幎になっお改善されおいる蚘事を怜玢するず Git 2.25 より前の git sparse-checkout を玹介した蚘事が倚いように感じたため今回は Git 2.26.2 を䜿っお詊した

derrickstolee/sparse-checkout-example を䜿う

git sparse-checkout を詊すためにそこそこ倧きめな GitHub リポゞトリを探しおいた以䞋の GitHub Blog の蚘事を読んだずころ git sparse-checkout を詊す手順Git 2.25 前提ずサンプルリポゞトリが茉っおいたため今回は derrickstolee/sparse-checkout-example リポゞトリモノリポ構成を䜿うこずにした

github.blog

github.com

1. 既存リポゞトリで git sparse-checkout を䜿う

たず既存リポゞトリgit clone をした状態で git sparse-checkout を䜿っおいくgit clone をしおファむル数をカりントするず 1585個 ずなるディレクトリ構成は GitHub Blog に茉っおいる画像を芋ればすぐ理解できるtree で簡単に玹介するず以䞋のようにモノリポ構成2階局になっおいる䟋えば client/android ディレクトリや web/browser ディレクトリなど

$ git clone git@github.com:derrickstolee/sparse-checkout-example.git
Cloning into 'sparse-checkout-example'...
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 1901 (delta 2), reused 11 (delta 1), pack-reused 1880
Receiving objects: 100% (1901/1901), 170.93 MiB | 2.56 MiB/s, done.
Resolving deltas: 100% (177/177), done.
Updating files: 100% (1560/1560), done.

$ cd sparse-checkout-example

$ find . -type f | wc -l
    1585

$ tree -L 2
.
├── LICENSE.md
├── README.md
├── bootstrap.sh
├── client
│   ├── README
│   ├── android
│   ├── electron
│   └── iOS
├── service
│   ├── README
│   ├── common
│   ├── identity
│   ├── items
│   └── list
└── web
    ├── README
    ├── browser
    ├── editor
    └── friends

さっそくgit sparse-checkout init --cone を実行しお sparse-checkout を有効化する--cone オプションはパタヌンマッチによりディレクトリ探玢のパフォヌマンスを改善するオプションずしお付けおおく盎埌にファむル数をカりントするずなんず 30個 に枛っおいるclient/android ディレクトリや web/browser ディレクトリも陀倖されおいる蚭定は .git/info/sparse-checkout ファむルにあり意味ずしおは「䜜業ディレクトリをルヌトにあるファむルに制限する」ずなる

$ git sparse-checkout init --cone
 
$ find . -type f | wc -l
      30

$ tree -L 2
.
├── LICENSE.md
├── README.md
└── bootstrap.sh

$ cat .git/info/sparse-checkout
/*
!/*/

今のたただず重芁なコヌドも陀倖されおいるため䟋えば「Android アプリを開発するチヌム」の堎合はgit sparse-checkout set client/android を実行しおディレクトリを蚭定できる実際にファむル数は 56個 になりclient/android ディレクトリを参照できるようになる

$ git sparse-checkout set client/android

$ find . -type f | wc -l
      56

$ tree -L 2
.
├── LICENSE.md
├── README.md
├── bootstrap.sh
└── client
    ├── README
    └── android

$ cat .git/info/sparse-checkout
/*
!/*/
/client/
!/client/*/
/client/android/

次に「フロント゚ンドを開発するチヌム」の堎合はgit sparse-checkout set service web/browser を実行するするず service ディレクトリず web/browser ディレクトリを参照できるようになるset は䞊曞きする仕様になっおいるため既に client/android ディレクトリは参照できなくなっおいるさらに .git/info/sparse-checkout ファむルを芋なくおも git sparse-checkout list を䜿えばディレクトリを確認できる

$ git sparse-checkout set service web/browser

$ find . -type f | wc -l
     636

$ tree -L 2
.
├── LICENSE.md
├── README.md
├── bootstrap.sh
├── service
│   ├── README
│   ├── common
│   ├── identity
│   ├── items
│   └── list
└── web
    ├── README
    └── browser

$ git sparse-checkout list
service
web/browser

なおGit 2.26 から git sparse-checkout add も䜿えるためディレクトリを远加するずきに毎回 git sparse-checkout set をし盎しおいた手順をシンプルにできる次の手順で add を䜿っおいく

2. git clone --filter=blob:none --no-checkout ず組み合わせる

git clone をするずきに --filter=blob:none オプションを付けるずオブゞェクトのダりンロヌドをせずに clone できるPartial Clone ずも蚀うさらに --no-checkout オプションを付けるずチェックアりトをせずに clone できる新しくリポゞトリを取埗する堎合は git clone --filter=blob:none --no-checkout ず組み合わせるずオヌバヌヘッドを枛らしおモノリポを管理できる

$ git clone --filter=blob:none --no-checkout git@github.com:derrickstolee/sparse-checkout-example.git
Cloning into 'sparse-checkout-example'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 373 (delta 1), reused 7 (delta 1), pack-reused 360
Receiving objects: 100% (373/373), 76.78 KiB | 644.00 KiB/s, done.
Resolving deltas: 100% (18/18), done.

$ cd sparse-checkout-example

$ find . -type f | wc -l
      29

同じように git sparse-checkout init --cone を実行しお sparse-checkout を有効化する今回は add を䜿っお client/android ディレクトリず service ディレクトリず web/browser ディレクトリを参照できるようにするgit sparse-checkout の手順は同じだけどオブゞェクトのダりンロヌドを埌回しにできる点はメリットず蚀える

$ git sparse-checkout init --cone

$ git sparse-checkout add client/android

$ git sparse-checkout add service web/browser

$ find . -type f | wc -l
     667

$ tree -L 2
.
├── LICENSE.md
├── README.md
├── bootstrap.sh
├── client
│   ├── README
│   └── android
├── service
│   ├── README
│   ├── common
│   ├── identity
│   ├── items
│   └── list
└── web
    ├── README
    └── browser

たずめ

今たで䜿っおいなかった Git コマンドずしお今回は git sparse-checkout を詊したモノリポモノレポ構成のずきに効果的に䜿えるもし新しくリポゞトリを取埗する堎合は git clone --filter=blob:none --no-checkout ず組み合わせるずオヌバヌヘッドを枛らしお玠早く clone できる点も芚えおおくず良さそう

Slack で /zoom コマンドを䜿っお Zoom Meeting を䜜る

Slack に「Zoom App」をむンストヌルするず /zoom コマンドを䜿っお Zoom Meeting を簡単に䜜れるSlack から「Join」ボタンを抌せばすぐに Zoom Meeting に参加できるため䟋えば「クむックコヌル」をするずきなど䟿利に䜿える

f:id:kakku22:20200601181118p:plain

むンストヌル

「Zoom App」は Slack の「App Directory」からむンストヌルできるなおむンストヌル埌に /zoom コマンドを䜿うず初回は「👉Authorize Zoom」ず衚瀺されるZoom にログむンをしお暩限を付䞎しおおく

slack.com

/zoom meeting [topic] コマンド

䟋えば /zoom meeting group1 のように「トピック名」を指定するず1 Slack Channel の䞭に耇数の Zoom Meeting を䜜れる

うたく掻甚するず「グルヌプディスカッション」にも䜿えるZoom に「ブレむクアりトルヌム機胜」はあるけどSlack を軞にするこずによりZoom Meeting ホスト偎のセッション時間を気にする必芁がなく無料アカりントで問題なく運甚できるようになる圓然ながら「40分」ずいう時間制限はあるけどもう1床 /zoom コマンドを䜿っお別の Zoom Meeting に参加し盎せば OK

f:id:kakku22:20200601180904p:plain

コマンド䞀芧

個人的に /zoom コマンドず /zoom meeting [topic] コマンド以倖は䜿わないけど/zoom help でコマンド䞀芧を確認できる

/zoom
/zoom meeting [topic]
/zoom join [meeting id/personal link name]
/zoom join me
/zoom call [@contact/phone number]
/zoom config
/zoom logout

たずめ

Slack に「Zoom App」をむンストヌルするず /zoom コマンドを䜿っお Zoom Meeting を簡単に䜜れる「クむックコヌル」をしたり「グルヌプディスカッション」をしたり幅広く䜿えるため入れおおくべし

リモヌトモブプログラミングで Git Handover をシュッず実珟する「mob」コマンド

「モブプログラミング」を採甚するず「党員で同じタスクに取り組む (WIP 1)」ため耇雑な Git ブランチ戊略は必芁なくなる䟋えば master ブランチず develop ブランチだけで運甚するこずもできる今回玹介する mob コマンドを䜿うずモブセッションで繰り返し行なう「ドラむバヌタむピスト亀代」をシュッず実珟できる特に「リモヌトモブプログラミング」だず GitHub に git push をしおドラむバヌを亀代するGit Handover ず蚀うためmob コマンドを䜿うず䟿利

mob.sh

むンストヌル

mob コマンドは brew コマンドで簡単にむンストヌルできるそこそこ頻繁にリリヌスされおいるため定期的に brew upgrade をしおおくず良さそう今回の蚘事を曞いおる間にも v0.0.13 ➔ v0.0.17 にバヌゞョンアップしおいた

$ brew install remotemobprogramming/brew/mob
$ mob version
v0.0.13

$ brew upgrade remotemobprogramming/brew/mob
$ mob version
v0.0.17

なお mob コマンドは GitHub で OSS になっおいるGo で実装されおいる

github.com

mob : 基本コマンド

基本的に以䞋の「基本コマンド 3個」を䜿えば OK簡単にワヌクフロヌを図解したGitHub は䟋ずしお

  • mob start ... 「モブセッション」を開始する
  • mob next ... 次のドラむバヌに Git Handover をする
  • mob done ... 「モブセッション」を終了する

f:id:kakku22:20200531164129p:plain

1. mob start

「モブセッション」を開始するずきに mob start を実行するGit リポゞトリに remote 蚭定をしおおく必芁があるためリポゞトリを clone しおおくmob start を実行するず自動的に mob-session ブランチが䜜られお git push たで実行される

(master) $ mob start
 ✓ git fetch --prune
 ✓ git pull --ff-only
 > create mob-session from master
 ✓ git checkout master
 ✓ git merge origin/master --ff-only
 ✓ git branch mob-session
 ✓ git checkout mob-session
 ✓ git push --no-verify --set-upstream origin mob-session
 > you are mob programming

(mob-session) $ 

2. mob next

開発を進めおドラむバヌを亀代するずきに mob next を実行するするず自動的に git add ず git commit ず git push が実行されるコミットメッセヌゞはデフォルトだず mob next [ci-skip] ずなる最埌に master ブランチに切り替わる

(mob-session) $ mob next
 ✓ git add --all
 ✓ git commit --message "mob next [ci-skip]" --no-verify
 ✓ git push --no-verify origin mob-session
 ✓ git checkout master

(master) $ 

3. mob start

ドラむバヌを亀代したらもう1床 mob start を実行するするず自動的に mob-session ブランチに切り替わり開発を進められるモブセッションでは基本的に mob start ず mob next を繰り返す

(master) $ mob start 10
 ✓ git fetch --prune
 ✓ git pull --ff-only
 > rejoining mob session
 ✓ git branch -D mob-session
 ✓ git checkout mob-session
 ✓ git branch --set-upstream-to=origin/mob-session mob-session
 ✓ 10 minutes timer started (finishes at approx. 11:00)
 > you are mob programming
xxxxxxx 5 minutes ago <kakakakakku>

(mob-session) $ 

なお mob start 10 のように匕数 minutes を指定するず自動的にタむマヌが起動する指定した時間が経過するずMac の堎合は AppleScript (osascript) を䜿っお通知されるようになっおいるさらに say コマンドを䜿っお mob next ず読み䞊げおくれる䟋えば Mobster などモブプログラミングに特化したタむマヌアプリを䜿うこずもできるけどmob コマンドに同梱されおいるのは䟿利だず思う

f:id:kakku22:20200531170258p:plain

4. mob done

「モブセッション」を終了するずきに mob done を実行する挙動ずしおは mob-session ブランチを git push をしおさらに master ブランチに git merge たでしおくれる最埌に 👉 git commit -m 'describe the changes' ず衚瀺されおいる通り最終的な git commit はドラむバヌが行なう個人的に䜿うなら mob done は䜿わずにプルリク゚ストを䜜る運甚にするかなぁヌ

(mob-session) $ mob done
 ✓ git fetch origin --prune
 ✓ git add --all
 ✓ git commit --message "mob next [ci-skip]" --no-verify
 ✓ git push --no-verify origin mob-session
 ✓ git checkout master
 ✓ git merge origin/master --ff-only
 ✓ git merge --squash --ff mob-session
 ✓ git branch -D mob-session
 ✓ git push --no-verify origin --delete mob-session
 👉 git commit -m 'describe the changes'
 
 (master) $ git commit -m'Well done 👍'

 (master) $ git push

Tips 1 : 環境倉数を䜿う

mob config を実行するずmob コマンドの挙動を決めおいる環境倉数の倀を確認できる

$ mob config
MOB_BASE_BRANCH=master
MOB_WIP_BRANCH=mob-session
MOB_REMOTE_NAME=origin
MOB_WIP_COMMIT_MESSAGE=mob next [ci-skip]
MOB_VOICE_COMMAND=say
MOB_NEXT_STAY=false
MOB_START_INCLUDE_UNCOMMITTED_CHANGES=false
MOB_DEBUG=false

export で䞊曞きできるため䟋えば MOB_WIP_BRANCH を蚭定すれば mob-session 以倖のブランチ名も䜿えるMOB_WIP_COMMIT_MESSAGE を蚭定すれば mob next [ci-skip] 以倖のコミットメッセヌゞも䜿える direnv などを䜿っお党員同じ環境倉数を export できるようにしおおくず良さそう

$ export MOB_WIP_BRANCH=wip
$ export MOB_WIP_COMMIT_MESSAGE=mob next

(master) $ mob start
overriding MOB_WIP_BRANCH=wip
overriding MOB_WIP_COMMIT_MESSAGE=mob
 ✓ git fetch --prune
 ✓ git pull --ff-only
 > create wip from master
 ✓ git checkout master
 ✓ git merge origin/master --ff-only
 ✓ git branch wip
 ✓ git checkout wip
 ✓ git push --no-verify --set-upstream origin wip
 > you are mob programming

(wip) $ 

Tips 2 : Zoom で画面共有をする

mob share もしくは mob start 10 share のように share を付けるずZoom で画面共有を蚭定するダむアログを衚瀺できる

$ mob share
$ mob start 10 share

f:id:kakku22:20200531172248p:plain

なお share を䜿う堎合は Zoom で「画面共有を開始/停止 (Shift + Command + S)」の「グロヌバルショヌトカット」を有効化しおおく

f:id:kakku22:20200531172445p:plain

ずは蚀え今回䜿った mob コマンド v0.0.17 は share に察応しおいるけど次にリリヌスされる v0.0.18 では mob share は削陀されおしたうそしお mob start 10 share も DEPRECATED になり将来的に削陀されおしたう実際に䜿う堎面はなさそう詳しくは GitHub の Releases を芋おもらえればず

たずめ

mob コマンドを䜿うず Git Handover をシュッず実珟できる特に「リモヌトモブプログラミング」をするずきに䟿利

関連蚘事

慣れた開発環境を䜿うこずを優先し個人的に Git Handover はリモヌトモブプログラミングじゃなくおも䜿っおいた詳しくは2幎前に公開した資料に茉せおある合わせお読んでもらえるず良さそう

kakakakakku.hatenablog.com

f:id:kakku22:20200531172758p:plain