Nushell
Book
Cookbook
Blog
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
Book
Cookbook
Blog
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
  • はじめに
  • Getting Started
    • Nu のインストール
    • Default Shell
    • クイックツアー
    • システム内の移動
    • Thinking in Nu
    • Nushell Cheat Sheet
  • Nu 基礎編
    • データ型
    • データの読み込み
    • パイプライン
    • Working with Strings
    • Working with Lists
    • テーブルを扱う
  • Programming in Nu
    • Custom Commands
    • エイリアス
    • Operators
    • /book/variables_and_subexpressions.html
    • Scripts
    • Modules
    • Overlays
    • /book/command_signature.html
    • Testing your Nushell Code
    • Best Practices
  • シェルとしての Nu
    • 設定
    • 環境変数
    • Stdout, Stderr, and Exit Codes
    • エスケープ
    • How to Configure 3rd Party Prompts
    • シェルの中のシェル
    • Reedline, Nu's Line Editor
    • Externs
    • Custom Completions
    • Coloring and Theming in Nu
    • Hooks
    • /book/background_task.html
  • Nu への移行
    • Bash から来た人向け
    • Coming from CMD.EXE
    • 他のシェルと DSL から Nu への対応表
    • 命令形言語から Nu への対応表
    • 関数型言語から Nu への対応表
    • Nushell 演算子対応表
  • Design Notes
    • How Nushell Code Gets Run
  • (Not So) Advanced
    • Standard Library (Preview)
    • Dataframes
    • メタデータ
    • Creating Your Own Errors
    • Parallelism
    • プラグイン
    • explore

データの読み込み

これまでに、ls、ps、date、およびsysコマンドを使って、ファイル、プロセス、日付そしてシステム自身の情報を取得する方法をみてきました。各コマンドはテーブル情報を提供しますが、他にもデータをテーブルに読み込む方法があります。

ファイルを開く

データを操作するための Nu の最も強力なコマンドのひとつがopenコマンドです。これは様々なデータ形式に対応したマルチツールです。これがなにを意味するかをみるために、json ファイルを開いてみましょう。

open editors/vscode/package.json
# => ──────────────────┬───────────────────────────────────────────────────────────────────────────────
# =>  name             │ lark
# =>  description      │ Lark support for VS Code
# =>  author           │ Lark developers
# =>  license          │ MIT
# =>  version          │ 1.0.0
# =>  repository       │ [row type url]
# =>  publisher        │ vscode
# =>  categories       │ [table 0 rows]
# =>  keywords         │ [table 1 rows]
# =>  engines          │ [row vscode]
# =>  activationEvents │ [table 1 rows]
# =>  main             │ ./out/extension
# =>  contributes      │ [row configuration grammars languages]
# =>  scripts          │ [row compile postinstall test vscode:prepublish watch]
# =>  devDependencies  │ [row @types/mocha @types/node tslint typescript vscode vscode-languageclient]
# => ──────────────────┴───────────────────────────────────────────────────────────────────────────────

lsと同様、Nu が理解できるタイプのファイルを開くと、単なるテキスト(またはバイトストリーム)以上のものが返ってきます。ここでは、JavaScript プロジェクト内の"package.json"ファイルを開いています。Nu は JSON テキストを認識し、テーブルデータを返すことができます。

プロジェクトのバージョンを確認したい場合は、getコマンドを利用します。

open editors/vscode/package.json | get version
# => 1.0.0

Nu が現在、直接データをテーブルに読み込める形式は次の通りです。

  • json
  • yaml
  • toml
  • xml
  • csv
  • ini

しかし、これらのいずれでもないテキストファイルを読み込むとどうなるでしょうか、試してみましょう。

open README.md

ファイルの内容が表示されます。ファイルが大きすぎる場合は、便利なスクロールビューでファイルの中身を確認してからターミナルに戻ってくることができます。読みやすさのために、ソースファイルやマークダウンといった一般的なファイル形式ではシンタックスハイライトを提供します。

裏側では、Nu はこれらのファイルをひとつの大きな文字列としてみています。次に、これらの文字列から必要なデータを取得する方法について説明します。

文字列を扱う

Nu の外からきたデータを Nu がいつも理解できるとは限らないことを理解しておくのは重要なことです。多くの場合このデータは文字列として与えられます。

以下のファイルが与えられたと想定してみましょう。

open people.txt
# => Octavia | Butler | Writer
# => Bob | Ross | Painter
# => Antonio | Vivaldi | Composer

必要なデータはパイプ('|')記号で区切られており、各行はそれぞれの人物を表しています。Nu はデフォルトではパイプで区切られたファイル形式を知らないので、明示的にこのファイルをパースする必要があります。

ファイルを読み込むときに最初に行うことは、1行ずつ作業することです。

open people.txt | lines
# => ───┬──────────────────────────────
# =>  0 │ Octavia | Butler | Writer
# =>  1 │ Bob | Ross | Painter
# =>  2 │ Antonio | Vivaldi | Composer
# => ───┴──────────────────────────────

テーブルにもどってきたので、行を使って作業していることがわかります。次のステップは、行をもうすこし便利なものに分割できるかみてみることです。そのために、splitコマンドを利用します。名前からわかるように、splitは区切り文字を含む文字列を列に分割する方法を提供します。splitのcolumnサブコマンドを使って、複数の列に分割するします。必要なのは区切り文字を指定することだけです。

open people.txt | lines | split column "|"
# => ───┬──────────┬───────────┬───────────
# =>  # │ Column1  │ Column2   │ Column3
# => ───┼──────────┼───────────┼───────────
# =>  0 │ Octavia  │  Butler   │  Writer
# =>  1 │ Bob      │  Ross     │  Painter
# =>  2 │ Antonio  │  Vivaldi  │  Composer
# => ───┴──────────┴───────────┴───────────

ほとんど正しいように見えますが、余分なスペースを含んでいます。余分なスペースをtrimしてみましょう。

open people.txt | lines | split column "|" | str trim
# => ───┬─────────┬─────────┬──────────
# =>  # │ Column1 │ Column2 │ Column3
# => ───┼─────────┼─────────┼──────────
# =>  0 │ Octavia │ Butler  │ Writer
# =>  1 │ Bob     │ Ross    │ Painter
# =>  2 │ Antonio │ Vivaldi │ Composer
# => ───┴─────────┴─────────┴──────────

悪くありません。splitコマンドは利用可能なデータとデフォルトのカラム名をつけてくれます。

open people.txt | lines | split column "|" | str trim | get Column1
# => ───┬─────────
# =>  0 │ Octavia
# =>  1 │ Bob
# =>  2 │ Antonio
# => ───┴─────────

デフォルトの名前を利用するかわりに、列に名前をつけることもできます。

open people.txt | lines | split column "|" first_name last_name job | str trim
# => ───┬────────────┬───────────┬──────────
# =>  # │ first_name │ last_name │ job
# => ───┼────────────┼───────────┼──────────
# =>  0 │ Octavia    │ Butler    │ Writer
# =>  1 │ Bob        │ Ross      │ Painter
# =>  2 │ Antonio    │ Vivaldi   │ Composer
# => ───┴────────────┴───────────┴──────────

データをテーブルに変換できたので、これまでテーブルに利用してきたすべてのコマンドをつかうことができます。

open people.txt | lines | split column "|" first_name last_name job | str trim | sort-by first_name
# => ───┬────────────┬───────────┬──────────
# =>  # │ first_name │ last_name │ job
# => ───┼────────────┼───────────┼──────────
# =>  0 │ Antonio    │ Vivaldi   │ Composer
# =>  1 │ Bob        │ Ross      │ Painter
# =>  2 │ Octavia    │ Butler    │ Writer
# => ───┴────────────┴───────────┴──────────

文字列を操作するために使用できるその他のコマンドです。

  • str
  • lines
  • size

データが Nu が理解できる構造をもっていることがわかっている場合に呼び出すことのできるヘルパーコマンドのセットもあります。例えば、Rust のロックファイルを開いてみましょう。

open Cargo.lock
# => # This file is automatically @generated by Cargo.
# => # It is not intended for manual editing.
# => [[package]]
# => name = "adhoc_derive"
# => version = "0.1.2"

"Cargo.lock"ファイルは実際には.toml ファイルですが、ファイル拡張子が.toml ではありません。でも大丈夫です、from tomlコマンドが使えます。

open Cargo.lock | from toml
# => ──────────┬───────────────────
# =>  metadata │ [row 107 columns]
# =>  package  │ [table 130 rows]
# => ──────────┴───────────────────

fromコマンドはサポートされているテキストフォーマットをサブコマンドとして渡すことで Nu が扱える構造化データごとに利用できます。

raw モードで開く

ファイルを開いてそのデータのテーブルをすぐに操作できると便利ですが、これは必ずしもやりたいことであるとは限りません。テキストをそのまま取得するために、openコマンドに--rawオプションフラグを渡すことができます。

open Cargo.toml --raw
# => [package]
# => name = "nu"
# => version = "0.1.3"
# => authors = ["Yehuda Katz <wycats@gmail.com>", "Sophia Turner <547158+sophiajt@users.noreply.github.com>"]
# => description = "A shell for the GitHub era"
# => license = "MIT"

URL からの取得

ファイルシステムからファイルを読み込むことに加えて、http getコマンドを利用して URL からリソースを取得できます。 これはインターネットから URL の内容をフェッチして返してくれます。

http get https://blog.rust-lang.org/feed.xml
# => ╭────────────┬──────────────────╮
# => │ tag        │ feed             │
# => │ attributes │ {record 1 field} │
# => │ content    │ [table 18 rows]  │
# => ╰────────────┴──────────────────╯
GitHubでこのページを編集する
Contributors: Ibraheem Ahmed, ymgyt, Justin Ma, Filip Andersson, amtoine, sophiajt, jajimajp, 0x4D5352, joshuanussbaum, NotTheDr01ds, Jan Klass
Prev
データ型
Next
パイプライン