週刊プリザンター第46,47合併号

こんにちは。IISの田口です。

先週は作者急病(?)のため、休刊してしまいました。
楽しみにされていた読者の皆様、大変申し訳ございません。 f:id:imageinformationsystem:20191115150243p:plain:w300
もうすぐ節目の50号だったのですが、ついに落としてしまいました・・・・ちょっと悔しいです。

ですので、今週は近況を色々ご紹介します。

我が社のスーパーなエンジニアが八面六臂の大活躍!

我が社が誇るスーパーなエンジニアが各方面で登壇しています。
とくに会計freee C# SDK導入はいち早く公開した記事だと思いますので、ご興味ある方は是非ご覧になってください。

imageinformationsystem.hatenablog.com

imageinformationsystem.hatenablog.com

imageinformationsystem.hatenablog.com

imageinformationsystem.hatenablog.com

imageinformationsystem.hatenablog.com

プリザンター 東京都ベンチャー技術特別賞を受賞

先日プリザンターが2019年世界発信コンペティションにおいて、東京都ベンチャー技術特別賞を受賞いたしました!!

おめでとうございます!!!
インプリムさんに負けないようにIISも頑張っていきたいと思います。

さて、
週刊プリザンター第46,47合併号です。
10/28~11/10を追いかけます。

10/28:サイトトップのサイト表示順を指定したユーザの表示順で固定化する機能を追加。(0.50.117)

テーブルやフォルダの並び順ですが、現状は以下の仕様となっています。

  • サイトトップ:初回ログイン時はサイトIDの昇順。ユーザが意図的に並び順を変えるとユーザ毎に並び順を保持する。
  • あるフォルダ配下:任意のユーザが最後に並べ変えた順序

そのため、管理者がサイトトップに複数のテーブルを作り、並び順を適宜変更した状態を正式なものとして公開しても、各ユーザがログインするとサイトIDの昇順で表示し、管理者が意図した並び順では表示しません。
サイトトップに作成したフォルダ配下であれば、各ユーザでも管理者が意図した並び順でテーブルやフォルダを表示されます。 (とはいえ、あるユーザが並び順を変えてしまうと全てのユーザに対して並び順が変わった状態になりますが)

サイトトップに作成したテーブルやフォルダを管理者の意図通りの並び順で表示させたいケースはありますよね。
そこで今回、サイトトップの並び順を固定化(ドラックを抑止)する機能が追加になりました。
追加になった機能を有効化すると、サイトトップの並び順を変更できるのは

  • 設定ファイルで指定した1ユーザ
  • 特権ユーザ

となります。

設定ファイルは新しく追加された「Site.json」となります。
f:id:imageinformationsystem:20191115154258p:plain
このファイルの「TopOrderBy」ではユーザID(ログインIDではありません)を指定し、指定したユーザ(と特権ユーザ)が並び順を変更できます。
指定は1ユーザのみです。配列での複数設定には対応していないので注意が必要です。

なお、デフォルト("TopOrderBy":0)の状態はユーザを指定しないという扱いになり、サイトトップの並び順が固定化されない=サイトIDの昇順で並ぶことになります。

また、ドラッグが抑止されるので、並び順の固定化と合わせて「リンクの作成」が出来なくなりますので、注意してください。

10/28:一覧画面の検索ウィンドウにおけるor検索機能を追加。(0.50.117)

一覧画面の「検索」ではキーワードを半角スペースで区切って複数入力することによるAND検索となりますが、今回『A or B』と入力することでor検索が出来るようになりました。

具体的な例になります。
「ネットワーク」で検索:7件
f:id:imageinformationsystem:20191115155119p:plain 「サーバ」で検索:4件
f:id:imageinformationsystem:20191115155126p:plain 「ネットワーク サーバ」で検索:1件 f:id:imageinformationsystem:20191115155132p:plain 「ネットワーク or サーバ」で検索:10件 f:id:imageinformationsystem:20191115155154p:plain

11/3:サイトパッケージ インポート/エクスポート機能の追加。(0.50.118)

これはうれしい機能です!
現状もサイトの「コピー」で作ったテーブルを複製することが出来ましたが、以下の制限がありました。

  • サイト(テーブル、フォルダ)毎にコピーする必要があるので、あるサイト配下の全テーブルなどのコピーが一括で出来ない。
  • データはコピーされない(テーブル毎にエクスポートする必要がある)

今回追加された機能では問題が全て解決できます!
主な機能は以下の通りです。

  • サイトの管理情報をjson形式でエクスポート出来る。
  • エクスポートしたjsonファイルをインポートすることで任意のサイト配下に複製できる。
  • サイトの管理情報と合わせてデータもエクスポート/インポート可能。
  • サイトの管理情報と合わせてアクセス権限もエクスポート/インポート可能。

まずはエクスポートです。
あるフォルダ(またはテーブル)の「管理」メニューに追加された「サイトパッケージのエクスポート」をクリックすると
f:id:imageinformationsystem:20191115155245p:plain:w300 f:id:imageinformationsystem:20191115155255p:plain:w300

以下の「サイトパッケージのエクスポート」ダイアログが表示します。
f:id:imageinformationsystem:20191115155231p:plain

《内容説明》
現在の設定/選択肢一覧

メニューをクリックしたフォルダ配下のサイト構成が表示します。
不要なサイトは選択後、「無効化」ボタンをクリックすることで右の選択肢一覧に移動します。
戻す場合は選択肢一覧で選択後、「有効化」をクリックします。
デフォルトはフォルダ配下のサイト全てが現在の設定に表示します。(フォルダ配下全てのサイトがエクスポート対象)

データを含める/含めない

現在の設定でテーブルを選択後、「データを含める」をクリックするとそのテーブルのデータもエクスポート対象とします。
デフォルトは全て「データを含めない」です。

インデント機能を使う

jsonファイルが構造に合わせてインデント、改行された状態でエクスポートされます。

サイト/レコード/項目のアクセス制御を含める

それぞれのアクセス制御の設定をエクスポート対象とします。

エクスポートボタンをクリックすることで、jsonファイルをダウンロードします。
ダウンロードしたjsonファイルはこんな感じです。("インデント機能を使う"でエクスポート)
f:id:imageinformationsystem:20191115155348p:plain

次にインポートです。
あるフォルダ(サイトトップも可)の「管理」に追加された「サイトパッケージのインポート」をクリックすると
f:id:imageinformationsystem:20191115155403p:plain 以下の「サイトパッケージのインポート」ダイアログが表示します。
f:id:imageinformationsystem:20191115155415p:plain

《内容説明》
サイトパッケージ

インポートするjsonファイルを選択します。

データを含める

インポートするjsonファイル内にデータを含んでいる場合で、そのデータも一緒にインポートしたい場合はチェックONにします。

サイト/レコード/項目のアクセス制御を含める

インポートするjsonファイル内にそれぞれのアクセス制御情報を含んでいる場合で、そのアクセス制御情報も一緒にインポートしたい場合はチェックONにします。

インポートボタンをクリックすると、正常終了メッセージが表示し、取り込んだサイトが表示します。 f:id:imageinformationsystem:20191115155435p:plain

その他

不具合解消やソースコードリファクタリングなどで2個のアップデートが実施されています。

バージョンアップに追いつけ!

プリザンターは日々進化しつづけて、新しい機能が追加されています。 皆さんの参考になるよう毎週紹介していきたいと思いますので、ご期待ください!

「+読者になる」のお願い

プリザンターの他、C#によるWebアプリ開発IISの得意とする領域です。今後もプリザンターの機能、拡張スクリプト、ページ追加の研究を進めて行くつもりです。関心のある方、よかったらブログ上部の「+読者になる」をクリックをお願いします!

最後に  

IISはプリザンターのスクリプトによるカスタマイズの経験が豊富です。
プリザンター導入に際してカスタマイズをご検討されている方は是非ご相談ください!
またご不明点やご質問などございましたら弊社までお問い合わせください。

Cross-Platform 開発 シリーズ #1 イベントで当社エンジニアが登壇しました

IISの石崎です。
先日開催されたCross-Platform 開発 シリーズ #1 イベントイベントでIISの石崎が登壇しました。

登壇の様子

今回写真はありません。
クロスプラットフォーム開発をテーマとしたコミュニティということで、登壇テーマはプログラミング初学者向に向けた Xamarin の紹介でした。

IISではメンバーの発表や登壇を推奨しています

IISでは社員の登壇など技術コミュニティへの貢献を推奨しています。IIS主催のイベントも行っていますので是非遊びに来てくださ

.NET Core 3.0 リリース記念 C# Tokyo 2019/10イベントで当社エンジニアが登壇しました

IISの石崎です。
先日開催された.NET Core 3.0 リリース記念 C# Tokyo 2019/10イベントでIISの石崎が登壇しました。

登壇の様子

今回写真はありません。
登壇テーマは C#8 でした。時代は C#8、C#8 の使える .NET Core 3 を今すぐダウンロード! というまとめをしました。

IISではメンバーの発表や登壇を推奨しています

IISではC#、.NETによるアプリ開発に力を入れています。C#、.NETに関心のある方、ぜひ一度IISへ遊びに来てください。 また、IISでは社員の登壇など技術コミュニティへの貢献を推奨しています。IIS主催のイベントも多数行っていますので是非遊びに来てください。

DevRel/Community #5イベントで当社エンジニアがLTしました

IISの石崎です。
先日開催されたDevRel/Community #5イベントイベントでIISの石崎がLTしました。

当日に枠があるということで急遽組み立てた話であまり深い考察に基づくものではありませんでしたが、一つの事例にはなるかと思います。
テーマは、とあるプロダクトのWeb APIの存在を知り、試してみたいと思いつつ1年間もの間何もしていなかったが当社エンジニア(IISの石崎です)がSDKが公開されたらすぐに試してみるという行動にでたという話です。
SDKの制作・公開、コミュニティイベントの開催ははデベロッパーの行動を引き出す可能性がありそうです?

IISではメンバーの発表や登壇を推奨しています

IISではメンバーのイベントでの発表や登壇を推奨しています。発表や登壇に関心のある方、是非一度IISへ遊びにいらしてください。

freee Open Guild #06 freee SDK 特集イベントで当社エンジニアがLTしました

IISの石崎です。
先日開催されたfreee Open Guild #06 freee SDK 特集イベントイベントでIISの石崎がLTしました。

テーマは、プリザンターに会計freee C# SDKを導入してみた話で、先日のこのブログの 記事 の内容です。
詳しい内容は、次の記事を読んでください。

会計freeeとプリザンターの連携で高いシナジーを生み出せると確認しています。今後も色々試していきたいと考えています。

IISではメンバーの発表や登壇を推奨しています

IISではメンバーのイベントでの発表や登壇を推奨しています。発表や登壇に関心のある方、是非一度IISへ遊びにいらしてください。

プリザンターに会計freee C# SDKを導入してみた

皆さんお待たせしました!

先日2019/10/16(水)に提供開始の「会計freee C# SDK」をプリザンターに導入してみました。

2019/11/06 17:00 記事訂正:記事公開時SDK のリリース日が2018年になっておりました。正しくは2019年となります。記事を訂正いたしました。

今回はIIS独自の技術検証の記事です。アドオンプロダクトの発表というわけではありません。またIIS独自の検証のためプリザンターのバージョンアップで動作しなくなる可能性があることをご理解ください。

なぜfreeeとプリザンターなのか

どちらも中小規模の組織に対して強みのあるプロダクトなのではないかと(筆者が)思っています。そのため連携できると嬉しい方が多いのではないかと(筆者が)思っています。

そして何より次の表を見てください。

freee C# SDK プリザンターLinux
動作環境 .NET Core 2.2 .NET Core 2.2
フレームワーク ASP.NET Core MVC ASP.NET Core MVC

完全に一致しています。そしてプリザンターはGitHubソースコードが公開されており、改変が可能です。

※ちなみにLinux版とは.NET Core版(.NET CoreはLinuxでも動作する)の事なので、Windowsでも試せます。

これは試すしかありませんよね?

注意点

  • 会計freee C# SDKは素晴らしいプロダクトです。今回出てくるSDKの案内通りでない点は、プリザンターという既存のプロダクトに導入するために必要だった変更点です。
  • SDKの案内は新規に作成したプロジェクトに導入するもので、既存のプロジェクトへ導入ではないので読み替えが必要なことは当然です。どちらかが何かが悪いということではありません。
  • プリザンターは4年前にGitHubに公開されたプロダクトです。年単位で継続しているプロダクトに負債がないわけがありません。
  • プリザンターLinux版は.NET Frameworkでも.NET Coreでもどちらでも使えるようにしているという珍しい形態になっています。通常の.NET Coreアプリとは違ったところが出てきます。

今回の記事はプリザンターというプロダクト固有の事情が多いですが、どんなプロダクトでも多かれ少なかれ事情も負債もあるはずです。そのような事情や負債を乗り越えた一例としてヒントとなれば幸いです。

概要

「会計freee C# SDK」のReadmeのSDKの導入方法をなぞって、プリザンターに導入してみました。
繰り返しになりますが、新規プロジェクトへの導入方法を既存プロジェクトに適用するので前提が違っている点をご承知ください。

できるようにしたこと

プリザンターで次の事ができるようにしました。

  • freeeのアカウントでログインできるようにした (既に独自のログイン機能を持っている上に)
  • freeeユーザー情報を表示するページの追加

SDK導入方法の内容そのままです。

~~~やってみよう!~~~

プリザンターのデバッグ実行

プリザンターはGitHubからソースコードをダウンロードしても実行するのが難しいのが特徴の一つです。次の記事を参考にまずデバッグ実行できるようにします。

また、導入方法はVisual Studio Codeを使用していますが、今回はVisual Studioを使ってみました(筆者がプリザンターをデバッグする際に普段からVisual Studioを使っているため)。
Visual Studioでそのままデバッグ実行するとIIS Express上で実行されてしまいます。別にそれでも何とかなるのですが、実行環境を導入方法と合わせるためにデバッグ時に次の図のようにしてアプリケーション名を選択します。
f:id:imageinformationsystem:20191105180733p:plain
(ここではSDKのサンプル、BasicWebAppを選択しています)

GUIDの生成

導入にGUIDを作成する手順があります。どのようにGUIDを作るかは自由ですが、Visual StudioにはGUID作成機能があるのでその機能で作りました。
f:id:imageinformationsystem:20191105180836p:plain

SDKの追加

折角Visual Studioを使っているのでGUIでNuGetパッケージをインストールしてみました。
検索すると、バージョン番号に-Previewとついていないバージョンが見つかったのでこれをインストールしました。

<ItemGroup>
  <!-- [2] ここから -->
  <PackageReference Include="Freee.Accounting.Sdk" Version="1.0.0" />
  <PackageReference Include="Freee.OAuth.AspNetCore" Version="1.0.0" />
  <!-- [2] ここまでを追加 -->

f:id:imageinformationsystem:20191105181137p:plain

認証処理の書き換え

プリザンター自身が認証機能を持つため既存の機能とSDKとが混ざったコードになります。フィールド Configuration の大文字小文字が違っているなど、間違いさがしレベルのアドリブが必要です。

※上:導入方法のコード 下:実際に書いたコード

Configurationとconfigurationの違い

options.ClientId = Configuration["Freee:ClientId"];
options.ClientSecret = Configuration["Freee:ClientSecret"];
options.SaveTokens = true;
options.ClientId = configuration["Freee:ClientId"];
options.ClientSecret = configuration["Freee:ClientSecret"];
options.SaveTokens = true;

その他微妙な違い

services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = FreeeAuthenticationDefaults.AuthenticationScheme;
        })
        .AddCookie()
        .AddFreee(options =>
        {
            options.ClientId = Configuration["Freee:ClientId"];
            options.ClientSecret = Configuration["Freee:ClientSecret"];
            options.SaveTokens = true;
        });
services.AddAuthentication(
    options =>
    {
        options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = FreeeAuthenticationDefaults.AuthenticationScheme;
    }
    ).AddCookie(o => o.LoginPath = new PathString("/users/login"))
.AddFreee(options =>
        {
            options.ClientId = configuration["Freee:ClientId"];
            options.ClientSecret = configuration["Freee:ClientSecret"];
            options.SaveTokens = true;
        });

実行時のURL

ASP.NET Core MVCは何の設定もせずコマンドから実行すると https://localhost:5001 で実行されます。プリザンターのソースコードVisual Studioで実行すると、違うポートで実行されるので設定を書き換えます。

Implem.Pleasanter.NetCore/Properties/launchSettings.json の Implem.Pleasanter.NetCore の applicationUrl を https://localhost:5001;http://localhost:5000 に変更します。

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:65195/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "Implem.Pleasanter.NetCore": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "https://localhost:5001;http://localhost:5000"
    }
  }
}

Views\Shared_LoginPartial.cshtmlを新規作成

.cshtml。ビュー(Razor)の作成です。プリザンターは前述の

という背景のため.NET Framework時代のRazorが使われています。文法が違っていますので、_LoginPartial.cshtmlは次のようになります。

<ul class="navbar-nav">
    @if (User.Identity.IsAuthenticated)
    {
        <li class="nav-item">
            <a class="nav-link text-dark" href="@Url.Content("~/Account/Me")">Hello @User.Identity.Name!</a>
        </li>
        <li class="nav-item">
            <a class="nav-link text-dark" href="@Url.Content("~/Users/Logout")">Logout</a>
        </li>
    }
    else
    {
        <li class="nav-item">
            <a class="nav-link text-dark" href="@Url.Content("~/Account/Login")">Login</a>
        </li>
    }
</ul>

Views\Shared_Layout.cshtmlに_LoginPartialパーシャルを追加

前項同様、構文が変わります。

<!DOCTYPE html>
<!-- [1] ここから -->
@Html.Partial("_LoginPartial")
<!-- [1] ここまで追加 -->
@RenderBody()

これで生まれるHTMLソースは、HTMLとして正しくないものになります。しかしプリザンターでは生まれるHTMLソースが非常に困難であることと、これでもブラウザが良い感じに解釈してくれるので今回はこれで実装しました。

freeeのアカウントで名前を設定しておく

プリザンターの都合で、SDKを導入して動かす前にアカウントの名前を設定しておく必要があります。名前が設定されているかはSDKのサンプルBasicWebAppでも確認できます。名前が設定されていれば、「Hello 名前!」と表示されますが、空白のままだと「Hello !」となっていると思います。

認証されると、freeeユーザーの名前が@User.Identity.Nameに設定されます。そしてこの@User.Identity.Nameがプリザンターの内部処理ではログインユーザーのIDとして扱われます。

つまり、@User.Identity.Nameが空白だとプリザンター上では未ログインとして扱われてしまいます。

名前でPleasanterのユーザーを作っておく

プリザンターでは@User.Identity.NameをログインユーザIDとして扱うことを前項で説明しました。実はさらにこのログインユーザーIDでプリザンターのユーザーデータを探して、そこから権限の情報を取得します。
この時に権限の情報を取得できなくても未ログイン扱いになります。

そこで、今回のように外部の認証を利用する際にも同じ名前のユーザーを事前にプリザンター上に作っておく必要があります。
※これは他のシステムで認証する場合でも基本的に同様です。

ログイン成功

ここまでの手順で、freeeのアカウントでプリザンターにログインできるようになりました!
f:id:imageinformationsystem:20191105182227p:plain
f:id:imageinformationsystem:20191105182240p:plain

簡単ですね。

アカウント情報を表示 AccountController、Views\Account\Me.cshtml を新規作成

導入方法から特別変える点はありません。Me.cshtml も変更しなくてOKです。
f:id:imageinformationsystem:20191105182347p:plain

簡単に組み込める

素晴らしい「会計freee C# SDK」によって、簡単に会計freeeとプリザンターが連携できました。会計freeeとプリザンター、組み合わせることで高いシナジーが得られると思います(個人の感想です)。

ぜひ検討してみてください。そして...

プリザンター導入に際してカスタマイズをご検討されている方は是非ご相談ください!

IISはプリザンターのカスタマイズの経験が豊富です。プリザンター導入に際してカスタマイズをご検討されている方は是非ご相談ください! またご不明点やご質問などございましたら弊社までお問い合わせください。

週刊プリザンター第45号

こんにちは。IISの田口です。
金木犀が咲く季節になりました。(この記事書いている時はもう終わりましたが)
家にも金木犀が植えてあるのですが、花が散って車が金木犀だらけになりました。洗車しなくちゃ・・・

週刊プリザンター第45号です。
10/21~10/27を追いかけます。

今週は・・・

大きな機能追加がなく、不具合解消やソースコードリファクタリングなどで1個のアップデートが実施されています。

バージョンアップに追いつけ!

プリザンターは日々進化しつづけて、新しい機能が追加されています。 皆さんの参考になるよう毎週紹介していきたいと思いますので、ご期待ください!

「+読者になる」のお願い

プリザンターの他、C#によるWebアプリ開発IISの得意とする領域です。今後もプリザンターの機能、拡張スクリプト、ページ追加の研究を進めて行くつもりです。関心のある方、よかったらブログ上部の「+読者になる」をクリックをお願いします!

最後に  

IISはプリザンターのスクリプトによるカスタマイズの経験が豊富です。
プリザンター導入に際してカスタマイズをご検討されている方は是非ご相談ください!
またご不明点やご質問などございましたら弊社までお問い合わせください。