LoginSignup
20
11

More than 1 year has passed since last update.

Nightly Rustにおいて、RLSがrustupコマンドでインストールできない時に代わりに探してくれるツール(cargo-rls-install)を作った

Last updated at Posted at 2019-03-05

RLSの廃止に伴い、本ツールは役割を終えました。

アーカイブ

Cargo-rls-install

どんなツール?

  • このサイトのスクレイピングを行い、RLSのビルド状況を確認し、
    「present」の表示になっている最新の日付のRLSをインストールします。

  • Rust言語で作成。


開発経緯

Rustには、言語の開発状況に応じたStable(正式)、Beta、Nightly(毎晩日替わり)という
3つのチャンネルがあります。

StableとBetaチャンネルにRLSをインストールすることは、いつでもrustupコマンドを
使うことで可能ですが、Nightlyチャンネルだけは、Rust Language Server(RLS)が
正常にビルドできた日のみ、インストールすることができます。

これは、Rust Language Server(RLS)が依存関係にあるClippyという
Rust言語のコーディング支援ツールが、Rust言語の目まぐるしい変更に
付いて行けず、毎週のようにバグが生まれ、ビルドできない日があるため、
その日は、RLSも一緒に壊れてしまうためです。

このため、利用可能なRLSを探す方法を一人ひとりが、調べてコマンドを打つのでは、
非合理的だと考えたので、開発に至りました。


#インストール方法

$ cargo install cargo-rls-install

Cargoは、Rust言語に付属しているため、インストール前には、
Rust言語をインストール済みである必要があります。

また、Linux系OSでは、事前にOpenSSLをインストールしている必要があります。

OpenSSLのインストール方法
#Debian系(Ubuntu、Raspbianなど)
$ sudo apt install libssl-dev

# Windows Subsystem for LinuxのまっさらなUbuntu18.04に
# インストールする場合は、追加で2コマンド必要。
$ sudo apt install build-essential
$ sudo apt install pkg-config

#RedHat系(CentOSなど)
$ sudo yum install openssl-devel

#Fedoraなど
$ sudo dnf install openssl

特徴

  • ReqwestというライブラリでHTMLをダウンロードし、Selectというライブラリで
    スクレイピングします。

  • Rustの3つのチャンネル(stable/beta/nightly)のRLSのインストールに対応しています。

  • Cargo(Rustのパッケージマネージャ)から、__1コマンド__でインストールできます。

  • Cargoコマンドの__サブコマンド__($ cargo <自身が付けたコマンド名>で実行できる仕組み)なので
    細かいコマンド名を忘れていても$ cargo listと打てば、名前が出てきます。

使い方(Nightly -> Stable -> Betaの順で説明します。)

Nightly Rust向けのコマンド

# Nightly RustとRLSをインストール(各コマンド実行の直前にyes/noを選択)
$ cargo rls-install -n
# 又は
$ cargo rls-install --nightly

# Nightly RustとRLSをインストール(最後までyesを打った扱いで処理)
$ cargo rls-install -ny

Stable Rust向けのコマンド

# Stable RustとRLSをインストール(各コマンド実行の直前にyes/noを選択)
$ cargo rls-install -s   # 又は --stable

Beta Rust向けのコマンド

# Beta RustとRLSをインストール(各コマンド実行の直前にyes/noを選択)
$ cargo rls-install -b   # 又は --beta

チャンネル選びは迷ってしまう方向けのコマンド

$ cargo rls-install -y
* Select channel
[0:stable, 1:beta, 2:nightly] -> *チャンネル名(stable/beta/nightly)を入力する*

一週間のビルド状況表示コマンド

現在、デフォルトで使われているRustツールチェインと
一週間のビルド状況が表示されます。

$ cargo rls-install -v

 * Default use Rust toolchain: nightly-2019-05-12

 * Rust information
 ---------------------------------
 |       Rust & RLS status       |
 ---------------------------------
 | Build date         |  Status  |
 ---------------------------------
 | nightly-2019-05-06 | present  |
 | nightly-2019-05-07 | present  |
 | nightly-2019-05-08 | present  |
 | nightly-2019-05-09 | present  |
 | nightly-2019-05-10 | present  |
 | nightly-2019-05-11 | present  |
 | nightly-2019-05-12 | present  | <= Installed
 ---------------------------------
 |  Last available: 2019-05-12   |
 ---------------------------------
End

rustup component addのラッパーコマンド

主に、rustfmtのインストールする際に、rustup component add rustfmt --toolchain XX
書くのが面倒だったため、追加した機能です。

$ cargo rls-install -c [コンポーネント名(例: rustfmt)]
# 又は
$ cargo rls-install -f # rustfmtをインストールします。

参考にしたサイト等

GitHub - mexus/rustup-components-history

GitHub Pagesを使って、公開されているこのページがあったから、
本ツールを作ることができました。

もし、無くなってしまったら、このツールは使えなくなります。
RLSが使えるかを表示する似たようなページもありますが、
昨晩のビルド結果を表示するだけのこのページでは、月に数回、3日以上、
壊れたままの状態になるClippy(Rustのコード解析・補完ツール)と
それに依存するRLSの最新版を探すことができません。

朗報、2019年3月9日にRustの公式リポジトリへ取り込まれたため、
将来的に無くなる可能性はほぼ0になりました。(2019年3月10日追記)

Rust Language Server(RLS)でVisual Studio Codeの補完を行う(Qiita記事)

本ツールは、この記事を見て、何か最新版のRLSを使い続ける良い方法が
無いかを考えた末の回答です。

cargo-version-sync の紹介(Qiita記事)

本ツールがStructoptを使っているのは、cargo-version-syncのソースコードの影響です。

Rustのイテレータの網羅的かつ大雑把な紹介(Qiita記事)

この記事がなかったら、イテレータを率先して、使っていなかったかもしれません。
Rust公式のイテレータ解説ページは、読み込みに時間がかかり過ぎて、
ユーザビリティが全くありません。

追記

Nightly RustにRLSをインストールして、例えば、Visual Studio Code(VSCode)の
拡張機能であるRust (rls)で使う際には、拡張機能の設定を変える必要があります。

"rust-client.disableRustup": true

この設定により、cargo-rls-installで新しくインストールした
「nightly-YYYY-MM-DD」というフォーマットのツールチェイン名を
正しく認識して、RLSを起動できるようになります。

20
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
11