Skip to content

Commit 1df21fd

Browse files
authored
Merge pull request #16 from statiolake/participate
Explain how to participate in AtCoder using Rust
2 parents 310b839 + f356125 commit 1df21fd

31 files changed

+579
-42
lines changed

Diff for: src/SUMMARY.md

+19-19
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,25 @@
22

33
# Summary
44

5-
- [はじめに (TODO)](./introduction.md)
6-
- [AtCoderの環境について (TODO)](./todo.md)
7-
- [ソフトウェアのバージョンなど (TODO)](./todo.md)
8-
- [単一のソースファイル (TODO)](./todo.md)
9-
- [利用可能なクレート (TODO)](./todo.md)
10-
- [開発環境の準備 (TODO)](./todo.md)
11-
- [Rustツールチェインのインストール (TODO)](./todo.md)
12-
- [ソースコードエディタとデバッガの準備 (TODO)](./todo.md)
13-
- [cargo-generateテンプレート (TODO)](./todo.md)
14-
- [cargo-generateのインストール (TODO)](./todo.md)
15-
- [コンテストの参加方法 (TODO)](./todo.md)
16-
- [Cargoパッケージの作成 (TODO)](./todo.md)
17-
- [利用するクレートの選択 (TODO)](./todo.md)
18-
- [テストケースの作成 (TODO)](./todo.md)
19-
- [プログラムの作成 (TODO)](./todo.md)
20-
- [プログラムのテスト (TODO)](./todo.md)
21-
- [プログラムの提出 (TODO)](./todo.md)
22-
- [Tips(小技集) (TODO)](./todo.md)
23-
- [クレートの使用例 (TODO)](./todo.md)
5+
- [はじめに](./introduction.md)
6+
- [AtCoderの環境について](./environment.md)
7+
- [開発環境の準備 (TODO)](./installation/index.md)
8+
- [Rustツールチェインのインストール (TODO)](./installation/toolchain.md)
9+
- [ソースコードエディタの準備 (TODO)](./installation/editor.md)
10+
- [Rust Language Server のインストール](./installation/rls.md)
11+
- [cargo-generateのインストール](./installation/cargo-generate.md)
12+
- [コンテストの参加方法 (TODO)](./participate/index.md)
13+
- [コンテスト直前の事前準備](./participate/before-contest/index.md)
14+
- [Cargoパッケージの作成 (TODO)](./participate/before-contest/generate-project.md)
15+
- [利用するクレートの選択とコンパイル (TODO)](./participate/before-contest/choose-crates.md)
16+
- [プロジェクトのコピー (TODO)](./participate/before-contest/copy-project.md)]
17+
- [コンテスト開始後の流れ](./participate/during-contest/index.md)
18+
- [テストケースの作成](./participate/during-contest/write-tests.md)
19+
- [プログラムの作成 (TODO)](./participate/during-contest/write-program.md)
20+
- [プログラムのテスト](./participate/during-contest/test.md)
21+
- [プログラムの提出 (TODO)](./participate/during-contest/submit.md)
22+
- [Tips(小技集) (TODO)](./tips.md)
23+
- [クレートの使用例](./use-crates.md)
2424
- [AtCoder運営者向けの情報](./atcoder-env/index.md)
2525
- [本章で想定している環境](./atcoder-env/supported-environment.md)
2626
- [インストール](./atcoder-env/installation.md)

Diff for: src/atcoder-env/compiling-and-running-using-cargo.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
<!-- -*- coding:utf-8-unix -*- -->
2+
13
# [cargo] ファイルレイアウトとコンパイルの流れ
24

35
選手がRustプログラムを提出すると、その内容がジャッジサーバ上のファイルシステムに書き出されます。
@@ -21,7 +23,8 @@ $HOME # ユーザのホームディレクトリ
2123

2224
以上でCargoプロジェクトが整いました。
2325

24-
# コンパイルコマンド
26+
27+
## コンパイルコマンド
2528

2629
ツールチェインのインストールのページで説明したように、コンパイルを実行するシェルに以下の環境変数が設定されている必要があります。
2730

Diff for: src/atcoder-env/compiling-and-running-using-rustc.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
<!-- -*- coding:utf-8-unix -*- -->
2+
13
# [rustc] ファイルレイアウトとコンパイルの流れ
24

35
選手がRustプログラムを提出すると、その内容がジャッジサーバ上のファイルシステムに書き出されます。
@@ -25,7 +27,7 @@ $HOME
2527
```
2628

2729

28-
# コンパイルコマンド
30+
## コンパイルコマンド
2931

3032
ツールチェインのインストールのページで説明したように、コンパイルを実行するシェルに以下の環境変数が設定されている必要があります。
3133

Diff for: src/atcoder-env/installing-rust-crates.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
- 例:標準ライブラリのハッシュ関数はDoS攻撃を避けるために暗号強度があり、計算量が多い。
2121
競技プログラミングでは暗号強度は求められず、より計算量の少ないハッシュ関数で十分
2222

23+
2324
### AtCoder運営者様へのお願い
2425

2526
対象クレートの一覧は[このページ][crates-2019]にあります。
@@ -38,6 +39,7 @@
3839
`cargo build`コマンドを実行すると、Cargoはそれらのクレートのソースコードをダウンロードし、適切なオプションと共に`rustc`を実行することでクレートをコンパイルします。
3940
クレートのソースコードは`$CARGO_HOME/registory/src`にダウンロードされ、コンパイル済みのクレート(`rlib`ファイル)は`Cargo.toml`が置かれたディレクトリを起点とする相対ディレクトリ`./target/release/deps`配下に出力されます。
4041

42+
4143
### 一般的な開発時のファイルレイアウト
4244

4345
```console
@@ -63,6 +65,7 @@ $HOME # ユーザのホームディレクトリ
6365

6466
まず、今回は各ファイルを以下のように配置し、クレートのコンパイルは導入時に済ませておくことにします。
6567

68+
6669
### AtCoderジャッジサーバでのファイルレイアウト(導入時に配置するもの)
6770

6871
```console
@@ -82,6 +85,7 @@ $RUST_HOME (/usr/local/lib/rust)
8285

8386
そしてジャッジの際には[以前説明した](./supported-environment.md#一般的なrustプログラム開発環境との違い)Cargoを利用する方法と`rustc`を利用する方法のいずれかを利用してコンパイルします。
8487

88+
8589
### [cargo] AtCoderジャッジサーバでのファイルレイアウト(ジャッジの際に作成するもの)
8690

8791
```console
@@ -96,6 +100,7 @@ $HOME # ユーザのホームディレクトリ
96100
└-- atcoder-rust-base # コンパイル、リンク済みの実行ファイル
97101
```
98102

103+
99104
### [rustc] AtCoderジャッジサーバでのファイルレイアウト(ジャッジの際に作成するもの)
100105

101106
Cargoを使用せず、`rustc`に適切なオプション(ライブラリ検索パスなど)を与えて実行することで、事前にコンパイルしておいた`rlib`ファイルとリンクさせます。
@@ -343,6 +348,7 @@ _108 = {package = "whiteread",version = "=0.4.4",default-features = false,featur
343348
[the-cargo-book-platform-specific-dependencies]: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#platform-specific-dependencies
344349
[the-cargo-book-specifying-dependencies]: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#specifying-dependencies
345350

351+
346352
## クレートのコンパイル
347353

348354
クレートをコンパイルしましょう。
@@ -371,4 +377,3 @@ $ find target/release/deps/ -type f | egrep -c '\.(rlib|so)$'
371377
66
372378
# ↑ 上の数字を確認
373379
```
374-

Diff for: src/atcoder-env/installing-rustc-dep-option-generator.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# (オプション)クレート検索パス生成ツールのインストール
44

5-
**Note:** この作業は実際のビルドに`rustc`を利用する場合で、クレート検索パスを指定するコンパイルオプションをツールで生成する場合に必要となります。実際のビルドで`cargo`を利用する場合と`cargo build -v`などの出力を元にしてクレート検索パスを指定するコンパイルオプションを手書きする場合などはツールは不要です。
5+
> Note: この作業は実際のビルドに`rustc`を利用する場合で、クレート検索パスを指定するコンパイルオプションをツールで生成する場合に必要となります。実際のビルドで`cargo`を利用する場合と`cargo build -v`などの出力を元にしてクレート検索パスを指定するコンパイルオプションを手書きする場合などはツールは不要です。
66
77
このページでは`rustc`のコマンドライン・オプションを生成するツールである`rustc-dep-option-generator`のインストール手順を説明します。
88
このツールはRustで書かれています。
@@ -19,6 +19,7 @@ $ sudo apt install -y libssl-dev
1919

2020
なお`libssl-dev``rustc-dep-option-generator``cargo`をライブラリとして用いているために必要ですが、このツールではその機能は使いません。ツール実行時のネットワーク・アクセスは不要です。
2121

22+
2223
## ツールのインストール
2324

2425
`cargo install`コマンドでインストールします。

Diff for: src/atcoder-env/supported-environment.md

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
# 本章で想定している環境
44

5+
56
## 用語
67

78
まずは用語を整理します。本章で用いる用語には以下のものがあります。

Diff for: src/environment.md

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!-- -*- coding:utf-8-unix -*- -->
2+
3+
# AtCoderの環境について
4+
5+
現在 AtCoder で利用できる最新の環境は 2020 年言語アップデートによって更新された環境です。
6+
7+
- Rust 1.42.0
8+
- 外部クレートあり
9+
10+
コンパイルオプションや利用できる外部クレートの一覧と簡単な解説やコード例など、この環境についてのより詳しい情報は [2020 Update](https://github.com/rust-lang-ja/atcoder-rust-resources/wiki/2020-Update) のページにまとまっています。ご一読ください。

Diff for: src/installation/cargo-generate.md

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<!-- -*- coding:utf-8-unix -*- -->
2+
3+
# `cargo-generate` のインストール
4+
5+
AtCoder で利用できる Rust のバージョンやライブラリを指定したプロジェクトを簡単に生成するために、 [atcoder-rust-base の ja ブランチ](https://github.com/rust-lang-ja/atcoder-rust-base/tree/ja)にプロジェクトの雛形を用意しています。この雛形は`cargo generate`というコマンドを使って展開するため、先にこのコマンドをインストールする必要があります。
6+
7+
`cargo generate` サブコマンドを利用できるようにするには `cargo-generate` が必要です。端末 (Windows ユーザーの方はコマンド プロンプト) を開いて `cargo install cargo-generate` コマンドを実行してください。これだけでインストールは完了です。
8+
9+
```console
10+
$ cargo install cargo-generate
11+
Updating crates.io index
12+
Downloaded cargo-generate v0.5.0
13+
(...中略...)
14+
Compiling cargo-generate v0.5.0
15+
Finished release [optimized] target(s) in 5m 46s
16+
Installing ...
17+
Installed package `cargo-generate v0.5.0` (executable `...`)
18+
```
19+
20+
実際に `cargo generate --help` として実行できるかどうかを確認しましょう。
21+
22+
```console
23+
$ cargo generate --help
24+
cargo-generate 0.5.0
25+
Ashley Williams <[email protected]>
26+
cargo, make me a project
27+
28+
USAGE:
29+
cargo generate [FLAGS] [OPTIONS] --git <git>
30+
31+
FLAGS:
32+
-f, --force Enforce to create a new project without case conversion of project name
33+
-h, --help Prints help information
34+
-V, --version Prints version information
35+
-v, --verbose
36+
37+
OPTIONS:
38+
--branch <branch>
39+
--git <git>
40+
-n, --name <name>
41+
```

Diff for: src/installation/editor.md

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<!-- -*- coding:utf-8-unix -*- -->
2+
3+
# ソースコードエディタの準備
4+
5+
Rust プログラムのソースコードは単純なテキストファイルです。編集にはテキストエディタというプログラムを使います。単純にテキストを読み書きするという機能に限ればテキストエディタは OS にも付属していますが、よりプログラミングに特化した機能を多く揃えるテキストエディタが無料で簡単に使える時代ですので、ぜひ活用するべきです。それらのエディタが持つ機能には例えば次のようなものがあります。 (一例です)
6+
7+
- コードハイライト
8+
文法構造に合わせてソースコードを色付けして表示する機能です。たとえば型名や関数名などに色がつきます。この機能はコードを視覚的に把握するのに役立ちます。
9+
- 入力補完
10+
変数名や関数名の最初の何文字かを入力するだけでそれから始まる要素を列挙して表示してくれます。目当てのものがあればキー一つで残りの部分を補完してくれます。
11+
- エラーハイライト
12+
入力するのと同時にリアルタイムに内容をチェックし、エラーがあればそれをエディタ上に赤線を引くなどの形で表示してくれます。コンパイラを直接実行する手間もエラーメッセージを読み解く手間もなくエラーに気づくことができるメリットがあります。
13+
- ドキュメント (説明書き) の表示
14+
久しぶりに使う関数の引数の数や順番がわからなくなることはよくあることですが、こういうときにマウスカーソルを関数に合わせるだけでその関数のシグネチャやドキュメントを表示してくれます。
15+
- 定義へのジャンプ
16+
その関数や型が定義されている場所を開いてくれます。構造体の中身を少し忘れてしまったり、関数の処理の中身を確認したりといったときに簡単にソース上を移動できます。
17+
18+
こういった機能は Language Server Protocol という共通の仕組みの上に実装されているので、これをサポートするエディタであればこれらの機能を享受できます。 Language Server Client を実装しているエディタは無数にあり、どれを使うかは完全に好みです。
19+
20+
本説明はできるだけエディタによらないように進めていくつもりですが、エディタに特有の内容が現れるときは [Visual Studio Code](https://code.visualstudio.com/) を想定して説明します。それ以外のエディタを使われる方は適宜読み替えてお読みください。次節で Rust のコーディング支援機能を導入する方法を説明します。
21+
22+
(TODO: Visual Studio Code のインストールと Rust (rls) 拡張機能のインストールを説明する)

Diff for: src/installation/index.md

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!-- -*- coding:utf-8-unix -*- -->
2+
3+
# 開発環境の準備
4+
5+
**TODO** このページは書きかけです。
6+
7+
この章では、手元のパソコンに Rust の開発環境と、テキストエディタとして [Visual Studio Code](https://code.visualstudio.com/) をインストールする方法について説明します。
8+
9+
環境を手元に用意するメリットは普段使い慣れたエディタや環境でコーディングできるようになることです。開発環境を用意して Language Server Protocol に対応するエディタ ([Visual Studio Code](https://code.visualstudio.com/) など) を利用すれば、入力補完やリアルタイムのエラーチェックなど様々な機能の恩恵を受けることができます。逆に言うと、自分の使い慣れたエディタや環境を使いたいと思わずむしろ環境を整える方が面倒だと感じられる方は AtCoder のコードテスト (TODO: リンクが完成次第挿入) を利用するのが最も簡単な方法です。外部ライブラリにまつわる互換性の問題もありません。
10+
11+
既に Rust の開発環境がインストールされており、普段使い慣れたエディタや編集環境もあるという方には前半は全く不要な話となります。[`cargo-generate` のインストール](cargo-generate.md)へお進みください。それもインストールされている方はこの章で説明することはありませんので、実際に[参加方法の説明](../participate/index.md)へお進みください。

Diff for: src/installation/rls.md

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<!-- -*- coding:utf-8-unix -*- -->
2+
3+
# Rust Language Server のインストール
4+
5+
Rust Language Server (RLS) は、ソースコード編集中の様々な支援機能を提供するためのプログラムです。例えば、プログラムを編集しながらリアルタイムでエラー箇所をハイライトしたり、コード補完機能を提供したり、定義にジャンプしたり、簡単なドキュメントを表示したりといった様々な機能があります。使い慣れたエディタとともにこうした支援機能が使えることが、ローカルに Rust の環境を作る大きなメリットです。
6+
7+
なお、こうしたコーディング支援機能が不要だと考える方はインストールをする必要はありません。
8+
9+
> Note: Visual Studio Code を利用している方は、拡張機能が自動的にインストールしてくれるため、ここで直接インストールする必要はありません。
10+
11+
さて、 RLS は Rust 本体と同時に配布されているため、 RLS のインストールをする前に対応するバージョンの Rust をインストールしなければなりません。現在 AtCoder で使える Rust のバージョンは 1.42.0 ですので、コマンド プロンプトあるいは端末を開いて次のようにコマンドを実行します。
12+
13+
```console
14+
$ rustup install 1.42.0
15+
info: syncing channel updates for '1.42.0-x86_64-pc-windows-msvc'
16+
info: latest update on 2020-03-12, rust version 1.42.0 (b8cedc004 2020-03-09)
17+
info: downloading component 'cargo'
18+
info: downloading component 'clippy'
19+
info: downloading component 'rust-docs'
20+
12.0 MiB / 12.0 MiB (100 %) 5.9 MiB/s in 1s ETA: 0s
21+
info: downloading component 'rust-std'
22+
info: downloading component 'rustc'
23+
35.6 MiB / 35.6 MiB (100 %) 28.2 MiB/s in 1s ETA: 0s
24+
info: downloading component 'rustfmt'
25+
info: installing component 'cargo'
26+
info: installing component 'clippy'
27+
info: installing component 'rust-docs'
28+
12.0 MiB / 12.0 MiB (100 %) 2.4 MiB/s in 4s ETA: 0s
29+
info: installing component 'rust-std'
30+
info: installing component 'rustc'
31+
35.6 MiB / 35.6 MiB (100 %) 10.7 MiB/s in 3s ETA: 0s
32+
info: installing component 'rustfmt'
33+
34+
1.42.0-x86_64-pc-windows-msvc installed - rustc 1.42.0 (b8cedc004 2020-03-09)
35+
36+
info: checking for self-updates
37+
```
38+
39+
続けて RLS をインストールします。なお必要なコンポーネントは変わるかもしれませんので、適宜 [RLS のリポジトリ](https://github.com/rust-lang/rls)も参照してください。
40+
41+
```console
42+
$ rustup component add --toolchain 1.42.0 rls rust-analysis rust-src
43+
info: downloading component 'rls'
44+
info: installing component 'rls'
45+
info: downloading component 'rust-analysis'
46+
info: installing component 'rust-analysis'
47+
info: downloading component 'rust-src'
48+
info: installing component 'rust-src'
49+
```
50+
51+
両方の実行が完了すれば、 RLS のインストールは終了です。

0 commit comments

Comments
 (0)