Docker で検証用 CAS サーバ

CAS との連携を確認するのに、Docker でサクッと建てようと思ったら思いのほか手を焼いたのでメモ。

やりたいこと

CAS でSSOするサービス側モジュールの検査のために、とりあえずのCASサーバを立てて使いたい。細かい設定はいらない。

昔は仮想マシンに Tomcat 入れて動かしていましたが、今ならもう Docker でサクッと立つはず。。。

コンテナイメージの配布状況

本家のドキュメント、この素っ気なさからしていやな予感。

本家のコンテナイメージと、ビルドソース

いろいろ試した結果、配布されているコンテナイメージをそのまま何とか動かしても思ったように扱えない。

このコンテナイメージは SRC1 をビルドしたもので、SRC1 は gradle 実行環境と SRC2 をコンテナイメージの中に展開して gradle でビルドをしている。ただし、SRC1 は SRC2 のビルドオプションを最小限しか設定しておらず、実用性に難がある。

SRC2 が本命だが、SRC2 には gradle のビルド環境構築手続きが含まれていない。それを書くと結局は SRC1 を引っ張り出すことになるので、SRC1 を調整してカスタムイメージをビルドすることにする。

念のために Vagrant も探してみたけどいまいちでしたので、やっぱりコンテナのビルド。

予備知識、前提

はまりポイント、特に Java のビルド環境についてあまり経験の無い方は、ビルドオプションを調整するところかと思います(私がそうでした)。

ビルド環境の用意

まずは github.com/apereo/cas-webapp-docker をクローンしてビルドの準備をします。

git clone https://github.com/apereo/cas-webapp-docker.git
cd cas-webapp-docker
# git reset --hard a2d664fd006d86f0bb09d65c2ffb0eeb25018fdf

README.md の SSL セクションを実行します。ここはローカル開発用と割り切って、鍵もPASSもそのままです。

keytool -genkeypair -alias cas -keyalg RSA -keypass changeit \
        -storepass changeit -keystore ./thekeystore \
        -dname "CN=cas.example.org,OU=Example,OU=Org,C=AU" \
        -ext SAN="dns:example.org,dns:localhost,ip:127.0.0.1"

sudo su root -c " echo '127.0.0.1 cas.example.org' >> /etc/hosts"

実際に使うにはまだ設定が必要ですが、念のために一度ビルドして動かしてみます。

./build.sh 6.4
./run.sh 6.4

うまくいけば、コンソール出力に大きく「READY」と表示されます。(ここのコードブロックでの表示では形が崩れているかもしれません)。

2021-12-21 05:02:57,689 INFO [org.apereo.cas.web.CasWebApplication] - <>
2021-12-21 05:02:57,689 INFO [org.apereo.cas.web.CasWebApplication] - <

  ____  _____    _    ______   __
 |  _ \| ____|  / \  |  _ \ \ / /
 | |_) |  _|   / _ \ | | | \ V / 
 |  _ <| |___ / ___ \| |_| || |  
 |_| \_\_____/_/   \_\____/ |_|  

>
2021-12-21 05:02:57,689 INFO [org.apereo.cas.web.CasWebApplication] - <>
2021-12-21 05:20:05,860 INFO [org.apereo.cas.web.CasWebApplication] - <Ready to process requests @ [2021-12-21T05:20:05.859Z]>
2021-12-21 05:20:05,916 INFO [org.apereo.cas.services.AbstractServicesManager] - <Loaded [0] service(s) from [InMemoryServiceRegistry].>

特に、コードブロックにコピーしたログの一番最後の行、 [org.apereo.cas.services.AbstractServicesManager] - <Loaded [0] service(s) from [InMemoryServiceRegistry].> というのがポイントです。これは、Application ServiceRegistry に登録がないよ、と言っています。後で改善します。

この状態でブラウザで https://cas.example.org:8443/cas/login を開くとログイン画面を表示できるはずですが、実際には証明書が INVALID なために警告が表示されてしまいます。以下のコマンドで証明書を吐き出して許可リストに加えるか、ブラウザで開いたときに強制的に表示させます。

keytool -export -alias cas -keystore thekeystore -rfc -file cas-self.cert

ログイン画面が表示されると、casuser アカウントで認証は成功するはずです。

アプリケーションサーバの連携確認

アプリケーションサーバにこのCASサーバを登録するには、以下を確認してください。

  • ブラウザは、CASサーバとアプリケーションサーバのどちらにもアクセスできること
  • アプリケーションサーバがこのCASサーバに 8443:tcp でアクセスできること
  • アプリケーションサーバの hosts ファイルにも cas.example.org を足しておくこと
  • アプリケーションサーバの CAS 連携モジュールは証明書チェックを無視する設定になっていること

特に、PHPのCURLについては以下の設定を使います。

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

アプリケーションサーバでCAS認証しようとすると、CASサーバにリダイレクトされますが、以下の表示になると思います。

また、CASサーバのログでは試した直後には以下のログが出ているはずです。

2021-12-21 04:13:02,682 ERROR [org.apereo.cas.services.web.support.RegisteredServiceResponseHeadersEnforcementFilter] - <Service unauthorized>

つまり、許可サービスリストの登録が0で、いま試したアプリケーションサーバもはじかれている状態になります。

Docker のカスタマイズと Application ServiceRegistry の設定

ここからは、チェックアウトしているDocker のビルドキットをカスタマイズして、Application ServiceRegistry を設定し直したコンテナイメージを作り直していきます。

まずは2つファイルを新規追加します。1つは cas サーバの起動設定ファイルで、JSONリポジトリを有効に指定します。1つはテスト用アプリケーションサーバの定義ファイルで、http://192.168.56.??/ で動作することを前提としています。

etc/cas/config/cas.properties

cas.server.name=https://cas.example.org:8443
cas.server.prefix=${cas.server.name}/cas

logging.config=file:/etc/cas/config/log4j2.xml

# for json services ( need build option
cas.service-registry.core.init-from-json=true
cas.service-registry.json.watcher-enabled=true
cas.service-registry.json.location=file:/etc/cas/services
#cas.service-registry.yaml.location=file:/etc/cas/services

# cas.authn.accept.enabled=false

etc/cas/services/test-2.json

{
     "@class" : "org.apereo.cas.services.RegexRegisteredService",
            "id":2,
            "serviceId":"http://192.168.*",
            "name":"DEV",
            "description":"dev",
            "allowedToProxy":true,
            "enabled":true,
            "ssoEnabled":true,
            "anonymousAccess":false,
            "allowedAttributes":["uid", "mail"]
            "extraAttributes":{
                "someCustomAttribute":"Custom attribute value"
            },
            "evaluationOrder":2
}

続いて、gradle のビルド定義ファイルを置き換えます。ちょっと面倒なのですが、以下の build.grade ファイルを取得して、手元のファイルを置き換えてしまいます。

その上で、L930 くらいにある dependencies のセクションに ServiceRegistry の JOSN ストレージモジュールを足します。${project.'cas.version'} の変数も、このまま書きます。

dependencies {
    /**
     * CAS dependencies and modules may be listed here.
     *
     * ...
     */
     ...

    /* add */
    implementation "org.apereo.cas:cas-server-support-json-service-registry:${project.'cas.version'}"
}

続いて、Dockerfile を編集します。2カ所はファイルコピー操作を追加、gradle のビルドコマンドは、./gradlew dependencies コマンドを追加しています。2ステップに分解していますが、まとめてもかまいません。

FROM centos:centos7

MAINTAINER Apereo Foundation

ENV PATH=$PATH:$JRE_HOME/bin
ARG cas_version

RUN yum -y install wget tar unzip git \
    && yum -y clean all

# Download Azul Java, verify the hash, and install \
RUN set -x; \
    java_version=11.0.3; \
    zulu_version=11.31.11-ca; \
    java_hash=20218b15ae5ef1318aed1a3d5dde3219; \
    cd / \
    && wget http://cdn.azul.com/zulu/bin/zulu$zulu_version-jdk$java_version-linux_x64.tar.gz \
    && echo "$java_hash  zulu$zulu_version-jdk$java_version-linux_x64.tar.gz" | md5sum -c - \
    && tar -zxvf zulu$zulu_version-jdk$java_version-linux_x64.tar.gz -C /opt \
    && rm zulu$zulu_version-jdk$java_version-linux_x64.tar.gz \
    && ln -s /opt/zulu$zulu_version-jdk$java_version-linux_x64/ /opt/java-home;

# Download the CAS overlay project \
RUN cd / \
    && git clone --depth 1 --single-branch -b $cas_version https://github.com/apereo/cas-overlay-template.git cas-overlay \
    && mkdir -p /etc/cas \
    && mkdir -p cas-overlay/bin;

COPY thekeystore /etc/cas/
COPY bin/*.* cas-overlay/
COPY etc/cas/config/*.* /cas-overlay/etc/cas/config/
COPY etc/cas/services/*.* /cas-overlay/etc/cas/services/
# 追記
COPY build.gradle /cas-overlay/build.gradle

RUN chmod 750 cas-overlay/gradlew \
    && chmod 750 cas-overlay/*.sh \
    && chmod 750 /opt/java-home/bin/java;

EXPOSE 8080 8443

WORKDIR /cas-overlay

ENV JAVA_HOME /opt/java-home
ENV PATH $PATH:$JAVA_HOME/bin:.

# 書き換え
RUN mkdir -p ~/.gradle  && echo "org.gradle.daemon=false" >> ~/.gradle/gradle.properties
RUN ./gradlew dependencies && ./gradlew clean build --parallel \
    && rm -rf /root/.gradle

# 追記
RUN mkdir -p /etc/cas/config && mkdir -p /etc/cas/services && cp etc/cas/config/* /etc/cas/config/ && cp etc/cas/services/* /etc/cas/services/

CMD ["/cas-overlay/run-cas.sh"]

あらためてビルドと実行を行います。

./build.sh 6.4
./run.sh 6.4

もし JSON のサービス定義ファイルをロードできていれば、「READY」の後に以下のログが出ます。 [org.apereo.cas.services.AbstractServicesManager] - <Loaded [1] service(s) from [JsonServiceRegistry].> となっていれば、JSON のアプリケーション定義をロードするのに成功しています。

2021-12-21 09:07:28,348 INFO [org.apereo.cas.web.CasWebApplication] - <Ready to process requests @ [2021-12-21T09:07:28.342Z]>
2021-12-21 09:07:28,780 INFO [org.apereo.cas.services.AbstractServicesManager] - <Loaded [1] service(s) from [JsonServiceRegistry].>

アプリケーション定義ファイルのURL正規表現と、アプリケーションのURLがマッチしていれば、SSO認証したときに無事に CAS のログイン画面が表示されるはずです。パスワード認証に成功すると、CASサーバはチケットを発行してアプリケーションにリダイレクトします。ログは以下が残ります。

2021-12-21 09:39:39,055 INFO [org.apereo.cas.DefaultCentralAuthenticationService] - <Granted service ticket [ST-11-Li75-erdbw7sPZ5vdnW5QG1IcAY-66a57e874b0d] for service [http://192.168.56.76/login.php?auth_mode=CAS] and principal [casuser]>
2021-12-21 09:39:39,055 INFO [org.apereo.inspektr.audit.support.Slf4jLoggingAuditTrailManager] - <Audit trail record BEGIN
=============================================================
WHO: casuser
WHAT: {service=http://192.168.56.76/login.php?auth_mode=CAS, return=ST-11-Li75-erdbw7sPZ5vdnW5QG1IcAY-66a57e874b0d}
ACTION: SERVICE_TICKET_CREATED
APPLICATION: CAS
WHEN: Tue Dec 21 09:39:39 UTC 2021
CLIENT IP ADDRESS: 172.17.0.1
SERVER IP ADDRESS: 172.17.0.2
=============================================================

アプリケーションサーバがリダイレクトURLより認証チケットを受け取ると、アプリケーションサーバからCASサーバにチケットのValidationの問い合わせを行います。Validation に成功すると、CASサーバには以下のログが残り、アプリケーションサーバではユーザ名など属性情報を受け取ります。

2021-12-21 09:39:39,159 INFO [org.apereo.inspektr.audit.support.Slf4jLoggingAuditTrailManager] - <Audit trail record BEGIN
=============================================================
WHO: casuser
WHAT: {ticket=ST-11-Li75-erdbw7sPZ5vdnW5QG1IcAY-66a57e874b0d, service=http://192.168.56.76/login.php?auth_mode=CAS}
ACTION: SERVICE_TICKET_VALIDATE_SUCCESS
APPLICATION: CAS
WHEN: Tue Dec 21 09:39:39 UTC 2021
CLIENT IP ADDRESS: 172.17.0.1
SERVER IP ADDRESS: 172.17.0.2
=============================================================

今後

Java のビルドツールはあまり使ったことがないので、gradle の設定ファイルの記入位置を見つけるのに思いのほか時間がかかりました。

ですが、これですぐに検証サーバが用意できます。CASサーバのスタブを書くまでの間、クライアントのライブラリ更新やリファクタリングなどで頼もしく動いてくれるのを期待します。

Chrome 96

Chrome 96 が 11 月 16 日にリリースされました。

Chrome 96 release note

以下のリンクに主な変更点の情報が記載されています。

https://www.chromestatus.com/features/schedule

Pickup for WebClass

WebClass に影響ある変更はありませんでした。

気になる変更点

私が気になった変更点をあげます。

Back-forward cache for desktop

ブラウザの「戻る」機能を使用した遷移先がキャッシュされる機能の追加です。
この機能により一つ前のページに戻ったときの表示が速くなります。

かなり前からFirefoxやSafariでは実装されていたとweb.devの記事には書かれていますが、ようやくChromeでも実装されました。

詳しくは web.dev の記事を参考にしてください。

今後の Chrome リリースについて

次回のリリースは 2022 年 1 月 4 日に予定されています。

Chrome Platform Status

その他ブラウザのリリースはこちらにまとめています。

ステップバイステップで学ぶ修学カルテ作成(前編)

この記事では、WebClass の学習記録ビューアプラグインである修学カルテの設定や、使い方を順序立てて説明していきます。

修学カルテは、大学を通しての学修について、教員のレビューを受けながら、学生が定期的に目標の設定と達成の振り返りを行うためのツールです。

学習記録ビューアマニュアル 修学カルテ

この「ステップバイステップで学ぶ修学カルテ作成」は前編、中編後編の3つに分かれています。

前編では、修学カルテを使うための設定まで行います。

では、早速始めていきましょう!

目次

  1. システム管理者でログインする
  2. 修学カルテの組織を作る
  3. 組織にロールを登録する
  4. 組織に管理者を登録する
  5. 組織にプラグインを追加する
  6. ロールに権限を設定する
  7. 組織に担当教員と生徒を登録する
  8. 修学カルテにカルテを登録する

1.システム管理者でログインする

まずはログインをします。
この時は WebClass のシステム管理者権限を持つユーザでログインします。

image1.png

すると以下のような管理者画面が出てきます。
管理者画面の左側にある「学習記録ビューア」から「管理」をクリックします。

image2.png

下図の「学習記録ビューア 組織一覧」が出たら OK です。

image3.png

2.修学カルテの組織を作る

次に修学カルテの組織を作っていきます。

まずは「学習記録ビューア 組織一覧」の左上に「Root」という組織があるので、クリックします。

image4.png

すると上記のような画面が出てきます。「Root」は最も上位の組織になります。ここに下位組織を追加していきます。

組織の構成は今回は以下のように設計しました。

修学カルテサンプル組織
    | — 物理学科
    └ — 情報学科

修学カルテサンプル組織は、修学カルテを扱う大枠の組織となります。そこに今回は2つの組織を追加します。

まずは修学カルテを使うための大枠となる組織「修学カルテサンプル組織」を作ります。

image5.png

上の図のように、「下位組織」の下の [追加] ボタンから [新規作成] をクリックします。

image6.png

すると新規作成のポップアップが表示されます。

「組織 ID」 は、毎年行われる臨床実習などの組織に固有の ID にすることができます(clinicmaster2020, clinicmaster2021 ... など)。「組織 ID」を設定しておくことで、組織管理がしやすくなります。

今回は組織IDは空のままにしておきます。こうするとこの組織にはランダムなIDが割り振られます。

「組織名」に組織の名前を入れていきましょう。ここではまず「修学カルテサンプル組織」と入力します。

その後に、[追加する] ボタンを押します。

image7.png

以上のように表示されれば成功です!

「Root」の下に「修学カルテサンプル組織」ができていることが分かります。

残りの「物理学科」と「情報学科」も同様に作っていきます。

「修学カルテサンプル組織」をクリックします。

すると以下の画面が出てきます。

この画面で、先ほど同様に「下位組織」の [追加] から「物理学科」と「情報学科」を追加します。作り方は「修学カルテサンプル組織」と同じです。

image8.png

以下のように設定できれば完了です!

image9.png

3.組織にロールを登録する

組織が作成できたら、次にロールを追加します。

修学カルテでは、「学生」や「担当教員」といった役職を「ロール」という単位で扱います。ロールに権限を付与することで、アカウントの役割を設定していきます。

まずは、「修学カルテサンプル組織」を開いているか確認してください。

確認したら、タブの「ロール」をクリックします。

image10.png

すると以下のような画面が開きます。

image11.png

すでに User というロールが登録されていることが分かります。

今回はロールを3つ用意します。役割は以下の通りです。

学生: 学生アカウント用のロールです。カルテを記録していきます。
担当教員: 教員アカウント用のロールです。学生のカルテを確認し、コメントします。
管理者: カルテの設定を行い、運用全体を指揮します。

今回は User というロールは使いません。

「学生」、「担当教員」、「管理者」のロールを追加します。

[追加] ボタンを押して、新しくロールを追加します。

image12.png

追加ボタンをクリックすると、ポップアップが表示されるので、ロール名を入力して[新規登録する]をクリックします。

image13.png

上記の方法と同じ要領で 「担当教員」 と 「管理者」 を登録して、以下のような画面になれば完了です!

image14.png

4.組織に管理者を登録する

次に、作成した「修学カルテサンプル組織」に管理者を登録します。

管理者は修学カルテで使うカルテを登録することができるアカウントになります。
カルテを登録できるようにするためには権限が必要なのですが、権限については「6.ロールに権限を設定する」で説明します。

まずはタブから「メンバー」をクリックして、メンバー表示画面に移動します。

その後、[追加] ボタンを押して、メンバーを追加します。

image15.png

[追加] ボタンを押すと、「組織メンバー追加」画面が出てきます。

画面上部の検索バーにユーザ ID を入れることで検索ができます。

検索バー右下のドロップダウンをクリックして選択することで「氏名」での検索もできます。

検索には任意の文字に置き換える特殊な文字を使用することができます。

この特殊文字は検索時に便利な機能です。ここで使える特殊文字は以下の2つです。

? ... 任意の1文字に置き換える
* ... 任意の長さの文字列に置き換える

例えば「user?」と入力し検索すると、user1, user2, userA などがヒットします。user10 はヒットしません。

「user*」と入力し検索すると、user1, user2, userA, user10, user100 などがヒットします。

image16.png

今回は管理者の登録なので、システム管理者や、カルテを管理する方を登録します。

検索結果が一人であれば、[検索結果をすべて追加] ボタンを押して追加します。

また、チェックボックスにチェックを入れることで、[選択したユーザを追加] で任意のユーザを追加することもできます。

image17.png

[検索結果をすべて追加] ボタンか [選択したユーザを追加] ボタンを押すと、以下のようなポップアップが表示されます。ここでは、管理者として登録するため、[管理者] を押します。

image18.png

メンバー確認画面に移動して、メンバーに「システム管理者」が「管理者」で追加されていれば完了です!

image19.png

5.組織にプラグインを追加する

次に「修学カルテサンプル組織」に修学カルテ用の機能拡張用のソフトウェア(これをプラグインと言います)を登録します。

タブの「プラグイン」をクリックします。

image20.png

「プラグイン」をクリックすると、以下のようなプラグイン管理画面が表示されます。

ここで、[追加] ボタンをクリックして、修学カルテを追加します。

image21.png

[追加] ボタンを押すと、以下のような「プラグインの追加」ポップアップが表示されます。

ここで、修学カルテにチェックをつけて、[追加する] ボタンをクリックします。

image22.png

プラグインの管理画面に戻り、「修学カルテ」が追加されていれば完了です!

image23.png

6.ロールに権限を設定する

修学カルテを追加したら、ロールに権限を設定します。

学習記録ビューアでは、プラグインごとにどのロールにどんな権限を与えるかを選択することができます。

「設定」タブから「設定」をクリックして、「権限設定」画面を開きます。

image24.png

「権限設定」画面では、ロールごとに権限を選択して与えることができます。

今回は、学生・担当教員・管理者の3つのロールなので、それぞれで権限を設定します。
権限の割り振りは今回は以下のようにします。

学生は、自分のカルテを持っています。
担当教員は、担当の学生のカルテに変更を加えたり、メッセージを送ることができます。
管理者は、学生のカルテを変更でき、どんなカルテを使えるようにするかの設定もできます。

上記のように権限を割り振るために、以下のようにチェックを入れます。

「User」は今回は使わないため、何もチェックしないでください。

image25.png

ここまでチェックを入れたら、以下のように「子孫組織の権限設定も再起的に更新する」にチェックを入れます。
ここにチェックを入れることで、「修学カルテサンプル組織」だけでなく、その下位組織となる子孫組織の「物理学科」と「情報学科」にも同様に設定が反映されます。

ここまでしたら、[権限設定を保存する]をクリックします。

image26.png

すると、以下のようなポップアップがでます。

今回は権限を子孫組織にも再起的に更新するようにしたため、子孫組織の数によっては時間がかかる場合があります。今回は3件のみのため、時間はかかりません。[権限設定を更新する]をクリックして、設定を反映させます。

image27.png

これで設定は完了です。試しに「物理学科」の「権限設定」を開くと、今回設定した権限が同じように反映されていることが分かります。

image28.png

7.組織に担当教員と生徒を登録する

次からは担当教員と生徒をそれぞれの組織に登録していきます。

ここから先は担当教員と学生の WebClass アカウントが必要になります。まだ登録をしていない方は「システム管理者メニュー」からユーザを登録しておきましょう。

今回は「物理学科」に学生と担当教員を登録します。
まずは担当教員と学生を登録したい組織を開き、「メンバー」タブを開きます。
そして、管理者を登録した時と同様の手順で登録していきます。
方法を忘れてしまった場合は、「4.組織に管理者を登録する」を見ながら進めてください。
今回は以下のように登録します。

image29.png

user1 ~ user5 を学生として登録し、
teacher1 を担当教員として登録しました。

user1 ~ user5 と teacher1 は任意の学生と担当教員を用いても構いません。

上記のように担当教員と学生を登録したら完了です!

8.修学カルテにカルテを登録する

最後の設定です!最後に修学カルテで使うカルテを登録します。

カルテとは、学生それぞれの学びの記録ができる場所です。
修学カルテでは、組織ごとに目的に合ったカルテを設定することができます。
また、カルテは管理者自身で自由に作成することもできます。
カルテの作り方に関しては、「ステップバイステップで学ぶ修学カルテ作成(後編)」で解説しているので、興味のある方はぜひ読んでみてください!

では、早速登録していきます。

今ログインしているアカウントを「管理者」ロールに設定している場合は、画面右上の「前の画面に戻る」をクリックします。

image30.png

「システム管理者メニュー」に戻ると、最初にはなかった「学習と振り返りの記録」というメニューが左側に追加されているのが分かります。「学習と振り返りの記録」をクリックすると「修学カルテ(管理)」というタブがドロップダウンで出てくるので、クリックします。

「管理者」ロールに、システム管理者ではない別のアカウントを設定した場合は、一度「管理者」ロールのアカウントでログインをし直してください。すると、WebClass トップ画面の左側に「修学カルテ(管理)」というリンクが表示されるので、クリックします。

「修学カルテ(管理)」をクリックすると、修学カルテの画面が表示されます。今はまだカルテを登録していないので、カルテの中身などは表示されません。修学カルテを使うためには、まず「設定」から使うカルテを登録する必要があります。

「設定」タブをクリックします。

image31.png

すると以下のような画面が出てきます。ここの[参照] ボタンで、登録したいカルテを選択します。

image32.png

カルテは、XML ファイルという、Web ページの作成をするためのコンピュータ言語で作られたファイルで用意する必要があります。

今回はテンプレートを用意したので、こちらを使用します。

physics_example.xml

登録するときには ID の設定が必要です。判別がしやすい ID を設定してください。
注意書きにもありますが、 ID として使える文字は、半角英数字と"-"と"_"のみです。また、先頭の文字をアルファベットにしてください。今回は 「physics_carte」とします。そして、[新規登録]ボタンをクリックします。

image33.png

登録が完了すると、以下のような画面になります。

image34.png

最後に、組織にカルテを登録します。この登録作業により、修学カルテプラグインへのカルテ登録ができました。それだけでは、まだ担当教員や学生が使うことはできません。「情報学科」や、「物理学科」にカルテを登録する必要があります。
「カルテ」タブをクリックして、最初の画面に戻ります。

image35.png

今回は「物理学科」にカルテを登録するので、「物理学科」を選択し、「カルテを登録する」をクリックします。

image36.png

「カルテを登録する」をクリックすると、カルテを選択する画面が表示されます。検索バーを用いてカルテの検索もできますが、今回は登録しているカルテが先ほどのカルテのみとなるので、「physics_carte」のチェックボックスをクリックして、[選択したカルテを登録する]を押します。

image37.png

[選択したカルテを登録する] をクリックすると、以下のような画面が表示されます。

これで、設定は完了です!ユーザ名やユーザ ID をクリックすることで、ユーザごとのカルテを見ることができます。

image38.png

まとめ

長かったですが、これで修学カルテにカルテを登録することができました!
前編では設定だけでしたが、中編後編では実際に XML ファイルを作って、オリジナルのカルテを作ってみます!興味のある方はぜひ読んでみてください!

Firefox 94

11月2日に Firefox 94 がリリースされました。

Releasenote

開発者向け

Note

Firefox ESR 78 は End of life となり、Firefox ESR 94 に切り替わっています。Firefox ESR 78 は Firefox として Flash サポートする最後のバージョンでしたが、これで完全に Flash のサポートはなくなったことになります。

WebClassに関しては、特に関係するところはありません。

今後の Firefox リリースについて

次回のリリースは 12 月 7 日に予定されています。

https://wiki.mozilla.org/Release_Management/Calendar

その他ブラウザのリリースはこちらにまとめています。