2025/06/20

LotteryServアップデート

   LotteryServを更新しました。今回の更新は細かい仕様変更や不具合修正です。


多要素認証の設定はEメールアドレスのみ必須に

 2025/05/06の更新で多要素認証に対応しましたが、同時に主催者の支払い方法を設定するにはユーザアカウントに多要素認証の設定を必須としました。しかしGoogleアカウントを利用している場合、Googleアカウントに多要素認証が設定されているか否かを判断できないため、Googleアカウントの多要素認証とLotteryServの多要素認証で2回の第2認証が必要になるという状態となりました。これは意味がないので、以下の仕様に変更しました。

  • Googleアカウントの場合は、LotteryServでの多要素認証設定は任意とします。ただしGoogleアカウントに多要素認証を設定するか、パスキーの利用を推奨します。
  • Eメールアドレスの場合は、LotteryServでの多要素認証設定は必須のままです。

応募・抽選結果のCSVをZipアーカイブに

 応募・抽選結果はCSVファイルでダウンロード可能ですが、応募数が多い(100,000以上)場合は複数のCSVファイルに分割しています。これは少々古いバージョンのExcelでも扱えるようにするための仕様です。

 従来はCSVファイルを1つずつダウンロードする必要がありましたので、応募数が多い場合は面倒でした。今回の更新では、すべてのCSVファイルを1つのZipアーカイブにまとめる仕様に変更しました。ダウンロード後に解凍は必要ですが、ダウンロードの手間は軽減されています。


ツールチップが表示されない不具合を修正


 操作可能なアイコンをマウスポインタでポイントすると、アイコンのそばにそのアイコンの説明を表示するのがツールチップです。上の図は主催者ログイン画面の告知リスト左下のリロードアイコンのものです。

 これを実装していたのですが、どこかの更新で表示されなくなっていました。おそらく2025/05/06の更新からだと思われます。気づくのに遅れましたが、今回修正しました。

 ただし全画面でツールチップに対応しているわけではありません。一部の画面では以前からツールチップには非対応です。なんとなくアイコンの見た目で機能は判断できると思いますので、今後もツールチップ非対応画面ではそのままの予定です。


Angularの*ng~ディレクティブについて

従来

 Angularでは状況に応じてHTMLの内容を変更する際に以下のディレクティブを使用します。

  • *ngIf
  • *ngSwitch, *ngSwitchCase, *ngSwitchDefault
  • *ngFor

 これらのディレクティブは以下のタグと組み合わせて使用することもあります。

  • ng-container
  • ng-content
  • ng-template

 使い方を説明した記事はネット上に既にたくさんあるので詳細は説明しませんが、以下のような感じになります。

<div *nfIf="isProcessing; then processingMess; else doneMess"></div>

<ng-template #processingMess>
    <span>処理中...</span>
</ng-template>

<ng-template #doneMess>
    <span>完了!</span>
</ng-template>
<div [ngSwitch]="processState">
    <span *ngSwitchCase="PREPARING">準備中.</span>
    <span *ngSwitchCase="PROCESSING">処理中...</span>
    <span *ngSwitchCase="DONE">完了!</span>
    <span *ngSwitchDefault> (?o?) </span>
</div>
<table>
    <tr *ngFor="let item of itemList">
        <td>{{item}}</td>
    </tr>
</table>

 ngSwitchやngForの例はまだ何とかわかりますが、ngIfのようにng-templateなどとの組み合わせになると直感的でなくて、わかりにくいと大変不評です。


Angular17以降

 Angular17で、以下の新しい構文が追加されました。
  • @if, @else, @else if
  • @switch, @case, @default
  • @for, @empty

 これらは直感的に書けるように改善されています。

<span>
    @if (isProcessing) {
        処理中...
    } @else {
        完了!
    }
</span>
<span>
    @switch (processState) {
        @case ("PREPARING") {準備中.}
        @case ("PROCESSING") {処理中...}
        @case ("DONE") {完了!}
        @default { (?o?) }
    }
</span>
<table>
    @for (item of itemList; track item) {
        <tr>
            <td>{{item}}</td>
        </tr>
    }
    @empty {
        <tr>
            <td>空っぽです</td>
        </tr>
    }
</table>

 @emptyに対応する*ng~ディレクティブはなさそうです。探してみたのですが見つかりません。


 一度使ってしまうと、もう*ng~ディレクティブには戻れません。


2025/06/08

LotteryServアップデート

  LotteryServを更新しました。前回2025/05/06の更新に続いて、今回の更新もセキュリティの強化が中心です。


ワンタイムパスワード認証に対応

 多要素認証の第2要素として、ワンタイムパスワード認証を追加しました。

 多要素認証はログインできなくなった場合への備えとして複数の第2認証を登録することを勧めていますが、前回のアップデートで対応したSMS認証のみでは、複数のスマートフォン/携帯電話が必要になり、現実的とは言い難い状況でした。今回ワンタイムパスワード認証を追加したことで、スマートフォン/携帯電話は1台でも2つの第2認証に対応できるようになります。

 ワンタイムパスワードアプリは、以下の2つで動作することを確認しています。

  • Google Authenticator
  • Microsoft Authenticator


 ただし機種変更時の移行には、あらかじめワンタイムパスワード認証の設定をアカウントに保存するなど準備をしておくか、新旧2台を並べて操作するかが必要なようです。ご注意ください。


第2認証の完全な削除を可能に

 前回のアップデートでは、第2認証を複数登録した場合は1つずつ削除が可能でしたが、最後の1つの第2認証は削除不可能という制限がありました。今回のアップデートでその制限はなくなりました。

 すべての第2認証を削除すると、ログイン・再認証は第2認証なしとなります。もちろんこの場合は多要素認証の設定がないので、アカウントは脆弱な状態となります。

 多要素認証の設定がないユーザでは募集の開始ができない制限は、前回2025/05/06の更新からのものです。この制限はクレジットカード決済の悪用による被害を防ぐためのものです。


UIのモダナイズ

 前記ワンタイムパスワード認証の追加に伴い、主催者ログイン画面など一部の画面をモダンなデザイン・実装に変更しました。

 また他の画面でもごく一部に画面遷移やデザインを変更した個所がありますが、使い方には変化はありません。


メールでログインでもアイコンを利用可能に

 Eメールアドレス/パスワードでログインするアカウントの場合、従来はアイコンが固定でした。

 インタネット上に公開されているアイコンがある場合、そのアイコンのURIを指定していただくことで、LotteryServ上でもそのアイコンを表示するようになりました。

 ただ、現在このアイコンを表示するのは、ユーザメニューの最初の項目のみです。


その他軽微な不具合の修正

 詳細の説明は割愛いたしますが、軽微な不具合を複数修正しています。