独自のマウスレス開発環境を構築する方法

公開: 2022-03-10
簡単な要約↬シェルをキーストーンとして開発環境を構築することには、複数の利点があります。 互いにうまく適合するツールを使用でき、自分のニーズに応じてすべてをカスタマイズできます。そして何よりも、キーボードを使用して開発環境全体を制御できます。 これにより、多くの認知エネルギーを節約できるだけでなく、快適なユーザーエクスペリエンスを提供できます。

昔々、ソフトウェア開発の魔法の世界に、あなたの謙虚な僕である若い開発者が初めてLinuxを発見しました。 突然、Linuxシェルにアクセスできるようになりました。これは、やりたくないことを何度も自動化するためのさまざまな方法を提供するツールです。

しかし、Ubuntuには欠点がありました。 私はしばしばディスプレイのバグやクラッシュの犠牲者でした、そしてそれは時間が経つにつれてますます遅くなりました。

ある日、何かひどいことが起こりました。Ubuntuを次のメジャーバージョンに更新する必要がありました。 すべてがクラッシュしました。 システムを起動できなくなりました。 Linuxが内部でどのように機能しているかがわからなかったため、直面している問題をどのように解決できるかわかりませんでした。 Ubuntuは、私が気にしないように、すべての核心を抽象化していた。

Ubuntuとすべてのツールを手動で再インストールする必要がありました。 最悪の部分はすべてを再構成することでした。 結局のところ、クラッシュする前に持っていたシステムに戻るのに何日もかかりました。 しかし、他に選択肢がなかったので、Ubuntuを何年も使い続けました。 この間、すべてを手動で何度も再インストールする必要なしに、次のメジャーバージョンに更新することはできませんでした。

私の会社が2人の素晴らしい開発者を雇ったとき、開発者としての私の人生は再び変わりました。 彼らはLinuxと私が使用できるさまざまなディストリビューションについて多くのことを知っていました。 彼らは私を導き、Ubuntuで抱えていたすべての問題を解決するツールを見せてくれました。 これらのツールは私のワークフローを劇的に改善しました; 彼らは、開発者がキーボードをできるだけ手に持つことがどれほど実用的であるかを私に示しました。

これは6年前に起こりました。 私は今でも同じ開発環境を使用しています。 私は92.8%の時間、キーボードを使用してすべてのツールを管理し、意味があり覚えやすいキーストロークを使用しています。 使用するすべてのツールとその構成を含む、作成した一連のスクリプトを使用して、システム全体を再インストールできます。

今日は、これらのツールを皆さんと共有して、皆さんも日常業務の効率と快適さを向上できるようにしたいと思います。 それらは一緒にうまく機能します—私がマウスレス開発環境と呼ぶものを形作ります。 より正確には、以下について説明します。

  • プレーンテキスト(コードを含む)を操作するときにLinuxシェルを使用すると非常に強力になる理由。
  • 恐ろしいArchLinuxを使用する理由。
  • タイル型ウィンドウマネージャーの利点。
  • URxvt、tmux、およびtmuxpで優れた端末エクスペリエンスを実現する方法。
  • Vimがあなたの親友になることができる理由。

この記事で提唱するツールは、Linuxベースのシステムで動作します。 i3以外のmacOSでも使用できます。 Windowsの場合、最も簡単な方法は、Windows Linuxサブシステム(WSL)を使用してそれらをインストールして使用することです。

これらのツールを試さずに、この新しい作業方法を発見することはできませんでした。 だからこそ、私はあなたがそれらをインストールし、それらを実験し、そしてあなたが私のように恋に落ちるかどうか自分で確かめることをお勧めします。

シェルでマウスレス

開発者として、シェルの使用を避けることはほとんど不可能です。 これは、すべての退屈なタスクを自動化することでワークフローを簡素化できる強力なツールです。

シェルの利点

シェルとターミナルを使用する利点について説明する前に、これら2つのアイデアの違いを簡単に説明しましょう。

ターミナルは、シェルとの対話を可能にするグラフィカルインターフェイスです。 Linuxでは、このシェルは多くの場合Bashですが、別のシェルでもかまいません。 シェルはインタプリタです。 コマンドを入力すると、コマンドが実行されていくつかのアクションが実行されます。 また、場合によっては、出力が返されます。 「コマンドライン」と「シェル」という用語は同義語です。

マウスレス開発環境を太陽系と比較すると、シェルは太陽であり、他のすべてはそれを好転させます。 これは、シェルが非常に強力であるためです。これにより、非常にうまく連携する多くの小さなプログラムを実行できます。 それらはCLI(コマンドラインインターフェイス)と呼ばれます。

これらのツールの大きな利点は、非常にシンプルで分離が制限されていることですが、強力な結果を得るためにそれらを連鎖させることができます。 たとえば、CLIの「history」、「sort」、「uniq」、「head」をすべて使用して、最もよく使用するCLIとその使用頻度を表示できます。

Linuxシェル
Linuxシェル。 (大プレビュー)

そこに利用可能な多くのCLIがあります。 まず、Linuxシェルは長い間存在しているためです。 開発者は多くのツールを開発し、それらを信頼できるものにする時間がありました。 第二に、 GUI(グラフィカルユーザーインターフェイス)よりもCLIの開発が簡単だからです。 これらのグラフィカルインターフェイスの設計と実装には、さらに多くの作業が必要です。 CLIには、開発、変更、および保守が容易なテキストインターフェイスしかありません。

また、CLIが高速である理由もあります。ディスプレイやその他のグラフィック要素を台無しにする必要はありません。 それはUbuntuでの私の主な問題の1つでした。デスクトップ環境であるUnityは非常に重く、遅く、バグがありました。 少なくとも私の経験では。 より多くのGUIを上に使用すると、事態はさらに悪化しました。

コマンドラインのもう1つの大きな利点は、シェルスクリプトを記述して、毎日繰り返す退屈なタスクをすべて自動化できることです。 たとえば、画像のサイズを同じサイズに頻繁に変更する必要がある場合は、そのためのスクリプトを作成できます。 特定の種類のファイルを頻繁に検索する場合は、それを自動化することもできます。 空は限界です。

ジャンプした後もっと! 以下を読み続けてください↓

CLIにも欠点があります。 初心者が使用するのは少し面倒ですが、特定のCLIの使用方法がわからなくても、必要なものをすばやく取得する方法があります。

最後に、リモートサーバーで実行するタスクがある場合は、多くの場合、シェルを使用することになります。 ほとんどの場合、グラフィカルインターフェイスがないため、選択の余地はありません。 このような場合、コマンドラインの使い方を知っておく必要があります。

マウスレスアプローチ

シェルにはテキストインターフェイスがあるため、使用するときは手がキーボードに留まります。 これは、開発者としての最初の数年間は実際には考えたことのないことですが、大きな利点です。

私の経験では、キーボードとマウスの間で何百もの手の動きを避けることで、多くの認知エネルギーを節約できます。 本当にキーボードにこだわろうとしたとき、それがどれほど快適であるかを知ってショックを受けました。 ボーナスとして、買い物リストだけを書いていても、シェルでキーボードだけを使用しているハッカーのように感じます。 それはどれくらい素晴らしいですか?

私はそれを試す前に、この「マウスレス」のアイデアに非常に懐疑的だったことを認めなければなりません。 以下で説明するツールを使用すると、すべての習慣をある日から別の日に変更する必要はありませんでした。それらのツールでマウスを使用することもできます。 しかし、キーボードで管理すると、本当に輝きます。

それが実際に証明されなかったとしても、私はまた、キーボードに留まることが私たちをより効率的にすると信じています。 本のように実用的なプログラマーは指摘しました:

「一般的な編集操作にキーストロークのみを使用する方が、マウスやメニュー方式のコマンドよりも効率的です。これは、手がキーボードから離れることがないためです。」

そうは言っても、ここでは効率は主な目標ではありません。 手元のタスクに完全に集中できるので、キーボードにとどまり、これらすべてのツールを使用するのが大好きです。 それは私が働き始めて私の仕事を成し遂げる動機になります。

岩盤:Arch Linux

マウスレスの旅の初めに、新しい友達の1人がUbuntuの代わりにArchLinuxを使用するようにアドバイスしてくれました。 繰り返しになりますが、懐疑論が忍び寄り、疑念が私の貧しい脳に侵入していました。 Arch Linux? この恐ろしいLinuxディストリビューションは、完全に手動でインストールして構成する必要がありますか? この不安定なシステムは多くの人にとって冗談になりましたか?

ステレオタイプが現実とは関係がない場合もありますが、ArchLinuxはこのアイデアの完璧な例です。 私はWindows(98から7)、macOSを使用し、他のLinuxディストリビューションも試しました。 私の結論は、間違いなく、ArchLinuxはすべての中で最も安定しています。

そうは言っても、ArchLinuxはマウスレス開発環境の要件ではありません。 この記事で説明されている他のすべてのツールは、他のLinuxディストリビューションでも使用できます。 また、macOS(i3を除く)、またはWindows Subsystem for Linux(WSL)がある場合はWindowsでも使用できます。 しかし、そうする前に、なぜArchLinuxを真剣に検討する必要があるのか​​をお話ししましょう。

ローリングリリースシステム

ArchLinuxにはローリングリリースシステムがあります。 これは、システム全体を頻繁に、毎週または隔週で更新する必要があることを意味します。 Ubuntuに戻るには、長期的なサポートシステムがあります。更新する必要があるのは、年に2、3回、または必要に応じてそれ以下です。

多くの開発者は、ローリングリリースシステムによって開発環境が不安定になると考えています。これは、ArchLinuxの評判を部分的に説明しています。 しかし、私は6年間の毎日の使用で問題が発生したことはなく、友人もそれを使用しています。 別の側面では、ローリングシステムの利点は素晴らしいです:

  • 私が使用するすべてのアプリケーションは常に最新です。 必要に応じて最新バージョンにするために手動でコンパイルする必要はありません。
  • 多くの場合、システムを更新すると、一度に導入される変更が少なくなります。 その結果、クラッシュの可能性も少なくなります。

Ubuntuでの私の経験と、Ubuntuを更新したときに発生したクラッシュについて説明しました。 ArchLinuxで問題が発生したことはありません。

あなたが必要とするすべて

さらに、ArchLinuxのリポジトリは巨大です。 そこに必要なすべてのツールが見つかる可能性が非常に高いです。 そうでない場合は、他のすべてが存在するAUR(Arch User Repositories)を確認できます。 AURは公式リポジトリではないため、そこで見つかったアプリケーションにセキュリティ上の問題がある可能性があります。 繰り返しますが、私はそれらに問題はありませんでしたが、それは可能です。 公式リポジトリに固執し、AURからすべてのものをインストールしない限り、問題はありません。

学習の機会

ArchLinuxは非常に最小限のディストリビューションであることにも言及しましょう。 あなたがそれをインストールするとき、それは多くの役に立たないアプリケーションを課しません。 そういえば、シェルを使用してディストリビューション全体を手動でインストールする必要があります。 仕事は大変なことだと感じるかもしれませんが、その一方で、あなたは経験から多くを学ぶでしょう。

この記事の冒頭で述べたように、 Linuxベースのシステムが内部でどのように機能するかを最低限知っていると、システムが異常に動作しているときやクラッシュしたときに役立ちます。 見た目ほど複雑ではなく、開発者の場合は必須であると私は主張します。 最近では、Web、電話、またはRaspberryPieがLinux上で実行されています。

最後になりましたが、Arch Wikiは、Linux関連のものを見つけるのに最適な場所です。 私がUbuntuを使用していたときでさえ、それは何年にもわたって私を大いに助けました。 システムのトラブルシューティングや新しいツールの検索に最適な場所です。

i3でWindowsを管理する

Arch Linuxがマウスレス開発環境の基盤となる理由を確認したので、次に何を追加できるかを見てみましょう。

しかし、最初に、少し理論があります。 多くの場合、オペレーティングシステムには3つの層があり、多かれ少なかれ互いに結合されています。

  1. コンピュータのハードウェアに直接手を出すカーネル
  2. カーネルと対話するためのシェル、ユーザー、または一部のアプリケーションのインターフェース。
  3. デスクトップマネージャーやタイル型ウィンドウマネージャーのような上部の表示レイヤー

GnomeまたはUnityは、どちらもLinuxベースのシステムのデスクトップマネージャーです。 彼らはあなたのウィンドウとあなたのステータスバーやあなたのアプリケーションランチャーのような他の多くのものを管理します。 タイル型ウィンドウマネージャーはデスクトップマネージャーに代わるものであり、多くの場合、より小さく、ウィンドウの操作に重点を置いています。

タイル型ウィンドウマネージャーi3は確かに非常に軽量です。現在、10年前のコンピューター(Lenovo x220)で使用しており、速度が低下することはありません。 使い方も簡単で、ドキュメントも素晴らしく、最も重要なのは、キーボードだけでウィンドウを管理できることです(必要な場合)。

i3の基本は単純です。画面全体を表すさまざまなワークスペースでウィンドウを開くことができます。 これは、多くのLinuxデスクトップマネージャーが持っている仮想デスクトップと非常によく似ています。 その後、お気に入りのアプリケーションを開くと、画面上のウィンドウの数に応じて画面が自動的に共有されます。

たとえば、Firefoxを開くと、そのウィンドウは画面の100%を占めます。 Firefoxの3つのインスタンスを開くと、それぞれが画面の33%を占めます。

Firefoxウィンドウ付きのi3
Firefoxウィンドウ付きのi3。 (大プレビュー)

ウィンドウのレイアウトを変更することもできます。 画面にすべてのウィンドウを表示する代わりに、それらを互いに積み重ねて、簡単なキーストロークでそれらを通過することができます。 「通常の」フローティングウィンドウが必要な場合は、それらを構成することもできます。

Firefoxのウィンドウがスタックされたi3
Firefoxのウィンドウがスタックされたi3。 (大プレビュー)

i3の目標は、すべてのウィンドウの管理を簡素化することです。 新しいマウスを開くたびにマウスを使用してマウスを移動したりサイズを変更したりする代わりに、必要な場合にのみキーストロークを使用して同じ操作を実行できます。

複雑すぎませんか? 私はそれを試した2日後にi3で効率的でした。 私は天才ではありません。 私ができれば、あなたもできます。

さくらんぼ:この記事で説明するすべてのツールと同様に、 i3とそのキーストロークを心ゆくまでカスタマイズできます。

i3の唯一の欠点は、macOSでは利用できないことです。 しかし、タイル型ウィンドウマネージャーのAmethystやDivvyなど、優れた代替手段があります。

URxvt、tmux、およびtmuxpを使用してターミナルをレベルアップします

ターミナルは、シェルへのアクセスを提供するインターフェイスです。 シェルが本物である場合でも、いくつかのツールを使用して使いやすくすることができます。

URxvtによるシンプルさの道

私はシンプルさが好きです。そのため、この記事で説明する開発環境が大好きです。 そういえば、URxvtはあなたが見つけることができる最も単純な端末の1つです。 また、高速で信頼性があります。 6年間、私はそれがクラッシュしたり、速度が低下したりするのを見たことがありませんでした。 それはそれがすることになっていることをします:あなたがシェルを使うことを可能にします。 これ以上でもそれ以下でもありません。

tmuxを使用したターミナルマルチプレクサー

URxvtのシンプルさが気に入ったとしても、tmuxのように信頼できる優れたターミナルマルチプレクサを使用するのも好きです。

ターミナルマルチプレクサとは何ですか? 複数のシェルを含むセッションを開くことができます。 これらのセッションはバックグラウンドで保持されます。ターミナルがクラッシュしたり、誤って閉じたりしても、シェルが消えることはありません。 いつでも(何も起こらなかったかのように)別の端末でそれらを回復できます。

これはローカルコンピューターでは便利ですが、リモートサーバーではさらに便利です。 たとえば、SSH経由でサーバーに接続し、スクリプトを実行し、ローカルマシン上のSSH接続と端末を閉じて、家に帰ることができます。 tmuxのおかげでシェルはまだサーバー上で実行されているため、スクリプトも実行されます。

それだけではありません。tmuxは、良い意味で、何でも屋です。 これを使用して、1つの端末で複数のペインを含む複数のウィンドウを開くことができます。 ウィンドウは端末全体と考えることができ、ペインはウィンドウの一部を占めるシェルと考えることができます。

i3を思い出しますか? 同じ原則に従いますが、作成できるのは新しいシェルのみです。 そのため、i3に満足している多くのユーザーは、tmuxを使用しても意味がありません。 個人的には両方使うのが好きです。

4つのウィンドウと4つのペインを備えたTmux
4つのウィンドウと4つのペインを備えたTmux。 (大プレビュー)

いつものように、キーボードでtmuxのウィンドウとペインを操作でき、最もクレイジーな希望に従ってtmux自体を構成できます。

tmuxp

現在開発している破壊的なアプリケーションにtmuxを使用したいとします。 最初にターミナルを開く必要があります。 次に、必要な数のtmuxのウィンドウを作成し、これらのウィンドウを必要なペインで分割する必要があります。

注意ペインはシェルを表します。 これらの各シェルで、特定のプロジェクトに必要なすべてのCLIを実行できます。たとえば、Dockerコンテナーを実行したり、いくつかのログを表示したりできます。

しかし、そのすべてを自動化することもできます。それが、開発環境のコンテキストにおけるtmuxの真の力が本当に際立つところです。 tmuxpと呼ばれる別のCLIを使用して、YAML構成ファイルに、ウィンドウ、ペイン、および必要なコマンドを書き留めることができます。 次に、この構成をロードして、カスタマイズしたtmuxセッションを自動的に作成できます。

プロジェクトごとにこれらの構成ファイルの1つがあります。 それは私に多くの時間とエネルギーを節約します。 上で述べたように、これはシェルを使用する主な利点の1つです。

Editor Plus Shell Equals IDE

シェルは非常に強力なので、エディターを直接実行してみませんか? Vimを使ってみませんか?

Arch Linuxのように、Vimは学ぶのが難しいという評判があります。 それはもっと微妙です。それを使って生産的になるのはかなり簡単ですが、習得するには長い時間がかかります。 Linuxを実行していて、Vimがインストールされている場合は、シェルでvimtutorを実行することにより、20分で基本を学ぶことができます。

Vimは、無数のプラグインでさらに拡張できる多くの機能を提供します。 さらに、エディターで直接必要なCLIを使用して、Vimを使用してシェルを直接操作できます。 Vimを本格的なIDEに変換します。

Vimにはもう1つの大きな利点があります。それを使用して、多くのプログラミング言語で開発できます。 PHP、Golang、またはClojureでプログラミングする必要があるたびに異なるIDEを切り替えるのは好きではありません。 インターフェイスが異なり、これらの各エディターを個別に構成する必要があります。また、これらのツールを再インストールするときに、構成をどこかに保存して再度使用することはできません。

Vimを使用すると、同じエディターにとどまりながら、好きな言語でコーディングできます。 VS Codeと同様に、LSP(Language Server Providers)を使用して、最も一般的なプログラミング言語(およびさらに難解な言語)のオートコンプリート、リンティング、および自動リファクタリングを有効にすることができます。

Vimの動作
Vimの動作中。 (大プレビュー)

Vimも高速です。 実行するのに多くのリソースを必要としません。 古いコンピューターでは、エディターのインスタンスを常に6つまたは7つ開いていることがよくありますが、問題はありません。 それに比べて、私はIntelliJ IDEを何年も使用していましたが、そのうちの2つを開いたとき、システム全体の速度が低下し始めていました。 たとえば、一連のマイクロサービスのように、同時にさまざまなプロジェクトに取り組む場合、これは非常に実用的です。

Vimは高度に構成可能であることを追加する必要がありますか? IDEに直接多くの機能(使用しないものも含む)を含める代わりに、正確に必要なものを選択し、不要なものを破棄することができます。

コヒーレントキーストロークのセット

Arch Linuxが私のマウスレス開発環境の基盤である場合、i3、Zsh、tmux、およびVimは私の創造的なニーズの作業台です。 これにより、他のツールでは経験したことのないレベルの快適さが得られます。

しかし、すでに知っているツールのショートカットをすでに使用できるのに、なぜこれらの新しいツールとそのキーストロークをすべて使用する必要があるのか​​疑問に思われるかもしれません。

まあ、そこにあるほとんどのアプリケーションのショートカットはしばしば無意味です。 お互いに関係のない鍵のスープです。 その結果、それらを覚えるのは難しく、ツールごとにかなり異なる可能性があります。

この記事で説明するツールは、互いにうまく適合することを目的としています。 それぞれにほぼ同じキーストロークを使用できます。 システムがどのツールを操作したいかを知るために、1つのキーだけが異なります。 これにより、さまざまなキーストロークを覚えやすくなります。

さらに、Vimは、信頼できるシンプルな言語を作成することで意味のあるキーストロークを持つように設計されています。 たとえば、単語を削除するには、 dawを押します。 段落を削除するには、 dapです。 多くのCLIはVimのキーストロークに基づいているため、 Vimを学ぶことで他の多くのCLIへの扉が開かれます。

マウスレス開発環境の自動インストール

Arch Linuxを手動でインストールすることは、Linuxベースのシステムについて多くを学ぶのに良いことですが、新しいコンピューターにシステムをインストールするたびにそれを行う必要があるときは古くなります。 そのため、マウスレス開発環境全体をインストールするための独自のスクリプトを作成しました。 彼らはArchLinuxと、私が彼らの構成で使用するすべてのツールをインストールします。 新しいコンピューターを使用する必要がある場合は、これらのスクリプトを実行するだけで、出来上がりです。

マウスレス開発者になる準備はできていますか?

柔軟性があるため、開発環境があり、ツールを簡単に切り替えることもできます。 たとえば、tmuxを使用したくない場合は、別のターミナルマルチプレクサに置き換えることができます。 i3のステータスバーやアプリケーションランチャーが気に入らない場合は、それらを交換することもできます。

ご想像のとおり、この種のシステムの構成には、ある程度の時間、動機、および努力が必要です。 だから私は「マウスレス開発環境の構築」という本を書きました。 すべてのツールを構成する方法、1つのコマンドでシステム全体をインストールするスクリプトを作成する方法、および個人的なニーズに合わせてすべてをカスタマイズする方法について詳しく説明します。 Linuxシェルについてよく知らない場合は、カスタムプロジェクトを作成してそれに慣れることができます。

興味のある方は、この本のサンプルと目次全体をここで見つけることができます。

この種のシステムが必要かどうかを判断する最良の方法は、単に試してみることだと思います。 私はあなたに一つのことを保証することができます:あなたは途中でたくさん学ぶでしょう!

SmashingMagazineでさらに読む

  • 「私はキーボードだけで1日Webを使用しました」とChrisAshton
  • 「メカニカルキーボードの完全ガイド」、Ben Frain
  • 「アクセシビリティの強力な主張をする」トッド・リビー
  • 「ChromeDevToolsのアクセシビリティ」、Umar Hansa