LoginSignup
8
2

More than 1 year has passed since last update.

2021/12/01の記事です。
先鋒をつかまつります。
$\huge{Hello\ World}$

はじめに

  • 私は、.NETの初心者です
  • 名乗るほどのものではございませんが、TORIFUKUKaiouと申します
  • プレゼントカレンダーにのっかって、.NETをはじめてみようとおもいます
  • その「はじめました〜」な事柄を書いていきます
  • これからはじめてみよう! という方にはすこ〜しくらいお役に立てる内容になっているとおもっています

まず最初にしたこと

  • GA -- イベントのタイトル「祝 .NET 6 GA!」にあるGA -- 「が」「じ〜えい」って何だったけ? を調べました
    • 前も調べたことあるんです
    • でもすっかり忘れてしまっていました
    • General Availability
  • 「.NET MS Learn」こんな感じの単語でBingってみました
  • :surfer::surfer_tone1::surfer_tone2::surfer_tone3::surfer_tone4::surfer_tone5:をして以下の2つのページにたどり着きました

スクリーンショット 2021-11-06 22.46.41.png

から引用させていただきます。
※各言語・フレームワーク等のロゴの権利はそれぞれの作成者に帰属しています

.NET 開発者向けの Azure

  • 「.NET 💜 Azure」ということを知りました
  • 確かに知りました
  • :point_up::point_up_tone1::point_up_tone2::point_up_tone3::point_up_tone4::point_up_tone5: これ、私が勝手に言いだしたことじゃないんです
    • リンク先に飛んでいただければわかりますが、本当にそう書いてあります
    • ちなみに、https://docs.microsoft.com/en-US/dotnet/azure/ と英語の方をみると、「Know that .NET 💜 Azure.」と書いてあります
    • 訳すといった野暮なことはいたしますまい
      • 英語は英語のまま理解することを私は心がけています
  • それでは早速、私の「いち推し」ポイントを発表します
  • それはハートの色が💜であることです
  • このページはいろいろと内容豊富なのでいずれまた戻ってくるとして、帯の「.NET 💜 Azure」ということを知りました

.NET Tutorial - Hello World in 5 minutes

  • .NET Tutorial - 5分でできるHello World
  • まず最初に試してみる、そして記事にしてみるにはこのくらいの分量がよさそうです
  • $\huge{Hello\ World}$
  • Windows, Linux, macOSの3種類が用意されています
  • どれでやってもいいのですがLinuxを選びました
  • もちろん:bangbang::bangbang::bangbang:、LinuxはAzureの仮想マシン(VM)を使います
  • では、さっそくはじめていきます
  • Let's get started :rocket::rocket::rocket:
  • 仮想マシン(VM)は以下のような構成で作成済としてはじめます
設定項目
OS Ubuntu 20.04
サイズ Standard B1s (1 vcpu 数、1 GiB メモリ)
ストレージの種類 Standard SSD
スワップ領域 (追加方法) 1GB

ローカルマシンからsshで仮想マシン(VM)に接続しておきます。

$ ssh -i ~/.ssh/id_rsa azureuser@<仮想マシンのIPアドレス>

以下、仮想マシン(VM)上での操作です。

Download and install

$ wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ rm packages-microsoft-prod.deb
$ sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-6.0

以上でインストールが完了しました。

$ dotnet --info
.NET SDK (reflecting any global.json):
 Version:   6.0.100
 Commit:    9e8b04bbff

Runtime Environment:
 OS Name:     ubuntu
 OS Version:  20.04
 OS Platform: Linux
 RID:         ubuntu.20.04-x64
 Base Path:   /usr/share/dotnet/sdk/6.0.100/

Host (useful for support):
  Version: 6.0.0
  Commit:  4822e3c3aa

.NET SDKs installed:
  6.0.100 [/usr/share/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 5.0.11 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 6.0.0 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 5.0.11 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 6.0.0 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET runtimes or SDKs:
  https://aka.ms/dotnet-download

.NET 6.0を使えるようになりました:tada::tada::tada:

Create your app

$ dotnet new console -o myApp

$ cd myApp

$ cat Program.cs
Program.cs
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

ちなみに.NET 5.0.402で試したときのProgram.csは以下のようになっていました。

Program.cs
using System;

namespace myApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/intro
は、2021/11/07 09:43(JAPN)時点では、.NET 5.0.402と同じ形式でチュートリアルが書かれているので読み替えが必要です。
※読み替えと大げさに言うほどのことではありません。
※2021/11/10 22:05(JAPAN)では、チュートリアルは新しい記法で書き直されています :tada:

スクリーンショット 2021-11-07 9.51.21.png

新しい C# テンプレートで、最上位レベルのステートメントが生成される」より引用させていただいています。

Run your app

  • 上の続きでmyAppディレクトリにいることが前提
$ dotnet run
Hello World!

$\huge{Hello\ World!}$
:tada::tada::tada:

Edit your code

  • Program.csに一行書き足してみましょう
  • 現在日時を表示する処理を追加しています
  • 私はnanoコマンドを使って編集をしました
    • Ctl + o: 保存
    • Ctl + x: 終了
Program.cs
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
Console.WriteLine("The current time is " + DateTime.Now);

編集をして保存をしたら再びRun:rocket::rocket::rocket:してみましょう。
ここがこの記事のハイライトです。

$ dotnet run
Hello, World!
The current time is 11/10/2021 13:08:38

$\huge{Hello\ World!}$

$\huge{The\ current\ time}$
:tada::tada::tada:

Tips -- Visual Studio Code + Remote SSH

Next steps

今後、この辺はやっていきます!
特に.NET 101は「One O One」になにか縁のようなものを感じるので見てみようとおもいます。

Wrapping up :qiitan::lgtm::xmas-tree::santa::santa_tone1::santa_tone2::santa_tone3::santa_tone4::santa_tone5::lgtm::xmas-tree::qiitan:

  • .NET is an open source developer platform for building different types of apps.
  • Know that .NET 💜 Azure.
  • dotnet new(どっト ネッ ぬぅ〜)コマンドでプロジェクトの雛形を作って、$\huge{Hello\ World!}$と現在日時を表示させることができました
  • .NET 101のYouTube動画は為になりそうです :rocket::rocket::rocket:
  • その他、MS Learnに便利な学習教材がそろっているので一通りやってみるとよさそうな気がしています :rocket::rocket::rocket:
  • 私の「いち推し」ポイントは次の2つです
    • "Know that .NET 💜 Azure."のハートの色が💜
    • .NET 101 :video_camera: -- 101に縁を感じます
      • コンテンツが素晴らしいのでそれは当然のこと1として、💜や101に目がいきました

以下、おまけ。

Elixir💜

  • 突然ですが、私はElixirというプログラミング言語が好きです
  • 同じく$\huge{Hello\ World!}$をやってみたいとおもいます
  • 日本語では「不老不死の霊薬」と訳され、言語のロゴカラーは紫です

logo.png

※各言語・フレームワーク等のロゴの権利はそれぞれの作成者に帰属しています

Ubuntu 20.04へのインストール

  • asdfを使います
$ sudo apt install build-essential automake autoconf git squashfs-tools ssh-askpass pkg-config curl

$ sudo apt install libwxgtk3.0-gtk3-dev

# Nervesのドキュメントには書いていないけど追加しておくと、あとでErlangのインストールでWARNINGがでない
$ sudo apt install libssl-dev libncurses5-dev default-jdk unixodbc-dev fop xsltproc libxml2-utils
$ sudo apt install libwxgtk-webview3.0-gtk3-dev

$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.8.0
$ echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bashrc
$ echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc
$ source ~/.bashrc
$ asdf plugin-add erlang
$ asdf plugin-add elixir
$ asdf install erlang 24.1.4

:coffee::coffee::coffee::coffee::coffee:
ここが長いのでコーヒーでも飲みながら気長にお待ちください。

$ asdf install elixir 1.12.3-otp-24
$ asdf global erlang 24.1.4
$ asdf global elixir 1.12.3-otp-24
$ elixir -v
Erlang/OTP 24 [erts-12.1.4] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [jit]

Elixir 1.12.3 (compiled with Erlang/OTP 24)

:tada:
インストールすることができました。

プロジェクトの作成

$ mix new my_app

編集

  • lib/my_app.exを開いてみてください
  • 最初は以下のようになっているとおもいます
lib/my_app.ex
defmodule MyApp do
  @moduledoc """
  Documentation for `MyApp`.
  """

  @doc """
  Hello world.

  ## Examples

      iex> MyApp.hello()
      :world

  """
  def hello do
    :world
  end
end

run/0メソッドを追加してみます。
/0は引数が0個という意味です。

lib/my_app.ex
defmodule MyApp do
  @moduledoc """
  Documentation for `MyApp`.
  """

  @doc """
  Hello world.

  ## Examples

      iex> MyApp.hello()
      :world

  """
  def hello do
    :world
  end

  def run do
    "Hello World!" |> IO.puts()
    time = DateTime.now!("Etc/UTC") |> DateTime.to_string()
    "The current time is #{time}" |> IO.puts()
  end
end

Run

$ cd my_app
$ iex -S mix
iex> MyApp.run()
Hello World!
The current time is 2021-11-06 14:46:32.250499Z
:ok

:tada:
$\huge{Hello\ World!}$と現在日時を表示させることができました。

IEx(Elixir's interactive shell)の終了は、System.halt()を呼び出すか「Ctl + c」を2回押すかしてください。

Next Steps

Elixirは多少の心得がありますので少し説明を続けます

|> -- パイプ演算子

  • |>はパイプ演算子と呼ばれるもので、前の計算結果を次の関数の第1引数にいれてくれます
  • これがとっても便利なんです
  • さきほどのrun/0の中でもこそっと使っていますがそれほどよさは伝わらないのではないかとおもいます
  • そこで今度は、.NETタグがついたQiitaの記事をQiita APIを使って取得してみます
  • まずライブラリ(Elixirの世界ではHexといいます)を追加します
  • mix.exsを以下の通りに編集します
mix.exs
  defp deps do
    [
      {:httpoison, "~> 1.8"},
      {:jason, "~> 1.2"}
    ]
  end

そうしてコマンドラインにて

$ mix deps.get

を実行して依存関係を解決します。

lib/my_app.exitems/1関数を追加します。

lib/my_app.ex
  def items(tag \\ ".NET") do
    "https://qiita.com/api/v2/items?query=tag:#{tag}"
    |> URI.encode()
    |> HTTPoison.get!()
    |> Map.get(:body)
    |> Jason.decode!()
    |> Enum.map(& Map.take(&1, ["title", "url"]))
  end

引数tagにはデフォルト値で".NET"を指定しています。
引数無しでitems/1関数を呼び出した場合は、tag".NET"が束縛されています。
引数指定有りでitems/1関数を呼び出した場合は、tagは指定された値が束縛されています。
プログラムの中身の説明をします。

  • QiitaのAPIエンドポイントがありまして
    • |> GETするでしょ、いつやるの? 今でしょ!
    • |> bodyを取り出します、いつやるの? 今でしょ!
    • |> JSONデーコードするでしょ、いつやるの? 今でしょ!
    • |> そうすると各要素がマップのリストが得られるので、情報量が多いからとりあえずタイトルとURLだけにするでしょ、いつやるの? 今でしょ!

ってな感じの$\huge{Awesome}$なプログラムを書くことができます。
ちなみに|>を使わずに書くとこんな感じになります。

Enum.map(
  Jason.decode!(Map.get(
    HTTPoison.get!(
      URI.encode("https://qiita.com/api/v2/items?query=tag:#{tag}")),
    :body)),
  & Map.take(&1, ["title", "url"]))

プログラムを動かしてみます。

$ iex -S mix
iex> MyApp.items()
...

iex> MyApp.items("Elixir")
...

iex> MyApp.items("autoracex")
...

たくさんの良い記事に巡り会えることでしょう :tada::tada::tada:

オススメの書籍 :books:

Webアプリケーションを楽しむなら

IoTを楽しむなら

AIを楽しむなら

コミュニティ

FCOvBkAUYAE6mL8.jpeg
@piacerex さん作 :pray::pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5:


おわりに

$\huge{Know\ that\ .NET\ 💜\ Azure.}$
$\huge{Hello\ World}$

たくさんの良い記事に出会えることを楽しみにしています :tada::tada::tada:


明日は、@up-hashさんの「.NET6 が起動するまでのコードを追ってみよう」です。
お楽しみに〜:tada::tada::tada:


  1. すんごいのにそのすごさを感じさせないすごさに、すごさを感じますという気持ちでいっぱいです 

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2