2021/12/01の記事です。
先鋒をつかまつります。
$\huge{Hello\ World}$
はじめに
- 私は、.NETの初心者です
- 名乗るほどのものではございませんが、TORIFUKUKaiouと申します
- プレゼントカレンダーにのっかって、.NETをはじめてみようとおもいます
- その「はじめました〜」な事柄を書いていきます
- これからはじめてみよう! という方にはすこ〜しくらいお役に立てる内容になっているとおもっています
まず最初にしたこと
-
GA -- イベントのタイトル「祝 .NET 6 GA!」にあるGA -- 「が」「じ〜えい」って何だったけ? を調べました
- 前も調べたことあるんです
- でもすっかり忘れてしまっていました
- General Availability
- 「.NET MS Learn」こんな感じの単語でBingってみました
- をして以下の2つのページにたどり着きました
から引用させていただきます。
※各言語・フレームワーク等のロゴの権利はそれぞれの作成者に帰属しています
.NET 開発者向けの Azure
- 「.NET 💜 Azure」ということを知りました
- 確かに知りました
-
これ、私が勝手に言いだしたことじゃないんです
- リンク先に飛んでいただければわかりますが、本当にそう書いてあります
- ちなみに、https://docs.microsoft.com/en-US/dotnet/azure/ と英語の方をみると、「Know that .NET 💜 Azure.」と書いてあります
- 訳すといった野暮なことはいたしますまい
- 英語は英語のまま理解することを私は心がけています
- 訳すといった野暮なことはいたしますまい
- それでは早速、私の「いち推し」ポイントを発表します
- それはハートの色が💜であることです
- 桑名 正博さんの名曲 セクシャルバイオレットNo.1の紫であること
- 位の高いお坊さんしか着れないのですよ、紫は
- このページはいろいろと内容豊富なのでいずれまた戻ってくるとして、帯の「.NET 💜 Azure」ということを知りました
.NET Tutorial - Hello World in 5 minutes
- .NET Tutorial - 5分でできるHello World
- まず最初に試してみる、そして記事にしてみるにはこのくらいの分量がよさそうです
- $\huge{Hello\ World}$
- Windows, Linux, macOSの3種類が用意されています
- どれでやってもいいのですがLinuxを選びました
- もちろん、LinuxはAzureの仮想マシン(VM)を使います
- では、さっそくはじめていきます
- Let's get started
- 仮想マシン(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
- まずは
dotnet
コマンドが使えるようにインストールをします - https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu#2004-
$ 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を使えるようになりました
Create your app
$ dotnet new console -o myApp
$ cd myApp
$ cat Program.cs
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
ちなみに.NET 5.0.402
で試したときの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)では、チュートリアルは新しい記法で書き直されています
「新しい C# テンプレートで、最上位レベルのステートメントが生成される」より引用させていただいています。
Run your app
- 上の続きで
myApp
ディレクトリにいることが前提
$ dotnet run
Hello World!
$\huge{Hello\ World!}$
Edit your code
- Program.csに一行書き足してみましょう
- 現在日時を表示する処理を追加しています
- 私はnanoコマンドを使って編集をしました
- Ctl + o: 保存
- Ctl + x: 終了
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
Console.WriteLine("The current time is " + DateTime.Now);
編集をして保存をしたら再びRunしてみましょう。
ここがこの記事のハイライトです。
$ dotnet run
Hello, World!
The current time is 11/10/2021 13:08:38
$\huge{Hello\ World!}$
と
$\huge{The\ current\ time}$
Tips -- Visual Studio Code + Remote SSH
- nanoを使って編集したと書きました
- Visual Studio CodeにRemote SSH Extensionを追加して、Visual Studio Codeで編集するのは便利です
- 参考: [VSCode] Remote-SSH でサーバ上のファイルを直接編集する方法
- ありがとうございます!
Next steps
- ここからが本番です
- 魅力的なコンテンツが並んでいます
- C# を使用して .NET アプリケーションをビルドする
- C# の最初のステップ
-
.NET 101
- 101です
-
101回目のプロポーズ
- 僕は死にましぇん。僕は死にましぇん! あなたが好きだから、僕は死にましぇん。僕が、幸せにしますからぁ!
- 話は飛びますが、私が最初に買ったCD(コンパクトディスク)はSAY YESでした
今後、この辺はやっていきます!
特に.NET 101は「One O One」になにか縁のようなものを感じるので見てみようとおもいます。
Wrapping up
- .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動画は為になりそうです
- その他、MS Learnに便利な学習教材がそろっているので一通りやってみるとよさそうな気がしています
- 私の「いち推し」ポイントは次の2つです
以下、おまけ。
Elixir💜
- 突然ですが、私はElixirというプログラミング言語が好きです
- 同じく$\huge{Hello\ World!}$をやってみたいとおもいます
- 日本語では「不老不死の霊薬」と訳され、言語のロゴカラーは紫です
※各言語・フレームワーク等のロゴの権利はそれぞれの作成者に帰属しています
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
ここが長いのでコーヒーでも飲みながら気長にお待ちください。
$ 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)
インストールすることができました。
プロジェクトの作成
$ mix new my_app
編集
-
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個という意味です。
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
$\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
を以下の通りに編集します
defp deps do
[
{:httpoison, "~> 1.8"},
{:jason, "~> 1.2"}
]
end
そうしてコマンドラインにて
$ mix deps.get
を実行して依存関係を解決します。
lib/my_app.ex
にitems/1
関数を追加します。
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")
...
たくさんの良い記事に巡り会えることでしょう
オススメの書籍
- プログラミングElixir(第2版) -- オーム社
- Elixir実践ガイド -- インプレス
Webアプリケーションを楽しむなら
IoTを楽しむなら
AIを楽しむなら
コミュニティ
-
elixir.jp Slack workspaceに参加してみてください
- マヂ、やさしい人ばっかりのコミュニティ
- あなたの困ったをきっと解決してくれるでしょう
- NervesJP Slack workspaceでは、NervesやIoTが好きな愉快なfolksたちがあなたの訪れを歓迎します
- たくさんのコミュニティがあります
- @kn339264 さん作の素敵な資料をご紹介します
- Elixirコミュニティ の歩き方〜国内オンライン編〜
@piacerex さん作
おわりに
$\huge{Know\ that\ .NET\ 💜\ Azure.}$
$\huge{Hello\ World}$
たくさんの良い記事に出会えることを楽しみにしています
明日は、@up-hashさんの「.NET6 が起動するまでのコードを追ってみよう」です。
お楽しみに〜
-
すんごいのにそのすごさを感じさせないすごさに、すごさを感じますという気持ちでいっぱいです ↩