<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: birdsea</title>
    <description>The latest articles on DEV Community by birdsea (@birdsea).</description>
    <link>https://dev.to/birdsea</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F359538%2F8eae80f4-c3c7-47ac-9507-c9c7a05c2c3c.jpeg</url>
      <title>DEV Community: birdsea</title>
      <link>https://dev.to/birdsea</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/birdsea"/>
    <language>en</language>
    <item>
      <title>Windows Terminalを使う</title>
      <dc:creator>birdsea</dc:creator>
      <pubDate>Sat, 01 Aug 2020 17:56:48 +0000</pubDate>
      <link>https://dev.to/birdsea/windows-terminal-236n</link>
      <guid>https://dev.to/birdsea/windows-terminal-236n</guid>
      <description>&lt;p&gt;Windowsでは今までCLI環境としてコマンドプロンプトとPowerShellが提供されてきましたが、新しいCLI環境として&lt;a href="https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701?activetab=pivot:overviewtab" rel="noopener noreferrer"&gt;Windows Terminal&lt;/a&gt;が5/20にリリースされました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fapqful20bvf21ws3ezj6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fapqful20bvf21ws3ezj6.png" alt="Windows Terminal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Windows Terminalは新しいシェルを提供するわけではなく、Windows Terminalから以下を起動できるようになっています。  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;コマンドプロンプト&lt;/li&gt;
&lt;li&gt;PowerShell&lt;/li&gt;
&lt;li&gt;WSL&lt;/li&gt;
&lt;li&gt;Azure Cloud Shell&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Windows Terminalではこれらを複数のタブやペインに分けて同時に操作が可能です。&lt;/p&gt;

&lt;p&gt;今後、CLIでパッケージを管理するWindows Package Managerもリリースされるそうなので、Windows環境でもCLIの開発ツールが大分そろってきたのではないでしょうか。&lt;/p&gt;




&lt;h3&gt;
  
  
  インストール
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://aka.ms/terminal" rel="noopener noreferrer"&gt;Microsoft Store&lt;/a&gt; からインストールできます。&lt;/p&gt;

&lt;p&gt;インストール直後は、PowerShellがデフォルトで起動するシンプルな感じです。設定をすることで見た目や操作性をカスタマイズできます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fblp02x5ea8yl8svl8jvd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fblp02x5ea8yl8svl8jvd.png" alt="Windows Terminal Default"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  設定を変更してカスタマイズする
&lt;/h3&gt;

&lt;p&gt;Window Terminalでは起動するシェルごとに設定できる動的プロファイルを設定することができます。&lt;/p&gt;

&lt;p&gt;メニューから&lt;code&gt;設定&lt;/code&gt;を選択すると&lt;code&gt;settings.json&lt;/code&gt;がエディタで開きます。&lt;br&gt;
このファイルに設定を書いていきます。&lt;/p&gt;

&lt;p&gt;設定は大まかに分けて以下があります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/global-settingshttps://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/global-settings" rel="noopener noreferrer"&gt;グローバル設定&lt;/a&gt; ・・・ Windows Terminal全体の設定&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/profile-settings" rel="noopener noreferrer"&gt;プロファイル設定&lt;/a&gt; ・・・ シェルごとの設定&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/color-schemes" rel="noopener noreferrer"&gt;配色&lt;/a&gt; ・・・ 独自の配色の作成&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/key-bindings" rel="noopener noreferrer"&gt;ショートカットキー&lt;/a&gt; ・・・ カスタムキーバインドの作成&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;細かい設定値についてはリンク先のドキュメントを参照してお好みにカスタマイズしてください。&lt;/p&gt;


&lt;h3&gt;
  
  
  複数のペインをTerminal起動時に開く
&lt;/h3&gt;

&lt;p&gt;Windows Terminalのプログラム本体&lt;code&gt;wt.exe&lt;/code&gt;は引数をサポートしています。&lt;br&gt;
これにより複数のタブやペインをターミナル起動時に立ち上げることができます。&lt;/p&gt;

&lt;p&gt;以下は3つのペインを立ち上げる場合のコマンドです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;start wt '-p "プロファイル名1" ; split-pane -p "プロファイル名2" ; split-pane -p "プロファイル名3"'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Powerline をセットアップする
&lt;/h3&gt;

&lt;p&gt;Powerline は、Gitの状態やアイコンをプロンプト表示して見やすくするツールです。&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fr458xshusg5o9z0cjvpw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fr458xshusg5o9z0cjvpw.png" alt="Power Line"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;事前準備&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Powerlineフォントをインストールする&lt;br&gt;
プロンプトにアイコン（Powerline グリフ）を表示するために、それに対応したフォントをインストールする必要があります。&lt;/p&gt;

&lt;p&gt;Windows Terminalではデフォルトで&lt;a href="https://docs.microsoft.com/ja-jp/windows/terminal/cascadia-code" rel="noopener noreferrer"&gt;Cascadia Mono&lt;/a&gt;が使われるようになっていますが、こちらはPowerlineグリフに対応していません。&lt;/p&gt;

&lt;p&gt;CascadiaにはPowerlineグリフを含むフォントもあるので、&lt;a href="https://github.com/microsoft/cascadia-code/releases" rel="noopener noreferrer"&gt;こちら&lt;/a&gt;を別途インストールして使うように設定します。&lt;br&gt;
インストール後、ターミナルの設定に以下を追加し、フォントを読み込みます。&lt;br&gt;
&lt;/p&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    "profiles":
    {
        "defaults":
        {
            ...

            "fontFace": "Cascadia Code PL",
        },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;PowerShellでのPowerlineの設定
PowerShell を使用して、以下の２つをインストールします。

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/dahlbyk/posh-git" rel="noopener noreferrer"&gt;Posh-Git&lt;/a&gt; ・・・ Git の状態情報の表示や補完を行う&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/JanDeDobbeleer/oh-my-posh" rel="noopener noreferrer"&gt;Oh-My-Posh&lt;/a&gt; ・・・ Powerlineのテーマを提供するライブラリ
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以下にモジュールがインストールされます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Users\ユーザ\Documents\WindowsPowerShell\Modules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;上記モジュールをターミナル（PowerShell）起動時に読み込むための設定を行い、ターミナルを起動するとPowerlineが表示されるようになります。&lt;/p&gt;

&lt;p&gt;ファイル：&lt;code&gt;C:\Users\ユーザ\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Import-Module posh-git
Import-Module oh-my-posh
Set-Theme &amp;lt;テーマ名&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  シェルごとに背景画像を設定する
&lt;/h3&gt;

&lt;p&gt;ターミナルで複数ペインを表示できるようになったので、それぞれを区別しやすいように背景を変えると良いです。&lt;/p&gt;

&lt;p&gt;画像は以下に公式のものが公開されています。&lt;br&gt;
気に入ったものをダウンロードして設定ファイルの各プロファイルに画像のパスを紐づけてあげれば、見た目をカスタマイズできます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Microsoft&lt;br&gt;
&lt;a href="https://wallpaperhub.app/" rel="noopener noreferrer"&gt;https://wallpaperhub.app/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ubuntu&lt;br&gt;
&lt;a href="https://design.ubuntu.com/downloads/" rel="noopener noreferrer"&gt;https://design.ubuntu.com/downloads/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;設定ファイル&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        "list":
        [
            {
                "guid": "{XXXXXXXX-XXXX-XXXX-XXxX-XXXXXXXXXXXX}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false,
                "backgroundImageStretchMode": "uniformToFill",
                "backgroundImage": &amp;lt;背景画像のパス&amp;gt;
            },
            {
                "guid": "{XXXXXXXX-XXXX-XXXX-XXxX-XXXXXXXXXXXX}",
                "name": "Ubuntu-18.04",
                "source": "Windows.Terminal.Wsl",
                "hidden": false,
                "backgroundImageStretchMode": "none",
                "backgroundImageAlignment": "bottomRight",
                "backgroundImage":&amp;lt;ロゴ画像のパス&amp;gt;,
                "useAcrylic": false,
            }
        ]
    },
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flfz6dz3fdsv1dzk1pktn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flfz6dz3fdsv1dzk1pktn.png" alt="Windows Terminal Customize"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Windows Terminalは7月から毎月アップデートされるようで、これからもっと使いやすく改善されていくと思われます。&lt;br&gt;&lt;br&gt;
Linuxのシェルにもこれで直接アクセスできますし、自分用にカスタマイズすることで、より楽しく開発ができるようになると思います。&lt;/p&gt;

</description>
    </item>
    <item>
      <title>GitHub Actionsで.NETプロジェクトのフォーマットチェックを行う。</title>
      <dc:creator>birdsea</dc:creator>
      <pubDate>Thu, 30 Apr 2020 16:21:04 +0000</pubDate>
      <link>https://dev.to/birdsea/github-actions-net-3kp5</link>
      <guid>https://dev.to/birdsea/github-actions-net-3kp5</guid>
      <description>&lt;p&gt;GitHubのCI/CD機能、GitHub Actionsが去年11月にリリースされました。&lt;/p&gt;

&lt;p&gt;GitHub ActionsはGitHubで公式に用意された環境のため、CircleCIやTravisCIなどの既存のCI/CDサービスがpush時にアクションするよりも広範囲にGitHubのイベントを取得してワークフローを実行することができます。&lt;/p&gt;

&lt;p&gt;また、GitHub内でのみ完結するため、GitHubの権限を外に出す必要もありません。&lt;br&gt;
その点もセキュリティ的には良いと思われます。&lt;/p&gt;

&lt;p&gt;まだリリースして時間が経っていないというのもあり、公式のテンプレートは色々用意されているもののサンプルの情報は少ないです。&lt;/p&gt;

&lt;p&gt;.NET Coreのテンプレートはビルドとテストを実行するものが用意されており、CIでは他にLintチェックやフォーマットチェック等もプッシュ時に行うように自動化していきたいところです。&lt;/p&gt;

&lt;p&gt;今回はまず.NETのビルドのテンプレートをもとにフォーマットチェックを行うようにしてみました。&lt;/p&gt;

&lt;p&gt;GitHub Actionsの書き方は以下の書籍（2020年4月時点で日本の書籍はこれしかなさそう）を参考に実装しています。&lt;br&gt;
&lt;a href="https://booth.pm/ja/items/1865906" alt="GitHub Actions 実践入門"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ePZH73Wm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ul5nbas1a8vcgxrv3e1e.jpg"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;ワークフローを作成する&lt;br&gt;
GitHubのリポジトリのトップ画面のタブから&lt;code&gt;Actions&lt;/code&gt;を選択します。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xi18e8q4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n3lw7x6wkxybdphw0q6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xi18e8q4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n3lw7x6wkxybdphw0q6v.png" alt="GitHub_Actions_1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;テンプレートから&lt;code&gt;.NET Core&lt;/code&gt;を選択します。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TDi2E724--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vk73bul260466ypvf01y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TDi2E724--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vk73bul260466ypvf01y.png" alt="GitHub_Actions_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;テンプレートで用意された内容は以下です。&lt;br&gt;
.NET Coreのバージョンは3.1です。&lt;br&gt;
GitHub Actionsの定義はymlファイルの形式で記述していきます。&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: .NET Core

on:
  push:
    branches: [ master ]
  # pull_request:　　プルリクエスト時の実施は不要なので削除します
    # branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.101
    - name: Install dependencies
      run: dotnet restore
    - name: Build
      run: dotnet build --configuration Release --no-restore
    - name: Test
      run: dotnet test --no-restore --verbosity normal
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;1行目の&lt;code&gt;name:&lt;/code&gt;はワークフローの名前です。&lt;br&gt;
その次の&lt;code&gt;on&lt;/code&gt;の後にワークフローを実行させたいGitHubのイベントを記述します。&lt;br&gt;
（ここではプルリクエスト時のワークフロー実行は不要なので削除しています）&lt;/p&gt;

&lt;p&gt;その後に、jobが複数定義でき、&lt;code&gt;build&lt;/code&gt;という名前のjobは、&lt;code&gt;runs-on:&lt;/code&gt;で指定されたOS環境ubuntu(Linux)で実行されます。（環境にはWindowsやMacを指定することもできます）&lt;/p&gt;

&lt;p&gt;1つのjobには複数のstepが指定でき、上記テンプレートでは5つのステップを実施しています。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;チェックアウト&lt;/li&gt;
&lt;li&gt;.NET Coreのセットアップ&lt;/li&gt;
&lt;li&gt;ライブラリのインストール&lt;/li&gt;
&lt;li&gt;ビルド&lt;/li&gt;
&lt;li&gt;テスト&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;これでmasterブランチにpushした際にビルドとテストが実行されます。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AE6qNQFW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uxbbj5rkrj6qp2k6fsr5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AE6qNQFW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uxbbj5rkrj6qp2k6fsr5.png" alt="GitHub_Actions_3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ワークフローにフォーマットチェックを追加する&lt;br&gt;
フォーマッタには、&lt;a href="https://github.com/dotnet/format"&gt;dotnet-format&lt;/a&gt;を使用します。&lt;br&gt;
dotnet-formatは&lt;a href="https://editorconfig.org"&gt;EditorConfig&lt;/a&gt;に対応してるフォーマッタです。&lt;br&gt;
.editorconfigを.NETプロジェクトにおけばその設定内容でフォーマットしてくれます。&lt;br&gt;
.editorconfigファイルがない場合はデフォルト設定でフォーマットします。&lt;/p&gt;

&lt;p&gt;以下をテンプレートに追加します。&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    - name: Install dotnet format
      run: dotnet tool install -g dotnet-format
    - name: format-check
      run: dotnet format --check --dry-run
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;dotnet-formatのインストールは&lt;code&gt;dotnet tool&lt;/code&gt;コマンドを使用します。&lt;br&gt;
フォーマットチェックは&lt;code&gt;dotnet format&lt;/code&gt;コマンドにオプションとして&lt;code&gt;--check&lt;/code&gt;と&lt;code&gt;--dry-run&lt;/code&gt;を付与します。&lt;/p&gt;

&lt;p&gt;オプションの意味はそれぞれ以下です。&lt;br&gt;
&lt;code&gt;--dry-run&lt;/code&gt;：フォーマットを実行しますが、結果を保存しません&lt;br&gt;
&lt;code&gt;--check&lt;/code&gt;　：フォーマットが発生した場合に0以外の値を返却します&lt;/p&gt;

&lt;p&gt;GitHub Actionではrunで実行したコマンドが0以外の返却値を返すとエラーになります。これにより、フォーマットされていないものがpushされたらエラーとなり、フォーマット漏れを防ぐことができます。&lt;/p&gt;

&lt;p&gt;最終的なyamlファイルは以下になりました。&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: .NET Core

on:
  push:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.101
    - name: Install dotnet format
      run: dotnet tool install -g dotnet-format
    - name: format-check
      run: dotnet format --check --dry-run
    - name: Install dependencies
      run: dotnet restore
    - name: Build
      run: dotnet build --configuration Release --no-restore
    - name: Test
      run: dotnet test --no-restore --verbosity normal
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>github</category>
      <category>devops</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Windows Subsystem for Linux 2でDocker for WSL2を使う</title>
      <dc:creator>birdsea</dc:creator>
      <pubDate>Sat, 04 Apr 2020 11:10:35 +0000</pubDate>
      <link>https://dev.to/birdsea/windows-subsystem-for-linux-2-docker-for-wsl2-3dpm</link>
      <guid>https://dev.to/birdsea/windows-subsystem-for-linux-2-docker-for-wsl2-3dpm</guid>
      <description>&lt;p&gt;Subsystem for Linux 2（&lt;a href="https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-index"&gt;WSL2&lt;/a&gt;）はWindowsからLinuxが使える機能です。&lt;/p&gt;

&lt;p&gt;2020年4月にリリースされるWindows10 2004から提供される予定です。&lt;br&gt;
もともと2017年にリリースされたWindows 10 Fall Creators UpdateでWSLが提供されてましたが、そちらは本物のLinuxカーネルを使っておらず、実行できるシステムコールが限られてました。&lt;/p&gt;

&lt;p&gt;2は本物のLinuxカーネルが動作します。&lt;br&gt;
Dockerも使えるようになります。&lt;br&gt;
これにより今後はWindowsでもLinuxを使用して開発が行いやすくなると思います。&lt;/p&gt;


&lt;h1&gt;
  
  
  WSL2のインストール
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-install"&gt;WSL 2 のインストール手順&lt;/a&gt;をもとに実施&lt;/p&gt;

&lt;p&gt;WSL2に必要な環境条件は以下&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows 10 builds 18917 or higher&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2020/03/20時点でWindows10 builds 18917はWindows Insider Program（slow or fast）に加入しないとアップデートできない。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Windows Insider Programに加入する&lt;/p&gt;

&lt;p&gt;Windowsメニューから&lt;code&gt;設定 &amp;gt; 更新とセキュリティ &amp;gt; Windows Insider Program&lt;/code&gt;より加入する。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WmTGtEu8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3w6b9m6s3v66cqsng8eb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WmTGtEu8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3w6b9m6s3v66cqsng8eb.png" alt="Windows_Insider_Program_1"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tapgZ9Lv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nslefsrofa0asm3wi8zg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tapgZ9Lv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nslefsrofa0asm3wi8zg.png" alt="Windows_Insider_Program_2"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B4FZMzva--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mvuw9x8o9rdsgkmbj88k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B4FZMzva--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mvuw9x8o9rdsgkmbj88k.png" alt="Windows_Insider_Program_3"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XAOt6e9_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gv5a9m8up9mr62e47cgl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XAOt6e9_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gv5a9m8up9mr62e47cgl.png" alt="Windows_Insider_Program_4"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hTJR7lb---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4gox3eppkl9dtd1dnd9h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hTJR7lb---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4gox3eppkl9dtd1dnd9h.png" alt="Windows_Insider_Program_5"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rtFnA4Ev--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bt2nu017sywj35scwg0o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rtFnA4Ev--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bt2nu017sywj35scwg0o.png" alt="Windows_Insider_Program_6"&gt;&lt;/a&gt;&lt;br&gt;
[スロー]か[ファスト]を選択&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hNxbhQbg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kb41arj3kyoyo6nzvrrj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hNxbhQbg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kb41arj3kyoyo6nzvrrj.png" alt="Windows_Insider_Program_7"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--95aonKDF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/667gsxhjphp1dnfd95q2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--95aonKDF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/667gsxhjphp1dnfd95q2.png" alt="Windows_Insider_Program_8"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y31_54Jr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mxz13v1dcd6plmdf0ne5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y31_54Jr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mxz13v1dcd6plmdf0ne5.png" alt="Windows_Insider_Program_9"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows Updateを実施する&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WSL2を有効にする&lt;br&gt;&lt;br&gt;
&lt;code&gt;設定 &amp;gt; アプリ &amp;gt; アプリと機能 &amp;gt; オプション&lt;/code&gt;から「Windowsのその他の機能」リンクをクリックする。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zP25GbPC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hnxb5eytc9cxrq0gd2n2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zP25GbPC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hnxb5eytc9cxrq0gd2n2.png" alt="Activate WSL2_1"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M6psd1N7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ll8etm6hdspgw48st0gh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M6psd1N7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ll8etm6hdspgw48st0gh.png" alt="Activate WSL2_2"&gt;&lt;/a&gt;&lt;br&gt;
以下のチェックをONにする。&lt;br&gt;
    - Linux 用 Windows  サブシステム&lt;br&gt;
    - 仮想マシン プラットフォーム&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eeWnOo7J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gkxbrs83no1b2fy6488s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eeWnOo7J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gkxbrs83no1b2fy6488s.png" alt="Activate WSL2_3"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vUqHK2j8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0i11hrh8yvh6zvxl87hx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vUqHK2j8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0i11hrh8yvh6zvxl87hx.png" alt="Activate WSL2_4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PowerShellを管理者権限で起動し、以下を実行しても実施できる。&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
&amp;gt; dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;その後、再起動する。&lt;/p&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Microsoft StoreからLinuxをインストールする&lt;/p&gt;

&lt;p&gt;後述のDocker Desktop for WSL 2が使えるのは&lt;a href="https://www.microsoft.com/ja-jp/p/ubuntu-1804-lts/9n9tngvndl3q?activetab=pivot:overviewtab"&gt;Ubuntu 18.04 LTS&lt;/a&gt;のみの模様。（2020/03/20時点 Storeには「Ubuntu」もあるが、そちらは対応していない）&lt;/p&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Ubuntu 18.04 LTSをダウンロードしたら起動する&lt;/p&gt;

&lt;p&gt;起動後にインストールが始まり、ユーザ名とパスワードを入力し、ユーザを作成する。&lt;/p&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;PowerShellを起動する&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# インストールしたディストリビューションの一覧を表示する
&amp;gt; wsl -l
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu-18.04 (既定)

# WSLの状態とバージョンを確認する（VERSIONが1はWSLということです）
&amp;gt; wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         1

# Ubuntu-18.04をWSL2用に変換する
&amp;gt; wsl --set-version Ubuntu-18.04 2

# WSL2を標準設定とする
&amp;gt; wsl --set-default-version 2
WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください。
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;上記のメッセージの通り、&lt;a href="https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel"&gt;WSL 2 Linux カーネルの更新&lt;/a&gt;へアクセスし、更新プログラムをインストールする。インストール後、以下を実行する。&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# WSL2を標準設定とする
&amp;gt; wsl --set-default-version 2

# WSLの状態とバージョンを確認する
&amp;gt; wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         2
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Ubuntuを起動／停止する&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 起動する
&amp;gt; wsl -d Ubuntu-18.04
To run a command as administrator (user "root"), use "sudo &amp;lt;command&amp;gt;".
See "man sudo_root" for details.

# フォルダ階層は以下になる
$ /home/user/ ← 登録したLinuxユーザのhome
  /mnt/c ← WindowsのCドライブ
  /mnt/d ← WindowsのDドライブ

# Windowsに戻る
$ exit
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;これでWindowsからLinuxが使えるようなりました。&lt;/p&gt;

&lt;p&gt;WSLはWindowsからシームレスにシェルを使え、VirtualBoxやVMWareのようにOSが起動する時間を待つ必要もありません。&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;a href="https://docs.docker.com/docker-for-windows/wsl/"&gt;Docker Desktop for Windows&lt;/a&gt;をインストールする
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://hub.docker.com/editions/community/docker-ce-desktop-windows"&gt;Docker Desktop for Windows&lt;/a&gt;をインストールする&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;メニューバーにDockerのアイコンが表示されるので、[Settings]を選択する&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AEBFUwx4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qawup6gsl7op3odewufm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AEBFUwx4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qawup6gsl7op3odewufm.png" alt="Docker_Desktop_for_Windows_1"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K3P2GB4o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mz9ncw35lnkn6oaqzvbc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K3P2GB4o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mz9ncw35lnkn6oaqzvbc.png" alt="Docker_Desktop_for_Windows_2"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Settings画面が表示されるので、以下を確認する&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dockerのステータスがrunningになっていること&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Use the WSL 2 based engine&lt;/code&gt;のチェックボックスがONになっていること
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R_pgyHB8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7km5eiof0xzs1a6g3qmg.png" alt="Docker_Desktop_for_Windows_3"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;また、&lt;code&gt;Resources &amp;gt; WSL INTEGRATION&lt;/code&gt;を選択し、&lt;code&gt;Enable integration with my default WSL distro&lt;/code&gt;のチェックボックスがONになっていることを確認する&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jbjLUsjZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lt6xcof5g5e1ypgc76tq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jbjLUsjZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lt6xcof5g5e1ypgc76tq.png" alt="Docker_Desktop_for_Windows_4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DockerがWSL2 based engineで起動されていれば、Dockerコマンドを実施すると、上記でインストールしたWSL2のUbuntuにDockerコンテナが作成されるようになる&lt;/p&gt;

&lt;p&gt;PorwerShellを起動し、Dockerコマンドを実行することができる。&lt;br&gt;
Ubuntuのほうでもdockerコマンドの実行ができる。&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# powershellでdockerコマンドを実行
&amp;gt; docker run hello-world

...

Hello from Docker!
This message shows that your installation appears to be working correctly.

&amp;gt; docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
0629bbd84b50        hello-world         "/hello"            22 seconds ago      Exited (0) 20 seconds ago                       mystifying_almeida

# WSL2に切り替える
&amp;gt; wsl -d Ubuntu-18.04

# Ubuntuでdockerコマンドを実行
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
0629bbd84b50        hello-world         "/hello"            22 seconds ago      Exited (0) 20 seconds ago                       mystifying_almeida
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;WindowsとUbuntuでコンテナが共有されていることが確認できる。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Docker Desktop for WSL 2を使うと、このようにWindowsからDockerコマンドを実行して、LinuxのDockerコンテナを操作することができます。&lt;/p&gt;




&lt;p&gt;2020/04/11追記&lt;br&gt;
&lt;del&gt;DockerComposeは、PowerShellからは実行できないようです。（実行してもLinuxのコンテナとならない）。Linuxのほうで実行すればWindowsと共有できそうです。&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;2020/05/11追記&lt;br&gt;
Docker Desktop For Windowsの（Edge版：バーション2.3.0.1）で、WindowsからDockerComposeできるようになりました。&lt;/p&gt;

&lt;p&gt;こちらのバージョンではWindows10 Home Editionでも動作するようです。&lt;br&gt;
Docker Desktop for Winodwsのバージョンアップに伴い本記事の内容を修正しました。&lt;/p&gt;

&lt;p&gt;2021/03/07追記&lt;br&gt;
Dockerのバージョンアップに伴いStable版に記述を修正しました。&lt;/p&gt;

</description>
      <category>docker</category>
    </item>
  </channel>
</rss>
