2018年5月11日金曜日

Dart 入門

概要

Dart は Google が開発している言語でコマンドラインツールや Web アプリ、クロスプラットフォームなモバイルアプリを開発することができます
今回は導入として簡単なコマンドラインツールを作成するところまでやってみました
なお、WebStrom は使いません

環境

  • macOS 10.13.4
  • dart 1.24.3

dart インストール

  • brew tap dart-lang/dart
  • brew install dart

dart -V でバージョンが表示されれば OK です

  • Dart VM version: 1.24.3 (Wed Dec 13 23:26:59 2017) on "macos_x64"

サンプルの作成

dart は .dart 拡張子を持つファイルを実行します
とりあえず Hello world してみましょう

  • vim hello.dart
void main() {
  print('Hello, World!');
}
  • dart hello.dart

Hello, World!

となれば OK です

コマンドラインアプリの作成

チュートリアルのコマンドラインアプリを動かしてみます

ライブラリのインストール

まず必要なライブラリをインストールします
dart では pub コマンドというパッケージ管理ツールが標準で使えます
これを使って必要なライブラリをインストールしてみます

  • vim pubspec.yaml
name: main
description: test code.
dependencies:
  args:

ライブラリの管理は pubspec.yaml というファイルを使って行います
name と description は説明になります
dependencies に必要なライブラリを記載します
バージョンを指定しない場合は最新のバージョンがインストールされます
記載したら

  • pub get

でライブラリがインストールされます
インストール先はデフォルトだと ~/.pub-cache/hosted/pub.dartlang.org/args-1.4.3 になるようです

サンプルコード

  • vim arg_test.dart
import 'dart:io';
import 'dart:convert';
import 'dart:async';

import 'package:args/args.dart';

const lineNumber = 'line-number';

ArgResults argResults;

void main(List<String> arguments) {
  exitCode = 0; //presume success
  final parser = new ArgParser()
      ..addFlag(lineNumber, negatable: false, abbr: 'n');

  argResults = parser.parse(arguments);
  List<String> paths = argResults.rest;

  dcat(paths, argResults[lineNumber]);
}

Future dcat(List<String> paths, bool showLineNumbers) async {
  if (paths.isEmpty) {
    // No files provided as arguments. Read from stdin and print each line.
    stdin.pipe(stdout);
  } else {
    for (var path in paths) {
      int lineNumber = 1;
      Stream lines = new File(path)
          .openRead()
          .transform(UTF8.decoder)
          .transform(const LineSplitter());
      try {
        await for (var line in lines) {
          if (showLineNumbers) {
            stdout.write('${lineNumber++} ');
          }
          stdout.writeln(line);
        }
      } catch (_) {
        _handleError(path);
      }
    }
  }
}

Future _handleError(String path) async {
  if (await FileSystemEntity.isDirectory(path)) {
    stderr.writeln('error: $path is a directory');
  } else {
    exitCode = 2;
  }
}
  • dart main.dart pubspec.yaml

とすると YAML ファイルの内容をそのまま出力します
引数無しで実行すると入力待ち状態になり何か入力するとそのまま標準出力します

また

  • dart main.dart -n pubspec.yaml

と実行すると行番号を出力してくれます
サンプルコードの詳しい説明についてはこちらが非常にわかりやすいです

Tips

NoSuchMethodError: No top-level getter 'utf8' declared. と出る場合は 31 行目の UTF8.decoder が小文字になっていないか確認してください
執筆時点の公式のサンプルコードでは小文字になっておりエラーが発生しました

最後に

dart のインストールからサンプルコードの実行まで試してみました
パッケージ管理ツールの pub も使ってみました

コマンドラインツールの作成のほかに Web アプリと Flutter というモバイルアプリを開発できる環境構築の Getting Started もあるようです
Web アプリまたはモバイルアプリを開発する場合は WebStorm があったほうが良いかなと思います

参考サイト

0 件のコメント:

コメントを投稿