diff --git a/src/ch01-01-installation.md b/src/ch01-01-installation.md index c132a0a8..4736ff81 100644 --- a/src/ch01-01-installation.md +++ b/src/ch01-01-installation.md @@ -13,25 +13,20 @@ an internet connection for the download. 最初の手順は、Rustをインストールすることです。Rustは、Rustのバージョンと関連するツールを管理する、`rustup`というコマンドラインツールを使用してダウンロードします。ダウンロードには、インターネットへの接続が必要になります。 -> 注釈: なんらかの理由で`rustup`を使用したくない場合、[Rustインストールページ][rust-installation-page]で、 +> 注釈: なんらかの理由で`rustup`を使用したくない場合、[Other Rust Installation Methods ページ][otherinstall]で、 > 他の選択肢をご覧になってください。 -> 訳注:日本語版のRustインストールページは[こちら][rust-installation-page-ja]です。 - -[rust-installation-page]: https://www.rust-lang.org/tools/install/ -[rust-installation-page-ja]: https://www.rust-lang.org/ja/tools/install/ - 以下の手順で最新の安定版のRustコンパイラをインストールします。 @@ -45,16 +40,17 @@ Rustは安定性 (stability) を保証しているので、現在この本の例 > > In this chapter and throughout the book, we’ll show some commands used in the > terminal. Lines that you should enter in a terminal all start with `$`. You -> don’t need to type in the `$` character; it indicates the start of each -> command. Lines that don’t start with `$` typically show the output of the -> previous command. Additionally, PowerShell-specific examples will use `>` -> rather than `$`. +> don’t need to type the `$` character; it’s the command line prompt shown to +> indicate the start of each command. Lines that don’t start with `$` typically +> show the output of the previous command. Additionally, PowerShell-specific +> examples will use `>` rather than `$`. --> > ### コマンドラインの記法 > > この章及び、本を通して、端末で使用するなんらかのコマンドを示すことがあります。読者が入力するべき行は、 -> 全て`$`で始まります。ただし、読者が`$`文字を入力する必要はありません; これは各コマンドの開始を示しているだけです。 +> 全て`$`で始まります。ただし、読者が`$`文字を入力する必要はありません; +> これは各コマンドの開始を示すために表示しているコマンドラインプロンプトです。 > `$`で始まらない行は、典型的には直前のコマンドの出力を示します。また、PowerShell限定の例には、 > `$`ではなく、`>`を使用します。 @@ -88,22 +84,37 @@ Rust is installed now. Great! ``` + +*リンカ*も必要になるでしょう。 +リンカは、コンパイルされた出力をひとつのファイルに合体させるためにRustが使用するプログラムです。 +リンカが既にインストールされている可能性は高いでしょう。 +リンカエラーが発生したときは、Cコンパイラは典型的にリンカを含んでいるでしょうから、Cコンパイラをインストールすべきです。 +一般的なRustパッケージの中には、Cコードに依存し、Cコンパイラが必要になるものもあるので、この理由からもCコンパイラは有用です。 + + + +macOSでは、以下を実行することでCコンパイラが手に入ります: + +```console +$ xcode-select --install +``` + + -これに加えて、なんらかのリンカが必要になるでしょう。既にインストールされている可能性は高いものの、 -Rustプログラムをコンパイルしようとした時、リンカが実行できないというエラーが出たら、 -システムにリンカがインストールされていないということなので、手動でインストールする必要があるでしょう。 -Cコンパイラは通常正しいリンカとセットになっています。 -自分のプラットフォームのドキュメンテーションを見てCコンパイラのインストール方法を確認してください。 -一般的なRustパッケージの中には、Cコードに依存し、Cコンパイラが必要になるものもあります。 -ですので、Cコンパイラは今のうちにインストールしておく価値があるかもしれません。 +Linuxユーザは、通常はディストリビューションのドキュメントに従って、GCCまたはClangをインストールするべきです。 +例えばUbuntuを使用している場合は、`build-essential`パッケージをインストールすれば大丈夫です。 Windowsでは、[https://www.rust-lang.org/tools/install][install]に行き、手順に従ってRustをインストールしてください。 -インストールの途中で、Visual Studio 2013以降用のC++ビルドツールも必要になるという旨のメッセージが出るでしょう。 -ビルドツールを取得する最も簡単な方法は、[Visual Studio 2019用のビルドツール][visualstudio]をインストールすることです。 -どのワークロード (workloads) をインストールするかと質問されたときは、"C++ build tools"が選択されており、Windows 10 SDKと英語の言語パック (English language pack) が含まれていることを確かめてください。 +インストールの途中で、Visual Studio 2013以降用のMSVCビルドツールも必要になるという旨のメッセージが出るでしょう。 -> 訳注:Windowsの言語を日本語にしている場合は言語パックのところで「日本語」が選択されており、そのままの設定でインストールしても基本的に問題ないはずです。しかし、サードパーティーのツールやライブラリの中には英語の言語パックを必要とするものがあるため、「日本語」に加えて「英語」も選択することをお勧めします。 + -[install]: https://www.rust-lang.org/tools/install -[visualstudio]: https://visualstudio.microsoft.com/visual-cpp-build-tools/ +ビルドツールを取得するには、[Visual Studio 2022][visualstudio]をインストールする必要があるでしょう。 +どのワークロード (workloads) をインストールするかと質問されたときは、以下を含めてください: + + + +* 「C++によるデスクトップ開発」(“Desktop Development with C++”) +* Windows 10または11のSDK +* 英語の言語パック (English language pack) コンポーネント (お好みで他の任意の言語パックも) + +> 訳注:Windowsの言語を日本語にしている場合は言語パックのところで「日本語」が選択されており、そのままの設定でインストールしても基本的に問題ないはずです。しかし、サードパーティーのツールやライブラリの中には英語の言語パックを必要とするものがあるため、「日本語」に加えて「英語」も選択することをお勧めします。 -### 更新及びアンインストール +### トラブルシューティング -`rustup`経由でRustをインストールしたなら、最新版へ更新するのは簡単です。 -シェルから以下の更新スクリプトを実行してください: +Rustが正常にインストールされているか確かめるには、シェルを開いて以下の行を入力してください: ```console -$ rustup update +$ rustc --version ``` -Rustと`rustup`をアンインストールするには、シェルから以下のアンインストールスクリプトを実行してください: +バージョンナンバー、コミットハッシュ、最新の安定版がリリースされたコミット日時が以下のフォーマットで表示されるのを目撃するはずです。 -```console -$ rustup self uninstall +```text +rustc x.y.z (abcabcabc yyyy-mm-dd) ``` -### トラブルシューティング +この情報が見られたなら、Rustのインストールに成功しています! +この情報が出ない場合は、次のようにしてRustが`%PATH%`システム環境変数にあることを確認してください。 -Rustが正常にインストールされているか確かめるには、シェルを開いて以下の行を入力してください: +Windows CMDでは: ```console -$ rustc --version +> echo %PATH% ``` -バージョンナンバー、コミットハッシュ、最新の安定版がリリースされたコミット日時が以下のフォーマットで表示されるのを目撃するはずです。 +PowerShellでは: -```text -rustc x.y.z (abcabcabc yyyy-mm-dd) +```powershell +> echo $env:Path ``` -この情報が見られたなら、Rustのインストールに成功しています!この情報が出ず、Windowsを使っているなら、 -Rustが`%PATH%`システム環境変数にあることを確認してください。これらが全て正常であるのに、それでもRustがうまく動かないなら、 -助力を得られる場所はたくさんあります。最も簡単なのが[Rustの公式Discord][discord]の#beginnersチャンネルです。そのアドレスで、助けてくれる他のRustacean (Rustユーザが自分たちのことを呼ぶ、冗談めいたニックネーム) たちとチャットできます。 -他にも、素晴らしいリソースとして[ユーザ・フォーラム][users]と[Stack Overflow][stackoverflow]が挙げられます。 +LinuxおよびmacOSでは: + +```console +$ echo $PATH +``` + + + +これらが全て正常であるのに、それでもRustがうまく動かないなら、助力を得られる場所はたくさんあります。 +他のRustacean(Rustユーザが自分たちのことを呼ぶ、冗談めいたニックネーム)たちと交流する方法を[コミュニティページ][community]で探してください。 > 訳注1:Rustaceanについて、いらないかもしれない補足です。[公式Twitter曰く、Rustaceanはcrustaceans(甲殻類)から来ている][twitter]そうです。 > そのため、Rustのマスコットは(非公式らしいですが)[カニ][mascott]。上の会話でCの欠点を削ぎ落としているからcを省いてるの?みたいなことを聞いていますが、 > 違うそうです。検索したら、堅牢性が高いから甲殻類という意見もありますが、真偽は不明です。 > 明日使えるかもしれないトリビアでした。 -> 訳注2:上にある公式Discordは英語話者のコミュニティです。日本語話者のためのコミュニティが[Zulip rust-lang-jpにあり][zulip_jp]、こちらでもRustaceanたちが活発に議論をしています。 +> 訳注2:上にあるコミュニティページはどれも英語話者のコミュニティへのリンク集です。日本語話者のためのコミュニティが[Zulip rust-lang-jpにあり][zulip_jp]、こちらでもRustaceanたちが活発に議論をしています。 > 公式Discord同様、初心者向けの#beginnersチャンネルが存在するので、気軽に質問してみてください。 -[discord]: https://discord.gg/rust-lang -[users]: https://users.rust-lang.org/ -[stackoverflow]: https://stackoverflow.com/questions/tagged/rust [twitter]: https://mobile.twitter.com/rustlang/status/916284650674323457 [mascott]: https://www.slideshare.net/wolf-dog/ss-64026540 [zulip_jp]: https://rust-lang-jp.zulipchat.com + + +### 更新及びアンインストール + + + +`rustup`経由でRustがインストールされたなら、新しくリリースされた版へ更新するのは簡単です。 +シェルから以下の更新スクリプトを実行してください: + +```console +$ rustup update +``` + + + +Rustと`rustup`をアンインストールするには、シェルから以下のアンインストールスクリプトを実行してください: + +```console +$ rustup self uninstall +``` + @@ -234,12 +286,12 @@ Rustが`%PATH%`システム環境変数にあることを確認してくださ ### ローカルのドキュメンテーション -インストールされたRustには、ローカルに複製されたドキュメンテーションのコピーが含まれているので、これをオフラインで閲覧することができます。 +インストールされたRustには、オフラインでドキュメンテーションを閲覧できるように、ドキュメンテーションのローカルコピーが含まれています。 ブラウザでローカルのドキュメンテーションを開くには、`rustup doc`を実行してください。 標準ライブラリにより提供される型や関数がなんなのかや、それをどう使えば良いのかがよくわからないときは、いつでもAPIのドキュメンテーションを検索してみてください! + + +[otherinstall]: https://forge.rust-lang.org/infra/other-installation-methods.html +[install]: https://www.rust-lang.org/tools/install +[visualstudio]: https://visualstudio.microsoft.com/downloads/ +[community]: https://www.rust-lang.org/community diff --git a/src/ch01-02-hello-world.md b/src/ch01-02-hello-world.md index d517eef3..686cbfdb 100644 --- a/src/ch01-02-hello-world.md +++ b/src/ch01-02-hello-world.md @@ -5,9 +5,9 @@ ## Hello, World! Rustをインストールしたので、最初のRustプログラムを書きましょう。新しい言語を学ぶ際に、 @@ -19,16 +19,17 @@ Rustをインストールしたので、最初のRustプログラムを書きま > no specific demands about your editing or tooling or where your code lives, so > if you prefer to use an integrated development environment (IDE) instead of > the command line, feel free to use your favorite IDE. Many IDEs now have some -> degree of Rust support; check the IDE’s documentation for details. Recently, -> the Rust team has been focusing on enabling great IDE support, and progress -> has been made rapidly on that front! +> degree of Rust support; check the IDE’s documentation for details. The Rust +> team has been focusing on enabling great IDE support via `rust-analyzer`. See +> [Appendix D][devtools] for more details. --> > 注釈: この本は、コマンドラインに基礎的な馴染みがあることを前提にしています。Rustは、編集やツール、 > どこにコードがあるかについて特定の要求をしないので、コマンドラインではなくIDEを使用することを好むのなら、 > どうぞご自由にお気に入りのIDEを使用してください。今では、多くのIDEがなんらかの形でRustをサポートしています; -> 詳しくは、IDEのドキュメンテーションをご覧ください。最近、Rustチームは優れたIDEサポートを有効にすることに注力し、 -> その前線で急激に成果があがっています! +> 詳しくは、IDEのドキュメンテーションをご覧ください。 +> Rustチームは`rust-analyzer`を介して優れたIDEサポートを可能にすることに注力しています。 +> 詳しくは[付録D][devtools]をご覧ください。 端末を開いて以下のコマンドを入力し、*projects*ディレクトリと、 -*projects*ディレクトリ内にHello, world!プロジェクトのディレクトリを作成してください。 +*projects*ディレクトリ内に「Hello, world!」プロジェクトのディレクトリを作成してください。 -LinuxとmacOSなら、こう入力してください: +Linux、macOS、そしてWindows上のPowerShellなら、こう入力してください: -```text +```console $ mkdir ~/projects $ cd ~/projects $ mkdir hello_world @@ -80,19 +81,6 @@ Windowsのcmdなら、こう: > cd hello_world ``` - - -WindowsのPowerShellなら、こう: - -```powershell -> mkdir $env:USERPROFILE\projects -> cd $env:USERPROFILE\projects -> mkdir hello_world -> cd hello_world -``` - @@ -101,13 +89,13 @@ WindowsのPowerShellなら、こう: 次にソースファイルを作り、*main.rs*というファイル名にしてください。Rustのファイルは常に *.rs*という拡張子で終わります。 -ファイル名に2単語以上使っているなら、アンダースコアで区切ってください。例えば、*helloworld.rs*ではなく、 +ファイル名に2単語以上使っているなら、アンダースコアで区切るのが規約です。例えば、*helloworld.rs*ではなく、 *hello_world.rs*を使用してください。 -ファイルを保存し、端末ウィンドウに戻ってください。LinuxかmacOSなら、以下のコマンドを打ってファイルをコンパイルし、 -実行してください: +ファイルを保存し、*~/projects/hello_world*ディレクトリの端末ウィンドウに戻ってください。 +LinuxかmacOSなら、以下のコマンドを打ってファイルをコンパイルし、実行してください: -```text +```console $ rustc main.rs $ ./main Hello, world! @@ -163,16 +152,17 @@ Hello, world! OSに関わらず、`Hello, world!`という文字列が端末に出力されるはずです。この出力が見れないなら、 -「トラブルシューティング」節に立ち戻って、助けを得る方法を参照してください。 +インストールの節の[「トラブルシューティング」][troubleshooting]の部分に立ち戻って、助けを得る方法を参照してください。 `Hello, world!`が確かに出力されたら、おめでとうございます!正式にRustプログラムを書きました。 @@ -185,11 +175,11 @@ Rustプログラマになったのです!ようこそ! ### Rustプログラムの解剖 -Hello, world!プログラムでいま何が起こったのか詳しく確認しましょう。 +この「Hello, world!」プログラムを詳しく再確認しましょう。 こちらがパズルの最初のピースです: ```rust @@ -199,42 +189,41 @@ fn main() { ``` -これらの行でRustで関数を定義しています。`main`関数は特別です: 常に全ての実行可能なRustプログラムで走る最初のコードになります。 -1行目は、引数がなく、何も返さない`main`という関数を宣言しています。引数があるなら、かっこ(`()`)の内部に入ります。 +これらの行は`main`という名前の関数を定義しています。`main`関数は特別です: 常に全ての実行可能なRustプログラムで走る最初のコードになります。 +ここで、1行目は、引数がなく何も返さない`main`という関数を宣言しています。引数があるなら、かっこ(`()`)の内部に入ります。 -また、関数の本体が波括弧(`{}`)に包まれていることにも注目してください。Rustでは、全ての関数本体の周りにこれらが必要になります。 +関数の本体は`{}`に包まれます。Rustでは、全ての関数本体の周りに波括弧が必要になります。 スペースを1つあけて、開き波括弧を関数宣言と同じ行に配置するのがいいスタイルです。 -複数のRustプロジェクトに渡って標準的なスタイルにこだわりたいなら、`rustfmt`を使うことでコードを決まったスタイルに整形できるでしょう。 -Rustチームは、`rustc`のように標準的なRustの配布にこのツールを含んでいるため、既にコンピューターにインストールされているはずです! -詳細は、オンラインのドキュメンテーションを確認してください。 +> 注釈: 複数のRustプロジェクトに渡って標準的なスタイルにこだわりたいなら、`rustfmt`を使うことでコードを決まったスタイルに整形できるでしょう(`rustfmt`の詳細は[付録D][devtools]で)。 +> Rustチームは、`rustc`のように標準的なRustの配布にこのツールを含んでいるため、既にコンピューターにインストールされているはずです! -`main`関数内には、こんなコードがあります: +`main`関数の本体は、こんなコードを抱えています: ```rust println!("Hello, world!"); @@ -242,23 +231,29 @@ Inside the `main` function is the following code: この行が、この小さなプログラムの全作業をしています: テキストを画面に出力するのです。 -ここで気付くべき重要な詳細が4つあります。まず、Rustのスタイルは、タブではなく、4スペースでインデントするということです。 +ここで気付くべき重要な詳細が4つあります。 + +まず、Rustのスタイルは、タブではなく、4スペースでインデントするということです。 + + 2番目に`println!`はRustのマクロを呼び出すということです。代わりに関数を呼んでいたら、 `println`(`!`なし)と入力されているでしょう。Rustのマクロについて詳しくは、第19章で議論します。 -とりあえず、`!`を使用すると、普通の関数ではなくマクロを呼んでいるのだということを知っておくだけでいいでしょう。 +とりあえず、`!`を使用すると、普通の関数ではなくマクロを呼んでいるのだということと、マクロは関数と同じルールには必ずしも従わないということを知っておくだけでいいでしょう。 -Linux、macOS、WindowsのPowerShellなら、シェルで以下のように`ls`コマンドを入力することで実行可能ファイルを見られます: +Linux、macOS、WindowsのPowerShellなら、シェルで`ls`コマンドを入力することで実行可能ファイルを見られます: -```text +```console $ ls main main.rs ``` +LinuxとmacOSでは、2つのファイルが見えるでしょう。 +WindowsのPowerShellでは、CMDを使ったときに見ることになるのと同じ3つのファイルが見えるでしょう。 WindowsのCMDなら、以下のように入力するでしょう: ```cmd @@ -340,29 +339,25 @@ main.rs これは、*.rs*拡張子のソースコードファイル、実行可能ファイル(Windowsなら*main.exe*、他のプラットフォームでは、*main*)、 -そして、CMDを使用しているなら、*.pdb*拡張子のデバッグ情報を含むファイルを表示します。ここから、 +そして、Windowsを使用しているなら、*.pdb*拡張子のデバッグ情報を含むファイルを表示します。ここから、 *main*か*main.exe*を走らせます。このように: -```text +```console $ ./main # or .\main.exe on Windows # または、Widnowsなら.\main.exe ``` -*main.rs*がHello, world!プログラムなら、この行は`Hello, world!`と端末に出力するでしょう。 - - +*main.rs*がHello, world!プログラムなら、この行は`Hello, world!`と端末に出力します。 + +[troubleshooting]: ch01-01-installation.html#トラブルシューティング +[devtools]: appendix-04-useful-development-tools.html diff --git a/src/ch01-03-hello-cargo.md b/src/ch01-03-hello-cargo.md index 8b4284a6..6a9fe888 100644 --- a/src/ch01-03-hello-cargo.md +++ b/src/ch01-03-hello-cargo.md @@ -19,14 +19,14 @@ CargoはRustのビルドシステム兼パッケージマネージャです。 いままでに書いたようなごく単純なRustプログラムには依存がありません。 -そのため「Hello, world!」プロジェクトをCargoでビルドしても、Cargoの中のコードをビルドする部分しか使わないでしょう。 +「Hello, world!」プロジェクトをCargoでビルドしても、Cargoの中のコードをビルドする部分しか使わないでしょう。 より複雑なRustプログラムを書くようになると依存を追加することになりますが、Cargoを使ってプロジェクトを開始したなら、依存の追加もずっと簡単になります。 Rustプロジェクトの大多数がCargoを使用しているので、これ以降、この本では、あなたもCargoを使用していると想定します。 @@ -63,9 +63,9 @@ determine how to install Cargo separately. Cargoを使って新しいプロジェクトを作成し、元の「Hello, world!」プロジェクトとの違いを見ていきましょう。 @@ -78,12 +78,12 @@ $ cd hello_cargo ``` -最初のコマンドは*hello_cargo*という名の新しいディレクトリを作成します。 +最初のコマンドは*hello_cargo*という名の新しいディレクトリとプロジェクトを作成します。 プロジェクトを*hello_cargo*と名付けたので、Cargoはそれに関連するいくつかのファイルを同名のディレクトリに作成します。 -このファイルは[TOML](https://toml.io)(*Tom's Obvious, Minimal Language*、トムの明確な最小限の言語)形式で、Cargoの設定フォーマットです。 +このファイルは[*TOML*][toml](*Tom's Obvious, Minimal Language*、トムの明確な最小限の言語)形式で、Cargoの設定フォーマットです。 Cargoはリスト1-1で書いたような「Hello, world!」プログラムを生成してくれています。 -これまでのところ、以前のプロジェクトとCargoが生成したプロジェクトの違いは、Cargoがコードを*src*ディレクトリに配置したことと、 +これまでのところ、私たちのプロジェクトとCargoが生成したプロジェクトの違いは、Cargoがコードを*src*ディレクトリに配置したことと、 最上位のディレクトリに*Cargo.toml*設定ファイルがあることです。 このコマンドは実行ファイルを現在のディレクトリではなく、*target/debug/hello_cargo*(Windowsでは*target/debug/hello_cargo.exe*)に作成します。 +デフォルトのビルドはデバッグビルドなので、Cargoはバイナリを*debug*という名前のディレクトリの中に入れます。 以下のコマンドで実行ファイルを実行できます。 ```console $ ./target/debug/hello_cargo # or .\target\debug\hello_cargo.exe on Windows -$ # Windowsでは .\target\debug\hello_cargo.exe + # Windowsでは .\target\debug\hello_cargo.exe Hello, world! ``` @@ -290,7 +294,7 @@ Cargoがその内容を管理してくれます。 先ほどは`cargo build`でプロジェクトをビルドし、`./target/debug/hello_cargo`で実行しました。 @@ -303,15 +307,25 @@ $ cargo run Hello, world! ``` + + +`cargo run`を使ったほうが、`cargo build`を忘れずに実行した後バイナリへのパス全体を使わないといけないのと比較して便利なので、 +ほとんどの開発者は`cargo run`を使います。 + 今回はCargoが`hello_cargo`をコンパイルしていることを示す出力がないことに注目してください。 -Cargoはファイルが変更されていないことに気づいたので、単にバイナリを実行したのです。 +Cargoはファイルが変更されていないことに気づいたので、再ビルドせずに単にバイナリを実行したのです。 もしソースコードを変更していたら、Cargoは実行前にプロジェクトを再ビルドし、以下のような出力が表示されたことでしょう。 ```console @@ -338,16 +352,17 @@ $ cargo check なぜ実行可能ファイルが欲しくないのでしょうか? `cargo check`は実行ファイルを生成するステップを省くことができるので、多くの場合、`cargo build`よりもずっと高速です。 -もし、あなたがコードを書きながら継続的にチェックするのなら、`cargo check`を使えば、そのプロセスを高速化できます! +もし、あなたがコードを書きながら継続的にチェックするのなら、`cargo check`を使えば、プロジェクトのコンパイルがまだ通るか教えてくれるプロセスを高速化できます! そのため多くのRustaceanはプログラムを書きながら定期的に`cargo check`を実行し、コンパイルできるか確かめます。 そして、実行ファイルを使う準備ができたときに`cargo build`を走らせるのです。 @@ -418,13 +433,14 @@ the executable in *target/release*. 単純なプロジェクトでは、Cargoは単に`rustc`を使うことに対してあまり多くの価値を生みません。 しかし、プログラムが複雑になるにつれて、その価値を証明することになるでしょう。 -複数のクレートからなる複雑なプロジェクトでは、Cargoにビルドを調整させるほうがずっと簡単です。 +プログラムが複数のファイルに分かれるほど大きくなったり、依存が必要になってくると、 +Cargoにビルドを調整させるほうがずっと簡単です。 -Cargoの詳細については、[ドキュメント]を参照してください。 - -[ドキュメント]: https://doc.rust-lang.org/cargo/ +Cargoの詳細については、[ドキュメント][cargo]を参照してください。 [installation]: ch01-01-installation.html#インストール +[toml]: https://toml.io [appendix-e]: appendix-05-editions.html +[cargo]: https://doc.rust-lang.org/cargo/