DEVGRU

プログラミングと競馬予想について書きます

Re: 愛すべきAngularとのお別れ。2,3年後を見据えReactにリプレイスする話

note.com

上記の記事について、現職では主に Angular を使っている立場(※ 社内ではReactのプロダクトも複数あります)でこの記事についての感想を述べます。

広告

理由はAngularを書ける(or書きたい)エンジニアを採用することが難しいからです。それにつきます。

はい、特に異論はありません。

実際、現職でもAngular のプロダクトのフロントエンドエンジニアの採用には苦戦しており、採用が難しい点について概ね事実かと思います。

その差が出たのは、元記事で指摘されている通り、 "React & Vue.js" vs "Angular" の勢力の別れ方が大きいかと思います。

Vue.js と Angular を触った経験としては、パラダイムというか宗派が異なる部分は確かにあるという感触です。

一方でこの記事の読者に気をつけていただきたいのは、 Angular と React の技術的な優劣を評価してのことではないことです 1

Angular は良いフレームワークです。

RxJS という強力な非同期実行フレームワークを基礎としており、更に NgRx という Redux 的なフレームワークもあります。 Breaking Change も気を使っていて、削除する機能は必ず2バージョン前から告知されます。 アップグレードする際には非互換なAPIを自動的にマイグレーションしてくれます。 Google が主体となって開発していて、いきなりメンテナンスが無くなる心配もありません。 ビルド周りはwebpackをいい感じにラップしているので、面倒なことは少ないです。 ユーザ会も活発に活動していて、月に1回はYoutubeでの配信がありますし、相談も非常に親身になって乗ってくれます。 なので、エンタープライズでは非常にありがたいです。

しかし求人が少ないのです。

この違いがどこから来るのかは定かではないですが、以下個人の感想です。

まず、Reactのほうが入り口は低いように感じます。 また、Angular はできることが多い分、設計の難易度がやや高い気もします。RxJS や NgRx を用いた設計に迷うことは少しあります。

そして、日本語の情報は圧倒的に React のほうが多いです。そのため、初学者にとってReactのほうがとっつきやすいです。

その結果としての求人の数の差なのかなと思います 2

ですので、採用についての圧倒的なアドバンテージを考えると、元記事は至極まっとうな判断だと思います。

以上、感想でした。


  1. もちろん優劣はあるでしょうが。

  2. もしかしたらもっと別な技術的な差があるかもしれませんが、Reactの学習についてまだ未着手のため評価しきれず。

ウェブサービスエラーハンドリング指針

これはなにか

現職の社内でこのテーマで書いたが、そちらは社内プロダクトの情報も混じっているので、同じテーマでブログ向けにいちから書き直してみる。 ちょっと長いが、ウェブサービスを運用するならきちんと抑えておきたい。

課題

SPA + HTTP API(概ねREST APIと言っていい)の構成において、エラーハンドリングを正しく行うのは意外と面倒だ。 しかし、特に運用中のプロダクトにおいては、障害・バグの早期検出、ユーザエクスペリエンス向上の観点から、これをきちんとするのが望ましい。

広告

前提

HTTP通信は切断されるし、インフラは落ちる

ローカルで開発をしていると忘れがちだが、HTTP通信は様々な要因で切断される。

クライアント側が公衆回線やWiFiを使っていれば、必ずそれは起きる。車両による移動、電子レンジの干渉、カフェのWiFiが混んできた、 etc.

また、長時間運用しているとどうしてもインフラの障害に襲われる。そして大抵の場合、プロバイダーの障害通知よりもサービスダウンのほうが早い。

データベースも冗長構成にしていないとクラッシュしてフェイルオーバーが終わるまではアクセスできない。

プログラムはクラッシュする

プログラムがクラッシュする可能性を完全には排除できない。

ユーザコードのバグ、ライブラリやフレームワークのバグ、言語処理系のバグ、想定外の入力、過負荷、何でもありえる。

HTTPレスポンスステータスは雄弁

HTTPレスポンスステータスは少ない情報量ながら非常に多くのことを語ってくれる。

ヘッダやボディに情報を詰め込まなくとも、それだけで多くの判断が可能になる。

開発者の時間は有限だ。横着して200系とそれ以外というような大雑把なくくりにせず、ステータスコードから更に処理を分岐して、重要度・緊急度に応じて自動的に対応するようにしよう。

広告

対応指針

主要なHTTPレスポンスステータスの意味

バックエンド開発者もフロントエンド開発者も、HTTPレスポンスステータスを理解する必要がある。

MDNの資料がわかりやすい。

以下は抑えておく必要がある。

レスポンスステータスの種類

  • 1xx - 情報レスポンス。この文脈では気にしなくて良い
  • 2xx - 成功レスポンス。この文脈では気にしなくて良い
  • 3xx - リダイレクションメッセージ。この文脈では気にしなくて良い
  • 4xx - クライアントエラーレスポンス。クライアント側起因のエラー。
  • 5xx - サーバエラーレスポンス。サーバ側起因のエラー。

主要なエラーレスポンスの意味

ステータスコード ステータスメッセージ 意味 よくある原因
400 Bad Request リクエストを理解できない 実装不備、攻撃
401 Unauthorized 未認証 クレデンシャル期限切れ、攻撃
403 Forbidden アクセス権がない ユーザのURL手打ち、攻撃
404 Not Found リソースが存在しない ユーザのURL手打ち、攻撃
500 Internal Server Error サーバがリクエストを処理できない バックエンド実装不備
502 Bad Gateway ゲートウェイなどサーバとクライアントの中間に位置するサービスがサーバから無効なレスポンスを受け取った バックエンドのウェブアプリケーションフレームワークの不具合
503 Service Unavailable サーバがリクエストを処理する準備ができていない 過負荷
504 Gateway Timeout ゲートウェイなどサーバとクライアントの中間に位置するサービスが時間内にレスポンスを得られない 過負荷

バックエンド

バックエンドの実装は、起きうるエラーを明示的にハンドルして、500を返したり、コネクション切断をしてしまわないように実装する必要がある。

RailsやDjangoなどウェブアプリケーションフレームワークの使用を前提とすると、実装起因で500が帰ってしまうのは送出された例外がハンドルされない場合である。この場合、フレームワークが例外を補足してクライアントに500を返す。

そのため、実装がどのような例外を送出しうるかを開発者は熟知して、適切なハンドリングをしなければいけない。一般に4xx系か503を返す。

以下のように例外をすべて補足して一律の対応をしてはいけない。これならフレームワークにハンドリングさせたほうがまだ良い。

try:
    # 例外を送出するかもしれないコード
except:
    # 一律で同じエラー処理をする

一般的なエラーとHTTPレスポンスステータスの対応

  • 400 Bad Request
    • リクエストが合意した仕様に沿っていない
    • バリデーションエラー
  • 401 Unauthorized
    • リクエストに認証トークンが含まれていない
  • 403 Forbidden
    • 認証はしているが、アクセスしてはいけないリソースへのリクエスト
  • 404 Not Found
    • 存在しないリソースへのリクエスト
    • アクセスしてはいけないリソースへのリクエストだが、とりわけクライアントへ存在を隠したい場合
  • 503 Service Unavailable
    • 復旧の見込みのあるデータベースエラー

ロギングと通知

バックエンドの出力はHTTPレスポンスの他に、ログと通知がある。

開発者がエラーを理解・対応するために必要な情報を入れること。また、バックエンドとは別のリソースに保存すること。

以下は抑えておきたい。

  • 日時
  • HTTPリクエストの情報
  • スタックトレース
  • エラーの情報

LTSVよりも構造化ログを使うと情報を多く含めることができ、機械的な処理がしやすい。

HTTPリクエストやデータベースのエラーの情報には個人情報やパスワードなど機微なものが含まれることについては気をつけなければいけない。

この場合は、よりセキュアなリソースに機微な情報を隔離してそこへのポインタのみをログに含めると良い。

具体的には、S3にHTTPリクエストやデータベースへのクエリを保存して、保存先のキーをログに出力する、などである。

また、エラーのうち対応が必要なものについては開発者、運営者やユーザへの通知を行う必要がある。

サービスへの影響を考慮して適切なレベルとチャネルで通知を自動的に行うようにしておこう。

検知できないエラー

特に 502, 504 など、一部のエラーはバックエンドで検出できない。

そのため、フロントエンド側でも対応が必要になる。

フロントエンド

フロントエンドのエラー

フロントエンドは大別してHTTP APIのエラーと、それ以外の実行時エラーについて対応する必要がある。

HTTP APIのエラーは前の節で示している。

実装が完全でなく、補足されない例外が発生した場合は、ブラウザは以下のイベントのいずれかを発火させる。

この2つのイベントはエラーが発生したコンテキストから離れておりまた一律に発火されるため、各々のエラーに対する適切なハンドリングが難しいため、このイベントが起きるような実装には原則してはならない。

また、HTTP APIへのリクエストが、HTTPの層より下(TCP/IP など)で失敗した場合や、CORS エラーの場合、HTTPレスポンスステータスが0としてブラウザに返ってくる。

フィードバック

フロントエンドがエラーを捕捉した場合には、ユーザと開発者(または運営者)へそれぞれフィードバックする必要がある。

一例

  • ユーザへのフィードバック
    • ダイアログやトースト、エラーページへの遷移によるユーザの誘導
    • 自動的な障害ページの更新(非常に高頻度・深刻な場合)
  • 開発者へのフィードバック
    • ログ
    • 通知

リトライ

一部のHTTPレスポンスステータスに関しては、リトライで成功することがある。

ユーザエクスペリエンスのためにも、そのほうが良い。

ただし、利用者の多いサービスにおいてフロントエンドから一斉にリトライが来た場合にバックエンドが過負荷に陥ることがあるため、リトライの実装は注意深くしなければいけない。

必ず Exponential Backoff と Jitter を組み合わせること。

エラーとフィードバックの対応表

ステータス リトライの有無 ユーザへのフィードバック 開発者へのフィードバックレベル 備考
400 Bad Request なし ダイアログ表示、エラーページへ遷移など フロントエンド・バックエンドの食い違いがあり得る
401 Unauthorized なし ログインページへ遷移など クレデンシャルの期限切れなど
403 Forbidden なし ダイアログ表示、エラーページへ遷移など ユーザがURLを手打ちしたなど。高頻度なら通知
404 Not Found なし ダイアログ表示、エラーページへ遷移など ユーザがURLを手打ちしたなど。高頻度なら通知
その他4xx なし ダイアログ表示、エラーページへ遷移など API実装にもよるが、普通ならあまり使わない。実装を確認すること。
500 Internal Server Error なし ダイアログ表示、エラーページへ遷移など 緊急 バックエンド異常のため、早めに状況を確認したほうが良い。
502 Bad Gateway あり ダイアログ表示、エラーページへ遷移など サーバ過負荷など。注視する。
503 Service Unavailable あり ダイアログ表示、エラーページへ遷移など サーバ過負荷など。注視する。
504 Gateway Timeout あり ダイアログ表示、エラーページへ遷移など サーバ過負荷など。注視する。
その他5xx なし ダイアログ表示、エラーページへ遷移など 普通は使わない。実装やフレームワークの仕様を確認すること。
onerror 不可 ダイアログ表示、エラーページへ遷移など 緊急 ユーザに何らかの不利益があり得る。早めに原因を特定し、対処する。
unhandledrejection 不可 ダイアログ表示、エラーページへ遷移など 緊急 ユーザに何らかの不利益があり得る。早めに原因を特定し、対処する。
0 ダイアログ表示、エラーページへの遷移など なし まともに検証していればCORSエラーの可能性は低いので、通信エラーの可能性が高い。

広告

重要なサービス

ユーザへのフィードバック

Atlassian Statuspage

サービスステータスをユーザに報告するSaaS。

いわゆるステータスページの他、問題があったときにサービス上にアイコンを表示する、インシデントのメール・SNSによる報告など、基本的な機能が揃っている。

開発者へのフィードバック

Sentry

バックエンド・フロントエンドでのエラーを収集する。

主要な言語処理系、フレームワークをカバーしており、簡単な設定で補足されない例外を自動的に集めてくれる。また、カスタムな通知も可能。

オンプレミス版は無料。

Datadog

モニタリングプラットフォーム。

エラー収集、ログなど多数の機能が揃っている。

こちらも主要な言語処理系、フレームワークをカバーしており、簡単な設定で補足されない例外を自動的に集めてくれる。また、カスタムな通知も可能。

さらに、時間あたりのエラー回数など設定した条件に一致したら別のサービスに通知することができる。

New Relic

パフォーマンス分析プラットフォーム。

Datadogと一部競合するところがある。

PageDuty

インシデント対応プラットフォーム。

こちらも様々な機能があるが、Datadog から通知を受けて当番の開発者のスマートフォンに電話を掛け、反応がなかったら別の開発者にエスカレーションする、といったことができる。

私的開発環境改善計画 Ver. 2021-2

前の記事で開発環境を確認したので、次は改善を考えていく。

team-6.hatenablog.jp

広告

エディタ

Visual Studio Code から変える気はしばらくないので、これをどう便利にしていくか考える。

設定の同期

仕事と個人の環境で設定を同期しておらず、さらにこの前MacBookを新調したときに移行に苦労したので、設定の同期を有効化する。

AzureかGitHub アカウントで同期できるので、GitHubアカウントを選択した。

キーマップ

ずっと Awesome Emacs Keymap を使っていて、拡張機能の不都合はほとんどなかったが、そもそもCtrlキーの押し過ぎで小指が痛くなるという、キーバインディング自体の問題に直面したので、Vim キーバインディングに移行する。

拡張機能

適当に検索して出てきたものからピックアップして入れていく。

EditorCondig

プロジェクトで EditorConfig を使用しているため、対応する拡張機能を入れる。

https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig

indent-rainbow

Python をよく使うので、 インデントが見やすくなるように indent-rainbow を入れる

https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow

zenkaku

全角空白をハイライトするとのこと。Emacs 時代に同じことをしていたので、入れておく。

https://marketplace.visualstudio.com/items?itemName=mosapride.zenkaku

Code Spell Checker

スペルチェッカーとのこと。念の為入れておく。

https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker

change-case

Emacs の upcase とか downcase みたいなもののようだ。たまにしか使わなそうだが、入れておく。

https://qiita.com/ucan-lab/items/e85931bf8276da43cc97

TODO Highlight

TODO とか FIXME とかをハイライトしてくれる。 Emacs 時代にしていたので入れておく。

https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight

Trailing Spaces

行末の空白を表示してくれる。Emacs 時代にしていたので入れておく。

https://marketplace.visualstudio.com/items?itemName=shardulm94.trailing-spaces

markdownlint

Markdown の Lint

https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint

Markdown Emoji

:emoji: を絵文字にしてプレビューしてくれる。

https://marketplace.visualstudio.com/items?itemName=bierner.markdown-emoji

Bookmarks

ファイルと行をブックマークしてくれる。

https://marketplace.visualstudio.com/items?itemName=alefragnani.Bookmarks

Git Project Manager

複数のGitリポジトリをプロジェクトとして開ける。

https://marketplace.visualstudio.com/items?itemName=felipecaputo.git-project-manager

GitLink

現在開いているファイルのGitHub上のリンクをクリップボードにコピーできる。

https://marketplace.visualstudio.com/items?itemName=qezhu.gitlink

JS Parameter Annotations

JavaScript/TypeScript の関数呼び出しに、各引数の対応する名前を表示する。

https://marketplace.visualstudio.com/items?itemName=lannonbr.vscode-js-annotations

Text Power Tools

テキスト処理コマンド詰め合わせ。

https://marketplace.visualstudio.com/items?itemName=qcz.text-power-tools

Typescript Destructure

TypeScript のデストラクチャリングを定義から作ってくれる。

https://marketplace.visualstudio.com/items?itemName=tusaeff.vscode-typescript-destructure-plugin

Auto Close Tag

HTMLタグを自動的に閉じてくれる。

https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag

Auto Rename Tag

対応する HTML タグの一方を変更したときに他方も更新してくれる。

https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag

ECMAScript Quotes Transformer

ECMAScript のクオートを変換してくれる。テンプレート文字列を使うときに便利そう。

https://marketplace.visualstudio.com/items?itemName=vilicvane.es-quotes

Bracket Pair Colorizer 2

対応するカッコをハイライトしてくれる。

https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2

Auto Import

TypeScript で自動的にインポート文を挿入してくれる。

https://marketplace.visualstudio.com/items?itemName=steoates.autoimport

Dash

Dash を呼び出せる。

https://marketplace.visualstudio.com/items?itemName=deerawan.vscode-dash

Highlight Matching Tag

対応するタグをハイライトする。

https://marketplace.visualstudio.com/items?itemName=vincaslt.highlight-matching-tag

indent-rainbow

インデントを階層ごとにカラー表示してくれる。

https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow

Quokka.js

コードに実行時の値を表示してくれる。

https://marketplace.visualstudio.com/items?itemName=WallabyJs.quokka-vscode

Text Marker (Highlighter)

コード中の任意のテキストをハイライトしてくれる。

https://marketplace.visualstudio.com/items?itemName=ryu1kn.text-marker

設定

インデントのガイドを表示

Guide を使っていたが、どうやら標準になったらしい。

"editor.highlightActiveIndentGuide": true

行末に改行を入れる

プロジェクト次第では避ける必要があるが、POSIX の仕様でテキストファイルは必ず改行で終わらせる必要があり、それを自動化してくれる設定を導入する。

"files.insertFinalNewline": true

制御文字の表示

制御文字 を可視化する模様。ログを見るときとか便利かもしれない。

"editor.renderControlCharacters": true

その他

ワークスペース推奨の拡張機能 で、リポジトリごとに推奨する拡張機能を追加できるようだ。

ターミナル・シェル

ターミナルについては iTerm2 、シェルは zsh とそれぞれ据え置きで、シェルのカスタマイズを考えていく。

Prezto

現在は prezto で zsh をカスタマイズしているが、powerline テーマを設定しただけでそれ以上のことはしていない。さらに良くする余地がないか検討する。

module

prezto には module という仕組みがあり、これを追加すると機能が増えるようだ。

インストールして全くいじっていない .zpreztorc の module はこのような状態だ。

zstyle ':prezto:load' pmodule \
  'environment' \
  'terminal' \
  'editor' \
  'history' \
  'directory' \
  'spectrum' \
  'utility' \
  'completion' \
  'prompt'

デフォルトでインストールされるモジュールはここにある。

上から使えそうなものを拾っていく。

spaceship

spaceship なるものがあり、こちらを入れるのも悪くなさそうだ。多機能だが prezto の module と機能が衝突しそうなので、時間を取って試すのが良さそう。

zplug

Homebrew 的なパッケージマネージャとして zplug があるので、なにか入れるべきパッケージがあればこちらで導入していく。

かなりの量があるので、時間があるときに試していく。

とりあえず目についたものだけ。

永続化

シェルの設定がローカルにしかないので、きちんと永続化していく必要がある。

参考

サービス

ここを参考にしたが、あんまりいいのがなかった。next.js のために Vercel を使いたいぐらい。

ツール

参考

アプリ

Postman

https://www.postman.com/

開発用HTTPクライアント。

cUrl 派だったけど、込み入ったケースもありうるので入れておく。

clipmenu clipy

http://www.clipmenu.com/ja/

clipy

クリップボード履歴・スニペットマネージャ。

同僚が使いこなしていた。

hyperswitch

https://bahoom.com/hyperswitch

⌘+Tab の置き換え。

常々アプリケーションではなくウィンドウ単位での切り替えがしたいと思っていた。

Karabiner-Elements

https://karabiner-elements.pqrs.org/

キーボードカスタマイズユーティリティ。

いろんな事ができるのだが、一番嬉しいのは "Prevent unintended command-q" だ。よくやってしまう。

Unarchiver

https://theunarchiver.com/

圧縮ファイル解凍ソフト。機能がシンプルでいい。

Notion

https://www.notion.so/

Notionアプリ。

ブラウザで開くのと大差ないが、アプリ化されているとブラウザとの行き来が楽でいい。

Kawa

https://github.com/hatashiro/kawa

IMEスイッチのキーバインディングを設定できる。

外付けキーボードでは⌘+スペースでトグルしているのだが、それを任意に変えられる。

Choosy

https://www.choosyosx.com/

ブラウザセレクター。

URLなどの条件によって開くブラウザを切り替えられる。

Firefox をメインで使いつつ、認証の問題でGoogle Chromeを使う必要があるのでこれは捗る。

Alfred

https://www.alfredapp.com/

著名なタスクランナー。いろんな事ができる。いや本当にいろんな事ができる。

CheatSheet

https://www.mediaatelier.com/CheatSheet/

⌘長押しで現在のアプリのショートカットを表示してくれる。

Keycastr

https://github.com/keycastr/keycastr

キーストロークを表示してくれる。ライブプログラミングするときに必須。

DevUtils.App

https://github.com/DevUtilsApp/DevUtils-app

JSON フォーマットとかBase64デコードエンコードとか、よくウェブで単機能であるようなものを詰め込んでいる。

super-productivity

https://github.com/johannesjo/super-productivity

ToDo List, Time Tracker, JIRA のタスクマネージャ。

特に Time Tracker に期待している。

Dash

https://kapeli.com/dash

API ドキュメントマネージャとスニペットマネージャ。

MDN とか Python リファレンスをよく開くので、ブラウザを開く手間が省けるかもしれない。

Jasper

https://jasperapp.io/

GitHub Issue ビューワー。

プロジェクトはIssueで管理しているため、こちらで効率的に見たい。

TUI

lazygit

https://github.com/jesseduffield/lazygit

TUI Git アプリ。

Git は基本的にコマンドライン派だが、少しやり方を変えたくなった。

tson

https://github.com/skanehira/tson

JSON ビューワ。

JSON 見るのがしんどい時があるので、そのときに使う。

pst

https://github.com/skanehira/pst

プロセスモニタ。

ps → kill を簡略化できる。

CLI - Git, GitHub 関連

gh

https://github.com/cli/cli

GitHub 謹製のコマンド。

GitHub の各種操作が CLI から実行できる。

hub

https://github.com/github/hub

こちらも GitHub 謹製のコマンド。

gh と違って、こちらは git のラッパーとして動く。

ghq

https://github.com/x-motemen/ghq

Git リポジトリマネージャ。

~/work にリポジトリを集めていたが、こちらの管理に切り替える。

git-extras

https://github.com/tj/git-extras

Git 追加コマンド群。

git-standup

https://github.com/kamranahmedse/git-standup

直近のコミットを表示してくれる。

gitmoji-cli

https://github.com/carloscuesta/gitmoji-cli

コミット時に絵文字を選ばせてくれる。

git-open

https://github.com/paulirish/git-open

Git リポジトリからGitHubを開くことができる。

CLI - 既存コマンドの置き換え

mycli

https://www.mycli.net/

mysql コマンドの置き換え。

自動補完ができる。

bat

https://github.com/astaxie/bat

cat コマンドの置き換え。

コードハイライトがある。

dust

https://github.com/bootandy/dust

du の置き換え。

ディレクトリサイズをわかりやすく表示してくれる。

httpie

https://github.com/jkbrzt/httpie

curl の置き換え。

カラーハイライト、わかりやすいオプション体系など。

fd

https://github.com/sharkdp/fd

find の置き換え。

カラーハイライト、わかりやすいコマンド体系、そして高速。

ripgrep

https://github.com/BurntSushi/ripgrep

grep の置き換え。

カラーハイライト、わかりやすいコマンド体系、そして高速。

sd

https://github.com/chmln/sd

sed の置き換え。

分かりやすくて速い。

saws

https://github.com/donnemartin/saws

aws の置き換え。

自動補完、結果のカラーハイライト。

aws コマンドはサブコマンドが非常に多いのでこれは助かる。

lsd

https://github.com/Peltoche/lsd

ls の置き換え。

カラーハイライト、アイコン表示など。

delta

https://github.com/dandavison/delta

diff の置き換え。

シンタックスハイライトなど。

git diff をこれで置き換えると良さそう。

broot

https://github.com/Canop/broot

cd の置き換え。

ディレクトリツリーを表示して、そこに移動できる。

zoxide

https://github.com/ajeetdsouza/zoxide

こちらも cd の置き換え。

よく使うディレクトリを覚えておいて、サジェストしてくれる。

mclfy

https://github.com/cantino/mcfly

Ctrl + r (ヒストリのインクリメンタルサーチ) の置き換え。

画面に直近のコマンドを表示して、絞込める。

choose

https://github.com/theryangeary/choose

cut, awk の置き換え。

わかりやすい文法で行を処理できる。

CLI - その他

homeshick

https://github.com/andsens/homeshick

dotfiles の管理ツール。

googler

https://github.com/jarun/googler

コマンドラインからGoogle検索ができる。

csview

https://github.com/wfxr/csview

CSV Viewer。

skim

https://github.com/lotabout/skim

Fuzzy finder。

peco や fzf と同じ。

watchexec

https://github.com/watchexec/watchexec

ファイルやディレクトリの変更を監視して指定したコマンドを実行してくれる。

tealdeer

https://github.com/dbrgn/tealdeer

コマンドの使用例を表示してくれる。

emojify

https://github.com/mrowa44/emojify

:raising_hand: → 🙋 のような変換をしてくれる。

shallow-backup

https://github.com/alichtman/shallow-backup

エディタの設定やHomebrewのインストール済ファイルのバックアップを一括でしてくれる。

ブラウザ拡張

開発

OctoLinker

https://github.com/OctoLinker/OctoLinker

GitHub で表示しているソースコードの文法を解析してインポートしているモジュールへのリンクを作成する。

Refined GitHub

https://github.com/sindresorhus/refined-github/

非常に沢山の機能があって紹介しきれない。

Notifier for GitHub

https://github.com/sindresorhus/notifier-for-github

GitHub の通知をポップアップ表示してくれる。

OctoPermalinker

https://github.com/josephfrazier/octopermalinker

コミットへのリンクをブランチへのリンクに変換してくれる。

GitHub Issue Link Status

https://github.com/fregante/github-issue-link-status

Issue へのリンクに各々のステータスを表示してくれる。

Github-vscode-icons

https://github.com/dderevjanik/github-vscode-icons

ファイル一覧にVSCode Icon を表示してくれる。

Rubberduck

https://www.rubberduck.io/

サイドバーにリポジトリのファイルブラウザーを追加してくれる。


とりあえず列挙したものを入れて、開発環境を改善してみる。

その評価はまたしばらく後に。