窓を作っては壊していた人のブログ

提督の窓や成績の窓を作ってました.今では適当に好き勝手に開発をしてます.

RxJS v5 -> v6への移行で詰まったことメモ

約2週間ぐらい前にRxJSのv6がリリースされました.

rxjs/CHANGELOG.md at master · ReactiveX/rxjs · GitHub

C#ユーザの方はSystem.Reactiveのnamespaceを使っておけば取り合えず大丈夫みたいな大変幸せな世界で生活することが出来るのですが,今回のRxJSはnamespaceが割とバージョンで変わります.

このnamespace周りが移行作業を難しくするものです. やっていきましょう.

とりあえずMIGRATION.mdのRxJS v5.x to v6 Update Guideを進めればいい感じに済みます.

ある程度古いプロジェクトでいろんな個所に修正箇所が分散している状態の場合rxjs-tslintを使うことで自動的に修正を行うことが出来ます. 修正内容としてはimportの修正ぐらいに留まってしまうので,自分で頑張って直しましょう.

そこまでは出来るんです. Update Guideに則って修正したにも関わらず,環境によってはrxjs-compatをパッケージから除外するとビルドが通らなくなるという現象が起こります.

私はここに非常に悩まされたのですが,原因としては簡単で一般的に使われてる便利メソッドを全部一気にimportするみたいなハックとして使われている import rxjs/Rx

この一文がすべての元凶になります. 他のimportの仕方をしてもたいていrxjs-tslintがいい感じに直してくれますが,こういうのに対しては無意味でした.

まとめ

  1. RxJS v5.x to v6 Update Guideに則って進める
  2. rxjs-compat入れたり,rxjs-tslintを入れたりして修正を進めてまずは最低限動くように
  3. rxjs-compatへの依存を断ち切るために新しい記法を採用する
  4. rxjs-tslintでエラーがないか確認
  5. import 'rxjs/Rx' をしているとビルドは通らないけどrsjs-tslintは問題なく進むので注意

さあv7の準備もしないとな...

Automatorで大きなディスプレイでも快適カーソル移動を目指した

新しい環境に移り,開発環境(物理)も大きく変化しました. 今まで研究室のデスクでMacBookPro (13inch)と22型ワイドのディスプレイを使っていたのですが,MacBookPro (15inch)と27型ワイド(しかも4k!(予定))というようにデカくなります.

さて,そこまで大きくなると何が問題になるかというと,ポインタの移動およびポインタどこにいる問題です. 広いディスプレイの中の米粒のようなポインタを探すのは非常に困難で,ある意味でのホームポジションである左上のリンゴマークに逃してから移動とかをやってきた人もいるかもしれません(私です). 今のような解決方法は非常に無駄な動きが多く,手首とまたポインタを探す首や目を労る必要がある私達エンジニアには解消すべき問題だと考えます.

そこで本記事ではそういった問題を少しでも解消できるように自分が行っている解決策を紹介いたします.

まず初めに,簡単にできるポインタどこにいる問題の解消です.

ポインタのサイズを(一時的,恒久的に)大きくする

f:id:yamachu_co:20180503163133p:plain

システム環境設定のアクセシビリティ内の項目であるディスプレイにある設定をいじりましょう. はじめはポインタを大きくすると違和感がすごいですが,慣れると非常に便利です. またシェイクすると大きくなる設定も環境によっては有効です.というのもデュアルディスプレイなどディスプレイが複数枚の時はどのディスプレイにいるかわからないので,シングルディスプレイの環境では有効でしょう. 素早く動かすの面倒だからWindowsみたいにCtrlキー押したら波紋みたいにポインタ中心に何か出てくれないかなぁ...

ポインタの移動

この解決方法は友人の困った声から生まれたものです.

実際に作業をしてみるとアクティブなウィンドウが別のディスプレイに移った時が一番ポインタの移動量が多く,また見つけにくい状況であるというに気づきました. であれば,アクティブなウィンドウのセンターにマウスポインタを持っていけばいいではないかという解決策が出てきました.

ということで,AppleScriptAutomator,そしてKarabiner-Elementsを併用して実際に行ってみました.

GitHub - yamachu/CursorCentering: (Mac) アクティブなウィンドウにカーソルを移動させる支援スクリプト

詳しいインストールや使い方に関してはリポジトリのREADMEを見ていただければと思います.

f:id:yamachu_co:20180503192027g:plain

このようにキーボード操作のみでマウスポインタを指定の位置に移動させることが出来ると無駄に手首を動かすことなく,また首を振ることなくポインタを探すことが出来ます. ぜひ試してみてください.(gifだとちょっとわかりづらいですね...)

開発裏話

GUIの自動化や,他のコマンドラインアプリケーションとの連携でAppleScriptAutomatorを使ったことはあったのですが,最近全く使っていなかったので制約が増えていたことに気づきませんでした. というのも,Sierra以降だとSIPだったりセキュリティの強化により,GUIアクセシビリティへのアクセスが非常に制限されるようになりました.

本来であればKarabiner-Elementsを使わずとも,AutomatorGUIの操作をサービス化し,OS付属のキーバインドで設定が行えるのですが, 実際に制御するのに使用しているosascriptへ許可を渡すことが出来ずに利用することが出来なくなっていたのです. アクセシビリティのコンピュータの制御の許可は~.appなどのアプリケーション化したものが前提となっているためosascriptのようなコマンドラインアプリケーションには許可することが出来ない,といった感じです.

スクリプトエディタからAppleScriptをアプリケーション化することも可能ですが,今回自分が作成したコードはアクティブなアプリケーションが保持するWindowを制御するという内容だったために,制御アプリケーションをアクティブにしてはいけないという制限がありました. そのため今回はグローバルにキーボードのイベントをフックしてくれるKarabiner-Elementsを採用した,というわけです. 他にいい解決手段をご存じの方がいましたら,ぜひともコメントやTwitterなどで教えてくださると嬉しいです.