このページは、hikalium 著 「作って学ぶ OSのしくみ(I)」(技術評論社, 2025)の内容を補完する情報を掲載しています。
本ページや上記書籍についてのフィードバックは、本サポートサイトの GitHub Issues経由で著者までお知らせください。
ハッシュタグは #OSのしくみ です。
rust-analyzer
の設定についてRustのコードを書く際にはrust-analyzer
というLSPサーバーが非常に便利です。筆者もいつも大変お世話になっています。
しかし、本書のリポジトリでrust-analyzer
がうまく動作しない場合があるようですので、その解決策をご紹介します。
本書のリポジトリでは再現性を確保するため、Rustツールチェインのバージョンをrust-toolchain.toml
に記載のとおり固定しています。そのため、より新しいバージョンのRustツールチェインに同梱されているrust-analyzer
を使用すると、エラーが発生する可能性があります。多くのエディタにおいてrust-analyzer
拡張機能は、rust-toolchain.toml
の内容にかかわらず、最新の(もしくは拡張機能に同梱されているバージョンの)rust-analyzer
をデフォルトで使用するようになっているため、以下のようなエラーメッセージが表示されることがあります。
[coc.nvim] Workspace `/home/hikalium/repo/wasabi/Cargo.toml` is using an outdated toolchain version `1.77.0-nightly` but rust-analyzer only supports `1.78.0` and higher.
Consider using the rust-analyzer rustup component for your toolchain or upgrade your toolchain to a supported version.
これを回避するためには、本書のリポジトリで使用されているツールチェインに適合したバージョンのrust-analyzer
をLSPサーバーとして使用するよう、エディタに指示してあげる必要があります。
まず、以下のコマンドをwasabiリポジトリの内部で実行して、rust-analyzer
の実行ファイルパスを確認します。
$ rustup component add rust-analyzer && rustup which rust-analyzer
info: component 'rust-analyzer' for target 'x86_64-unknown-linux-gnu' is up to date
/home/hikalium/.rustup/toolchains/nightly-2024-01-01-x86_64-unknown-linux-gnu/bin/rust-analyzer
その後、このファイルパスをエディタの設定に追記します。
coc.nvim
経由でcoc-rust-analyzer
を利用している場合は、エディタを開いて:CocConfig
もしくは:CocLocalConfig
を実行して開かれたファイルをrust-analyzer
拡張機能を利用している場合は、wasabiレポジトリの配下で.vscode/settings.json
を開き、次のアイテムを追加します:
{
"rust-analyzer.server.path": "/home/hikalium/.rustup/toolchains/nightly-2024-01-01-x86_64-unknown-linux-gnu/bin/rust-analyzer"
}
設定を保存したのちエディタを再起動すれば、wasabiに対してもrust-analyzer
が問題なく動作するようになるはずです。
See also: https://github.com/lowlayergirls/wasabi-help/issues/9
本書はRust初心者の方でも、それ以外のプログラミング言語の経験がある方であれば問題なく読めることを目指して書かれているため、事前学習は必ずしも必要ではありません。どうしても事前に予習したい場合や、読んでいる途中で参考書が欲しくなってきたら、以下の資料を参考にするとよいでしょう。
また、本書とあわせて、もしくは本書の次に読むと理解が深まると思われる資料はこちらです。
さらに発展的なOS自作に関わる情報を手に入れたい方は、筆者だけでなくたくさんの自作OS開発者が集うコミュニティosdev-jpのSlackへの参加を検討してもよいでしょう。参加方法はこちらに記載されています。また、定期的に「自作OSもくもく会」や「作業会」というイベントが開催されておりますので、そちらに参加して本を読み進めるというのもありかもしれません。これらのイベント等の動画アーカイブはYouTubeのプレイリストにありますので、こちらもあわせて参考にしてみてください。
初版第1刷p.139で、useを行ごとにバラすようにしているよう説明しています。 これを自動でやってくれる方法があると読者より教えていただいたので共有します。 (Thanks @lapla-cogito!)
rustfmt.toml
で
imports_granularity = "Item"
と設定すれば、自動でバラしてくれるようです。