Pleasanterのコードスタイル 空白行編

Pleasanter開発チームのいしざきです。

PleasanterはオープンソースのWebデータベースでGitHubにソースが公開されています。

今回はPleasanterへプルリクエスト(PR)する際に気にしたいコードスタイル 空白行編です。

コードの上で空白行というと何を思い浮かべるでしょうか? 詳し方ならリーダブルコード

コードを「段落」に分割する

の節を思い浮かべるかもしれません。リーダブルコードは素晴らしい指針です。しかし世界の全てのプロジェクトが同じルールを採用しているわけではありません。

よく見るスタイルとPleasanterの比較

次の例はよく見るコードルールで書かれたC#クラスです。このクラスがPleasanterではどうなるか見てみましょう。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace SampleApp
{
    public class PopularStyleClass
    {
        public async Task<string> GetDataFromWeb()
        {
            // Create HttpClient
            var httpClient = CreateHttpClient();
            httpClient.Timeout = new TimeSpan(TimeSpan.TicksPerSecond * 20L);

            // Request Data
            var contentData = "<contentData>";
            var requestContent = new StringContent(contentData);

            // Post
            var responceMessage = 
                await httpClient.PostAsync("<requestUrl>", requestContent);

            // Responce Data
            var responceContent = responceMessage.Content;
            var responceData = await responceContent.ReadAsStringAsync();
            return responceData;
        }

        HttpClient CreateHttpClient()
            => new HttpClient();
    }
}

Pleasanterでは次のようになります。
(※筆者も勉強中のため100%正しいPleasanterのスタイルではないかもしれません。勉強のためにこの記事を書いている面もあります)

using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace SampleApp
{
    public static class PleasanterStyleClass
    {
        public static async Task<string> GetDataFromWeb()
        {
            var hc = CreateHttpClient();
            hc.Timeout = new TimeSpan(ticks: TimeSpan.TicksPerSecond * 20L);
            return await (await hc
                .PostAsync(
                    requestUri: "<requestUrl>",
                    content: new StringContent("<contentData>")))
                .Content
                .ReadAsStringAsync();
        }

        private static HttpClient CreateHttpClient()
        {
            return new HttpClient();
        }
    }
}

Pleasanterの空白行

Pleasanterの空白行はクラスのメンバーとメンバーの間だけです。

usingとnamespaceの間について

よく見るスタイルではusingとnamespaceの間に空白行があります。

using System.Threading.Tasks;

namespace SampleApp

Pleasanterではusingとnamespaceの間に空白はありません。

using System.Threading.Tasks;
namespace SampleApp

メソッド内の段落について

よく見るスタイルではメソッド内に段落の空白行があります。

// Create HttpClient
var httpClient = CreateHttpClient();
httpClient.Timeout = new TimeSpan(TimeSpan.TicksPerSecond * 20L);

// Request Data
var contentData = "<contentData>";

Pleasanterではメソッド内に段落の空白はありません。

var hc = CreateHttpClient();
hc.Timeout = new TimeSpan(ticks: TimeSpan.TicksPerSecond * 20L);
return await (await hc

メソッドとメソッドの間

Pleasanterでは空白はクラスのメンバーとメンバーの間だけです。

        .ReadAsStringAsync();
}

private static HttpClient CreateHttpClient()

PRのお願い

PleasanterへのPRいただける際には空白はメンバーとメンバーの間だけでお願いします。
また、メンバーとメンバーの間以外の空白行やメンバーとメンバーの間に空白行のない箇所を見つけた方、ぜひ修正してPRお願いします。

その他のコードスタイル

今回のコード例だけでも空白行以外にも様々なコードルールが読み取れますが、Pleasanterは日々進化中でPR時のお願い事項などの整備は取り組み中の状態です。

不定期になりますが今後も少しずつこちらのブログで紹介してまいります。今後PRするかもしれないという方、継続してチェックしていただけると嬉しいです。

プリザンターAPIの仕様見直しについて

開発チームの小林です。 今回、プリザンターのAPIの仕様を見直し、バージョン 0.49.57.x 以降にて新方式のAPIが利用可能となっております。 なお、旧バージョンのAPIについても継続してご利用可能です。

API機能:レコード操作 · Implem/Implem.Pleasanter Wiki · GitHub

変更点

旧バージョンからの変更点は、以下の3点です

URL

リクエストURLを以下のように変更しました。

Content-Type

リクエストヘッダに指定するContent-Typeを'application/json'に変更

  • 変更前: 'application/x-www-form-urlencoded'
  • 変更後: 'application/json'

エラーレスポンス時のステータスコード

旧バージョンでは、エラー時でもステータスコード200(OK)を返却し、レスポンスBodyのJSON内にエラーのステータスコードを格納していましたが、 エラーの内容に一致するステータスコードを設定するように変更いたしました。

  • 変更前:
Status Code : 200 
Body: 
{
      "Id":0,
      "StatusCode":500,
       "Message":"この操作を行うための権限がありません。"
}
  • 変更後:
Status Code : 500
Body: 
{
      "Id":0,
      "StatusCode":500,
       "Message":"この操作を行うための権限がありません。"
}

上記の変更点以外、リクエストおよび、レスポンスのJSONの形式等に変更はありません。

CustomDefinitionsによるPleasanterの定義情報の書き換え

開発チームの内田です。 プリザンターのロゴおよびノベルティが出来上がって、開発チームもテンションがあがってきました。

 

 

今日はプリザンターの定義情報(データベースのカラム情報など)を設定ファイルCustomDefinitionsで置き換える方法についてです。プリザンターの設定ファイルは以下にExcel形式で格納されています。

\Pleasanter\Implem.Pleasanter\App_Data\Definitions

 

上記の内容は、CustomDefinitionsのJsonファイルで特定の項目の値をオーバーライドすることが可能です。たとえば「記録テーブル」の規定の表示名「分類A」を「項目A」に変更する場合には、以下のようなファイルを配置します。ファイルを配置した後は、IISの再起動が必要です。

 

ファイルパス:

\Pleasanter\Implem.Pleasanter\App_Data\Parameters\CustomDefinitions

ファイル名:(definition_Column.xlsmを変更する場合はColumn.jsonとします)

Column.json

内容:(ResultsテーブルのClassA項目の表示名を変更する場合の記述)

{
    "Results_ClassA": {
        "LabelText": "項目A"
    }
}

definition_Column.xlsmを書き換えても同様のことが可能ですが、xlsmファイルは変更点の管理が面倒なので、CustomDefinitionsによる設定をお勧めしています。

 

 

プリザンターをMicrosoft Azureにインストールした後のメール送信の設定

Pleasanter開発チームの佐藤です。

 

すでにご存じの方もおられるかと思いますが、プリザンターはAzure上で構築することができます。

 

プリザンターをMicrosoft Azureにインストールする

プリザンターをMicrosoft Azureにインストールする · Implem/Implem.Pleasanter Wiki · GitHub

 

Azure上でプリザンターを構築した後、メール配信の設定をしたいと思う方も多いことでしょう。

 

AWSではSESというサービスがありますが、Azureは下記のような理由から、メール送信はサポートしない旨を公言しています。

Azure 上にメールサーバー/SMTP サーバーを構築する場合の注意事項
https://blogs.technet.microsoft.com/jpaztech/2016/06/09/smtp-on-azurevm/

 

じゃあどうすればいいのかというと、AzureではSendGridというサードパーティー製のサービスを連動する方法があるそうです。

しかも、下記のリンクに記載の通り、Azure ユーザーは 1 か月あたり 25,000 通の電子メールを無料で利用できます。

 

SendGrid を使用した Azure での電子メールの送信方法

SendGrid 電子メール サービスの使用方法 (.NET) | Microsoft Docs

上記のページから「SendGrid アカウントの作成」の手順を行ってください。

ここで少し注意してほしいのは、設定が完了した後、SendGridから確認メールが送信されるのですが、少し時間がかかるということです。私が試したときはおよそ10~20分くらいだったと思います。

 

SendGridの構築ができあがったら、プリザンターにSendGridの情報を設定します。

 

プリザンターからメールを送信できるように設定する

プリザンターからメールを送信できるように設定する · Implem/Implem.Pleasanter Wiki · GitHub

 

上記の手順の「設定ファイルの編集」から「3.SendGridを使用する場合には...」の項を参照して設定すると、メールの設定が完了します。

 

 

思ったよりも簡単にできますので、皆さんもぜひ試してみてください!

 

プリザンターの通知機能の通知先に「LINE」および「Microsoft Teams」が指定できるようになりました!

Pleasanter開発チームの小林です。

プリザンター通知機能の通知先に以下のサービスが指定可能となりました。

通知機能について

プリザンターでのテーブルに変更(レコードの追加・修正・削除等)があった際に、メールやSlackなどの外部サービスに変更通知を送付する機能です。 LINE、Microsoft Teamsの他に以下のサービスに対して通知を送ることができます。

  • メール
  • Slack
  • chatwork

通知機能の利用方法等は以下のマニュアルをご確認ください。

テーブル機能:通知 · Implem/Implem.Pleasanter Wiki · GitHub

LINE通知

プリザンターの変更通知を指定したユーザーのLINEアプリへ通知を送ることができます。

https://user-images.githubusercontent.com/1255359/47980533-78a88500-e10b-11e8-8cd2-f80d79e44682.JPG

  • 通知用のBotアカウント(チャネル)を用意しておく必要があります。
  • LINEで作成したグループにBotアカウントを招待することで、そのグループのトーク画面に通知を送ることができます。

Microsoft Teams

プリザンターの変更通知指定したチームの指定したチャネルに対して通知を送ることができます。

teams_

  • 通知には「Incoming Webhook」コネクタを利用します。
  • 今のところ、「Incoming Webhook」の機能にメンションを指定する機能は無いようです。
    プリザンターからの通知をTeamsで受け取った際にアラートを上げたい場合は、対象のチャネルをフォローしておくと良いでしょう。

teams_

設定方法

各機能の詳しい設定手順は以下に記載されていますので、ぜひともお試しくださいませ!

LINE通知の設定

LINEに通知する場合の設定 · Implem/Implem.Pleasanter Wiki · GitHub

Microsoft Teamst通知 の設定

Microsoft Teamsに通知する場合の設定 · Implem/Implem.Pleasanter Wiki · GitHub

Pleasanterマニュアルの更新(管理機能:検索)

Pleasanter開発チームのしわです。

 

PleasanterはGitHubにマニュアルが公開されています。

github.com

 

今回、テーブルの管理画面にある「検索」についてのマニュアルが追加されました!

上記マニュアルより、[テーブルの管理]→[検索]とリンクを辿ると今回追加された「検索」についてのマニュアルが確認できます。

管理機能:検索 · Implem/Implem.Pleasanter Wiki · GitHub

続きを読む

Pleasanterのコードスタイル インデント編

Pleasanter開発チームのいしざきです。

PleasanterはオープンソースのWebデータベースでGitHubにソースが公開されています。

今回はPleasanterへプルリクエスト(PR)する際に気にしたいコードスタイル インデント編です。

Pleasanterのインデント

Pleasanterのインデントは常にスペース4つです。
もしPleasanterへのPRいただける際にはインデントはスペース4つでお願いします。
また、スペース4つになっていない箇所を見つけた方、ぜひ修正してPRお願いします。

その他のコードスタイル

Pleasanterは日々進化中で、PR時のお願い事項などの整備は取り組み中の状態です。不定期になりますが、今後も少しずつこちらのブログで紹介してまいります。

今後PRするかもしれないという方、継続してチェックしていただけると嬉しいです。