【2023最新】「rust」のおすすめ本!人気ランキング
- 実践Rustプログラミング入門
- プログラミングRust 第2版
- プログラミングRust
- 実践Rust入門[言語仕様から開発手法まで]
- ゼロから学ぶRust システムプログラミングの基礎から線形型システムまで (KS情報科学専門書)
- 詳解Rustプログラミング
- Webアプリ開発で学ぶ Rust言語入門
- 動かして学ぶ!Rust入門
- 改訂3版 これからはじめるプログラミング 基礎の基礎
- Rustプログラミング入門
今もっとも人気があり、Google、Amazon、Microsoftも注目している新言語。C/C++にかわる安全爆速の言語。 ■■C/C++の代わりとなるべき最新言語 ■■ ■■その独特な仕様をわかりやすく解説。 ■■ ■■これから Rust をはじめるすべての人へ■■ ●いますぐ使いはじめるべきRustの5つ魅力 ・とにかく実行速度が速い ・モダンな言語機能が一通り入っている ・OS から Web アプリケーションまで幅広く実装できる ・ツール群がとても充実している ・「安全性」が強力に担保されている ●Rustならではの言語仕様を完全理解 ・Google、Microsoft、Amazonが いま注目する最新言語。その先進的考え方を体験する。 ・バグを出させないための仕組みを知り、Rustの深淵に踏み込む。 ・本書に載っているいろんな領域のサンプルで、組み込み開発からWebアプリケーションまで幅広く使われるRustを学ぶ。 ・特徴的なRustの概念を完全理解する。 「ゼロコスト抽象化」「ムーブセマンティクス」「クレート」 「スレッド安全性」「パニック」「unsafe」「エディション」 「所有権」「借用」「ライフタイム」「トレイト」…… "安心安全の 爆速言語 Rust入門" edtion 2018対応。 ■Part 1 入門 ■Chapter1 プログラミング言語 Rust ●1-1 Rust の魅力 ●1-2 とにかく実行速度が速い Rust は機械語に直接コンパイルされる ガベージコレクションをもたない 「ゼロコスト抽象化」を追求している ●1-3 モダンな言語機能が一通り入っている 不変・可変を明示的に制御できる filter, map などを使ってコレクションを操作できる 代数的データ型とパターンマッチング 強力な型推論 トレイト ●1-4 OS から Web アプリケーションまで幅広く実装できる ●1-5 ツール群がとても充実している Cargo エディタサポート 標準フォーマッタ rustfmt、標準リンター clippy ●1-6 「安全性」が強力に担保されている ●1-7 エディションという考え方によって互換性を担保している ●1-8 Rust の利用事例 ■Chapter2 環境構築 ●2-1 Webサイトで試せるRust - The Rust Playground ●2-2 開発環境を構築する rustupをインストール 動作確認 cc エディタ Rust Language Server(rls) rust-analyzer cargo-edit リリーストレインモデル:nightly, beta, stable ●2-3 まとめ ■Chapter3 Rustの基本 ●3-1 基本的な文法 基本的な型 変数宣言 制御構文 関数 マクロ ●3-2 Rustを支える言語機能 ゼロコスト抽象化 所有権と借用 スレッド安全性 非同期処理 ●3-3 クレートとモジュール 入門 クレート 入門 モジュール ●3-4 Cargo - ビルドシステム・パッケージマネージャ サブコマンド Cargo.toml ●3-5 テスト assertマクロ パニックを発生させるテスト 普段は無視するテスト testsモジュール testsディレクトリ ドキュメントのテスト ■Part 2 実践 ■Chapter4 プログラムを作成する ●4-1 プロジェクトの準備 アプリケーションの仕様 プロジェクトの作成 コマンドライン引数の処理 ●4-2 計算ロジックを追加する アプリケーションの枠組みの作成 逆ポーランド記法の計算ロジックの作成 ●4-3 テストを書く ●4-4 エラーハンドリングを追加する エラーをハンドリングしない実装 Resultでエラーを受け取る 独自のエラーを定義する エラー処理クレートを使う 逆ポーランド記法計算機へのanyhowの適用 ●4-5 ファイルパスの表現について ●4-6 実行パスへのインストール ●4-7 まとめ ■Chapter5 Webアプリケーションの開発 ●5-1 Webフレームワークのセットアップ Hello world! エラーハンドリングの定義 ●5-2 テンプレートエンジン Web アプリの設計 HTML テンプレート HTML の表示 ●5-3 データベース テーブルの設計 SQLite に Rust でアクセスする サーバーアプリケーションでアクセスする ●5-4 Todo アプリを仕上げる POST リクエストを受け取る ●5-5 Docker イメージの作成 Dockerfile の作成 イメージビルドの高速化 イメージサイズの削減 ●5-6 まとめ ■Chapter6 WebAssembly ●6-1 WebAssemblyとは ●6-2 開発の準備 npm cargo-generate wasm-pack ●6-3 サンプルプログラム:マンデルブロ集合を描く マンデルブロ集合とは マンデルブロ集合を計算するプログラム wasmを呼び出すJavaScriptの実装 JavaScriptから呼び出せるようにする JavaScriptとの速度比較 ●6-4 サンプルプログラム:ナンバープレースを解く ナンバープレースとは ナンバープレースを解くプログラム Rustの実装 JavaScript側の実装 ●6-5 まとめ ■Chapter7 GUIアプリケーション ●7-1 RustにおけるGUIの現状 GUIクレートの紹介 IcedによるGUIの実装 ●7-2 ウィンドウ プロジェクトディレクトリの準備 アプリケーション基盤の作成 main関数からの実行 ●7-3 ウィジェット ウィジェットの配置 フォントの使用 ウィンドウのサイズ変更 ●7-4 メッセージ メッセージと状態変数の定義 メッセージの送信 メッセージの受信 ●7-5 サブスクリプション レシピの作成 サブスクリプションの作成 メッセージの受信 時間の表示 完成 ■Chapter8 組み込みシステム ●8-1 環境構築 ターゲットとするプラットフォームについて クロスコンパイルの環境構築 QEMU ●8-2 Hello, world! ●8-3 Lチカ LEDの操作方法 Peripheralsの取得 Peripheralsの有効化 GPIOの取得 LEDの操作 ウェイトを入れる Lチカのプログラム ●8-4 embedded-hal 単一のPeripherals クロックの凍結 型制約されたピン設定 その他のデバイス ●8-5 組み込み向けクレート alloc heapless パニックハンドラ cortex-m-rtic ●8-6 参考資料 ■Chapter9 開発ツール ●9-1 実践Cargo プロジェクトのディレクトリ構成 フィーチャ 依存クレートの修正 ワークスペース サブコマンド ●9-2 フォーマッタ・リンター rustfmt clippy ●9-3 コードカバレッジ cargo-tarpaulin ●9-4 ベンチマーク・プロファイラ cargo bench criterion cargo-profiler flamegraph hyperfine ●9-5 CI Travis CI GitHub Actions ■Chapter10 プロダクトをリリースする ●10-1 シングルバイナリ ●10-2 ビルドの再現性 Cargo.lock rust-toolchain ●10-3 バイナリサイズの最適化 最適化のオプション サイズ比較 ●10-4 Profile-Guided Optimization 実行方法 ●10-5 クレートの信頼性 rustsec.org cargo-audit cargo-crev ●10-6 ファジング cargo-fuzz ●10-7 プライベートなクレート cargo publishを禁止する 代替レジストリ ■Part 3 Tips ■Chapter11 いろいろなRustの発展的Tips ●11-1 マクロ 宣言的マクロ 手続きマクロ 関数的マクロ deriveマクロ アトリビュートマクロ ●11-2 FFIによる他言語との連携 サンプル:RustからC言語の関数を呼ぶ サンプル:RubyからRustの関数を呼ぶ FFIを使う上での注意点 その他のバインディングを作るクレート まとめ ●11-3 パニック 自己診断としてのパニック パニックとResultの使い分け パニックが起こるとどうなるか パニックを捕捉する 巻き戻しが起こらない場合 パニックハンドラを置き換える パニックとポイズニング パニックのまとめ ●11-4 unsafe UB (未定義動作) 安全性と健全性 unsafeアンチパターン 契約で理解するunsafe unsafeの2つの使い方 妥当性不変条件と即時UB unsafeをできるだけ安全に使うために valgrind デバッガを使う サニタイザ 参考資料 unsafeのまとめ ●11-5 Rust のエディション エディションとは何か? エディションの歴史 今後予定されているエディション エディション間の互換性について Cargo でのエディションの設定方法 ●11-6 Rust製のOSS ripgrep Alacritty Rust製のOSSでよく使われるライセンス cargo-license ●11-7 Rust のコミュニティ Rust のコミュニティについて Rust 商標ポリシーについて 最新情報を得るために 日本のコミュニティの現状 ●11-8 Rust と競技プログラミング ●11-9 Rustを仕事で使う 業務で使われている例 自社の業務にRustを取り入れるためのヒント まとめ 索 引 ■Column 目 次 機械語とは何か ゼロコスト抽象化 関数型プログラミング言語 Rust? ビルトインマクロ PartialEqとPartialOrd 2015エディションのモジュールシステム Rust の文字列型 Rust におけるasync/await と非同期ランタイム Webフレームワーク 汎用 SQL ライブラリ: diesel Rust とサーバーレスアプリケーション Rust と Prometheus wasm-bindgen web-sys Tierについて xargoとstd Aware Cargo cross によるクロスコンパイル svd2rust RustとOS バイナリにリビジョンを埋め込む 清潔なマクロ 2015エディションのマクロと名前解決
Rustは、安全性、高速性、並行性に優れた言語。概要と用途について書かれた書籍で、ほとんどの機能を詳細にカバーした決定版。 安全性、高速性、並行性に優れた言語Rustの決定版の改訂! 次世代ブラウザ開発用にMozillaによって開発されたRustは、C/C++並みのパフォーマンスと低レベルの制御能力に加え、メモリとスレッドの安全性を担保し、さらに並行性にも優れるといった特徴を持つ、優れた言語です。本書はMozillaで実際にRustを使ってFirefoxを開発している著者による、言語の概要と、用途について書かれた書籍で、Rustのほとんどの機能を詳細にカバーします。Rustのメジャーバージョンアップにより非同期処理が可能となったことに対応し、第2版では新たに非同期の章を設け、この機能を詳細に解説しています。 Rustは、安全性、高速性、並行性に優れた言語。概要と用途について書かれた書籍で、ほとんどの機能を詳細にカバーした決定版。
注目度の高い次世代のプログラミング言語Rustの日本では初めての書籍。 注目度の高い次世代のプログラミング言語Rustの決定版! Rustは次世代ブラウザ開発用にMozillaによって開発されたプログラミング言語です。C/C++並みのパフォーマンスと低レベルの制御能力に加え、メモリとスレッドの安全性を担保し、さらに並行性にも優れるといった特徴を持つ、いま最も注目度の高い言語です。C/C++に不満を持ちながらも使い続けているシステムプログラマには、とても魅力的な言語と言えます。世界的に注目度が高く、英語では次々に解説書が発刊されていますが、日本では初めてのRust本となります。
Rustは2015年に安定版がリリースされた新しい言語です。静的型付けと関数型言語などにみられる高度な抽象化のしくみを取り入れており、高品質で再利用性の高いプログラムを開発できます。さらに、ハードウェア資源についてC/C++と同等の効率の良い制御ができますが、決定的に違うのは、安全性をかなり重視しています。つまりRustは開発者の生産性を高めつつ、性能やハードウェア資源の効率を最大限に発揮するという、従来の言語では相反する要件を同時に満たす、数少ないプログラミング言語の1つなのです。本書はこの注目のプログラミング言語Rustの入門書です。この1冊でRustの言語仕様から開発現場で必要となる知識までを丁寧に解説しています。 第1部 基礎編 第1章 Rustの特徴 1-1 Rustの特徴 1-2 最も愛されている言語 1-3 Rustの起源 コラム 名前の由来 1-4 なぜRustなのか? 1-4-1 トップクラスのパフォーマンス 1-4-2 安全なシステムプログラミング言語 1-4-3 生産性を高めるモダンな機能 1-4-4 シングルバイナリ、クロスコンパイル 1-4-5 他言語との連携が容易 1-5 導入事例 1-5-1 Dropbox - Magic Pocket 1-5-2 ドワンゴ - Frugalos 1-5-3 npmレジストリ 1-5-4 AWS Firecracker 1-5-5 Mozilla Firefox 第2章 はじめてのRustプログラム 2-1 インストール 2-1-1 本書が対象とする環境 2-1-2 ツールチェイン、リンカ、ABI 2-1-3 rustup 2-1-4 Rustツールチェインのインストール 2-1-5 リンカのインストール(Linux) 2-1-6 リンカのインストール(macOS) 2-1-7 リンカのインストール(Windows MSVC) 2-2 Hello Worldプログラム 2-2-1 パッケージの作成 2-2-2 binクレートとlibクレート 2-2-3 Cargo.tomlファイル 2-2-4 src/main.rsファイル 2-2-5 パッケージのビルド 2-2-6 プログラムの実行 2-2-7 プログラムの内容 2-3 ソースコードエディタの導入 2-3-1 Rustをサポートする主なエディタとIDE 2-3-2 Visual Studio Code(VS Code)の特徴 2-3-3 VS Codeのインストール 2-3-4 Rust RLS拡張機能のインストール 2-3-5 基本的な使い方 2-4 RPN計算機プログラムとデバッガによる実行 2-4-1 プログラムの作成 コラム ジェネリクスにおけるトレイト境界について 2-4-2 デバッガのセットアップ(LinuxとmacOS) 2-4-3 CodeLLDB拡張機能のインストール 2-4-4 デバッガのセットアップ(Windows MSVC) 2-4-5 パッケージごとの設定 2-4-6 デバッガでRPN計算機を実行 コラム ターミナルからデバッガを実行する 2-5 ツールチェインの補足情報 2-5-1 プラットフォーム・サポート・ティア 2-5-2 リリースサイクルとリリースチャネル 2-5-3 エディション 2-5-4 rustupのその他の機能 2-5-5 Cargoの主なコマンド 第3章 クイックツアー 3-1 プログラムの概要 3-1-1 実行例 3-2 並列ソートに適したバイトニックソート 3-2-1 アルゴリズム 3-2-2 Pythonによるサンプル実装 3-2-3 Pythonプログラムの実行 3-3 第1段階:初歩的な実装 3-3-1 モジュール構成について 3-3-2 関数の引数を定義する 3-3-3 識別子の命名規則について 3-3-4 コーディング規約について 3-3-5 sort関数の本体を実装する 3-3-6 残りの関数を実装する 3-3-7 単体テストを書く(数値のソート) 3-4 第2段階:ジェネリクスでさまざまなデータ型に対応させる 3-4-1 テストケースを追加する(文字列のソート) 3-4-2 型パラメータを導入してジェネリクス化する 3-4-3 大小比較可能な型に限定する 3-4-4 コンパイラが型に関するバグを防いでくれる 3-4-5 列挙型で使いやすくする 3-4-6 match式による場合分け 3-4-7 エラーを返す 3-5 第3段階:クロージャでソート順をカスタマイズ 3-5-1 テストケースを追加する(学生データのソート) 3-5-2 クロージャの構文について 3-5-3 sort_by関数を実装する 3-5-4 クロージャの型について 3-5-5 既存の関数を修正する 3-5-6 トレイトを自動導出する 3-5-7 乱数で巨大なテストデータを生成する 3-5-8 イテレータチェインでスマートに 3-5-9 ソート結果を確認する 3-6 最終形:並列ソートの実現 3-6-1 標準ライブラリのマルチスレッドAPI 3-6-2 並列データ処理ライブラリRayon 3-6-3 Rayonを導入する 3-6-4 SyncトレイトとSendトレイト 3-6-5 所有権 3-6-6 sub_sort関数の並列化 3-7 仕上げ:ベンチマークプログラム 第4章 プリミティブ型 4-1 型の分類 コラム コードの表記法について 4-2 スカラ型 4-2-1 ユニット 4-2-2 真理値 4-2-3 固定精度の整数 4-2-4 固定精度の浮動小数点数 4-2-5 文字 4-2-6 参照 4-2-7 生ポインタ 4-2-8 関数ポインタ コラム 関数ポインタとクロージャ 4-3 プリミティブな複合型 4-3-1 タプル 4-3-2 配列 4-3-3 スライス 4-3-4 文字列スライス 第5章 ユーザ定義型 5-1 スタック領域とヒープ領域 5-2 標準ライブラリの主な型 5-2-1 Box(std::boxed::Box) 5-2-2 ベクタ(std::vec::Vec) 5-2-3 その他のコレクション型 5-2-4 String(std::string::String) 5-2-5 範囲(std::ops::Range) 5-2-6 オプション(std::option::Option) 5-2-7 リザルト(std::result::Result) 5-3 新しい型の定義と型エイリアス 5-3-1 型エイリアス 5-3-2 構造体(struct) 5-3-3 列挙型(enum) 5-3-4 構造体と列挙型のより詳しい情報 5-4 型変換 5-4-1 型キャスト 5-4-2 複合型の型変換 5-4-3 Transmute(std::mem::transmute) 5-4-4 型強制 第6章 基本構文 6-1 準備 6-1-1 パッケージの作成 6-1-2 パッケージの構造 6-2 コメント 6-3 うるう年と平年 6-4 use宣言 6-5 関数 6-5-1 関数定義 6-5-2 式と文 6-5-3 関数の実行 6-5-4 メソッド 6-5-5 関連関数 6-6 束縛とミュータビリティ 6-6-1 束縛とは 6-6-2 ミュータビリティ 6-6-3 スコープ 6-6-4 シャドウイング 6-6-5 定数とスタティック変数 6-7 演算子 6-8 分岐 6-8-1 if式 6-8-2 match式とパターン 6-8-3 if let式 6-9 繰り返し 6-9-1 loop式 6-9-2 while式 6-9-3 while let式 6-9-4 for式 6-10 クロージャ 6-11 アトリビュート 6-12 モジュールとアイテムの可視性 6-12-1 modキーワードとpubキーワード 6-12-2 モジュールをファイルとして切り出す 第7章 所有権システム 7-1 所有権システムの利点 7-1-1 ガベージコレクタが不要になる 7-1-2 メモリ安全性がコンパイル時に保証される 7-1-3 リソースの自動解放 7-2 所有権システムの概要 7-3 値の所有者 7-4 値のスコープ コラム 値の破棄の意図的な遅延とリソースリーク 7-5 ムーブセマンティクス 7-6 コピーセマンティクス 7-6-1 Copyトレイトを実装する主な型 7-6-2 CopyトレイトとCloneトレイトの違い 7-7 借用:所有権を渡さずに値を貸し出す 7-8 参照のライフタイムと借用規則 7-8-1 新旧2種類の借用チェッカ 7-9 ライフタイムの詳細:簡単なベクタの実装 7-9-1 構造体の定義 7-9-2 new関連関数とwith_capacity関連関数 7-9-3 lenメソッドとcapacityメソッド 7-9-4 pushメソッドとgetメソッド 7-9-5 参照のライフタイムを確認する 7-9-6 ライフタイムの省略 7-9-7 staticライフタイム 7-9-8 popメソッドと借用からのムーブアウト コラム 列挙型とnullableポインタ最適化 7-9-9 growメソッド 7-9-10 イテレータと所有権 7-9-11 可変の参照と不正なポインタの回避 7-9-12 構造体や列挙型のライフタイム 7-10 共同所有者を実現するポインタ:Rc型とArc型 7-10-1 循環参照の問題 7-11 内側のミュータビリティ 7-11-1 使用例:TLSとRefCellでスレッド固有の可変の値を持つ 7-11-2 使用例:RwLockで可変の値を複数スレッドで共有する コラム アリーナ・アロケータ 7-12 クロージャと所有権 第8章 トレイトとポリモーフィズム 8-1 トレイトの基本 8-1-1 基本的な使い方 8-1-2 トレイト境界 コラム ジェネリクスの記法の表現力 8-1-3 トレイトの継承 8-1-4 デフォルト実装 8-1-5 トレイトとスコープ 8-1-6 トレイト実装のルール 8-1-7 自動導出 8-2 トレイトのジェネリクス 8-2-1 ジェネリクスの型パラメータと具体的な型 コラム トレイトとオーバーロードの関係 8-3 静的ディスパッチと動的ディスパッチ 8-3-1 ジェネリクスと静的ディスパッチのしくみ 8-3-2 トレイトオブジェクトと動的ディスパッチのしくみ 8-4 存在impl Trait コラム 全称と存在 8-5 トレイトとアイテム 8-5-1 関連関数 8-5-2 関連定数 8-5-3 関連型 コラム ジェネリクスか関連型か 8-6 標準ライブラリのトレイト利用例 8-6-1 std::io::Write 8-6-2 std::convert::From 8-6-3 std::iter::Iterator 8-6-4 std::ops::Eq 8-6-5 std::os::unix::fs::FileExt 8-6-6 std::marker::Sized 8-7 演算子のオーバーロード 8-8 トレイトのテクニック 8-8-1 StringとInto 8-8-2 オプショナル引数 8-8-3 パスネーム 8-8-4 &strとstr 8-8-5 Newtypeによるトレイト実装制約の回避 8-8-6 列挙型を使った型の混合 第2部 実践編 第9章 パーサを作る 9-1 四則演算の処理系の作成 9-1-1 パーサを構成する要素 コラム パーサの種類 9-1-2 処理する計算式について 9-1-3 全体の設計 9-2 字句解析 9-2-1 トークン 9-2-2 字句解析器の実装 9-3 構文解析 9-3-1 抽象構文木の実装 9-3-2 構文解析器の実装 9-3-3 エラー処理 9-4 抽象構文木の利用 9-4-1 評価器の作成 9-4-2 コードの生成 第10章 パッケージを作る 10-1 コマンドラインツールの作成 10-1-1 Cargoとプロジェクト、パッケージ、クレート 10-1-2 マニフェストファイルの修正 10-1-3 プログラムの作成 10-1-4 ライブラリとバイナリへの分割 10-2 ドキュメントを書く 10-2-1 ドキュメントの構文 10-2-2 ドキュメントの書式 10-2-3 ドキュメント文章の記載 コラム cargo docの便利なオプション 10-3 テストの追加 10-3-1 簡単なテストを書く 10-3-2 さまざまなテストを書く 10-3-3 テストを書く場所 コラム クレート内テストとクレート外テスト 10-4 パッケージを公開するために 10-4-1 パッケージのビルド 10-4-2 作業のコミット コラム Cargo.lockはコミットすべき? 10-4-3 リモートリポジトリの追加 10-5 自動テストを行う コラム CIのアレコレ 10-5-1 Travis CI 10-5-2 AppVeyor コラム いろいろなCIサービス 10-6 パッケージをリリースする 10-6-1 マニフェストファイルの修正 10-6-2 最終確認 コラム パッケージ名の-と_ 10-6-3 crates.io での公開 10-6-4 バイナリのリリース 第11章 Webアプリケーション、データベース接続 11-1 RustとWebの現状 11-1-1 同期と非同期 11-1-2 FuturesとTokio 11-1-3 Rustでの非同期の未来 11-1-4 Webアプリケーションフレームワーク 11-2 WebアプリケーションフレームワークActix Web 11-2-1 Hello, Actix Web 11-2-2 Actix Webとサーバの構成要素 11-2-3 静的ファイルを返す 11-2-4 テンプレートを返す 11-3 JSON APIサーバ 11-3-1 仕様 11-3-2 ワークスペース 11-3-3 ひな型 11-3-4 データ型の定義 11-3-5 APIでの使用 11-4 Dieselを使ったデータベースの扱い 11-4-1 diesel_cliのインストール 11-4-2 スキーマ定義とマイグレーション 11-4-3 モデルの定義 11-4-4 Dieselを用いたクエリ 11-4-5 データベースへのコネクションとHTTPサーバへの統合 コラム Dieselの型とクエリキャッシュ 11-5 マルチパート/CSVファイルの扱い 11-6 CLIクライアントの作成 11-6-1 最初のコード 11-6-2 ReqwestによるHTTP POST 11-6-3 ReqwestによるHTTP GET 11-6-4 完成 第12章 FFI 12-1 C FFIの基本 12-1-1 単純なC FFI 12-1-2 ライブラリとのリンク 12-1-3 グローバル変数 12-1-4 静的リンクライブラリとのリンク 12-1-5 ビルドスクリプトサポート コラム Rustのリンカ 12-2 Cのデータ型の扱い 12-2-1 プリミティブ型 12-2-2 ポインタ型 12-2-3 libc クレート 12-2-4 文字列型 12-2-5 関数ポインタ 12-2-6 所有権とリソースの解放 コラム ValgrindをRustに使う 12-2-7 Opaqueと空の列挙型 12-2-8 #[repr(C)] コラム Nullableポインタ最適化 12-3 C APIの基本 12-3-1 プロジェクトの作成 12-3-2 ライブラリの作成 12-4 実践C FFI 12-4-1 Onigmoのインストール 12-4-2 プロジェクト構成とbindgen 12-4-3 アンセーフなサンプルコード 12-4-4 ラッパ
実践的なソフトウェアの実装と、安全性を支える理論の学習を通して、Rustをゼロから徹底的にマスター。通読して学習する入門書! 通読して学習するRust入門書! 単なる文法の解説にはとどまらない。 実践的なソフトウェアの実装と、Rustの安全性を支える理論の学習を通して、ゼロから徹底的にマスターできる! サンプルコードもサポートページから提供! 【主な内容】 第1章 環境構築とHello, world! 第2章 Rustの基本 第3章 所有権・ライフタイム・借用 第4章 トレイト 第5章 モジュール・ドキュメント・テスト 第6章 正規表現 第7章 シェル 第8章 デバッガ 第9章 線形型システム 【正誤表】 https://github.com/ytakano/rust_zero/blob/master/errata.md 第1章 環境構築とHello, world! 第2章 Rustの基本 第3章 所有権・ライフタイム・借用 第4章 トレイト 第5章 モジュール・ドキュメント・テスト 第6章 正規表現 第7章 シェル 第8章 デバッガ 第9章 線形型システム
C/C++に代わるプログラミング言語として期待されるRustを、実践に向けて踏み込んだ構成・スタイルで解説します。 さまざまなCUIアプリケーションを通して システム言語としてのRustを徹底詳解 本書は、 Tim McNamara, "Rust in Action: Systems programming concepts and techniques" Manning Publications, の翻訳書です。 【本書の内容】 ダイレクトにメモリを操作し、OSのシステムコールを活用することで高速性を維持しつつ、コンパイラの進化によって安全性も確保した開発言語・Rust。 本書は、ファイルI/Oを使った入出力プログラムから、キーバリュー型のDB操作やメモリ操作、生のTCPを使うネットワークプログラム。そしてプロセスやスレッド、割り込みや例外処理などの低レイヤからカーネルそのものまで扱うためのノウハウを、Rust固有のテクニカルタームとともに解説します。 著者のTim McNamaraは、15年以上の時間をかけて、テキストマイニング、自然言語処理、データ工学のエキスパートになりました。彼はRust Wellingtonのオーガナイザであり、Rustプログラミングのチュートリアルを、オフラインでも、TwitchとYouTubeを介したオンラインでも、定期的に開催しています。 【本書で取り上げるジャンル】 ・メモリ操作 ・ファイルとストレージ ・ネットワーク ・時間管理 ・プロセスとスレッド ・カーネル ・割り込みと例外処理 【読者が得られること】 ・Rustによるプログラミング基礎 ・Rust固有のプログラミング手法 ・システムプログラミングの勘所 ・コンピュータサイエンスの知識 目次 第 1章:はじめに 第 1部:Rust言語の独自機能 第 2章:言語の基礎 第 3章:複合データ型 第 4章:ライフタイムと所有権と借用 第 2部:システムプログラミングの謎を解き明かす 第 5章:データの詳細 第 6章:メモリ 第 7章:ファイルとストレージ 第 8章:ネットワーク 第 9章:時間とタイムキーピング 第10章:プロセスとスレッドとコンテナ 第11章:カーネル 第12章:シグナルと割り込みと例外
Web開発に特化した「Rust×Web開発」の入門書です。Rustの基礎文法からWebアプリの開発までを網羅しています。 本書はWeb開発に特化した「Rust×Web開発」の入門書です。Rustの基礎文法からWebアプリの開発までを網羅しています。チュートリアル形式なので段階的に学習が進められます。また、解説するサンプルは、Web開発ならよく知っている題材を教材としました。そのため、RustによるWeb開発の理解を深めることができます。 RustはフロントエンドのエコシステムやMicrosoft/Google/AWSでも採用されるなど、近年高い注目を集めています。Rustは安全性・並行性・速度にフォーカスしながらも、非常に優れた開発者体験も提供してくれます。一方でシステムプログラミング言語であるRustは、多くのWeb開発者にとって学習の敷居が高いと考えられることも事実です。本書はRustによるWebアプリ開発を通じて、Web開発者のRustの学習の入口となることを目指した本です。 第1章 RustとWeb開発 第2章 Rust基礎 第3章 axumを使ってhttpリクエストを処理する 第4章 sqlxを使ってCRUDを実装する 第5章 Todoアプリの体裁を整える 第6章 Todoにラベルをつける Rustを使ってWebアプリ開発を身に付けるための解説書です。Webアプリ開発者がよく知っている題材をもとに学んでいきます。 第1章 RustとWeb開発 第2章 Rust基礎 第3章 axumを使ってhttpリクエストを処理する 第4章 sqlxを使ってCRUDを実装する 第5章 Todoアプリの体裁を整える 第6章 Todoにラベルをつける
Zennで大人気の「Rust 入門」が書籍になった!Rustの基本を手を動かしながらしっかり学べる! サンプルを動かしながら Rustの基本をしっかり学べる! 【本書の背景】 Rustは、2015年に初期版がリリースされたプログラミング言語です。Rustの特徴として「処理の速度が速い」「安全性が高い」「開発に必要なツールが充実」といったことが挙げられます。現在は、Microsoft、Google、Amazon、MetaといったIT企業やLinuxでも導入が進み、国内でも利用するIT企業が増えてきている人気急上昇の言語です。 【本書の概要】 Rustのプログラミング手法について、サンプルを元に手を動かしながら学ぶ書籍です。主に以下の3つについて丁寧に解説します。 ●Rustの概要と開発環境 ●Rustの基本的な文法と機能 ●Rustによる簡単なアプリ開発 なお本書はエンジニアのための情報共有コミュニティ「Zenn」で公開されている大人気の「Rust 入門」を元にした書籍です。 【対象読者】 Rustに初めて触れるプログラマー 【本書のポイント】 ・基本的な文法について丁寧に解説 ・Rustの機能を学ぶのに適したサンプルを用意 ・学習をもっと深めたい方に向けて「メモ」や「参照」で補足 【目次】 Chapter1 Rust Chapter2 環境構築 Chapter3 Rustの文法と機能 Chapter4 アプリケーションの開発 【著者プロフィール】 mebiusbox(メビウスボックス) 趣味でフリーソフトウェアを開発。エンジニア向けのコミュニティに記事を投稿することが多い。コンピュータグラフィックスに関する記事を書いて公開している。最近は Rust や Three.js も扱っている。 Chapter 1 Rust 01 概要 Rustの特徴 Rustの誕生 Rustはどういうプログラミング言語なのかエディション 02 互換性 03 まとめ Chapter 2 環境構築 01 Rustをインストールする前の準備 PowerShellのバージョンを確認 wingetのインストール 最新のPowerShellをインストール Windows Terminal Git Anaconda(Miniconda) 02 Rustのインストール rustup cargo rustc 03 Visual Studio Code スニペット 04 rust-analyzer 05 Rust Playground 06 Hello, World! パッケージの作成 Rustプログラムの実行環境 07 その他のツール Terminal-Icons Oh My Posh winget PowerShellのエイリアス bat lsd(LSDeluxe) delta simple-http-server cargo-make 08 まとめ 本章で学んだこと Chapter 3 Rustの文法と機能 01 基本 コメント(Comment) 式と文(Expression and statement) ブロック(Block) オブジェクト(Object) 組み込みデータ型 (Primitive Type) 型の別名(Alias) 所有権(Ownership) 関数(Function) print!マクロ 束縛(Binding) シャドーイング(Shadowing) 定数(Const) 参照(Reference) 可変性(Mutable and immutable) 文字列(String) スタティック変数 命名規則 参照外し(Dereference) 参照と可変性の関係 借用チェック(Borrow Checker) 02 コピートレイト(Copy Trait) 03 構造体・列挙型 構造体(Struct) 列挙型(Enum) 04 クロージャ(Closure) Fnとfn 05 制御構文 if式(else、else if) loop式 while式 for式 06 数列・スライス 数列(Range) スライス(Slice) 07 ジェネリクス(Generics) Option型 08 パターンマッチング(Pattern match式 マッチガード(Match Guard) パターンによる束縛 if let式 09 エラー処理(Error panic!マクロ Result型 unwrapメソッド expectメソッド エラー伝搬(Error Propagation) コンビネータ 10 RAII Derefトレイト Dropトレイト 3つのメモリ領域(データ、スタック、ヒープ) Box型 Rc型 11 ライフタイム(Lifetime) staticライフタイム 12 トレイト(Trait) トレイトとは 継承 derive属性 Fromトレイト マーカートレイト(Marker) Sizedトレイト 13 動的ディスパッチ トレイトオブジェクト dyn Trait型、impl Trait型 14 内部可変性(Interior Cell型 RefCell型 Weak型 15 並列処理 スレッド Send・Syncトレイト Arc型 RwLock型 16 所有権 17 所有型と参照型 18 Cow型(Clone-on-write) 19 イテレータ(Iterator) アダプタ 20 コレクション(Collection) Vec型 String型 HashMap型 イテレータからコレクションに変換 イテレータを返すメソッド 21 Cargo パッケージ、クレート ターゲット TOML形式 cargo initコマンド cargo buildコマンド cargo cleanコマンド cargo runコマンド cargo checkコマンド cargo treeコマンド cargo install[uninstall]コマンド cargo searchコマンド cargo publishコマンド デバッグビルド、リリースビルド 外部パッケージ ワークスペース Cargo.toml 22 モジュール(Module) モジュールの定義 パス(Path) モジュールの利用(use) モジュールツリー モジュールの再公開 23 テスト(Unit cargo testコマンド assertion should_panic属性 testsターゲット 24 ドキュメントコメント ドキュメントコメントの書き方 cargo docコマンド rustup docコマンド 25 フォーマッタ(rustfmt) 26 リンター(clippy) 27 マクロ(Macro) 宣言的マクロ 手続きマクロ 28 非同期処理 Future型 async/.await tokioクレート 29 unsafe 30 Tips Defaultトレイト 分解束縛 デバッグ時やテスト時のみ有効なコード 属性 演算子のオーバーロード Preludeモジュール DisplayトレイトとDebugトレイト 特殊なマクロ Nightly版 cargo-audit、cargo-outdated 31 まとめ 本章で学んだこと Chapter 4 アプリケーションの開発 01 単語推理ゲーム サンプルコードについて プロジェクトの準備 単語辞書の読み込み ゲーム構造体 推理ロジックの実装 GUIの実装(icedクレート) 02 レイトレーシング サンプルコードについて プロジェクトの準備 画像の出力 ベクトル クォータニオン 基本的な構造体の実装 カメラ 球体の追加 球体の法線 確認用のウィンドウ モジュール化 複数の物体への対応 アンチエイリアシング 拡散反射 材質 鏡面反射 屈折 大量に表示してみよう テクスチャ 画像テクスチャ 発光 四角形 コーネルボックス 光学のおはなし モンテカルロレイトレーシング 03 まとめ 本章で学んだこと Appendix 01 std::option::Option型 02 std::result::Result型 03 std::vec::Vec型 04 std::string::String型 05 std::collections::HashMap型 06 std::iter::Iteratorトレイト アダプタ 07 std::f64モジュール 定数 数学関数(std::f64モジュール) 08 Rustをビルドしてみよう
安全なプログラムを記述しなければコンパイルできないプログラミング言語Rustの解説書。 安全なプログラミング言語 通常のプログラミング言語では、変数やメモリの保護はプログラマーの責任で行います。この際の配慮不足があったとしても、コンパイルして実行できるプログラムは作ることはできます。その結果は、バグやセキュリティホールにつながるので、プログラマーも強い責任感でのプログラミングが必要です。本書で解説するRust言語は、後発なだけいろいろ考えられており、構文そのものが配慮不足になりにくいしくみであり、また不良なソースコードはコンパイルできません。つまり安全なプログラムを記述しなければコンパイルできないというユニークな特長を持ちます。
シリーズ累計50万部突破の定番入門書「スッキリわかるシリーズ」の『Java入門 実践編』に「第3版」が登場!最新Java16対応し、近年のJava改訂による新機能(Record等)の取り込みのほか、GitやMavenといったツール類の活用方法も具体的・実践的に解説! 新人エンジニア湊君の成長を傍らに、開発中に発生するJavaのいろんな「なぜ?」にしっかりと答えながら解説が進み、付録には「エラー解決・虎の巻」を用意して、独学に適した挫折しにくい紙面展開で、中級者に進むあなたを、効率的かつ、実践的にエスコートしていきます。
RustコミュニティーによるRust言語入門の決定版! 「Rustプログラミング言語は、エンパワーメント(empowerment)を根本原理としています。どんな種類のコードを現在書いているにせよ、Rustは幅広い領域で以前よりも遠くへ到達し、自信を持ってプログラムを組む力を与え(empower)ます。」(本書「まえがき」より) システムレベルのプログラムからWebサーバーやコマンドラインアプリなど、さまざまな分野に利用できるプログラミング言語として設計されているRust。本書はRustコミュニティ公式のガイドブックである。 基本的な文法事項から、Rustの中心的な機能である「所有権」の詳細、エラー処理や自動テストの方法、さらにはジェネリック型、スマートポインタ、関数型言語、並行プログラミング、オブジェクト指向の機能など、Rustプログラミングの肝となる要素のすべてを丁寧に解説する。 本書は、Rustの基本を理解する概念の章、Rustの機能を適用した小さなプログラムを構築するプロジェクトの章という2つで構成されている。それぞれを理解していけば、Rustを利用したプログラム開発にすぐに取りかかれるようになっている。 基本的な文法事項から、関数型言語、並行プログラミング、オブジェクト指向の機能など、プログラミング言語Rustのすべてを解説。Rustコミュニティー公式のガイドブックでその全体像をしっかり理解しよう。 第1章 事始め 第2章 数当てゲームをプログラムする 第3章 一般的なプログラミングの概念 第4章 所有権を理解する 第5章 構造体を使用して関係のあるデータを構造化する 第6章 enumとパターンマッチング 第7章 モジュールを使用してコードを体系化し、再利用する 第8章 一般的なコレクション 第9章 エラー処理 第10章 ジェネリック型、トレイト、ライフタイム 第11章 自動テストを書く 第12章 入出力プロジェクト: コマンドラインプログラムを構築する 第13章 関数型言語の機能: イテレーターとクロージャー 第14章 Cargoと crates.ioについてより詳しく 第15章 スマートポインター 第16章 恐れるな! 並行性 第17章 Rustのオブジェクト指向プログラミング機能 第18章 パターンとマッチング 第19章 高度な機能 第20章 最後のプロジェクト: マルチスレッドのWebサーバーを構築する
Firefoxの開発元であるMozillaが支援するオープンソースのプログラミング言語の解説書。 Rustは、Firefoxの開発元であるMozillaが支援するオープンソースのプログラミング言語です。2017年末に公開されたFirefox のレンダリングエンジンの記述に使用され、その実行速度を2倍にしたことで有名になりました。オブジェクト指向と関数型の言語特徴を持ち、JavaやC#のようにVM(Virtual Machine)上の動作ではないため、既存のC言語のライブラリを直接扱える利点を持っています。またRustは、CやC++で発生しうる不正メモリアクセスに関する問題を,ある程度回避できるように設計されています。 Rustはまだ新しい言語なので、本書の前半は実務に必要な詳しい文法を解説しています。文法や具体例などは、簡単なRustのコードを動かして確認しながら説明を進めています。後半は、具体的な利用法(Web API呼び出し、データベースアクセスなど)を中心に説明し、すでに他の言語(C++やC#、Javaなど)で同様にプログラミングをしたことのある読者を対象としています。 はじめに 第1章 Rustの特徴 1.1 なぜRustなのか 1.2 高いパフォーマンス 1.3 型安全性 1.4 ビルドシステム 1.5 モダンな文法 第2章 環境構築 2.1 Rustのインストール 2.1.1 Linux とmacOSへのインストール 2.1.2 Windowsへのインストール 2.1.3 Windows for Linuxへのインストール 2.1.4 Visual Studio Codeの利用 2.1.5 rustupの利用 2.2 Hello Worldプログラム 2.2.1 cargo new 2.2.2 cargo の構造 2.2.3 cargo build 2.2.4 cargo run 2.2.5 rustc の利用 第3章 基本的な型、変数の扱い、束縛 3.1 型の宣言 3.1.1 数値の型 3.1.2 数値の型 3.1.3 リテラル 3.1.4 浮動小数点数 3.1.5 論理値型 3.1.6 文字型 3.1.7 文字列 3.2 複合型 3.2.1 タプル型 3.2.2 配列型 3.3 参照と借用 3.3.1 所有権の移動 3.3.2 借用 3.4 束縛 3.4.1 束縛と可変変数 3.4.2 シャドーイング 3.5 スコープ 3.5.1 ブロック単位 3.5.2 関数単位 3.5.3 構造体単位 3.5.4 クロージャ単位 第4章 文字列 4.1 文字 4.1.1 文字を扱う 4.1.2 特殊文字 4.1.3 u8型へのキャスト 4.2 文字列 4.2.1 文字列の扱い 4.2.2 アルファベットの操作 4.2.3 日本語の扱い 4.2.4 日本語を正しく扱う 4.3 文字列スライス 4.3.1 先頭を切り出すスライス 4.3.2 途中の文字列を切り出すスライス 4.3.3 最後までを切り出すスライス 4.3.4 全体を切り出すスライス 第5章 文と式と関数 5.1 文と式 5.1.1 文 5.1.2 式 5.2 演算子 5.2.1 四則演算子 5.2.2 代入演算子 5.2.3 ビット演算子 5.2.4 シフト演算子 5.2.5 論理演算子 5.2.6 単項演算子 5.3 関数 5.3.1 引数のない関数 5.3.2 引数のある関数 5.3.3 戻り値のある関数 5.3.4 文字列を受け取る関数 5.3.5 文字列を戻す関数 5.3.6 ベクターを受け取る関数 5.3.7 ベクターを戻す関数 5.3.8 ベクターの中身を変更する関数 第6章 制御文とパターンマッチ 6.1 分岐 6.1.1 条件にマッチしたときに実行 6.1.2 条件にマッチしないときに実行 6.1.3 複数のif文を重ねる 6.1.4 if文に論理和/ 積を使う 6.1.5 関数の戻り値を直接参照 6.1.6 if文で値を返す 6.2 繰り返し 6.2.1 for文で全ての要素に繰り返す 6.2.2 for文でイテレーターを利用する 6.2.3 for文をインデックス付きで繰り返す 6.2.4 for文で繰り返し数を指定する 6.2.5 繰り返しを途中で止める 6.2.6 繰り返しの途中で先頭に戻る 6.2.7 while文で継続条件を指定する 6.2.8 loop文で無限に繰り返す 6.3 パターンマッチ 6.3.1 enumで列挙型を定義する 6.3.2 列挙型をmatchで使う 6.3.3 オプション型をmatchで扱う 6.3.4 matchを「if let」で置き換える 6.3.5 enum以外でmatchを使う 第7章 配列とベクター 7.1 配列 7.1.1 固定配列を定義 7.1.2 文字列の配列を定義 7.1.3 配列の型を指定する 7.1.4 配列を初期化、変更する 7.1.5 配列を数値型に強制キャストする 7.2 ベクター 7.2.1 ベクターを定義する 7.2.2 ベクターの要素を増減させる 7.2.3 ベクターの要素を参照する 7.2.4 ベクターの要素を削除する 7.2.5 指定位置に要素を追加する 7.2.6 複数のベクターを連結する 7.2.7 連結文字を指定してベクターを連結する 7.2.8 分割文字を指定しベクターを作成する 7.2.9 ベクターを辞書順にソートする 7.3 イテレーター 7.3.1 for文でイテレーターを使う 7.3.2 iterメソッドとnextメソッドを使う 7.3.3 loop文とwhile文でイテレーターを扱う 7.3.4 イテレーターとmapを活用する 第8章 構造体とメソッド 8.1 構造体 8.1.1 構造体の定義 8.1.2 構造体のインスタンス化 8.1.3 構造体のフィールドを参照 8.1.4 構造体を引数にとる関数 8.1.5 構造体を戻り値にする関数 8.1.6 ベクターで構造体を扱う 8.1.7 フィールド名のない構造体を扱う 8.1.8 構造体のサイズを調べる 8.2 メソッド 8.2.1 引数のないメソッドを定義 8.2.2 引数のあるメソッドを定義 8.2.3 戻り値のあるメソッドを定義 8.2.4 フィールドを変更するメソッド 8.2.5 newメソッドを定義する 8.3 Result型 8.3.1 Result型の定義 8.3.2 str::parseの戻り値を探る 8.3.3 Result型を返す関数を作る 8.3.4 Result型のエイリアスを作る 8.3.5 コンピネーターでmatch文を減らす 8.3.6 エラー委譲でmatch 文を減らす 8.3.7 独自のResult 型を返す 8.3.8 exceptメソッドを使う 8.3.9 main関数でResult 型を返す 第9章 ジェネリクスとトレイト 9.1 ジェネリクス 9.1.1 ベクターはジェネリクスである 9.1.2 ジェネリックを使わないで関数を作る 9.1.3 ジェネリックを使って関数を作る 9.2 トレイト 9.2.1 構造体の動作をルール化する 9.2.2 メソッド名を統一する 9.2.3 デフォルトメソッドを追加する 9.2.4 既存の構造体を拡張する 第10章 所有権 10.1 所有権の概念 10.1.1 所有権という概念 10.1.2 構造体のインスタンスを借用する 10.1.3 構造体のインスタンスを移動する 10.1.4 変数を借用する 10.1.5 変数を移動する 10.1.6 可変変数を関数に参照で渡す 10.1.7 可変変数を扱うときの注意 10.1.8 数値とタプルの場合 10.1.9 ベクターと文字列の場合 10.1.10 複数の変数で所有権を奪い合う例 10.2 所有権の利点 10.2.1 有効範囲を明確にする 10.2.2 関数でインスタンスを返す 10.2.3 可変変数のアクセス制限 第11章 パッケージの作成 11.1 公開ライブラリを利用する 11.1.1 crates.io 11.1.2 randクレートのドキュメント 11.1.3 randクレートを利用する 11.2 公開バイナリを利用する 11.2.1 バイナリのインストール 11.2.2 バイナリの実行 11.3 パッケージを作成する 11.3.1 ライブラリのプロジェクトを作成 11.3.2 ライブラリを動作させる 11.3.3 ライブラリの出力場所 第12章 ファイル入出力 12.1 ファイル読み込み 12.1.1 スコープの指定 12.1.2 ファイルを全て読み込む 12.1.3 ファイルの読み込みエラーに備える 12.1.4 ファイルをオープンして読み込む 12.1.5 ファイルアクセス時のResultをチェックする 12.1.6 バイト単位で読み込む 12.1.7 行単位で読み込む 12.1.8 main関数でファイルを読み込む 12.2 ファイル書き出し 12.2.1 write!マクロで書き出す 12.2.2 writeメソッドで書き出す 12.2.3 バイト配列で書き出す 12.2.4 バイト単位で書き出す 12.2.5 main 関数でファイルに書き出す 12.3 標準入出力の利用 12.3.1 標準入力と標準出力 12.3.2 標準入出力の準備 12.3.3 ファイルから読み込み 12.3.4 標準入力から読み込み 12.3.5 標準出力へ書き出し 第13章 マクロ 13.1 println!マクロ 13.1.1 関数とマクロの区別 13.1.2 println!マクロのプレースホルダー 13.1.3 複数のプレースホルダー 13.1.4 整数の進数表現 13.1.5 整数の0埋め 13.1.6 実数の指数表現と有効桁数 13.1.7 数値や文字列の配置指定 13.2 dbg!マクロ 13.2.1 配列の内容を表示する 13.2.2 構造体にDebugトレイトを適用する 13.2.3 dbg!マクロのフォーマッタを実装する 13.3 panic!マクロ 13.3.1 main 関数でpanic!マクロを使う 13.3.2 panic!マクロの利用例 13.3.3 panic!マクロのトレースの利用 第14章 Web API呼び出し 14.1 HTTPプロトコル 14.1.1 reqwestクレート利用の準備 14.1.2 URLアドレスの呼び出し 14.1.3 URLクエリ文字列で呼び出し 14.1.4 目的のページが見つからない場合 14.1.5 指定したWebサーバーが見つからない場合 14.2 GETとPOSTメソッド 14.2.1 HTTPプロトコルのヘッダー部 14.2.2 GETメソッドの詳細 14.2.3 POSTメソッドの詳細 14.3 JSON形式 14.3.1 serde_jsonクレート利用の準備 14.3.2 JSON型式データをテキストとして受信する 14.3.3 JSON型式データから値を取り出す 第15章 データベースアクセス 15.1 SQLiteの読み込み 15.1.1 データベースの使い方 15.1.2 rusqliteクレートの準備 15.1.3 インメモリデータベースの利用 15.1.4 複数のSQL文を実行する 15.1.5 設定する値をパラメーターで渡す 15.1.6 SELECT文でデータを取得する 15.1.7 SELECT文でデータをquery_mapで取得する 15.1.8 SELECT文で検索条件を指定する 15.2 データの保存 15.2.1 データベースファイルを作成する 15.2.2 テーブルを作成する 15.2.3 データを挿入する 15.2.4 データを検索する 15.3 複雑なSQL 15.3.1 サンプルとなるテーブル例 15.3.2 chronoクレートの準備 15.3.3 テーブルを結合して表示する 15.3.4 データをソートして表示する 15.3.5 データを集計して表示する 15.4 ORMの利用 15.4.1 dieselクレートの準備 15.4.2 マッピングする構造体の定義 15.4.3 ORMでデータを取得する 第16章 C言語ライブラリの呼び出し 16.1 既存のC言語ライブラリとの連携 16.1.1 C言語ライブラリとの相互運用 16.1.2 C言語ライブラリの準備 16.1.3 C言語のソースコード 16.1.4 C言語のコードをビルド 16.1.5 C言語ライブラリの呼び出し 16.1.6 ビルドして実行 16.2 C 言語からRustの関数を呼び出す 16.2.1 Rustライブラリの準備 16.2.2 Rustライブラリのコード 16.2.3 Rustを呼び出すC 言語のコード 16.2.4 ビルドして実行 16.3 既存ライブラリで文字列の受け渡し 16.3.1 文字列を渡す関数の宣言 16.3.2 NULL終端の文字列 16.3.3 ビルドして実行 第17章 クロージャ 17.1 クロージャの利用 17.1.1 イテレーター処理 17.1.2 mapとクロージャ 17.1.3 filterとクロージャ 17.1.4 findとクロージャ 17.1.5 maxとmin 17.1.6 2 つの配列を合わせる 17.2 クロージャの定義 17.2.1 クロージャの引数 17.2.2 クロージャの戻り値 17.2.3 クロージャとmap 17.3 クロージャの受け渡し 17.3.1 数値とクロージャを受け取る関数 17.3.2 ベクターとクロージャを受け取る関数 第18章 並列化 18.1 スレッドの活用 18.1.1 プロセスとスレッドの違い 18.1.2 単純なスレッドの実行 18.1.3 スレッドの終了を待つ 18.1.4 複数のスレッドの終了を待つ 18.1.5 スレッド処理のクロージャを別定義する 18.1.6 スレッド処理を関数定義する 18.2 async/awaitの活用 18.2.1 スレッドを順番に実行する 18.2.2 async/awaitで順番に実行する 18.2.3 tokio クレートを利用する 18.3 スレッドと所有権 18.3.1 スレッドプールの利用 18.3.2 所有権の移動 18.3.3 moveの利用 18.3.4 moveした変数を変更する 第19章 テストコード 19.1 単体テスト 19.1.1 テストプロジェクトを作る 19.1.2 関数をテストする 19.1.3 テストメソッドを増やす 19.1.4 関数とテストメソッドを増やす 19.2 テストコードの記述 19.2.1 値を比較する 19.2.2 値が異なる 19.2.3 構造体を比較する 19.2.4 真偽をチェックする 19.3 テストコードの実行 19.3.1 変数チェックの埋め込み 19.3.2 テストコードの埋め込み 付録A Rustのメモリ配置を調べる A.1 変数のポインタを扱う A.2 変数の移動(move)をポインタで確認する A.3 変数の借用(borrow)をポインタで確認する A.4 数値の変数はコピーされる 付録B Rustの型を調べる B.1 コンパイルエラーを利用する B.2 std::any::type_name を利用する B.3 いろいろな型を調べる 索引 b_
データ分析の現場にあって入門書にない「汚いデータ」(ダーティデータ)に対応する、プロのノウハウを解説します。 これがリアルなデータ分析だ! 君は「汚いデータ」を処理できるか? データ分析の現場にあって入門書にないもの――それは、「汚いデータ」(ダーティデータ)です。本書は、データ分析の現場では①どんなデータに出会い、②どのような問題が生じ、③どう対応すればよいのかというノウハウを解説。 事前の加工(視覚化)から機械学習、最適化問題まで、100本ノックをこなして、ビジネス現場で即戦力になれる「応用力」を身につけよう! データ分析の現場にあって入門書にない「汚いデータ」(ダーティデータ)に対応する、プロのノウハウを解説します。 朝練 100本ノックに備えて準備運動を行いましょう。 序章 朝練 朝練1:Google Colaboratoryをつかってみよう 朝練2:プログラムを書いて実行してみよう 朝練3:変数を使ってみよう 朝練4:ライブラリを使ってみよう 朝練5:コードセルを分けて効率よくプログラミングをしよう 朝練6:本書のサンプルプログラムをGoogle Colaboratoryで動かしてみよう 朝練7:Google Driveからデータを参照してみよう 朝練8:絶対パスと相対パスについて 第1部 基礎編:データ加工 第1章 ウェブからの注文数を分析する10本ノック ノック1:データを読み込んでみよう ノック2:データを結合(ユニオン)してみよう ノック3:売上データ同士を結合(ジョイン)してみよう ノック4:マスターデータを結合(ジョイン)してみよう ノック5:必要なデータ列を作ろう ノック6:データ検算をしよう ノック7:各種統計量を把握しよう ノック8:月別でデータを集計してみよう ノック9:月別、商品別でデータを集計してみよう ノック10:商品別の売上推移を可視化してみよう 第2章 小売店のデータでデータ加工を行う10本ノック ノック11:データを読み込んでみよう ノック12:データの揺れを見てみよう ノック13:データに揺れがあるまま集計してみよう ノック14:商品名の揺れを補正しよう ノック15:金額欠損値の補完をしよう ノック16:顧客名の揺れを補正しよう ノック17:日付の揺れを補正しよう ノック18:顧客名をキーに2つのデータを結合(ジョイン)しよう ノック19:クレンジングしたデータをダンプしよう ノック20:データを集計しよう 第2部 実践編①:機械学習 第3章 顧客の全体像を把握する10本ノック ノック21:データを読み込んで把握しよう ノック22:顧客データを整形しよう ノック23:顧客データの基礎集計をしよう ノック24:最新顧客データの基礎集計をしてみよう ノック25:利用履歴データを集計しよう ノック26:利用履歴データから定期利用フラグを作成しよう ノック27:顧客データと利用履歴データを結合しよう ノック28:会員期間を計算しよう ノック29:顧客行動の各種統計量を把握しよう ノック30:退会ユーザーと継続ユーザーの違いを把握しよう 第4章 顧客の行動を予測する10本ノック ノック31:データを読み込んで確認しよう ノック32:クラスタリングで顧客をグループ化しよう ノック33:クラスタリング結果を分析しよう ノック34:クラスタリング結果を可視化してみよう ノック35:クラスタリング結果をもとに退会顧客の傾向を把握しよう ノック36:翌月の利用回数予測を行うための準備をしよう ノック37:特徴となる変数を付与しよう ノック38:来月の利用回数予測モデルを作成しよう ノック39:モデルに寄与している変数を確認しよう ノック40:来月の利用回数を予測しよう 第5章 顧客の退会を予測する10本ノック ノック41:データを読み込んで利用データを整形しよう ノック42:退会前月の退会顧客データを作成しよう ノック43:継続顧客のデータを作成しよう ノック44:予測する月の在籍期間を作成しよう ノック45:欠損値を除去しよう ノック46:文字列型の変数を処理できるように整形しよう ノック47:決定木を用いて退会予測モデルを作成してみよう ノック48:予測モデルの評価を行い、モデルのチューニングをしてみよう ノック49:モデルに寄与している変数を確認しよう ノック50:顧客の退会を予測しよう 第3部 実践編②:最適化問題 第6章 物流の最適ルートをコンサルティングする10本ノック ノック51:物流に関するデータを読み込んでみよう ノック52:現状の輸送量、コストを確認してみよう ノック53:ネットワークを可視化してみよう ノック54:ネットワークにノード(頂点)を追加してみよう ノック55:ルートの重みづけを実施しよう ノック56:輸送ルート情報を読み込んでみよう ノック57:輸送ルート情報からネットワークを可視化してみよう ノック58:輸送コスト関数を作成しよう ノック59:制約条件を作ってみよう ノック60:輸送ルートを変更して、輸送コスト関数の変化を確認しよう 第7章 ロジスティクスネットワークの最適設計を行う10本ノック ノック61:輸送最適化問題を解いてみよう ノック62:最適輸送ルートをネットワークで確認しよう ノック63:最適輸送ルートが制約条件内に収まっているかどうかを確認しよう ノック64:生産計画に関するデータを読み込んでみよう ノック65:利益を計算する関数を作ってみよう ノック66:生産最適化問題を解いてみよう ノック67:最適生産計画が制約条件内に収まっているかどうかを確認しよう ノック68:ロジスティクスネットワーク設計問題を解いてみよう ノック69:最適ネットワークにおける輸送コストとその内訳を計算しよう ノック70:最適ネットワークにおける生産コストとその内訳を計算しよう 第8章 数値シミュレーションで消費者行動を予測する10本ノック ノック71:人間関係のネットワークを可視化してみよう ノック72:口コミによる情報伝播の様子を可視化してみよう ノック73:口コミ数の時系列変化をグラフ化してみよう ノック74:会員数の時系列変化をシミュレーションしてみよう ノック75:パラメータの全体像を、「相図」を見ながら把握しよう ノック76:実データを読み込んでみよう ノック77:リンク数の分布を可視化しよう ノック78:シミュレーションのために実データからパラメータを推定しよう ノック79:実データとシミュレーションを比較しよう ノック80:シミュレーションによる将来予測を実施しよう 第4部 発展編:画像処理/言語処理 第9章 潜在顧客を把握するための画像認識10本ノック ノック81:画像データを読み込んでみよう ノック82:映像データを読み込んでみよう ノック83:映像を画像に分割し、保存してみよう ノック84:画像内のどこに人がいるのかを検出してみよう ノック85:画像内の人の顔を検出してみよう ノック86:画像内の人がどこに顔を向けているのかを検出してみよう ノック87:検出した情報を統合し、タイムラプスを作ってみよう ノック88:全体像をグラフにして可視化してみよう ノック89:人通りの変化をグラフで確認しよう ノック90:移動平均を計算することでノイズの影響を除去しよう 第10章 アンケート分析を行うための自然言語処理10本ノック ノック91:データを読み込んで把握しよう ノック92:不要な文字を除外してみよう ノック93:文字数をカウントしてヒストグラムを表示してみよう ノック94:形態素解析で文章を分割してみよう ノック95:形態素解析で文章から「動詞・名詞」を抽出してみよう ノック96:形態素解析で抽出した頻出する名詞を確認してみよう ノック97:関係のない単語を除去してみよう ノック98:顧客満足度と頻出単語の関係を見てみよう ノック99:アンケート毎の特徴を表現してみよう ノック100:類似アンケートを探してみよう 放課後練 さらなる挑戦 第11章 深層学習に挑戦する10本ノック 放課後ノック101:深層学習に必要なデータを準備しよう 放課後ノック102:深層学習モデルを構築しよう 放課後ノック103:モデルの評価をしてみよう 放課後ノック104:モデルを使った予測をしてみよう 放課後ノック105:物体検出YOLOを使って人の検出を行ってみよう 放課後ノック106:YOLOの学習を行うための準備をしよう 放課後ノック107:新たな学習データを使ってYOLOの学習モデルを生成してみよう 放課後ノック108:新たに学習させたモデルを使って人の検出を行ってみよう 放課後ノック109:YOLOとHOGの人の検出結果を比較して深層学習の精度を体感しよう 放課後ノック110:YOLOでの人以外の物体の検出のようすを確認しよう 第12章 データ加工に挑戦する10本ノック 放課後ノック111:“よくある”エクセルデータに挑戦 放課後ノック112:エクセルの社員マスタ加工に挑戦 放課後ノック113:正規化に挑戦 放課後ノック114:外れ値の加工に挑戦 放課後ノック115:欠損値の補完に挑戦 放課後ノック116:データのスクランブル化に挑戦 放課後ノック117:文字コードの自動判定に挑戦 放課後ノック118:センサーデータの加工に挑戦 放課後ノック119:JSON形式に挑戦 放課後ノック120:SQLiteに挑戦 付録 Appendix① データ結合とデータ正規化 Appendix② 機械学習 Appendix③ 最適化問題
Scratch3.0対応。15の作例を紹介した入門書。タブレットでの遊び方やmicro:bit連携作品も紹介。 Scratch3.0で、楽しくプログラミングを学ぼう Scratchは、米国MITによって開発された教育用プログラミング環境です。2019年1月に3.0にバージョンアップされ、見た目の変更や新機能が追加。スマホやタブレット対応、外部サービスとの連携など、ますます楽しく使いやすくなりました。 この本のテーマは「遊べて使えるScratch」です。福笑いやトントン相撲といった昔ながらのゲームから、イマドキの写真加工風アプリまで、Scratchで再現してみました。紹介するのは全15作品。教育用コンピューター・micro:bitとつなげてあそぶ作品も紹介します。「Scratchでこんなこともできるんだ!」というおどろきがいっぱいです。 この本を書いたのは、長年子どもたちとScratchプログラミングに取り組んできた実力者、倉本大資さんと和田沙央里さん。Scratchプログラミングが初めての人でも大丈夫。つくりながら、プログラミングの基本を学んでいきましょう! 〈ここがポイント!〉 ●PCだけでなくスマホ・タブレットならではの作例・micro:bit連携など、Scratch3.0の最新機能を遊びつくせる! ●難易度がさまざまな15作例。Scratchコミュニティでよく見る作品もつくれるかも? ●注目の教育用コンピューター・micro:bitに連携してできる遊びを3作品収録。micro:bitを始めてみたい方にも最適 ●遊びながら、プログラミング用語や基本操作が学べる ●共有・リミックスOK! ダウンロードして使えるオリジナル素材つき 〈こんな人におススメ〉 ●プログラミングをはじめてみたい人 ●親子で一緒に学んでみたい人 ●子どもにプログラミングを教えてみたい人 ●Scratchを少し触ったことがあるけど、もっと楽しんでみたい人 ●Scratchとmicro:bitをつなげてあそびたい人 ※対象年齢:11歳~ 〈推薦のことば〉 ●村井 裕実子 氏(マサチューセッツ工科大学(MIT)メディアラボ 博士研究員)「アイデアの幅を広げてくれる、ポップで楽しいあっと驚くようなプロジェクトであふれている本。ここから、あなただけのプロジェクトをはじめましょう」 ●阿部 和広 氏(青山学院大学大学院 社会情報学研究科 特任教授) 「この本には、画面の中だけでなく、現実の世界に飛び出したアイデアがのっています。これからの世の中は、中とか外とか気にしなくてよくなるかもしれないですね。そんな新しい世界で暮らすための良いガイドになるでしょう」 ■0 Scratchを使う準備をしよう ・Scratchのサイトにアクセスしよう ・Scratchのアカウントを作成しよう ■1 プレゼントを贈ろう 1-1 手づくりメッセージカード 1-2 ケーキシミュレーター 1-3 誕生日ボイスメッセージ 1-4 ラッピング用包装紙 ■2 便利なツールをつくろう 2-1 みんなで使える伝言メモ 2-2 お料理レシピブック 2-3 おもしろ写真加工アプリ 2-4 スコアボード ■3 テーブルゲームであそぼう 3-1 Scratch福笑い 3-2 2人でハマる!○×ゲーム 3-3 ハラハラ危機一髪ゲーム 3-4 指のバトル!トントン相撲 ■4 micro:bitとつなげよう 4-0 Scratchとmicro:bitをつなげよう 4-1 フリフリおみくじ占い 4-2 ジャンプでキャッチゲーム 4-3 崖っぷち!アクションゲーム ■【学ぼう!コラム】 ・Scratchブロックの扱い方 ・スプライトとステージ ・メッセージ ・x座標・y座標 ・ペイントエディター ・演算ブロック ・コスチュームや背景の追加 ・変数・リスト ・関数(ブロック定義) ・クローン ・タブレット・スマホ対応
コンピュータにものを考えさせる「アルゴリズム」を通じて、プログラミングの世界に第一歩を踏み出そう プログラミングとアルゴリズムの一番やさしい新定番書! プログラミング言語を習得しても、実際にコードを書いてみようとすると 「どう書いて良いかわからない」と感じる方は多いと思います。 本書はアルゴリズムとプログラムロジックの基本を通じて、 プログラミング(コードを書く)の実際を学んでいただけます。 アルゴリズムは、与えられたさまざまな課題をプログラムで効率良く 処理するためのテクニックの集合体です。これらを通じて、誰でも効率の良い 効果的なコードを作るための第一歩を踏み出すことができます。 ・絵を多用し、短い解説で絵本のようにビジュアルに理解することができます。 ・2ページを単位とした説明、基礎に絞り込んだ内容でスピーディに習得。 ・説明は基本中の基本から。「C言語の基礎」から学べます。 ・プログラミングのために必要な知識を広くフォロー、コードの書き方が身につきます。 ・環境構築から内容を最新にアップデートし、実際に試して学ぶことができます。 【「絵本」シリーズは、ラインナップをリニューアル!】 翔泳社の「絵本シリーズ」は、豊富なイラストと簡潔な解説で コンピュータ技術に入門できる初心者向けのシリーズです。 コンピュータ言語/技術の超初心者や手軽に習得したい方に最適な入門書です。 新しい「絵本シリーズ」では、旧来の分かりやすさ、親しみやすさ、 基礎に徹した内容というコンセプトはそのままに、Web/ネットが全盛となった 現在のコンピュータ技術の潮流に合わせた解説を心掛けます。 『Cの絵本』『Javaの絵本』『Pythonの絵本』などを皮切りにラインナップを順次刷新、 さらに新しい仲間を増やしてラインナップを充実していきます。 アルゴリズムの勉強をはじめる前に ●アルゴリズムとは何か ●プログラムができるまで ●フローチャート ●C言語について ●プログラミングから実行までの流れ ●プログラム記述時の約束 第1章 C言語の基礎 ●第1章はここがkey ●Hello World! ●変数と定数 ●数値型 ●配列 ●ポインタ ●文字と文字列 ●計算の演算子 ●その他の演算子 ●ファイルの読み書き ●キーボード入力 ●メモリの確保 ●構造体 [コラム]~変数名のつけ方~ 第2章 基本的な制御 ●第2章はここがkey ●制御の種類と構造化 ●if文 ●for文とwhile文 ●その他の制御文 [コラム]~構造化以前のプログラム~ 第3章 制御の活用 ●第3章はここがkey ●1から5までの和 ●配列から値を見つける(1) ●配列から値を見つける(2) ●平均をとる ●棒グラフを描く ●2つの文字列の連結 ●逆さに読むと ●ファイルの内容を表示する ●表?裏?コイン投げゲーム [コラム]~スタックとキュー~ 第4章 関数の利用 ●第4章はここがkey ●関数とは? ●関数の定義と利用 ●main()関数 ●関数の特徴 ●関数の活用 ●再帰処理 [コラム]~関数のポインタ~ 第5章 問題への取り組み方 ●第5章はここがkey ●問題を整理する ●プログラムの設計 ●プログラムの記述(1) ●プログラムの記述(2) ●プログラムを整理する ●テストとデバッグ ●完成プログラム [コラム]~ボトムアップ的・トップダウン的な考え方~ 第6章 実践的プログラミング ●第6章はここがkey ●仕様を分析する ●データ形式を決める(1) ●データ形式を決める(2) ●基本設計の決定(1) ●基本設計の決定(2) ●メイン部分を作る ●機能を作る(1) ●機能を作る(2) ●完成プログラム [コラム]~時間がかかる処理~ 第7章 高度なアルゴリズム ●第7章はここがkey ●素数を求める ●素因数分解 ●最大公約数を求める ●リンクリスト(1) ●リンクリスト(2) ●サンプルプログラム [コラム]~アルゴリズムの工夫~ 付録 ●プログラムでつまったら ●プログラミングの心得 ●Visual Studioのインストール ●Visual Studioを使った開発 ●一般的なデバッグ手法 ●Visual Studioのデバッガー
プログラマーが知っておくべき認知科学のこと。 長年プログラミング教育の研究に取り組んでいる著者が、最新の「認知科学」に基づいて、プログラミングの際のさまざまな作業や技術の取得を効率的に行うための方法を解説しています。 まずは、コードを書いたり読んだりするときに「プログラマーの脳」がどのように働くかという認知プロセスについて説明しています。なぜなら、作業が異なれば、利用する認知プロセスも異なり、使うべきテクニックも変わってくるからです。 認知プロセスの段階や相互作用について理解したところで、「コードを速く、深く読む」「コードを読みやすくする」「新しい言語を短時間で習得する」といったことについて、どの認知プロセスを活用しているのかを考えて、どのような方法を採るべきかなのかを具体例を挙げて説明しています。また、プログラミングそのものではありませんが、新しい開発者を迎え入れる際のオンボーディングプロセスについても、認知科学的な側面から掘り下げています。 本書は、13の章から成り、大きく4つの部に分けられています。各章では、次のような内容を説明しています。 ・第1章:プログラミングを行う際に重要な3つの認知プロセスと、それぞれの認知プロセスがどのような混乱と関連するか ・第2章:コードを素早く読み、その仕組みを理解する方法 ・第3章:プログラミングの構文や概念をよりよく、より簡単にきちんと学ぶ方法 ・第4章:複雑なコードを読み解くためのテクニック ・第5章:見慣れないコードをしっかりと理解するためのテクニック ・第6章:プログラミングにおける問題解決のテクニック ・第7章:コードや思考中のバグを回避するためのテクニック ・第8章:特にコードベース全体において、明確な変数名を選択する方法 ・第9章:「コードの臭い」とその背後にある認知科学的背景 ・第10章:複雑な問題を解決するための、より高度なテクニック ・第11章:コーディングという行為そのものと、プログラミングにおけるさまざまなタスク ・第12章:大規模なコードベースを改善する方法 ・第13章:新しい開発者のオンボーディングプロセスの苦痛を軽減する方法 本書は、脳の働きをより深く理解することで、プログラマーとしてのスキルや習慣を向上させたいと願う、すべてのレベルのプログラマーのために書かれていますが、特に「職業プログラマー」が直面するような状況が取り上げられています。チーム開発、大規模ソフトウェアシステム構築、オンボーディングサポートなどの経験などがあると、本書をより理解し、活用できるでしょう。また、JavaScript、Python、Javaなど(APLやBASICも!)の言語で書かれたコード例が出てきますが、特定の言語の知識や経験は必要ありません。 長年プログラミング教育の研究に取り組んでいる著者が、最新の「認知科学」に基づいて、プログラミングの際のさまざまな作業や技術の取得を効率的に行うための方法を解説しています。 Part 1 コードをよりよく読むために Chapter 1 コーディング中の混乱を紐解く Chapter 2 コードを速読する Chapter 3 プログラミング言語の文法を素早く習得する方法 Chapter 4 複雑なコードの読み方 Part 2 コードについて考える Chapter 5 コードの深い理解に到達する Chapter 6 プログラミングに関する問題をよりうまく解決するには Chapter 7 誤認識:思考に潜むバグ Part 3 よりよいコードを書くために Chapter 8 よりよい命名を行う方法 Chapter 9 汚いコードとそれによる認知的負荷を避けるための2つのフレームワーク Chapter 10 複雑な問題をより上手に解決するために Part 4 コーディングにおける共同作業 Chapter 11 コードを書くという行為 Chapter 12 より大きなシステムの設計と改善 Chapter 13 新しい開発者のオンボーディング
プログラミングを学びの中に取り入れることのよさや、 探究的な授業のつくり方、実践例等をまとめた一冊です。 子供たちがわくわくするようなプログラミング授業を!! 学校や家庭でコンピュータを活用した教えは進んできている一方で、 プログラミングを活用した授業のデザイン、教え方に悩みを抱えている先生や保護者が多いのが実情です。 本書では学校で、家庭で、ワークショップで使える学びのノウハウを現役小学校教諭が実践例でわかりやすく解説します。 コンピュータやプログラミングを学びの中に取り入れることで、子供主体の課題発見・解決の幅をより一層広げてあげましょう。 【本書まえがきより】 最近はコンピュータやプログラミングを学びの中に取り入れることで、社会とのつながりを容易に感じさせたり、子供主体の課題発見・解決の幅を一層広げたりできると感じています。 また、探究的な学びが子供を夢中にさせ、深く学ぶことにつながっていることも感じています。 私自身、コンピューターやプログラミング、電子工作を学ぶことで、身のまわりの物の見方や考え方が変化したり、視野が広がったりしました。 この視点から物事を捉えることで、これまでの自分に無かった方向から問いを見い出したり、解決方法を発想したりすることもできるようになりました。 授業をしていると、子供たちにもこのような思考が生まれてきているのではないかと感じています。 今の子供たちは日常的にスマートフォンやタブレットを使っていることに加え、プログラミングも学び始めています。 このような子供たちは、私たちが想像しない視点から物事を捉えて学んでいるかもしれません。 これからの時代を生きる子供たちはコンピュータやプログラミングを理解して、それらとうまく付き合ったり、 問題を解決するツールとして適切に活用したりする資質・能力が必要になると思います。 それは、Society5.0 の時代やVUCA(未来が見通せない状況)といわれる先行きが不透明で予測困難な時代でも幸せに生きるための方策の一つになるでしょう。 「プログラミングってどう取り入れればいいの」 「プログラミングはどの教科でできるの」 といったお困りの声がしばしば聞かれます。 学校ではコンピュータを活用した授業は進んできている一方で、 プログラミングを活用した授業のデザインに悩みを抱えている先生は多いのではないかと思います。 本書ではプログラミングを学びの中に取り入れることのよさや、プログラミングを活用した探究的な授業のつくり方、実践例等をまとめました。 小学校での事例が中心ですが、その他、家庭、ワークショップでも参考にできることがあるかと思います。 本書が「子供たちがわくわくする学び」をつくり出す一助になれば幸いです。 宮城県登米市立佐沼小学校教諭 金 洋太 本書ではプログラミングを学びの中に取り入れることのよさや、 micro:bitを使いプログラミングを活用した探究的な授業のつくり方、実践例等をまとめた一冊です。 第1章 プログラミングを生かした新しい授業デザイン 7 なぜ新しい教育が必要になったのか 8 プログラミングを生かした授業デザイン 14 家庭やワークショップでプログラミングを教えるには… 26 第2章 授業再録 29 授業1. ミッション micro:bit で仲良くなろう 30 授業2. ミッション 自動で止まるモーターカーをつくろう 38 授業3. ミッション 音楽プレーヤーを手づくりしよう 46 授業4. ミッション 困っている人をものづくりで助けよう 56 第3章 テーマ別授業展開事例 71 テーマ1. 健康のためにウォーキングしよう 72 テーマ2. 安全で、渋滞のない社会をつくろう 76 テーマ3. リズムダンスの発表会を盛り上げよう 80 テーマ4. 外の気温を室内で測ろう 84 テーマ5. 土壌を管理して農作物を育て、食糧危機を救おう 90 テーマ6. 絶滅が危ぶまれる野生動物を救おう 94 テーマ7. 簡易カイロと瞬間冷却剤を手づくりしよう 98 テーマ8. 家庭の困りごとを解決しよう 104 テーマ9. 自分の身を守ろう 108 テーマ10. AI(人工知能)を体験しよう 112 第4章 資料編 127 Ⅰ . micro:bit とは… 128 Ⅱ . プログラミングの基本 135 Ⅲ . OPPA とは… 136 Ⅳ . QFT とは… 137 Ⅴ . ルーブリック評価とは… 138 Ⅵ . AI(人工知能)について 139 Ⅶ . サンプルプログラム 142 Ⅷ . 参考WEB サイト ほか 144
プロのソフトウェアエンジニアとして、堅牢で信頼性が⾼く、保守しやすいコードを書くための概念と実用的な⼿法を解説 「よいコード」と「悪いコード」の違いは、どこにあるのでしょうか。もちろん、どんな立場で、何を作るのかなどによって、その定義は変わってきます。 本書では、プロの「ソフトウェアエンジニア」として、堅牢で信頼性が⾼く、保守しやすく、チームメンバーが理解や適応しやすいコードを作成するための概念と実用的な⼿法を、Googleでテックリードを務める著者が解説しています。 本書では、まず「高品質なコードを書く」ために、次の4つのゴールを設定しています。 1. 正しく動くこと 2. 正しく動作し続けること 3. 要件の変更に対応しやすいこと 4. 車輪の再発明をしないこと そして、これを達成するための戦略として、「コード品質の6つの柱」を次のように示しています。 1. コードを読みやすくする 2. 想定外の事態をなくす 3. 誤用しにくいコードを書く 4. コードをモジュール化する 5. コードを再利用、汎用化しやすくする 6. テストしやすいコードを書き、適切にテストする 本書では、この6つの柱に沿って、ソフトウェアエンジニアとしてコードを書く際のアドバイスが述べられています。著者の知識と経験が、具体的かつ実用的に言語化されています。 本書は、経験が3年以内のソフトウェアエンジニアをターゲットとして執筆されていますが、チームで開発を行う際のリファレンスとしても利用できるでしょう。あるいは、経験のあるエンジニアであっても、自分の経験を整理し、言語化するための便覧としても使えるはずです。そして、チーム開発で、他のエンジニアをメンタリングするための便利なリソースとしても活用できます。 Googleのテックリードを務める著者が、プロのソフトウェアエンジニアとして、堅牢で信頼性が⾼く、保守しやすく、チームメンバーが理解や適応しやすいコードを書くための概念と実用的な⼿法を解説。 Part 1 理論編 Chapter 1 コードの品質 Chapter 2 抽象化レイヤー Chapter 3 コードでの契約 Chapter 4 エラー Part 2 実践編 Chapter 5 コードを読みやすくする Chapter 6 想定外の事態をなくす Chapter 7 誤用しにくいコードを書く Chapter 8 コードをモジュール化する Chapter 9 コードを再利用、汎用化しやすくする Part 3 ユニットテスト編 Chapter 10 ユニットテストの原則 Chapter 11 ユニットテストの実践 Appendix 付録 A チョコレートブラウニーのレシピ B null安全とオプション C 追加のコード例
「Rust」をWin11とmaxOSにインストールし、Visual Studio Codeで動かす方法を丁寧に解説。 プログラム言語「Rust」は、「速くて安全」を目指した言語で、①実行環境を必要としないコンパイル言語、②使用メモリの管理、③破綻しない並行処理……の3つがキモになります。 「Rust」はコンパイル言語ではあっても、その方法を簡単にしてあります。また、「メモリ管理」もルールを整理し、とても分かりやすい仕組みにしています。 「Rust」を学べば、「C言語」の「ポインタ」や「メモリ割り当て」が理解しやすくなるでしょう。 さらに、「並行処理の管理」も、「Rust」では「チャンネルとメッセージ」で行なう方法を備えています。 全体的に、スクリプト言語を理解している人向けの解説になりますが、初心者でも挑戦できるように、第1章では「Windowws11」と「maxOS」に「Rust」をインストールし、「Visual Studio Code」で動かす方法を丁寧に説明しています。 「Rust」をWin11とmaxOSにインストールし、Visual Studio Codeで動かす方法を丁寧に解説。Rustの面白さRustでわかることを紹介。 ■「Rust」の紹介とインストール ・Rustのインストール/Visual Studio Codeのインストールと動作設定/Rustのプロジェクト作成とプログラム実行/Rustのプログラムの構造 ■文字列でわかるRustの特徴 ・マクロ「println!」/プレースホルダ「{}」/書き換えの可不可/「スライス」で間接操作/参照とその中身/文字列の「長さ」 ■「オーナーシップ」によるメモリ管理 ・型と必要メモリ/オーナーシップの取得と破棄/参照を上手に使う ■Rust独特のデータ記述法 ・Rustの構造体/Rustの列挙型/Rustのトレイト/Rustのエラー処理 ■破綻しない並行処理 ・スレッドの記述/チャンネルとメッセージ ■プログラムファイルを整理する ・ファイルからテキストを読み込む/別のファイルのプログラムを呼び出す/モジュールの作成と利用
2020年より小・中学校でプログラミング教育が本格化――人気の言語「パイソン」を習得するための最高の入門書です。 2020年より小・中学校でプログラミング教育が本格化――プログラミングの手順を1ステップずつやさしく解説。カラフルなイラストや興味をひくプロジェクトを通して、Pythonの基本が楽しく学べます。絵を描いたり、動きのあるグラフィックを作ったり、かんたんなプログラムで動くおもしろいゲームを作ったり、この本一冊で基礎の習得から実践までカバー。【プロジェクトの例】動物クイズ:3回答えるあいだに正解を出そう!スパイラル:ふくざつな模様がかんたんに描けるぞ!星空:カラフルな星がつぎつぎ夜空に出現するよ!ペットをかおう:お世話をすると喜んだり、放っておくと悲しんだりするぞ!はらぺこイモムシ:葉っぱを食べるとどんどん成長していくぞ! キャロル・ヴォーダマンほか著/山崎正浩訳;0401;03;2020年より小・中学校でプログラミング教育が本格化――人気の言語「パイソン」を習得するための最高の入門書です。;20180901 1 パイソンを始めよう プログラミングってなんだろう? パイソンはどんな言語かな? パイソンのインストール IDLEを使ってみる 2 最初のステップ 最初のプログラム 変数 判断する くり返し 動物クイズ 関数 デバッグ(バグとり) パスワード生成機 モジュール 文字当てゲーム 3 タートル・グラフィックス ロボットを作ろう スパイラル 星空 レインボー・カラー 4 パイソンで遊んでみよう カウントダウン・カレンダー エキスパートシステム ひみつのメッセージ ペットをかおう 5 ゲームを作ってみよう はらぺこイモムシ スナップ 神経すい弱 エッグ・キャッチャー 6 リファレンス ソースコード 用語集 索引
サウンドプログラミングの入門書。基本からはじめ、コンピュータでの音の考え方、信号処理の基礎、シンセサイザの音作りなどを解説。 Pythonで音作りをはじめよう! ・音のプログラミングが音響楽の基本からわかる! ・音の信号処理もていねいに解説! ・打楽器・管楽器・弦楽器・鍵盤楽器の音が手もとで作れる! ・ソースコードはWebからダウンロード可能! 本書は、コンピュータで音作りをしてみたい方に向けた、サウンドプログラミングの入門書です。音作りに興味があるけど何からはじめたらという初心者のために音響の基本から解説をはじめ、コンピュータでの音の考え方、音を加工するディジタル信号処理の基礎をていねいに説明し、シンセサイザ、エフェクタの音作りなどを解説します。さらに、さまざまな音響合成のテクニックとともに、その具体例として、ゼロから楽器音をつくり出すフルスクラッチ合成のレシピを紹介します。サウンドプログラミングの言語には、音データの読み書きはもちろん、波形、周波数特性、そしてスペクトログラムの描画も簡単に行える、Pythonを採用しています。 Pythonを使ってサウンドプログラミングの第一歩を踏み出しましょう! サウンドプログラミングの入門書。基本からはじめ、コンピュータでの音の考え方、信号処理の基礎、シンセサイザの音作りなどを解説。 第1章 音響学 第2章 サウンドプログラミング 第3章 コンピュータミュージック 第4章 MIDI 第5章 ディジタル信号処理 第6章 シンセサイザ 第7章 エフェクタ 第8章 ミキシング 第9章 打楽器の音をつくる 第10章 管楽器の音をつくる 第11章 弦楽器の音をつくる 第12章 鍵盤楽器の音をつくる 索引
Java資格対策書で人気の徹底攻略シリーズから、2020年開始のJava Bronze SE[1Z0-818]試験に対応した問題集が登場。解き進めるだけで自然と体系的な知識が身に付くよう問題を構成しています。教科書を超えるやさしく丁寧な解説で、初心者でもつまずくことなくJavaの基本、オブジェクト指向がよくわかります。巻末には実際の試験を体験できる模擬試験1回分を収録しているほか、さらにもう1回分をダウンロード提供。本書一冊で、一発合格に必要な「知識」と「問題を解く力」がしっかりと身に付きます。
この本では、「コード」を書いてゲームを作りながら、プログラミングを楽しく学んでいきます。パソコン上でProcessingを使いますので、Javaベースのプログラムを、面倒な設定なしで直感的にどんどん書きながら理解することができます。PythonやJavaScriptは難しくて手が出せなかったという人でも、この本なら大丈夫。小学校高学年以上のどなたでも読むことができます。Scratchではちょっともの足りない人も、ぜひ試してみましょう。 イントロダクション ●第1章 Processingでプログラミングを始めよう! 1-1 なぜプログラミングをするの? プログラミングは「道具」 本書の目的 1-2 「Processingがオススメ!」の理由 プログラミング言語とは? なぜProcessingがオススメなの? 1-3 Processingを始めよう! Processingの実行環境 Processingをダウンロードしよう Processingをインストールしよう Processingを起動しよう ●第2章 Processingで図形を描こう 2-1 「 こんにちは、世界」~ Processingの世界にようこそ Hello Worldとは? プログラムのコードを入力しよう 「Hello World」プログラムを実行しよう 2-2 画面のサイズと座標を理解しよう 画面のサイズを指定する 画面の座標を理解しよう 2-3 いろいろな図形を描こう 線を描こう 四角形を描こう 円を描こう 三角形を描こう 2-4 図形に色をつけよう 図形を黒く塗りつぶしてみよう 光の三原色を使って色をつけよう カラーコードを使って色をつけよう 画面の背景の色を指定しよう 2-5 課題図形を組み合わせてクマを描いてみよう 図形を組み合わせてクマを描く クマの顔の輪郭を描く クマの耳を描く クマの手を描く クマの目を描く クマの口周りを描く クマの鼻を描く ●第3章 Processingプログラミングの基本―関数、変数、画像表示、乱数 3-1 絵を動かすために必要なsetup関数とdraw 関数を作ろう まず関数とは何かを理解しよう マウスの位置に四角形を表示するプログラムを作ろう setup 関数とdraw関数の役割を知ろう setup 関数とdraw関数を書いてみよう setup 関数とdraw関数を書くときの注意点 3-2 「変数」とは何かを理解しよう 変数=名前付きの箱 自動で右に移動する四角形を表示するプログラムを作ろう 変数の宣言方法を理解しよう 1つの四角形が自動で右に移動するプログラムを作ろう マウスの位置に四角形がついてくるプログラムを作ろう draw関数の実行回数をカウントしよう 算術演算子を利用しよう 3-3 画像を画面に表示しよう まずは画像を準備しよう 耳の長いネコの画像を表示しよう 耳の長いネコの画像がマウスについてくるプログラムを作ろう 3-4 「乱数」を使って画面の表示を変化させよう なぜ乱数を利用するのか 実行のたびに色が変わる円を表示するプログラムを作ろう 値を返す関数と値を返さない関数 実行のたびに色がカラフルに変わる円を表示するプログラムを作ろう クリックするたびに円の色がランダムに変化するプログラムを作ろう 初心者あるある問題~変数のスコープ 3-5 課題マウスにクマの絵がついてくるプログラムを作ろう クマの絵を動かすためのヒント setup 関数とdraw関数を使う 変数を使って座標を指定する クマの絵の表示位置を調整する ●第4章 Processingプログラミングの基本―条件分岐、繰り返し 4-1 条件分岐を理解しよう if ~もし○○なら□□をする 比較演算子を使って条件式を書く 左右に動く円を描くプログラムを作ろう キーボードで円を動かすプログラムを作ろう 4-2 画像のアニメーションを作ろう アニメーションの基本と画像の準備 ネコが歩くアニメーションを作ろう ネコが自然に歩くようにアニメーションを修正しよう 4-3 条件分岐を使って「当たり判定」を行おう 「画面がクリックされたら」~当たり判定 マウスを四角形の上に置いたら色が変わるプログラムを作ろう 4-4 繰り返し処理を理解しよう 四角形を60 個並べるプログラムを作ろう for ~条件を満たす間処理を繰り返す 複数の四角形がいっせいに動くプログラムを作ろう 4-5 関数を自分で定義しよう 関数について今まで学んできたこと オリジナルの関数を作ろう 4-6 まとめチュートリアル間違い探しゲームを作ろう 間違い探しゲームを作ろう ① setup 関数とdraw関数を書こう ②まずは黒い四角形を1つ描こう ③黒い四角形を横に5 個並べよう ④繰り返し処理を使って黒い四角形を横に5 個並べよう ⑤今度は黒い四角形を縦に5 個並べよう ⑥横5×縦5=25 個の四角形を描こう~その1 ⑦横5×縦5=25 個の四角形を描こう~その2 ⑧四角形の色をランダムに変更しよう ⑨1個目の四角形だけ色を変えよう ⑩色が変わる四角形をランダムに変更する ⑪ クリックされるたびに色が違う四角形が変わるようにしよう ⑫関数を作って同じ処理を1つにまとめよう ⑬正解の四角形をクリックできるようにしよう ⑭スコアを表示しよう ⑮間違い探しゲームの完成! ⑯カスタマイズしてみよう ●第5章 配列と繰り返し処理でさまざまな表現を作ろう 5-1 配列とは何かを理解しよう まずは配列を体験してみよう 配列の宣言方法を理解しよう 配列の要素を個別に操作しよう 初心者あるある問題~配列の添字 5-2 配列を使ってさまざまな表現を作ろう 雨を降らせるプログラムを作ろう 雪を降らせるプログラムを作ろう 宇宙を表現するプログラムを作ろう 5-3 配列を使ってアクションゲームを作ろう アクションゲームを作ろう ① setup 関数とdraw関数を書こう ②プレイヤーとなる白の球体を動かそう ③敵となる球体を表示しよう ④敵の球体を1体ずつ出現させてみよう ⑤敵のスピード、サイズ、色をランダムにしよう ⑥当たり判定を作ろう ⑦敵が自動で出現するようにしよう ⑧敵とぶつかったときの処理を修正しよう ⑨ゲームオーバーの処理を作ろう ⑩スタート画面を作成しよう ●第6章 クラスとオブジェクトを活用しよう 6-1 クラスを理解しよう 「モノ」を表すオブジェクトに値をまとめよう クラスを定義しよう オブジェクトを生成して利用しよう 6-2 配列と一緒にクラスとオブジェクトを使ってみよう 風船が上昇するプログラムを作ろう 配列と一緒に使って風船をたくさん表示するプログラムを作ろう 6-3 クラスとオブジェクトを使ってシューティングゲームを 作ろう シューティングゲームを作ろう ① setup 関数とdraw関数を書こう ②自機となるプレイヤーを仮表示しよう ③プレイヤーを動かそう ④プレイヤーの動きをスムーズにしよう ⑤敵機を作ろう ⑥自機と敵機に共通するクラスを作ろう ⑦自機を戦闘機の画像にしよう ⑧自機の戦闘機をアニメーションにしよう ⑨敵機の戦闘機をアニメーションにしよう ⑩配列でアニメーションを管理しよう ⑪戦闘機が弾丸を発射できるようにしよう ⑫戦闘機がたくさんの弾丸を発射できるようにしよう ⑬当たり判定を作ろう ⑭ isHit関数を使って弾丸が敵に衝突したかを判定しよう ⑮弾丸を遮る壁を作ろう ⑯弾丸が壁に跳ね返るようにしよう ⑰弾丸とプレイヤーが当たるようにしよう ⑱敵機が動くようにしよう ⑲壁にしかけを加えよう ⑳ゲームクリアとゲームオーバーを作ろう ?ゲームの演出を強化しよう ●第7章 総まとめドローンを操作するアクションゲームを作ろう 7-1 プレイヤーが操作するドローンの画像を表示しよう アクションゲームを作ろう ① setup 関数とdraw関数を書こう ②ドローンの画像を表示しよう 7-2 キーを押してドローンを動かしてみよう ③プレイヤーを表すクラスを作ろう ④ Playerクラスを使ってドローンを表示しよう ⑤ドローンが上昇、下降、横に移動するようにしよう 7-3 安全ブロック、危険ブロック、ゴールブロックを作ろう ⑥ブロックを表すクラスを作ろう ⑦ Blockクラスを使って安全ブロックを表示しよう ⑧衝突を判定するisHit関数を作ろう ⑨ドローンがブロックの上に着地するようにしよう ⑩危険ブロックとゴールブロックを作ろう 7-4 縦と横に画面をスクロールする「カメラ」を作ろう ⑪カメラを表すクラスを作ろう ⑫カメラからの位置を計算して座標に変換する関数を作ろう ⑬カメラの移動範囲を制御しよう 7-5 ゲームクリアを作ってゲームを完成させよう ⑭ゲームクリアを作ろう ⑮自分だけのオリジナルステージを作ろう ⑯見た目を整えて完成させよう おわりに 付録:関数一覧 索引
アルゴリズム取引にPythonを利用する方法を解説。自動取引戦略をシステマチックに構築、デプロイするための選択肢を学ぶ。 Pythonを使ってトレードを始めたい人に最適! 『Pythonによるファイナンス 第2版』の著者が、アルゴリズムトレードにPythonを利用する方法を解説する書籍です。具体的には、アルゴリズムトレード用の適切なPython環境の設定、データの取得、NumPy/pandasを使ったデータ分析、取引戦略のバックテスト、市場予測、ストリーミングのリアルタイム処理等、アルゴリズム取引のさまざまな側面にPythonを適用するさまざまな手法を紹介することにより、自動取引戦略をシステマチックに構築、デプロイするために、どんな選択肢があるのかを学ぶことができます。 アルゴリズム取引にPythonを利用する方法を解説。自動取引戦略をシステマチックに構築、デプロイするための選択肢を学ぶ。
RAPソフトに頼らなくても、業務は自動化できる! 「これ、毎日同じ作業をしているけど、自動化できないかな?」 「この作業、手でやってたらとても終わらない…どうにかできないかな?」 そんな声にお答えするのが本書です。 本書では、Pythonを使って、ビジネス上よく起きるさまざまな作業を自動化します。 サンプルが用意されているので、実際にプログラムを動かして試してみることができます。 Pythonの文法も要点を押さえて説明してあるので、自分の作業に合わせてカスタマイズしやすくなっています。 1章では、Pythonをインストールして自動化を行うための環境を整えます。簡単なプログラムを通して、プログラムを実行するコツをつかみます。 2章、3章では、Excelへのデータ入力、データ抽出、書式設定、請求書などテンプレートがあるファイルへのデータ流し込み、Wordのテンプレートへのデータ流し込み、PDF化など、一般的なオフィス文書の自動化を扱います。基本的にはopenpyxlモジュールを使い、後半ではpython-docxやpywin32も使います。 4章では、Webブラウザからのデータ取り込み、一括ダウンロード、パスワードがかかっているサイトへのログインなど、Webブラウザの操作自動化について説明します。「Beautiful Soup」モジュールやSeleniumを使います。 5章では、メールの送信、LINEやTwitterなどのSNSの操作を扱います。また、即時に実行するのではなく、日々の決まった時間や先の日付けで実行したいスケジューリングの設定について説明します。 6章では、ダイアログを出してユーザーから言葉やファイルの入力を得る方法や、正規表現の使い方、プログラムをデスクトップアプリにする方法、他の人が実行しやすい形でプログラムを渡す方法、マウスやキーボードの操作を自動化する方法など、便利な情報を詰め込んでいます。TkinterやPyInstallerを使います。 Pythonの知識の浅い方でも使いやすいように、インストール方法から、実行方法までを丁寧に説明しています。また、巻末には文法をまとめたAppendixを入れています。 実行環境としては、Windows、macOS、Linuxに対応していますが、項目によっては一部OSにしか対応していないものもありますのでご注意ください。 Python3.x対応。 ※他の人が実行しやすい形でプログラムを渡す目的で使うPyInstallerは、Python3.5~3.7対応です。 Chapter1 Pythonで仕事を自動化しよう Chapter2 Excel作業を自動化しよう Chapter3 Excelの高度な作業も自動化しよう Chapter4 Webブラウザの自動化/スクレイピング Chapter5 メールやLINE/SNSを自動化しよう Chapter6 そのほかの便利な自動化テクニック Appendix Pythonの基本文法の紹介
新学習指導要領で小学校に導入されるプログラミング。パソコンを使わず、すみっコぐらしのキャラと問題を解いて基礎を身につける。 新学習指導要領で小学校に導入されるプログラミング。パソコンを使わず、すみっコぐらしのキャラと問題を解いて基礎を身につける。